Whirl

코드

Hello, world!

(2005-01-07) 본래 Whirl 사이트에 올라와 있던 "Hello, world!" 코드는 명령 수가 2만 5천개가 넘어서 쓸데 없이 길었습니다. 이 코드는 이를 1350개로 줄입니다. (뒤의 서명 부분은 코드에 영향을 미치지 않습니다.) 모든 코드는 손으로 짠 뒤 간단한 후처리 코드를 돌리는 식으로 수행했으며, 필요 없는 명령이라도 코드를 줄이는 데 도움이 되면 추가하는 방법을 썼습니다.

이 기록이라고 하기에도 민망한 코드는 2007년 들어서 Anarchy Golf에 Whirl 언어 지원이 추가되면서 마침내 깨졌습니다. 2010년 2월 현재 최고 기록은 명령 580개입니다. 물론 이 사람은 기계적으로 탐색해 나갔습니다만...

110011100111000001111100000001000011111000011111100000000010
000011001111100001100010000010011111000100000000000001001111
100000111110001000000000000000001000111110010000001100001111
100011000000000100111110011100111000111000001000111000001111
100000111110010000011111000110011111100001111000001111000001
110011111100001111000110011100000111000100011111000001111100
100000110000000111000001110001111100011111000111000001000001
000011000111110001000001000000011100000111001000111110001111
000001111000011111100001111110000011110000000000000000011110
000011100111000011110011111000111110001111100000100000000000
000000000000111110001110000001110000011100011100111110001000
100000000011100001111100110000000010011111000111100000111100
111100010011100000111110000011111001100111100010001111000000
000001000111110010000010011110011001110001000111110001100000
100011111000011110011100111111000111100000111100011111000000
011110000011100100001111000100011111001100011111000111100000
111001110001100111100100000000000000011111000001111100010010
000011100001111100100000100011100000111000110011110001001111
110001100000111100011111000111100000111001000011110001001111
100000111110000000011110000011110000000000000000111000001110
000011000001100000111000111000001100111110000111111001001110
000011111000001100011000001001111110000011100110011111000000
000111000001110000111100001100 -- by Kang Seonghoon 2005.1.7

99 Bottles of Beer

(2005-06-20) "99 Bottles of Beer" 노래를 출력하는 명령 15556개짜리 프로그램입니다. 이 프로그램은 반복문과 조건문, 숫자 및 문자열 출력을 테스트하는 데 흔히 쓰입니다. 이 프로그램 역시 대부분을 손으로 짰으며, 처음에 메모리를 적절하게 초기화하는 부분만 기계화했습니다.

