스몰 토크 스 퀴크 4.x 맛 많은 바이트!
71 문자로 Integer에서 재귀 양식 중 하나를 구현할 수 있습니다.
f:y n:n n=1or:[^(2to:y)inject:self into:[:x :i|self f:x n:n-1]].^self+y
그런 다음 파일이나 FileStream stdin에서 읽는 데 비용이들 것입니다 ... Squeak은 분명히 스크립팅 언어로 설계되지 않았습니다. 따라서 문제와 관련이없는 범용 유틸리티를 만드는 데 많은 바이트를 소비합니다.
스트림에서 21 개의 char 메소드 구현 (시파 레이터 건너 뛰기)
s self skipSeparators
이 20 문자 메소드를 Behavior에서 구현합니다 (Stream에서 인스턴스를 읽기 위해).
<s^self readFrom:s s
그런 다음 문자열에 28 문자 (파일 핸들 만들기)
f^FileDirectory default/self
그런 다음 FileDirectory에 59 개의 문자 (readStream을 작성하기 위해)
r^FileStream concreteStream readOnlyFileNamed:self fullName
그런 다음 BlockClosure에서 33 문자 (n 번 평가하기 위해)
*n^(1to:n)collect:[:i|self value]
그런 다음 Array에서 63 개의 문자 (수신자를 사용하여 인수와 Array에서 가져온 인수를 평가)
`s^self first perform:s asSymbol withArguments:self allButFirst
그런 다음 x라는 파일에서 읽을 수있는이 31 문자 조각을 평가하여 문제를 해결하십시오.
|s|s:='x'f r.[0class<s]*3`#f:n:
유틸리티를 세지 않아도 71 + 31 = 102 문자입니다 ...
이제 codeGolf를 잃어 버릴 것이므로 Integer에서 더 재미있는 구현이 있습니다.
doesNotUnderstand:m
(m selector allSatisfy:[:c|c=$+])or:[^super doesNotUnderstand:m].
self class compile:
m selector,'y y=0or:[^(2to:y)inject:self into:[:x :i|self'
,m selector allButLast,'x]].^'
,(Character digitValue:()asBit)
,(m selector size-2min:1)hex last.
thisContext sender restart
이 메소드는 존재하지 않는 경우 (메시지 m의 수신자가 이해할 수없는) n +로 작성된 2 진 메시지를 정의 (컴파일)하고 송신자 컨텍스트의 시작에서 실행을 다시 시작합니다. 가독성을 위해 추가 캐리지 리턴과 공백을 삽입했습니다.
주 (m selector size-2min:1)hex last의 단락 된 형태이다 (m selector size>2)asBit printString.
스몰 토크 사악한 초강대국을 보여주지 않는다면, 마지막 진술은 더 짧고 간단한 것으로 대체 될 수 있습니다
^m sendTo:self
이제 문자로 28 문자 유틸리티를 구현하십시오 (문자열에서 n 번 반복하십시오)
*n^String new:n withAll:self
그런 다음이 43 자 표현식을 평가하십시오.
|i s|i:=0class.s:='x'f r.[i<s]*2`($+*(i<s))
Integer로 구현하여 10 개 이상의 문자로 가속화 할 수 있습니다.
++y^self*y
우리가 대체 할 수 있기 때문에이 경우 우리는 또한 짧은 코드가 ^',(m selector size-2min:1)hex last함께^1'
이러한 높은 가격의 경우 코드는 두 번째 정수 = 0으로 작동합니다.
n=1? 그것의 경우x+y나x+1,1 1 1반환해야합니다2