Merge pull request #91 from xexyl/2001-cheong
This commit is contained in:
2 files changed
+27
-18
No files matched your search
+22
-15
@@ -12,6 +12,13 @@
|
|||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to work with
|
||||||
|
clang by adding another function that is allowed to have a third arg as an int,
|
||||||
|
not a `char **`. He chose pain() because it's a four letter word that would
|
||||||
|
match the format and because it's pain that clang forces this. :-) Thank you
|
||||||
|
Cody for your assistance!
|
||||||
|
|
||||||
|
|
||||||
### To run:
|
### To run:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -56,8 +63,8 @@ This program runs normally on any ANSI C compiler and is ASCII dependent.
|
|||||||
|
|
||||||
Strict compiling gives just one unavoidable warning:
|
Strict compiling gives just one unavoidable warning:
|
||||||
|
|
||||||
> gcc -ansi -Wall cheong.c
|
> gcc -ansi -Wall cheong.c
|
||||||
cheong.c:3: warning: third argument of `main' should probably be `char **'
|
cheong.c:3: warning: third argument of `main' should probably be `char **'
|
||||||
|
|
||||||
### Obfuscation
|
### Obfuscation
|
||||||
|
|
||||||
@@ -67,23 +74,23 @@ obfuscated in that it only uses subtraction to calculate square roots.
|
|||||||
(For a detailed explanation, check Google or see Jack Crenshaw's article
|
(For a detailed explanation, check Google or see Jack Crenshaw's article
|
||||||
at http://www.embedded.com/98/9802fe2.htm) This program uses an even
|
at http://www.embedded.com/98/9802fe2.htm) This program uses an even
|
||||||
more obscured version which includes the following:
|
more obscured version which includes the following:
|
||||||
- A single string is used to store two numbers of different lengths
|
|
||||||
- Operations are done in a weird hybrid of base 10 and base 20
|
- A single string is used to store two numbers of different lengths
|
||||||
- Subtraction is done addition style, i.e. 4 minus 8 equals 6 carry a -1
|
- Operations are done in a weird hybrid of base 10 and base 20
|
||||||
- Recursive calls to main()
|
- Subtraction is done addition style, i.e. 4 minus 8 equals 6 carry a -1
|
||||||
|
- Recursive calls to main()
|
||||||
|
|
||||||
Minor obfuscations:
|
Minor obfuscations:
|
||||||
- Self documenting whitespace in rectangular code block, for fun and
|
- Self documenting whitespace in rectangular code block, for fun and glory (view
|
||||||
glory (view with fixed-width font)
|
with fixed-width font)
|
||||||
- Integer constants adjusted to less meaningful values, just for added
|
- Integer constants adjusted to less meaningful values, just for added confusion
|
||||||
confusion
|
- Hard-to-read, meaningless variable names to spite the reader
|
||||||
- Hard-to-read, meaningless variable names to spite the reader
|
|
||||||
|
|
||||||
Challenges for the masses:
|
Challenges for the masses:
|
||||||
- What are the meanings [sic, plural] of the variable o?
|
- What are the meanings [sic, plural] of the variable o?
|
||||||
- Why is (c+999)%10-(D[I]+92)%10 not equivalent to (c-D[I]+7)%10?
|
- Why is (c+999)%10-(D[I]+92)%10 not equivalent to (c-D[I]+7)%10?
|
||||||
- How does the program terminate?
|
- How does the program terminate?
|
||||||
- Is the programmer sane? ;-)
|
- Is the programmer sane? ;-)
|
||||||
|
|
||||||
### Appreciation
|
### Appreciation
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
int l;int main(int o,char **O,
|
int l;int pain(int o,char **O,
|
||||||
int I){char c,*D=O[1];if(o>0){
|
int I){char c,*D=O[1];if(o>0){
|
||||||
for(l=0;D[l ];D[l
|
for(l=0;D[l ];D[l
|
||||||
++]-=10){D [l++]-=120;D[l]-=
|
++]-=10){D [l++]-=120;D[l]-=
|
||||||
110;while (!main(0,O,l))D[l]
|
110;while (!pain(0,O,l))D[l]
|
||||||
+= 20; putchar((D[l]+1032)
|
+= 20; putchar((D[l]+1032)
|
||||||
/20 ) ;}putchar(10);}else{
|
/20 ) ;}putchar(10);}else{
|
||||||
c=o+ (D[I]+82)%10-(I>l/2)*
|
c=o+ (D[I]+82)%10-(I>l/2)*
|
||||||
(D[I-l+I]+72)/10-9;D[I]+=I<0?0
|
(D[I-l+I]+72)/10-9;D[I]+=I<0?0
|
||||||
:!(o=main(c/10,O,I-1))*((c+999
|
:!(o=pain(c/10,O,I-1))*((c+999
|
||||||
)%10-(D[I]+92)%10);}return o;}
|
)%10-(D[I]+92)%10);}return o;}
|
||||||
|
int main(int o,char **O) {
|
||||||
|
return pain(o, O, l); }
|
||||||
Reference in new issue
Block a user