2004-12-07から1日間の記事一覧

続々: n 番目の組み合わせ

Shiro さん版を受けて、SequenceableCollection >> #combinations:atATimeAt: を改良してみました。 SequenceableCollection >> combinations: digits atATimeAt: target | size lastIndex | size _ self size. (size = target ifTrue: [(self first: 1), (s…

Shiro さんの組み合わせの数版を Smalltalk で

組み合わせの数を使うとこんな感じ? (let loop ((chars (string->list *chars*)) (str '()) (num *value*)) (if (= (length str) 16) (list->string (reverse str)) (let ((x (c (- (length chars) 1) (- 15 (length str))))) (if (> x num) (loop (cdr cha…

続: n 番目の組み合わせ

ループを排除して、心持ち、すっきりとさせてみました。心持ち。w SequenceableCollection >> combinations: digits atATimeAt: target | size sum ranges cursor digit | size _ self size. (size = target]. sum _ cursor > 1 ifTrue: [ranges at: cursor…

n 番目の組み合わせ

id:sumim:20041206#p1 の続き。c. も比較的、簡単そうなのでトライしてみました。 target chars target _ 99999999999999999. chars _ '!"#$%&''()*+,-./:;?@[\]^_`{|}~0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'. ^ chars combinati…

文字の配列を文字列にする

Ruby と違って Smalltalk の文字列(a String)は要素がすべて文字(a Character)の特殊なコレクションです。ただ、文字のみからなる配列を文字列にしたいとき、 #($a $b $c) asStringだと、 "=> '#($a $b $c)' "というように、元の配列の文字列表現になっ…