FizzBuzz問題というのがあって、1から100までの数字で3で割り切れる場合は'Fizz'、5で割り切れる場合は'Buzz',15で割り切れる場合は'FizzBuzz'、その他はそのままの数字をアウトプットせよ、というのだったと思う。APLやJ言語で解いた例もないわけではないのですが、それを読む前に今の知識と道具でチャレンジしてみました。
Jでやろうと思うのですが、ひとつずつ処理していくというのがJ言語らしくないので、配列で考えなければいけない。あと数字と文字列を配列の中に混合できませんので、すべてを文字列にするか、混合を許すボックス(Box)にしなければいけません。結構ハードル高いです。
1から7まででイメージしてみます。
1;2;'Fizz';4;'Buzz';6;7 +-+-+----+-+----+-+-+ |1|2|Fizz|4|Buzz|6|7| +-+-+----+-+----+-+-+ '1';'2';'Fizz';'4';'Buzz';'6';'7' +-+-+----+-+----+-+-+ |1|2|Fizz|4|Buzz|6|7| +-+-+----+-+----+-+-+ 7 4$' 1 2Fizz 4Buzz 6 7' 1 2 Fizz 4 Buzz 6 7
最終形のイメージが固まらないとあとで苦労しますよねー。
1から100までの数字をボックスに入れて、101番目と102番目103番目にそれぞれ'Fizz','Buzz','FizzBuzz'をいれたもの、つまり103個の箱からなるボックスから配列で100個取り出すというので行けるかな?
]a=:<"0(1+i.7) +-+-+-+-+-+-+-+ |1|2|3|4|5|6|7| +-+-+-+-+-+-+-+ ]a=:a,'Fizz';'Buzz';'FizzBuzz' +-+-+-+-+-+-+-+----+----+--------+ |1|2|3|4|5|6|7|Fizz|Buzz|FizzBuzz| +-+-+-+-+-+-+-+----+----+--------+ (1 2 8 4 9 6 10 - 1) { a +-+-+----+-+----+-+--------+ |1|2|Fizz|4|Buzz|6|FizzBuzz| +-+-+----+-+----+-+--------+
これは行けそうですね。となると、次は
1 2 101 4 102 6 7 8 101 102 ...
という配列を作ることになります。
この辺は力ずくでなんとかなりそう。
]a=:<"0 (1+i.100) +-+-+-+-+-+-+-+-+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37| +-+-+-+-+-+-+-+-+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ ... boxall=:a,'Fizz';'Buzz';'FizzBuzz' 11 10$boxall +----+----+--------+--+--+--+--+--+--+---+ |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 | +----+----+--------+--+--+--+--+--+--+---+ |11 |12 |13 |14|15|16|17|18|19|20 | +----+----+--------+--+--+--+--+--+--+---+ |21 |22 |23 |24|25|26|27|28|29|30 | +----+----+--------+--+--+--+--+--+--+---+ |31 |32 |33 |34|35|36|37|38|39|40 | +----+----+--------+--+--+--+--+--+--+---+ |41 |42 |43 |44|45|46|47|48|49|50 | +----+----+--------+--+--+--+--+--+--+---+ |51 |52 |53 |54|55|56|57|58|59|60 | +----+----+--------+--+--+--+--+--+--+---+ |61 |62 |63 |64|65|66|67|68|69|70 | +----+----+--------+--+--+--+--+--+--+---+ |71 |72 |73 |74|75|76|77|78|79|80 | +----+----+--------+--+--+--+--+--+--+---+ |81 |82 |83 |84|85|86|87|88|89|90 | +----+----+--------+--+--+--+--+--+--+---+ |91 |92 |93 |94|95|96|97|98|99|100| +----+----+--------+--+--+--+--+--+--+---+ |Fizz|Buzz|FizzBuzz|1 |2 |3 |4 |5 |6 |7 | +----+----+--------+--+--+--+--+--+--+---+ 0 1 2 3 100 101 102 { boxall +-+-+-+-+----+----+--------+ |1|2|3|4|Fizz|Buzz|FizzBuzz| +-+-+-+-+----+----+--------+ ]a=:1+i.100 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ... 3 | a 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 ... 0 E. 3|a 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 ... (0 E. 3|a) # a 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 ... ]fizz=:101 (((0 E. 3|a) # a) - 1)} a 1 2 101 4 5 101 7 8 101 10 11 101 13 14 101 16 17 101 19 20 101 22 23 101 25 26 101 28 29 101 31 32 101 ... ]buzz=:102 (((0 E. 5|a) # a) - 1) } fizz 1 2 101 4 102 101 7 8 101 102 11 101 13 14 102 16 17 101 19 102 101 22 23 101 102 26 101 28 29 102 31 32 101 ... ]fizzbuzz=:103 (((0 E. 15|a) #a) - 1) } buzz 1 2 101 4 102 101 7 8 101 102 11 101 13 14 103 16 17 101 19 102 101 22 23 101 102 26 101 28 29 103 31 32 101 ... 10 10$result=:(fizzbuzz - 1) { boxall +----+----+----+----+--------+----+----+----+----+--------+ |1 |2 |Fizz|4 |Buzz |Fizz|7 |8 |Fizz|Buzz | +----+----+----+----+--------+----+----+----+----+--------+ |11 |Fizz|13 |14 |FizzBuzz|16 |17 |Fizz|19 |Buzz | +----+----+----+----+--------+----+----+----+----+--------+ |Fizz|22 |23 |Fizz|Buzz |26 |Fizz|28 |29 |FizzBuzz| +----+----+----+----+--------+----+----+----+----+--------+ |31 |32 |Fizz|34 |Buzz |Fizz|37 |38 |Fizz|Buzz | +----+----+----+----+--------+----+----+----+----+--------+ |41 |Fizz|43 |44 |FizzBuzz|46 |47 |Fizz|49 |Buzz | +----+----+----+----+--------+----+----+----+----+--------+ |Fizz|52 |53 |Fizz|Buzz |56 |Fizz|58 |59 |FizzBuzz| +----+----+----+----+--------+----+----+----+----+--------+ |61 |62 |Fizz|64 |Buzz |Fizz|67 |68 |Fizz|Buzz | +----+----+----+----+--------+----+----+----+----+--------+ |71 |Fizz|73 |74 |FizzBuzz|76 |77 |Fizz|79 |Buzz | +----+----+----+----+--------+----+----+----+----+--------+ |Fizz|82 |83 |Fizz|Buzz |86 |Fizz|88 |89 |FizzBuzz| +----+----+----+----+--------+----+----+----+----+--------+ |91 |92 |Fizz|94 |Buzz |Fizz|97 |98 |Fizz|Buzz | +----+----+----+----+--------+----+----+----+----+--------+
合っていると思うけど、いかがでしょうか?