Smalltalk Squeak 4.xフレーバーの多くのバイト!
71文字の整数で再帰形式の1つを実装できました
f:y n:n n=1or:[^(2to:y)inject:self into:[:x :i|self f:x n:n-1]].^self+y
次に、ファイルまたはFileStreamの標準入力から読み取ると、コストがかかります... Squeakは明らかにスクリプト言語として設計されていません。そのため、問題に関係のない独自の汎用ユーティリティを作成するために多くのバイトを費やします。
この21文字のメソッドをStreamに実装します(シーパレーターをスキップするため)
s self skipSeparators
Behaviorでこの20文字のメソッドを実装します(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]
次に、63文字の配列(引数をレシーバーで評価し、引数を配列から取得)
`s^self first perform:s asSymbol withArguments:self allButFirst
次に、この31文字スニペットを評価してxという名前のファイルから読み取ることで問題を解決します
|s|s:='x'f r.[0class<s]*3`#f:n:
ユーティリティを数えなくても、それはすでに71 + 31 = 102文字です...
今、私はcodeGolfを失うことを確信しているので、私は整数で面白い実装をしています:
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
このメソッドは、n +で構成されるバイナリメッセージが存在しない場合(メッセージmの受信者に認識されない場合)を定義(コンパイル)し、送信者コンテキストの先頭から実行を再開します。読みやすくするために、追加のキャリッジリターンとスペースを挿入しました。
(m selector size-2min:1)hex lastはの短縮形であることに注意してください(m selector size>2)asBit printString。
Smalltalkの邪悪な超大国を示すことではない場合、最後のステートメントをより短くシンプルなものに置き換えることができます。
^m sendTo:self
Characterに28文字のユーティリティを実装します(Stringでn回繰り返す)
*n^String new:n withAll:self
次に、この43文字の式を評価します。
|i s|i:=0class.s:='x'f r.[i<s]*2`($+*(i<s))
整数で実装することにより、さらに10文字で加速できます。
++y^self*y
この場合、次のコードで置き換えることができるため^',(m selector size-2min:1)hex last、コードも短くなります。^1'
このような高価格の場合、コードは2番目の整数= 0で動作します:)
               
              
n=1?x+yまたはの場合x+1、1 1 1返される必要があります2