이 프로그램 역시 한동안 가장 큰 Whirl 프로그램이었으며 심지어 어떤 글에 인용되기까지 했습니다. 물론 이 기록 역시 2008년 9월 누군가가 엄청난 콰인 프로그램을 만들면서 깨졌습니다만.

                                                                                 1100011001111100011                                                                     1100111110010000010
                                                                     0011111000001111100010000010001111100000111                                             1100010000010001111100000111110001000001000
                                                             11111000001111100010000010001111100000111110001000001000111                             11000001111100010000010001111100000111110001000001000111110
                                                       00001111100010000010001111100000111110001000001000111110000011111000100                 00010001111100111100111000000010000111000001100011100000000000000000000
                                                   0000000000000000000000000000011111001111110001111100111000011100000111000001110         0000000000000000000000000000000011000011110001100011100111110000000000000000000
                                               0000000000000000000000000000011111000011000011111001111000001110000011100111110001111001100000110000011000011111000111100000111000001110011111000111100110000011000001100001111
                                            1000111100000111000001110011111000111100110000111110001111000001110000011100111110001111    00110000011000001100001111100011110000011100000111001111100011110011000011111000111100000
                                        1110000011100111110001111001100000110000011000001100000110000011000001100000110000011000            00110000011000001100000110000011000001100000110000011000001100000110000111110001111000001
                                      1100000111001111100011110011000001100000110000111110001111000001110000011100111110001111                00110000111110001111000001110000011100111110001111001100000110000011000001100000110000111
                                   1100011110000011100000111001111100011110011000001100000110000011000001100001111100011110                      00001110000011100111110001111001100000110000011000011111000111100000111000001110011111000
                                1111001100000110000011000001100000110000011000001100001111100011110000011100000111001111                            10001111001100001111100011110000011100000111001111100011110011000001100000110000011000001
                              1000001100000110000011000001100000110000011000011111000111100000111000001110011111000111                                10011000001100000110000011000001100000110000011000001100000110000011000001100001111100011
                            1100000111000001110011111000111100110000011000001100000110000011000011111000111100000111                                    00000111001111100011110011000011111000111100000111000001110011111000111100110000011000001
                          1000011111000111100000111000001110011111000111100110000011000001100001111100011110000011                                        10000011100111110001111001100000110000011000001100000110000011000001100000110000011000011
                        1110001111000001110000011100111110001111001100000110000011000001100000110000011000001100                                            00111110001111000001110000011100111110001111001100000110000011000001100000110000011000001
                      1000011111000111100000111000001110011111000111100110000011000001100000110000011000011111                                                00011110000011100000111001111100011110011000001100000110000111110001111000001110000011100
                    1111100011110011000011111000111100000111000001110011111000111100110000111110001111000001                                                    11000001110011111000111100110000111110001111000001110000011100111110001111001100001111100
                   0111100000111000001110011111000111100110000111110001111000001110000011100111110001111001                                                      10000111110001111000001110000011100111110001111001100001111100011110000011100000111001111
                 1000111100110000111110001111000001110000011100111110001111001100001111100011110000011100                                                          00011100111110001111001100001111100011110000011100000111001111100011110011000011111000111
                1000001110000011100011110000111001111100011111000111100011111001111100000111000000000000                                                            01110000000001110000000000000000000000000110000011000111000001110011111100011111000001111
              1001111110000000001110000011100000000000000000000000000000000000000000000011000001100011                                                                10000011100111111000111110000011111001111110000000001110000011100000000011100000111000000
             0000000000000000000000000000000000011000001100011100000111001111110001111100000111110011                                                                  10000111000001110000000001110000011100000000011100000000011100000000011100000000000000000
            0001000001110000011000111000001110011111100011111000111100001000111110010000000011100000                                                                    11100000000000000000000000000000000000000000000000000000000000010000011100000110001110000
           0111001111110001111100000111110001111100111110011110000011110001111100010000000011100000                                                                      11100000111000001110000000000000000000000000000000000000000000000000000000001100000110011
          1000001110011111100011111000001111100111000011100000000011100000111000000000000000000000                                                                        00000000001110000011100000111110000011111000000000000000000000000000000100000111000001100
         0111000001110011111100011111000111100011111001111100000111000001110000011100000000011100                                                                          00011100000000000000000000000111000001110000000001111100000111110001100000110001110000011
        1001111110001111100000111110011111100000000000000000000000000000000000000000000000000000                                                                            00000000000000000000110000011000000000000000000000000000000000000000000000000011000001100
       0001100000110001110000011100111111000111110001111000111110011111000001110000000000000000                                                                              00000000000000000000000000011100000111000000000111110000011111000000000001100000111000001
      1100000110001110000011100111111000111110000011111001110000000011100000000011100000000011                                                                                10000000000000000000000011100000111000000000111110000011111000000000000000000000000000000
     0110000011000111000001110011111100011111000001111100111000011100000000000001110000000001                                                                                  11000000000000000000000001110000011100000111110000011111000110000011000001100000110000000
     0000000000000000000000000000000000000000000000000000000000110000011000111000001110011111                                                                                  10001111100000111110011100001110000000000000000000000000000000000000000000111000001110000
    0000000001111100000111110000000000000001100000110001110000011100111111000111110000011111                                                                                    00111111000000000000011100000111000000000000000000000000000000000000000000000110000011000
   0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                                                                                      00000000000000000000000000000011000001100011100000111001111110001111100000111110011111100
   0000000111000001110000011100000000011100000000000000000000000111000001110000000000000000                                                                                      01111100000111110001100000110001110000011100111111000111110000011111001111110000011100000
  0000111000001110000000001110000000000000000000000011100000111000001111100000111110000000                                                                                        00000000000000000000110000011000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000011000000000110001110000011100111111                                                                                        00011111000111100011111001100000000000011100000000011100000000000000000000000000011100000
 1110000000000000000011111000001111100000000000000000000000000000000001000001110000011000                       T o k i g u n S t u d i o   p r e s e n t s                        11100000111001111110001111100000111110001111100111110011110000011110001111100010000000011
 1000000000111000000000000000000000000001110000011100000000000000000000011111000001111100                                                                                          01100000110001110000011100111111000111110000011111001111110000011100000111000001110000011
 1000001110000011100000000000000000000000111000001110000000000000000000001111100000111110                             00000000001100    00011000111000                             00111001111110001111100011110001111100111110000011100000111000001110000011100000000011100
