APL/J言語でFizzBuzz


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    |
 +----+----+----+----+--------+----+----+----+----+--------+

合っていると思うけど、いかがでしょうか?