見出し画像

【IchigoJam】年が明けたんだ……2025年か……

年が明けたんだなあ……
頭が悪くて、いいネタが思いつかないなあ……
とりあえず、IchigoJam で2025を分解してみるか……

※IchigoJamはjig.jpの登録商標です。

数の分解

今回は、2以上の整数を2以上の整数の積で表すことを、「分解する」という。
整数1個だけで表す場合も、「積」にはならないが分解したとみなす。

実装

配列をスタックのように用い、再帰のような処理で「2025」の分解を行う。
分解した前の数以上で、さらに割った商が割る数以上になる割る数の候補のみを試すことで、重複を回避している。

10 ' 2025 ヲ ブンカイ
20 LET[0],2,2025
30 P=1
40 FOR I=1 TO P
50 IF I>1 PRINT "*";
60 PRINT [I];
70 NEXT
80 PRINT ""
90 I=[P-1]:GOTO 150
100 IF [P]%I<>0 GOTO 140
110 [P+1]=[P]/I:[P]=I:P=P+1
120 GOSUB 40
130 P=P-1:I=[P]:[P]=[P]*[P+1]
140 I=I+1
150 IF I*I<=[P] GOTO 100
160 IF P>1 RETURN

このプログラムは、CC0 1.0 でライセンスする。

今回は、プログラムが1画面に収まるようにした。
すなわち、1行は32文字以内で、かつ24行以内に収まるようにした。

IchigoJam BASIC 1.4.3 by jig.jp
OK
10 ' 2025 ヲ ブンカイ
20 LET[0],2,2025
30 P=1
40 FOR I=1 TO P
50 IF I>1 PRINT "*";
60 PRINT [I];
70 NEXT
80 PRINT ""
90 I=[P-1]:GOTO 150
100 IF [P]%I<>0 GOTO 140
110 [P+1]=[P]/I:[P]=I:P=P+1
120 GOSUB 40
130 P=P-1:I=[P]:[P]=[P]*[P+1]
140 I=I+1
150 IF I*I<=[P] GOTO 100
160 IF P>1 RETURN
1画面に収まるプログラム

これを実行してみると……
なんと、結果が画面からはみ出してしまった。

3*3*5*45
3*3*5*5*9
3*3*9*25
3*3*15*15
3*5*135
3*5*5*27
3*5*9*15
3*9*75
3*15*45
3*25*27
5*405
5*5*81
5*5*9*9
5*9*45
5*15*27
9*225
9*9*25
9*15*15
15*135
25*81
27*75
45*45
OK
画面からはみ出す実行結果

改良

最後の分解結果の出力の後ではなく、かつカーソルが画面の左半分にある場合は、改行ではなくスペースを出力してカーソルを同じ行の右側に動かすようにした。
これにより、空いていた画面の右半分を有効活用して分解結果を出力できるようになる。

10 ' 2025 ヲ ブンカイ 2
20 LET[0],2,2025:P=1
30 IF P>1 GOSUB 160
40 FOR I=1 TO P
50 IF I>1 PRINT "*";
60 PRINT [I];:NEXT
70 I=[P-1]:GOTO 130
80 IF [P]%I<>0 GOTO 120
90 [P+1]=[P]/I:[P]=I:P=P+1
100 GOSUB 30
110 P=P-1:I=[P]:[P]=[P]*[P+1]
120 I=I+1
130 IF I*I<=[P] GOTO 80
140 IF P>1 RETURN
150 P=0:GOTO 210
160 IF VER()<13208 GOTO 210
170 H=POS(3)/2
180 IF POS(1)>=H GOTO 210
190 IF POS(1)>=H GOTO 220
200 PRINT " ";:GOTO 190
210 PRINT CHR$(10);
220 IF P>0 RETURN

このプログラムは、CC0 1.0 でライセンスする。

1行に2個の分解結果を配置する処理を追加しても、1画面に収まった。

OK
10 ' 2025 ヲ ブンカイ 2
20 LET[0],2,2025:P=1
30 IF P>1 GOSUB 160
40 FOR I=1 TO P
50 IF I>1 PRINT "*";
60 PRINT [I];:NEXT
70 I=[P-1]:GOTO 130
80 IF [P]%I<>0 GOTO 120
90 [P+1]=[P]/I:[P]=I:P=P+1
100 GOSUB 30
110 P=P-1:I=[P]:[P]=[P]*[P+1]
120 I=I+1
130 IF I*I<=[P] GOTO 80
140 IF P>1 RETURN
150 P=0:GOTO 210
160 IF VER()<13208 GOTO 210
170 H=POS(3)/2
180 IF POS(1)>=H GOTO 210
190 IF POS(1)>=H GOTO 220
200 PRINT " ";:GOTO 190
210 PRINT CHR$(10);
220 IF P>0 RETURN
改良しても1画面に収まるプログラム

実行結果も、無事1画面に収まった。

170 H=POS(3)/2
180 IF POS(1)>=H GOTO 210
190 IF POS(1)>=H GOTO 220
200 PRINT " ";:GOTO 190
210 PRINT CHR$(10);
220 IF P>0 RETURN
RUN
2025            3*675
3*3*225         3*3*3*75
3*3*3*3*25      3*3*3*3*5*5
3*3*3*5*15      3*3*5*45
3*3*5*5*9       3*3*9*25
3*3*15*15       3*5*135
3*5*5*27        3*5*9*15
3*9*75          3*15*45
3*25*27         5*405
5*5*81          5*5*9*9
5*9*45          5*15*27
9*225           9*9*25
9*15*15         15*135
25*81           27*75
45*45
OK
1画面に収まった実行結果

まとめ

2025年なので、IchigoJam で「2025」を分解し、分解した結果を一覧で出力してみた。

1記事につき1,000文字以上書く目標でやっているところ、プログラムを貼ると楽に文字数が稼げてよい。


いいなと思ったら応援しよう!

コメント

ログイン または 会員登録 するとコメントできます。
お年玉ポイントキャンペーン noteで記事を買うと 抽選で最大全額戻ってくる 1/9(木)まで 条件・上限あり
【IchigoJam】年が明けたんだ……2025年か……|みけCAT
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1