全ての組み合わせ
Posted feedbacks - Smalltalk
Squeak Smalltalk で。
1 2 3 4 5 6 7 8 9 10 11 12 | | input results gen |
input := #((0 1) 'ab' (Foo Bar)).
results := OrderedCollection new.
gen := input reversed
inject: [:arr | results add: arr]
into: [:block :colln |
[:arr | colln do: [:ea | block value: arr, {ea}]] fixTemps].
gen value: #().
^results asArray
"=> #((0 $a Foo) (0 $a Bar) (0 $b Foo) (0 $b Bar)
(1 $a Foo) (1 $a Bar) (1 $b Foo) (1 $b Bar)) "
|
ether さんの #2152 の簡潔さに感心しつつ、それをヒントにして同様のことを Squeak Smalltalk で。
1 2 3 4 | | input |
input := #((0 1) 'ab' (foo bar)).
^input reversed inject: #(()) into: [:arrs :colln |
colln inject: #() into: [:rs :elem | rs, (arrs collect: [:arr | {elem}, arr])]]
|




zigorou #3400() Rating0/0=0.00
Pythonで表現すると下のようになります。
順番はこの通りでなくても構いません。返すものはリストと書きましたが、 なんらかの「一度に全部をメモリ上に作成しないリスト状のモノ」がある言語ではそちらを使う方がおすすめです。 数値や文字列を一つのリストに混在させるのがやっかいな言語では整数のリストに限定しても構いません。このお題はZIGOROuさんとのやりとりにヒントを得て作りました。 (しまった、先にブログで公開されてしまった→Yet Another Hackadelic - 直積の導出と考えうる全ての値を網羅したハッシュの生成)
追記:サンプル出力が間違っていたのでoceanさんの解答を使って出力し直しました。
[ reply ]