- 478 名前:デフォルトの名無しさん mailto:sage [2018/11/13(火) 14:23:32.25 ID:TStmpOw3.net]
- >>283 Squeak Smalltalk >>461 を参考に (joinを直せばPharoも可)
| fn | fn := [:M :N | | digits xs ys primaries secondaries sorted | digits := (M * N) log ceiling. xs := (1 to: M) collect: [:idx | (1 to: N) asArray]. ys := (1 to: M) collect: [:idx | Array new: N withAll: idx]. primaries := xs + ys. secondaries := primaries \\ 2 * 2 - 1 * xs. sorted := ((1 to: M) gather: [:y | (1 to: N) collect: [:x | x@y]]) sort: [:pt | (primaries at: pt y) at: pt x] ascending, [:pt | (secondaries at: pt y) at: pt x] descending. sorted doWithIndex: [:pt :idx | (xs at: pt y) at: pt x put: (idx printStringPadded: digits)]. (xs collect: [:row | row joinSeparatedBy: ' ']) asStringWithCr ]. fn value: 3 value: 3. "=> '1 2 6 3 5 7 4 8 9' " fn value: 4 value: 2. "=> '1 2 3 5 4 6 7 8' " fn value: 3 value: 5. "=> '01 02 06 07 12 03 05 08 11 13 04 09 10 14 15' " fn value: 1 value: 8. "=> '1 2 3 4 5 6 7 8' "
|

|