0000000000000000000001110000011100000000000000000000011111000001111100000000000000000001                              10000011000111    00000111001111                              11000111110001111000111110011000011100000111000000000111000000000111000000000000000000000
0011100000111000001111100000111110000000000000000000000000000000110000011000000000000000                              0000      0000    0000      0000                              00000000000000000011000000000110000000000000000000000000000000000000110000011000000000000
0000000000000000000000000000000000000000011000001100000000000001100000110001110000011100                              1111      1100    0111      1100                              01111000010001111100100000000010011111000111100000111100011111000100000000000011100000111
0000000000000000001110000011100000000000000000111110000011111000000000000000110000011000                              00000000000000    00000000000000                              00000000000000000000000000000000000000000000001100000110001110000011100111111000111110000
0111110011111100000000000010011111000111100000111100011111000100000000111000001110000000                              00000000000111    00000111000000                              00000000000000000001111100000111110000000000000000000000000000000110000011000111000001110
0111111000111110001111000111110011111000001110000000010011111000111100000111100011111000                                        1000              0000                              01110000011100000000000000000011100000111000000000111110000011111000000000000000110000011
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                                        0000              0000                              00000000000000000000000000000000000000000000000000000000000000000000000000000000000001100
0000000110001110000011100111111000111110001111000111110011000000001110000011100000111000                              00000011100000    00000000000000                              00001110000011100000000000000000000000000000111110000011111000000000001100000110001110000
0111001111110001111100000111110011111100000111000001110000100111110001111000001111000111                              11000100000000    11100000111000                              00000000000000011100000111000001111100000111110000000000000000000110000000001100000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000110000                                                                                            01100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000011000001100011100000111001111110001111100                               B O T T L E S   O F   B E E R                                00011111001111110000000000000000011100000111000000000000000000000000000111000001110000011
1110000011111000000011000001100000000000000000000000000000000000000000000000000000110000                                                                                            01100000000011000001100000000000000000000000001100000110000000001100000110000000000000110
0000110000000000000000000000000000000000000000000000000000011000001100000000000001100000                                       I N   W H I R L                                      11000000000000000000000110000011000000000000000001100000110000000001100000110001110000011
 1001111110001111100011110001111100110000000000000000111000000000111000000000000000000000                                                                                          00111000001110000000000000000011111000001111100000000000000000001100000110000000000000000
 0000000000000000011000001100000000000000000000000000000000000000000000000000000000011000                             b y   K a n g   S e o n g h o o n                            00110000000000000000000000000110000011000111000001110011111100011111000001111100111000011
 1000000001001111100011110000011110001111100010000000011100000111000000000000000000111000                                                                                          00111000000000000011111000001111100000000000110000011000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                                                                                        00000000000000000000000000000000000000000000000001100000110001110000011100111111000111110
  0011110000100011111001000000000000010011111000111100000111100011111000100000000111000001                                                                                        11000000000000000000000000000000000000000000000000000000000110000011000000000000011000001
   1000000000000000000000000000000000000000000000000011000001100000000000000000000000000000                                                                                      00000000110000011000000000000000000000000000000000000000000000000000000000000000000000000
   0000000001100000110000000000000000011000001100000000000000000000000000000000000000000000                                                                                      00000000000001100000110011100000111001111110001111100011110001111100110000111000001110000
    1001111100011110000011110001111100010000000011100000111000000000000000000111000001110000                                                                                    00000000000000000000000001111100000111110000000000000000000000000000000000011000001100011
     1000001110011111100011111000001111100011111001111100111100000111100011111000100000000010                                                                                  00111110001111000001111000111110001000000001110000011100000000000000000011100000111000000
     0000000111110000011111000000000000000000000000000000011000001100000000000000000000000000                                                                                  00000000000000000000000000000000000000000000000000000001100000110000000000000000000001100
      0001100000000000000000000000000000000000000000000000000000000011000001100011100000111001                                                                                11111000111110000011111001111110000011100000111000000000111000000000111000000000000000000
       0000011100000111000000000000000000000000011111000001111100000001100000110000000000000000                                                                              00000000000000000000000000000000000000000000000000000000011000001100011100000111001111110
        0011111000001111100111111000001110000000001110000011100000111000000000000000000000000000                                                                            11100000111000000000000000001111100000111110000000000000000000000000000000110000011000000
         0000000000000000000000000000000000000000000000000000000000000001100000110000000000000000                                                                          00000000000000000000000000000000000000000000011000001100011100000111001111110001111100000
          1111100111000011100000111000001110000000000000000000000000000000000000000011000001100000                                                                        00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
           0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                                                                      00011000001100000000011000001100000000000000000000000000000000000000000000000000000000000
            0000000000000000000000000000000000000000000000000000000000000011000001100011100000111001                                                                    11111000111110001111000111110011111000001110000000001110000011100000111000001110000000000
             0000000000000111000001110000000000000000000000000000000001111100000111110000000000100000                                                                  11100011100011000111000001111100000111110000000000000000000000000111110010100111110000011
              1110000111110000011100000111000011100001111000011111000001110000011100000111110000111000                                                                01111000001111000001111000001111000001111000001111000001111000001111000001111000001111000
                0011110000011110000011110000111110000011111001000011100000110001110011001111111000001111                                                            10000111110000000011110000011110000111000001110000011111000011111000001111100001111100000
                 1110000011100000111110000111000011110000011110000011110000011110000011110000011110000011                                                          11000001111000001111000001111000001111000001111000001111000001111000001111000011100000111
                   0000011111000011100001111000001111000001111000001111000001111000001111000001111000001111                                                      00000111100000111100000111100000111100000111100000111100000111100000111100000111100000111
                    1000001111000001111000001111000001111000001111000001111000001111000001111000001111000011                                                    10000011100000111110000111100000111100001111100000111000001110000011111000011100001111000
                      0011110000011110000011110000011110000011110000011110000011110000011110000011110000011110                                                00001111000001111000011111000001111100010000111000001100011100110011111110000011111000011
                        1110000000011110000011110000111000001110000011111000011111000001111100001111100000111000                                            00111000001111100001110000111100000111100000111100000111100000111100000111100000111100000
                          1111000001111000001111000001111000001111000001111000001111000001111000000001110000011100                                        00011111000011100001111000001111000001111000001111000001111000001111000001111000001111000
                            0011110000011110000011110000011110000011110000011110000011110000011110000011110000011110                                    00001111000001111000001111000001111000001111000001111000001111000001111000001111000001111
                              0000011110000011110000011110000011110000011110000011110000011110000011110000011110000011                                11000001111000001111000001111000001111000001111000001111000001111000001111000001111000001
                                1110000011110000011110000011110000011110000011110000011110000011110000011110000011110000                            01111000001111000001111000001111000001111000001111000001111000001111000011100000111001111
                                   1100111110001111000010000111100000100110010011111001110000000001100001111000001111000001                      10001110001100011111000011111000011111000000001111000001111000001111000001111000011100000
                                      1100001111100001111100000111000001110000111000011110000111110000000001110000011100000111                11000001111000001111000001111100000111110000111000011110000011110000011110000011110000011
                                        1100000111100000111100000111100000111100000111100000111100000111100000111100001110000011            10011111100111110001111000001001100011100111110000000000000111000001110011000111110001100
                                            0111110001111000001100011100110011111110000011111000011111000000001111000001111000011100    00011100000111110000111110000011111000011111000001110000011100000111110000111000011110000
                                               0111100000111100000111100000111100000111100000111100000111100000111100000111100000111100000111100000111100000111100000111100001110000011100000111110000111000011110000011110000
                                                   0111100000111100000111100000111100000111100000111100000111100000111100000111100         0001111000001111000001111000001111000001111000001111000001111000001111000001111
                                                        000001111000001111000001111001111110001111100011110000111110000010000                   111110000111111000010001000111100010011110000100001111001111100011110
                                                               0011111000111100000111100000111001111100011000111100000                                 0000111100001110000011100000111110001000111110001110000
                                                                       000001100000000111100000110001110011101                                                 00111111100000111100<tokigun@gmail.com>

