トピック

【上級者向け】

(文字数削減や高速化などのために)一見意味不明なプログラムを書くところ
7そうだね
プレイ済み
返信[1]
親投稿
もし LとXを両方とも押しているならば~ IF (B AND #L+#X)>♯L THEN~ なぜ==#L+#Xではなく>#Lなのか、それは文字数削減のためである。 では、正しく動く理由を説明する。 B AND #L+#Xが取り得る値は0,#X,#L,#L+#Xの4つしかない、 つまり、3番目に大きい#Lを超えるということは、#L+#X以外あり得ない。 故に、両方とも押さなければ反応しない。
5そうだね
プレイ済み
返信[2]
親投稿
げんや genya0519
ふむふむ。なるほど、オレにはさっぱりわからないゼ!!
5そうだね
プレイ済み
返信[3]
親投稿
reji Satoshi.1103
定数同士で計算できた事をすっかり忘れていた…!!
3そうだね
プレイ済み
返信[4]
親投稿
natto- natto-3030
どうしよう… 上級者じゃないのに来てしまった(笑)
2そうだね
プレイ済み
返信[5]
親投稿
********** itd12d
初心者なのに来てしまった。 メモリ削減大切ですよね!(全く理解してない
2そうだね
プレイ済み
返信[6]
親投稿
V.D. 5962-63214-97513
      「日本昔話」 そう言えば、とある昔の、ハードディスクとかの記録媒体の容量が少ない時代に、「プログラムに使う文字数をいかに少なくするか」というのがプログラマーの技能のひとつとして判断された時代があったそうですね。 今もそうなのかもしれないけど・・・
3そうだね
プレイ済み
返信[7]
親投稿
KU kerorinU
勝手に投稿 if a!=0 then print"hoge" の書き換え print"hoge"*!!a 論理判定を二回行うと、0か1のどちらかに変換できるのです。
2そうだね
プレイ済み
返信[8]
親投稿
otta777 otta777a
B=BUTTON() VX=SGN(B AND 8)-SGN(B AND 4) VY=SGN(B AND 2)-SGN(B AND 1) 対象のビットがONの場合正の数が返ってくるので SGN関数で符号を取得すると+1か0が返ってきます。 これを利用して十字ボタンを押したときの 移動量を求めます。
1そうだね
プレイ済み
返信[9]
親投稿
KU kerorinU
判定→反転
1そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
論理反転を使えば8方向移動は B=BUTTON()X=X-!(8AND B)+!(4AND B)Y=Y-!(2AND B)+!(1AND B) と記述することができますね。 ちなみにプチコンmkIIでは剰余の演算子が「%」だったので次のものが最短でした。 B=BUTTON()X=X-(B%16-B%4+1)%3+1Y=Y-(B%4+1)%3+1 昔のコンピュータならばメモリが数100バイト~数KBしかなく私が持っていたポケコンも約1KBしかメモリが無かったため可読性を無視していてもリスト短縮テクニックは非常に有用でしたが、メモリが潤沢なプチコン3号ではOSP(1画面プログラム)やQSP(WIDTH 16の1画面プログラム)といった文字数制限プログラムを作る場合のみ有用なテクニックですね。
1そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
X=X-!(8AND B)+!(4AND B)を簡単に説明すると十字ボタンの右を押した場合にはX=X-!8+!0となり、!8=0、!0=1であるためX=X+1という動作になります。 十字ボタン左を押した場合にはX=X-!0+!4となり、!4=0であるためX=X-1という動作になります。 左右両方押してない場合には、X=X-!0+!0となるためX=Xという動作になります。 ちなみにX=X+!!(8AND B)-!!(4AND B)のように!を2つ重ねてSGN的な動作(※負数の場合はSGNとは異なる)をさせることもできますが、それと比べると2文字分(Y方向合わせてトータル4文字分)短縮できています。 B AND 8ではなく8AND Bとすることでさらにトータル4文字分短縮しています。
3そうだね
プレイ済み
返信[12]
親投稿
なのはな485 h-morimori
こめのこ
0そうだね
プレイ済み
返信[13]
親投稿
マギー M191246
IF (B AND #X+#L)>#L THEN~ 条件式の部分 (B AND 320)>#L では、だめなんでしょうか? (320は、#L、#Xを足したもの) 何か見落としているのでしょうか? これが、大丈夫なら (B OR-321)>-2 とすると、さらに1文字だけ節約できそうな 気がします。 (-321は、320の補数)
1そうだね
プレイ済み
返信[14]
親投稿
数字はまとめても大丈夫です。(ちょっと可読性を重視) そして、1番下の式、試してみよう (B OR-321)<-2 不等号こっちっぽいな
0そうだね
プレイ済み
返信[15]
親投稿
不等号の向きよくわからないので試行錯誤してみる (ORも負数も思いつかなかったため混乱中)
0そうだね
プレイ済み
返信[16]
親投稿
あ、元の式でいいみたい。 (B OR-321)>-2 唯一気にするなら、式の変換がややこしい
0そうだね
プレイ済み
返信[17]
親投稿
マギー M191246
なんだか、横槍みたいになってすみません。 私もあまり自信はなかったのですけど その問題点を知りたくて コメントさせてもらいました。
1そうだね
プレイ済み