Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.programming > #10279
| From | Ben Bacarisse <ben.usenet@bsb.me.uk> |
|---|---|
| Newsgroups | comp.programming |
| Subject | Re: Long winter evenings |
| Date | 2019-11-04 22:19 +0000 |
| Organization | A noiseless patient Spider |
| Message-ID | <87k18fjnd0.fsf@bsb.me.uk> (permalink) |
| References | <qppnk6$584$1@dont-email.me> |
Richard Heathfield <rjh@cpax.org.uk> writes:
> I have just written a program in C, which for reasons that will remain
> shrouded in the mists of wossname I wanted to be as short as
> possible. The program solves a highly specific and relatively
> antiquated problem.
>
> Now that the nights are drawing in, some of you might be at a loose
> end and wish for something to help you pass the time.
>
> So here's the puzzle, which is in two parts:
>
> (1) What, *exactly*, does the program do? That is, what is the
> significance of the printed result?
These are rather odd questions. I know the answer you want, but if
someone can find some other significance for the output, you'd have to
accept that answer. I think you mean something along the lines of "what
is the significance of the output that explains the method of
calculation"?
I won't say what I think you intend the answer to be, but I will say
that the output is the first number in a infinite sequence that
continues 18746, 34371, 49996, 65621, 81246, ...
> (2) Is there a way to make the program shorter, without compromising
> its rigorous adherence to ISO C90? (See below.)
Yes. Again, a bit odd. How much can we change? Preserving the logic
and method of your calculation I can get the size down from 220
characters to 157, but I'm sure that is not the lowest.
Changing the logic, but sticking with the "purpose" (rather than just
printing the answer), there are endless choices... For example:
#include <stdio.h>
int n;int main(void){while((++n*1024l-8404)%15625);return!printf("%d\n",n);}
(96 characters)
> #include <stdio.h>
> int r(int*c){int f=0;if(*c%5==1)*c/= 5,*c*=4,f=1;return f;}
> int t(int c){int f=1,i;for(i=0;f&&i<5;i++)f=r(&c);return f*!(c%5);}
> int main(void){int n=0,d=0;while(!d)d=t(++n);printf("%d\n",n);return 0;}
>
> Four obvious shortenings are excluded:
> A. Lose the space between "#include" and "<stdio.h>";
> B. Lose the second and third newlines;
> C. Lose "void";
> D. Lose "return 0;"
(Everyone can answer yes to Q2 if they spot the space between /= and 5!)
> If nobody gets it within a week or so, I'll post the solution to
> (1). (If I could think of a solution to (2), I'd have written it that
> way to start with!)
I find that second part hard to believe.
--
Ben.
Back to comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Long winter evenings Richard Heathfield <rjh@cpax.org.uk> - 2019-11-04 17:37 +0000
Re: Long winter evenings David Brown <david.brown@hesbynett.no> - 2019-11-04 22:39 +0100
Re: Long winter evenings Richard Heathfield <rjh@cpax.org.uk> - 2019-11-04 21:51 +0000
Re: Long winter evenings David Brown <david.brown@hesbynett.no> - 2019-11-05 10:42 +0100
Re: Long winter evenings Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-11-04 22:24 +0000
Re: Long winter evenings Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-11-04 22:19 +0000
Re: Long winter evenings Richard Heathfield <rjh@cpax.org.uk> - 2019-11-04 22:30 +0000
Re: Long winter evenings Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-11-04 23:59 +0000
Re: Long winter evenings Richard Heathfield <rjh@cpax.org.uk> - 2019-11-05 01:03 +0000
Re: Long winter evenings Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-11-05 04:01 +0000
Re: Long winter evenings Richard Heathfield <rjh@cpax.org.uk> - 2019-11-05 07:42 +0000
Re: Long winter evenings Melzzzzz <Melzzzzz@zzzzz.com> - 2019-11-04 23:00 +0000
Re: Long winter evenings Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-11-06 04:58 -0800
csiph-web