구현 및 유틸리티

esotope-whirl

(2005-01-06, 2005-01-07, 2005-06-17) "WHIRL"이 가운데에 떡하니 박혀 있는 C 인터프리터입니다. 파일 이름을 인자로 주거나, 표준 입력을 사용할 경우 파일 이름을 -로 줘서 코드를 실행할 수 있습니다. 메모리 셀의 수는 99999개로 고정되어 있습니다.

#include/* by Kang Seonghoon <tokigun@gmail.com> */<stdio.h>
FILE*f;int P[99999],*d=P,*p=P,U[99999],*u=U,q,s,t,r[2],v[2],
w[2];int main(int i,char**I){if(i-2)return!puts("TokigunStu\
dio Whirl Interpreter by Kang Seonghoon <tokigun@gmail.com>"
);if(f=**++I-45||1[*I]?fopen(*I,"r"):stdin){while((*d=fgetc(
f))>=0  )*d/2-24  ?0  :(*d  ++      -=      48)  ;for(;p<d;q
=!*p++  &&!q)if(  *p  )v[s  ]=(v  [s]-  r[s  ]+  13)%12;else
#define  O(  n)  ;;}        else  /**/      if(  !(v[s]-n)){
{r[s]^=  2;  if  (q)  {t=w  [s];  if(s  ){;  if  (0){O(1)t=*
u;O(2)*u        =t;O  (3)t  +=*u  O(4)  t*=  *u  O(5)t/=*u;O
(6)t=0;O(  7)  t=t<*  u;O(  8)      t=  t>*  u;       O(9)t=
t==*u;O(10)t=!t;O(11)t=-t;}O(1)return 0;O(2)t=1;O(3)t=0;O(4)
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:
0;O(10)t?printf("%d",*u):scanf("%d",u);O(11)*u=t?putchar(*u)
:getchar();}w[s]=t;s=!s;if(p<P)p=P;}}fclose(f);}else printf(
"File Not Found: %s\n",*I);return!f;}/*20050617rev3tokigun*/

소스-바이너리 변환기

(2005-01-08) 이 프로그램은 esotope-whirl의 보조 프로그램으로, Whirl의 개발자가 "귀찮다"는 이유로 만들지 않았다고 주장한 Whirl 프로그램의 바이너리 압축기입니다. 첫 인자가 e이면 표준 입력에서 평문을 받아 바이너리로 출력하고, 반대로 d이면 역변환을 수행합니다. 바이트 단위로 떨어지지 않을 경우 의도하지 않은 실행을 막기 위해 1 명령으로 빈 칸을 패딩합니다.

#include/*tokigun*/<stdio.h>
int p,q;int main(int i,char*
*j){if(i-2)printf("Usage:\n\
\t%s e < plain > binary\n\t\
%s d < binary > plain\n",*j,
*j);else if(**++j==100)while
(~(i=getchar()))for(p=128;p;
p/=2)putchar(i&p?49:48);else
if(**j==101){while(~(i=getc\
har())){if((i|1)==49){p=2*p+
i%2;if(++q>7){putchar(p);p=q
=0;}}}q&&putchar(p<<8>>q|255
>>q);}/*20050108*/return 0;}

(rev 1d46270eb038)