.st

comparefn

Array.prototype.sort が受け取る比較関数は comparefn が undefined でないならば、それは 2 個の引数 x と y を受け付け、 x < y ならば負の値、 x = y ならば 0、 x > y ならば正の値を返す関数であるべきである。 http://www2u.biglobe.ne.jp/~oz-07ams/…

(Smalltalk at: #Golf) tips third

変換ネタ。 Number → ScaledDecimal X asScaledDecimal:6 " ↓ " 0s6coerce:X Symbol → String #symbol asString " ↓ " #symbol,0 Array of Characters → String String withAll:#($c$h$a$r$s) " ↓ " '',#($c$h$a$r$s) String → ByteArray 'string'asByteArra…

dcl_C_と\b

盲点。 *1 これならstでも書ける。80B → 65B *1:\Gでないとダメと思い込んでた。yオプションは必要無かったのである。

(Smalltalk at: #Golf) tips second

使われないものたち。 ローカル変数 |x|x:=stdin nextLine " ↓ " X:=stdin nextLine Boolean>>#ifTrue:ifFalse: C ifTrue:[#t display]ifFalse:[#f display] " ↓ " C and:[#t display];or:[#f display] X:=C ifTrue:[#t]ifFalse:[#f] " ↓ " X:=#t.C or:[X:=#…

(Smalltalk at: #Golf) tips first

まずはsumimさんの記事の補足から。 アルファベットに続く式の区切りの「 . 」の直後にアルファベットはNG 数字もNG。 キーワードの「:」の直後にアルファベットはNG バージョンが上がったのでくっつけて書けるように。 数字の直後に d、e で始まるセ…

無名再帰

http://d.hatena.ne.jp/sumim/20080501/p1の続き。 GST [:n| n < 2 ifTrue: [ n ] ifFalse: [ n * ((BlockClosure block: thisContext method) value: n - 1) ] ] value: 10 ContextPart>>#receiverがなぜかnilを返すのでこういう形に。 Groovy { n -> n < 2…

2.3.5

GSTのバージョンが2.3.5になり,最初から解き直す楽しみができた。 スクリプト末に「 ! 」が要らなくなったので,少なくとも1Bずつ縮む。

初awk

なのだった。

二位

とても珍しい,Smalltalk健闘中の図。

Io fiboBench

すっかり気に入ってしまったのだが,こうなると実行速度の鈍さが気にかかる。 Number fib := method(if(self < 2, 1, (self - 1) fib + (self - 2) fib)) n := File standardInput readLine asNumber; t := Date clock writeln("fib(".. n ..") = ", n fib, …

SelfAssigner done

.st

!SelfAssigner class methodsFor: 'initialization'! isolate superclass := nil! ! SelfAssigner isolate! 咀嚼するも何もこれだけでいいのだった。恐るべしSmalltalk。 st> #i <+ 'hoge'! SelfAssigner new "<0x19c4ee00>" st> i size! 4 st> i ~ 7; f: [:…

SelfAssigner

.st

i++ > i+=1 > i:=i+1やはりインクリメントやら自己代入が無いのはゴルフ的によろしくない,ということでなんとかしてみる。 Object subclass: #SelfAssigner instanceVariableNames: 'value' classVariableNames: '' poolDictionaries: '' category: 'Experi…

ふらたんパッチ

.st

……に気持ちだけ対応。似て非なる挙動*1。 shortest_abbreviation相当も一応用意したが,アルゴリズムがアホなので長いメソッドだと検索が終わらず使い物にならない。(−−) Golf.Global は Golf.Dic に統合。 $ ./gost.st - GNU Smalltalk ready st> Array ? #…

納得

false.to_sが""だとうれしい理由 よく考えたらSmalltalkのleapyearで同様の手法を使っていた。String>>#, が変なオブジェクトをうまく無視してくれる*1のを利用。 *1:x size が 0 を返す x なら '' と同じ

今日のGoST

.st

CodeRepos に間借り。 結局 Golf クラスを作ってまとめることにした。 Object subclass: #Golf instanceVariableNames: '' classVariableNames: 'Dic Global' poolDictionaries: '' category: 'Golf'! Golf.Dic := Dictionary new. Golf.Global := Dictionar…

Palindromic Quine

http://golf.shinh.org/p.rb?Palindromic+Quine GoSTで。 ! "$,Q P!$"$!P Q,$" !

文字列の(セパレータを挟んだ)繰り返し

文字列繰り返し - Higé au lait 敢えて再帰でという趣向かな。でも空気読まずに普通に書く。 JavaScript String.prototype.repeat = function(n, sep, a){ (a = [this]).length = n; return a.join((sep || '') + this); }; 既に模範解答があるので少し奇を…

3.0

.st

GNU Smalltalk 3.0 released | GNU Smalltalk ゴルフ目的でしか使ってない自分には(あなごるで採用されない限り)あまり関係なかったりする。 とはいえ Object subclass: #Any instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' catego…

#<>

.st

#caseOf:otherwise:が簡単すぎたので,ちょっと捻ってRuby風のcaseを。 !Object methodsFor: 'rubylike-case'! <> cases cases do: [:a| a key =? self and: [ | v | ^((v := a value) isKindOf: BlockClosure) ifTrue: [ v value ] ifFalse: [ v ] ] ]. ^ni…

#caseOf:otherwise:

.st

http://ja.doukaku.org/comment/5174/ Smalltalk版switch。直感的で解りやすい。 !Object methodsFor: 'switching'! caseOf: cases cases do: [:a| self = a key value and: [ ^a value value ] ]. ^nil! caseOf: cases otherwise: owBlock ^(self caseOf: c…

?{.}

.st

短くなったとはいえ,他の言語が2バイト(?:)で済ませてしまうところを8バイト(T:F:)も叩くのは忍びない。 そこで配列を利用したシンプルな条件演算子もどきを追加してみる。 !Boolean methodsFor: 'golf'! ? a | o | o := self ifTrue: [ a first ] ifFals…

メソッド検索を賢く

.st

昨日のgoruby GoSTに訳すと「oOOR:d:」で「onOccurrencesOfRegex:do:」が呼べる感じ。 !Object methodsFor: 'golf'! doesNotUnderstand: m | a s k | a := m arguments size. s := (((k := m selector) inject: '' writeStream into: [:s :c| c <= $Z and: […

サボり気味

飽きてきたのか,ちょっと(?:難しめ|面倒)な問題になると解く気がしない。 エロと風俗情報満載 どう抜く? 119.gst $Ssy:'cal ',($*@1)! $ gst gost.st 119.gst -a 2008 2008 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We…

GoST@'New Year''s Day'

.st

例年の如くさださんを拝みつつ進捗公開。 !Object methodsFor: 'golf'! doesNotUnderstand: m | a s k | a := m arguments size. s := m selector, '*' copyReplaceAll: ':' with: '*:'. k := {m selector. self class}. ^m selector: (GolfDic at: k ifAbse…

GolfDic

.st

@@golf_hash class変数の追加方法が分からず試行錯誤。 Object.GolfDic := Dictionary new! " <= ?? " !Object methodsFor: 'golf'! doesNotUnderstand: m | a s k | a := m arguments size. s := m selector, '*' copyReplaceAll: ':' with: '*:'. k := {m …

$><<'hoge'

.st

GoSTでRubyっぽく↑を実現しようとして詰まった。 !Character methodsFor: 'test'! doesNotUnderstand: m ^super doesNotUnderstand: m! ! $$ hoge! これがループしてスタックオーバーフロー(?)する。何故だ。 …と思ったら上記コードだけだとちゃんと動く(エ…

宣言不要

GoSTをいじってるうちに,大文字で始まる変数に直接代入が利く*1ことを今更知った。 nilをAとかZとか(大文字なら何でもいい)で代用出来ることには気付いていたが,グローバル変数として普通に使えるとは。(−−;)変数宣言の分ちょっとずつ縮むので,送信し直さ…

GoST continue

.st

今日のgoruby → [ruby] Log of /trunk/golf_prelude.rb マジで開発しているらしい。こうなったら出来る範囲で追いかけることにする。 !Object methodsFor: 'golf'! doesNotUnderstand: m | a s | a := m arguments size. s := m selector, '*' copyReplaceAl…

GoST

gorubyに対抗してみる。 GoST.st !Object methodsFor: 'golf'! doesNotUnderstand: m | a s | a := m arguments size. s := m selector, '*' copyReplaceAll: ':' with: '*:'. ^m selector: (self class allSelectors asSortedCollection detect: [ :x | (x …

echo: 21

神ゴルファーの一人でhttp://www.darrenks.com/golfscript/の作者でもあるflagitiousさんが最近 Smalltalk にも手を出し始めており,早速いくつか記録を更新している。 なんとか追いつこうとググったりマニュアルを眺めたりしていたら全然関係無いところの謎…