6039f736fa19projects/strange/whirl.ko.txt133:6039f736fa19 |
197:f09883466878 → |
-rw-r--r--initial batch of /projects/strange/ pages added.
1 ## vim: syn=mako 2 <%! title = u'Whirl' %> 3 4 5 코드 6 ==== 7 8 9 Hello, world! 10 ------------- 11 12 <%text filter="indent"> 13 110011100111000001111100000001000011111000011111100000000010 14 000011001111100001100010000010011111000100000000000001001111 15 100000111110001000000000000000001000111110010000001100001111 16 100011000000000100111110011100111000111000001000111000001111 17 100000111110010000011111000110011111100001111000001111000001 18 110011111100001111000110011100000111000100011111000001111100 19 100000110000000111000001110001111100011111000111000001000001 20 000011000111110001000001000000011100000111001000111110001111 21 000001111000011111100001111110000011110000000000000000011110 22 000011100111000011110011111000111110001111100000100000000000 23 000000000000111110001110000001110000011100011100111110001000 24 100000000011100001111100110000000010011111000111100000111100 25 111100010011100000111110000011111001100111100010001111000000 26 000001000111110010000010011110011001110001000111110001100000 27 100011111000011110011100111111000111100000111100011111000000 28 011110000011100100001111000100011111001100011111000111100000 29 111001110001100111100100000000000000011111000001111100010010 30 000011100001111100100000100011100000111000110011110001001111 31 110001100000111100011111000111100000111001000011110001001111 32 100000111110000000011110000011110000000000000000111000001110 33 000011000001100000111000111000001100111110000111111001001110 34 000011111000001100011000001001111110000011100110011111000000 35 000111000001110000111100001100 -- by Kang Seonghoon 2005.1.7 36 </%text> 37 38 <small>(2005-01-07)</small> 본래 Whirl 사이트에 올라와 있던 "Hello, world!" 코드는 명령 수가 2만 5천개가 넘어서 쓸데 없이 길었습니다. 이 코드는 이를 1350개로 줄입니다. (뒤의 서명 부분은 코드에 영향을 미치지 않습니다.) 모든 코드는 손으로 짠 뒤 간단한 후처리 코드를 돌리는 식으로 수행했으며, 필요 없는 명령이라도 코드를 줄이는 데 도움이 되면 추가하는 방법을 썼습니다. 39 40 이 기록이라고 하기에도 민망한 코드는 2007년 들어서 [Anarchy Golf](http://golf.shinh.org/p.rb?hello+world)에 Whirl 언어 지원이 추가되면서 마침내 깨졌습니다. 2010년 2월 현재 최고 기록은 [명령 580개](http://yowaken.dip.jp/tdiary/20071011.html#p02)입니다. 물론 이 사람은 기계적으로 탐색해 나갔습니다만... 41 42 43 99 Bottles of Beer 44 ------------------ 45 46 <div class="extrasmall"> 47 <%text filter="indent"> 48 1100011001111100011 1100111110010000010 49 0011111000001111100010000010001111100000111 1100010000010001111100000111110001000001000 50 11111000001111100010000010001111100000111110001000001000111 11000001111100010000010001111100000111110001000001000111110 51 00001111100010000010001111100000111110001000001000111110000011111000100 00010001111100111100111000000010000111000001100011100000000000000000000 52 0000000000000000000000000000011111001111110001111100111000011100000111000001110 0000000000000000000000000000000011000011110001100011100111110000000000000000000 53 0000000000000000000000000000011111000011000011111001111000001110000011100111110001111001100000110000011000011111000111100000111000001110011111000111100110000011000001100001111 54 1000111100000111000001110011111000111100110000111110001111000001110000011100111110001111 00110000011000001100001111100011110000011100000111001111100011110011000011111000111100000 55 1110000011100111110001111001100000110000011000001100000110000011000001100000110000011000 00110000011000001100000110000011000001100000110000011000001100000110000111110001111000001 56 1100000111001111100011110011000001100000110000111110001111000001110000011100111110001111 00110000111110001111000001110000011100111110001111001100000110000011000001100000110000111 57 1100011110000011100000111001111100011110011000001100000110000011000001100001111100011110 00001110000011100111110001111001100000110000011000011111000111100000111000001110011111000 58 1111001100000110000011000001100000110000011000001100001111100011110000011100000111001111 10001111001100001111100011110000011100000111001111100011110011000001100000110000011000001 59 1000001100000110000011000001100000110000011000011111000111100000111000001110011111000111 10011000001100000110000011000001100000110000011000001100000110000011000001100001111100011 60 1100000111000001110011111000111100110000011000001100000110000011000011111000111100000111 00000111001111100011110011000011111000111100000111000001110011111000111100110000011000001 61 1000011111000111100000111000001110011111000111100110000011000001100001111100011110000011 10000011100111110001111001100000110000011000001100000110000011000001100000110000011000011 62 1110001111000001110000011100111110001111001100000110000011000001100000110000011000001100 00111110001111000001110000011100111110001111001100000110000011000001100000110000011000001 63 1000011111000111100000111000001110011111000111100110000011000001100000110000011000011111 00011110000011100000111001111100011110011000001100000110000111110001111000001110000011100 64 1111100011110011000011111000111100000111000001110011111000111100110000111110001111000001 11000001110011111000111100110000111110001111000001110000011100111110001111001100001111100 65 0111100000111000001110011111000111100110000111110001111000001110000011100111110001111001 10000111110001111000001110000011100111110001111001100001111100011110000011100000111001111 66 1000111100110000111110001111000001110000011100111110001111001100001111100011110000011100 00011100111110001111001100001111100011110000011100000111001111100011110011000011111000111 67 1000001110000011100011110000111001111100011111000111100011111001111100000111000000000000 01110000000001110000000000000000000000000110000011000111000001110011111100011111000001111 68 1001111110000000001110000011100000000000000000000000000000000000000000000011000001100011 10000011100111111000111110000011111001111110000000001110000011100000000011100000111000000 69 0000000000000000000000000000000000011000001100011100000111001111110001111100000111110011 10000111000001110000000001110000011100000000011100000000011100000000011100000000000000000 70 0001000001110000011000111000001110011111100011111000111100001000111110010000000011100000 11100000000000000000000000000000000000000000000000000000000000010000011100000110001110000 71 0111001111110001111100000111110001111100111110011110000011110001111100010000000011100000 11100000111000001110000000000000000000000000000000000000000000000000000000001100000110011 72 1000001110011111100011111000001111100111000011100000000011100000111000000000000000000000 00000000001110000011100000111110000011111000000000000000000000000000000100000111000001100 73 0111000001110011111100011111000111100011111001111100000111000001110000011100000000011100 00011100000000000000000000000111000001110000000001111100000111110001100000110001110000011 74 1001111110001111100000111110011111100000000000000000000000000000000000000000000000000000 00000000000000000000110000011000000000000000000000000000000000000000000000000011000001100 75 0001100000110001110000011100111111000111110001111000111110011111000001110000000000000000 00000000000000000000000000011100000111000000000111110000011111000000000001100000111000001 76 1100000110001110000011100111111000111110000011111001110000000011100000000011100000000011 10000000000000000000000011100000111000000000111110000011111000000000000000000000000000000 77 0110000011000111000001110011111100011111000001111100111000011100000000000001110000000001 11000000000000000000000001110000011100000111110000011111000110000011000001100000110000000 78 0000000000000000000000000000000000000000000000000000000000110000011000111000001110011111 10001111100000111110011100001110000000000000000000000000000000000000000000111000001110000 79 0000000001111100000111110000000000000001100000110001110000011100111111000111110000011111 00111111000000000000011100000111000000000000000000000000000000000000000000000110000011000 80 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000011000001100011100000111001111110001111100000111110011111100 81 0000000111000001110000011100000000011100000000000000000000000111000001110000000000000000 01111100000111110001100000110001110000011100111111000111110000011111001111110000011100000 82 0000111000001110000000001110000000000000000000000011100000111000001111100000111110000000 00000000000000000000110000011000000000000000000000000000000000000000000000000000000000000 83 0000000000000000000000000000000000000000000000000000011000000000110001110000011100111111 00011111000111100011111001100000000000011100000000011100000000000000000000000000011100000 84 1110000000000000000011111000001111100000000000000000000000000000000001000001110000011000 T o k i g u n S t u d i o p r e s e n t s 11100000111001111110001111100000111110001111100111110011110000011110001111100010000000011 85 1000000000111000000000000000000000000001110000011100000000000000000000011111000001111100 01100000110001110000011100111111000111110000011111001111110000011100000111000001110000011 86 1000001110000011100000000000000000000000111000001110000000000000000000001111100000111110 00000000001100 00011000111000 00111001111110001111100011110001111100111110000011100000111000001110000011100000000011100 87 0000000000000000000001110000011100000000000000000000011111000001111100000000000000000001 10000011000111 00000111001111 11000111110001111000111110011000011100000111000000000111000000000111000000000000000000000 88 0011100000111000001111100000111110000000000000000000000000000000110000011000000000000000 0000 0000 0000 0000 00000000000000000011000000000110000000000000000000000000000000000000110000011000000000000 89 0000000000000000000000000000000000000000011000001100000000000001100000110001110000011100 1111 1100 0111 1100 01111000010001111100100000000010011111000111100000111100011111000100000000000011100000111 90 0000000000000000001110000011100000000000000000111110000011111000000000000000110000011000 00000000000000 00000000000000 00000000000000000000000000000000000000000000001100000110001110000011100111111000111110000 91 0111110011111100000000000010011111000111100000111100011111000100000000111000001110000000 00000000000111 00000111000000 00000000000000000001111100000111110000000000000000000000000000000110000011000111000001110 92 0111111000111110001111000111110011111000001110000000010011111000111100000111100011111000 1000 0000 01110000011100000000000000000011100000111000000000111110000011111000000000000000110000011 93 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000 0000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000001100 94 0000000110001110000011100111111000111110001111000111110011000000001110000011100000111000 00000011100000 00000000000000 00001110000011100000000000000000000000000000111110000011111000000000001100000110001110000 95 0111001111110001111100000111110011111100000111000001110000100111110001111000001111000111 11000100000000 11100000111000 00000000000000011100000111000001111100000111110000000000000000000110000000001100000000000 96 0000000000000000000000000000000000000000000000000000000000000000000000000000000000110000 01100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 97 0000000000000000000000000000000000000000000000011000001100011100000111001111110001111100 B O T T L E S O F B E E R 00011111001111110000000000000000011100000111000000000000000000000000000111000001110000011 98 1110000011111000000011000001100000000000000000000000000000000000000000000000000000110000 01100000000011000001100000000000000000000000001100000110000000001100000110000000000000110 99 0000110000000000000000000000000000000000000000000000000000011000001100000000000001100000 I N W H I R L 11000000000000000000000110000011000000000000000001100000110000000001100000110001110000011 100 1001111110001111100011110001111100110000000000000000111000000000111000000000000000000000 00111000001110000000000000000011111000001111100000000000000000001100000110000000000000000 101 0000000000000000011000001100000000000000000000000000000000000000000000000000000000011000 b y K a n g S e o n g h o o n 00110000000000000000000000000110000011000111000001110011111100011111000001111100111000011 102 1000000001001111100011110000011110001111100010000000011100000111000000000000000000111000 00111000000000000011111000001111100000000000110000011000000000000000000000000000000000000 103 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000001100000110001110000011100111111000111110 104 0011110000100011111001000000000000010011111000111100000111100011111000100000000111000001 11000000000000000000000000000000000000000000000000000000000110000011000000000000011000001 105 1000000000000000000000000000000000000000000000000011000001100000000000000000000000000000 00000000110000011000000000000000000000000000000000000000000000000000000000000000000000000 106 0000000001100000110000000000000000011000001100000000000000000000000000000000000000000000 00000000000001100000110011100000111001111110001111100011110001111100110000111000001110000 107 1001111100011110000011110001111100010000000011100000111000000000000000000111000001110000 00000000000000000000000001111100000111110000000000000000000000000000000000011000001100011 108 1000001110011111100011111000001111100011111001111100111100000111100011111000100000000010 00111110001111000001111000111110001000000001110000011100000000000000000011100000111000000 109 0000000111110000011111000000000000000000000000000000011000001100000000000000000000000000 00000000000000000000000000000000000000000000000000000001100000110000000000000000000001100 110 0001100000000000000000000000000000000000000000000000000000000011000001100011100000111001 11111000111110000011111001111110000011100000111000000000111000000000111000000000000000000 111 0000011100000111000000000000000000000000011111000001111100000001100000110000000000000000 00000000000000000000000000000000000000000000000000000000011000001100011100000111001111110 112 0011111000001111100111111000001110000000001110000011100000111000000000000000000000000000 11100000111000000000000000001111100000111110000000000000000000000000000000110000011000000 113 0000000000000000000000000000000000000000000000000000000000000001100000110000000000000000 00000000000000000000000000000000000000000000011000001100011100000111001111110001111100000 114 1111100111000011100000111000001110000000000000000000000000000000000000000011000001100000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 115 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00011000001100000000011000001100000000000000000000000000000000000000000000000000000000000 116 0000000000000000000000000000000000000000000000000000000000000011000001100011100000111001 11111000111110001111000111110011111000001110000000001110000011100000111000001110000000000 117 0000000000000111000001110000000000000000000000000000000001111100000111110000000000100000 11100011100011000111000001111100000111110000000000000000000000000111110010100111110000011 118 1110000111110000011100000111000011100001111000011111000001110000011100000111110000111000 01111000001111000001111000001111000001111000001111000001111000001111000001111000001111000 119 0011110000011110000011110000111110000011111001000011100000110001110011001111111000001111 10000111110000000011110000011110000111000001110000011111000011111000001111100001111100000 120 1110000011100000111110000111000011110000011110000011110000011110000011110000011110000011 11000001111000001111000001111000001111000001111000001111000001111000001111000011100000111 121 0000011111000011100001111000001111000001111000001111000001111000001111000001111000001111 00000111100000111100000111100000111100000111100000111100000111100000111100000111100000111 122 1000001111000001111000001111000001111000001111000001111000001111000001111000001111000011 10000011100000111110000111100000111100001111100000111000001110000011111000011100001111000 123 0011110000011110000011110000011110000011110000011110000011110000011110000011110000011110 00001111000001111000011111000001111100010000111000001100011100110011111110000011111000011 124 1110000000011110000011110000111000001110000011111000011111000001111100001111100000111000 00111000001111100001110000111100000111100000111100000111100000111100000111100000111100000 125 1111000001111000001111000001111000001111000001111000001111000001111000000001110000011100 00011111000011100001111000001111000001111000001111000001111000001111000001111000001111000 126 0011110000011110000011110000011110000011110000011110000011110000011110000011110000011110 00001111000001111000001111000001111000001111000001111000001111000001111000001111000001111 127 0000011110000011110000011110000011110000011110000011110000011110000011110000011110000011 11000001111000001111000001111000001111000001111000001111000001111000001111000001111000001 128 1110000011110000011110000011110000011110000011110000011110000011110000011110000011110000 01111000001111000001111000001111000001111000001111000001111000001111000011100000111001111 129 1100111110001111000010000111100000100110010011111001110000000001100001111000001111000001 10001110001100011111000011111000011111000000001111000001111000001111000001111000011100000 130 1100001111100001111100000111000001110000111000011110000111110000000001110000011100000111 11000001111000001111000001111100000111110000111000011110000011110000011110000011110000011 131 1100000111100000111100000111100000111100000111100000111100000111100000111100001110000011 10011111100111110001111000001001100011100111110000000000000111000001110011000111110001100 132 0111110001111000001100011100110011111110000011111000011111000000001111000001111000011100 00011100000111110000111110000011111000011111000001110000011100000111110000111000011110000 133 0111100000111100000111100000111100000111100000111100000111100000111100000111100000111100000111100000111100000111100000111100001110000011100000111110000111000011110000011110000 134 0111100000111100000111100000111100000111100000111100000111100000111100000111100 0001111000001111000001111000001111000001111000001111000001111000001111000001111 135 000001111000001111000001111001111110001111100011110000111110000010000 111110000111111000010001000111100010011110000100001111001111100011110 136 0011111000111100000111100000111001111100011000111100000 0000111100001110000011100000111110001000111110001110000 137 000001100000000111100000110001110011101 00111111100000111100<tokigun@gmail.com> 138 </%text> 139 </div> 140 141 <small>(2005-06-20)</small> "99 Bottles of Beer" 노래를 출력하는 명령 15556개짜리 프로그램입니다. 이 프로그램은 반복문과 조건문, 숫자 및 문자열 출력을 테스트하는 데 흔히 쓰입니다. 이 프로그램 역시 대부분을 손으로 짰으며, 처음에 메모리를 적절하게 초기화하는 부분만 기계화했습니다. 142 143 이 프로그램 역시 한동안 가장 큰 Whirl 프로그램이었으며 심지어 [어떤 글](http://cotilliongroup.com/man/aspects/aspects-man.html)에 인용되기까지 했습니다. 물론 이 기록 역시 2008년 9월 누군가가 엄청난 [콰인](http://www.bigzaphod.org/whirl/keymaker/quine.txt) 프로그램을 만들면서 깨졌습니다만. 144 145 146 구현 및 유틸리티 147 ================ 148 149 150 esotope-whirl 151 ------------- 152 153 <%text filter="indent"> 154 #include/* by Kang Seonghoon <tokigun@gmail.com> */<stdio.h> 155 FILE*f;int P[99999],*d=P,*p=P,U[99999],*u=U,q,s,t,r[2],v[2], 156 w[2];int main(int i,char**I){if(i-2)return!puts("TokigunStu\ 157 dio Whirl Interpreter by Kang Seonghoon <tokigun@gmail.com>" 158 );if(f=**++I-45||1[*I]?fopen(*I,"r"):stdin){while((*d=fgetc( 159 f))>=0 )*d/2-24 ?0 :(*d ++ -= 48) ;for(;p<d;q 160 =!*p++ &&!q)if( *p )v[s ]=(v [s]- r[s ]+ 13)%12;else 161 #define O( n) ;;} else /**/ if( !(v[s]-n)){ 162 {r[s]^= 2; if (q) {t=w [s]; if(s ){; if (0){O(1)t=* 163 u;O(2)*u =t;O (3)t +=*u O(4) t*= *u O(5)t/=*u;O 164 (6)t=0;O( 7) t=t<* u;O( 8) t= t>* u; O(9)t= 165 t==*u;O(10)t=!t;O(11)t=-t;}O(1)return 0;O(2)t=1;O(3)t=0;O(4) 166 t=*u;O(5)*u=t;O(6)p+=t-1;O(7)u+=t;O(8)t=*u&&t;O(9)p+=*u?t-1: 167 0;O(10)t?printf("%d",*u):scanf("%d",u);O(11)*u=t?putchar(*u) 168 :getchar();}w[s]=t;s=!s;if(p<P)p=P;}}fclose(f);}else printf( 169 "File Not Found: %s\n",*I);return!f;}/*20050617rev3tokigun*/ 170 </%text> 171 172 <small>(2005-01-06, 2005-01-07, 2005-06-17)</small> "WHIRL"이 가운데에 떡하니 박혀 있는 C 인터프리터입니다. 파일 이름을 인자로 주거나, 표준 입력을 사용할 경우 파일 이름을 <`-`>로 줘서 코드를 실행할 수 있습니다. 메모리 셀의 수는 99999개로 고정되어 있습니다. 173 174 175 소스-바이너리 변환기 176 -------------------- 177 178 <%text filter="indent"> 179 #include/*tokigun*/<stdio.h> 180 int p,q;int main(int i,char* 181 *j){if(i-2)printf("Usage:\n\ 182 \t%s e < plain > binary\n\t\ 183 %s d < binary > plain\n",*j, 184 *j);else if(**++j==100)while 185 (~(i=getchar()))for(p=128;p; 186 p/=2)putchar(i&p?49:48);else 187 if(**j==101){while(~(i=getc\ 188 har())){if((i|1)==49){p=2*p+ 189 i%2;if(++q>7){putchar(p);p=q 190 =0;}}}q&&putchar(p<<8>>q|255 191 >>q);}/*20050108*/return 0;} 192 </%text> 193 194 <small>(2005-01-08)</small> 이 프로그램은 esotope-whirl의 보조 프로그램으로, Whirl의 개발자가 "귀찮다"는 이유로 만들지 않았다고 주장한 Whirl 프로그램의 바이너리 압축기입니다. 첫 인자가 `e`이면 표준 입력에서 평문을 받아 바이너리로 출력하고, 반대로 `d`이면 역변환을 수행합니다. 바이트 단위로 떨어지지 않을 경우 의도하지 않은 실행을 막기 위해 `1` 명령으로 빈 칸을 패딩합니다. 195