Smalltalk Squeak 4.x rasa banyak byte!
Saya bisa menerapkan salah satu bentuk rekursif dalam Integer di 71 char
f:y n:n n=1or:[^(2to:y)inject:self into:[:x :i|self f:x n:n-1]].^self+y
Kemudian membaca dari file atau FileStream stdin akan dikenakan biaya lengan saya ... Mencicit jelas tidak dirancang sebagai bahasa scripting. Jadi saya akan menghabiskan banyak byte untuk membuat utilitas keperluan umum saya sendiri yang tidak terkait dengan masalah:
Terapkan metode 21 char ini di Stream (untuk melewati pelaut)
s self skipSeparators
Terapkan metode 20 karakter ini dalam Perilaku (untuk membaca sebuah instance dari Stream)
<s^self readFrom:s s
Kemudian 28 karakter dalam String (untuk membuat file handle)
f^FileDirectory default/self
Kemudian 59 karakter di FileDirectory (untuk membuat readStream)
r^FileStream concreteStream readOnlyFileNamed:self fullName
Kemudian 33 karakter di BlockClosure (untuk mengevaluasinya n kali)
*n^(1to:n)collect:[:i|self value]
Kemudian 63 karakter dalam Array (mengevaluasi argumen dengan penerima dan argumen yang diambil dari Array)
`s^self first perform:s asSymbol withArguments:self allButFirst
kemudian selesaikan masalahnya dengan mengevaluasi 31 char snippet ini di mana saja untuk dibaca dari file bernama x
|s|s:='x'f r.[0class<s]*3`#f:n:
Bahkan tanpa menghitung utilitas, itu 71 + 31 = 102 karakter sudah ...
Sekarang, karena saya yakin akan kehilangan codeGolf, saya memiliki implementasi yang lebih lucu di 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
Metode ini akan mendefinisikan (kompilasi) pesan biner yang terbuat dari n + jika tidak ada (tidak dipahami oleh penerima pesan m), dan akan memulai kembali eksekusi di awal konteks pengirim. Saya memasukkan tambahan carriage return dan ruang untuk keterbacaan.
Perhatikan bahwa itu (m selector size-2min:1)hex last
adalah bentuk kependekan dari (m selector size>2)asBit printString
.
Jika bukan untuk menunjukkan kekuatan super Smalltalk jahat, pernyataan terakhir bisa digantikan oleh lebih pendek dan lebih sederhana
^m sendTo:self
Sekarang mengimplementasikan utilitas 28 karakter dalam Karakter (untuk mengulanginya n kali dalam sebuah String)
*n^String new:n withAll:self
Kemudian evaluasi ungkapan 43 karakter ini:
|i s|i:=0class.s:='x'f r.[i<s]*2`($+*(i<s))
Kami dapat mempercepat dengan 10 karakter lagi dengan menerapkan Integer:
++y^self*y
dan dalam hal ini kami juga memiliki kode yang lebih pendek karena kami dapat mengganti ^',(m selector size-2min:1)hex last
dengan^1'
Untuk harga setinggi itu, kodenya bekerja dengan integer kedua = 0 :)
n=1
? Jikax+y
ataux+1
,1 1 1
harus kembali2