だから、Kが毎回変化しないようにしろよw
1 K=-(K=0)*INT(RND(1)*11):INPUT"アテナサイ";N:?MID$("オオキスギチイサスギアタリデス",1+(1+(N>K))+(1+(N<K))*5+(1+(N=K))*10),5):IF N<>K THEN 1 ELSE K=0:IF N THEN 1
あれ?真偽値って幾つだったっけ?
0 か -1
0か0でないか
true ⇔ false
うるせーなー。そんなに1行で書きたきゃ、ほれ。
1 DIM A$(2):FOR I=0 TO 2:READ A$(I):NEXT:K=INT(RND(1)*11):N=99:WHILE K<>N:INPUT"アテナサイ";N:PRINT A$( SGN(N-K) +1):WEND:DATA チイサスギ,アタリデス,オオキスギ
・わかりずらい条件式は使わない
・それなので、あたりハズレのメッセージの長さによって条件式を書き換える必要はない
・Kは当たるまで変化しない
・配列はきっちりDIM宣言をする
条件式を使うと、なんとなくリストがわかりづらくなる
「こんなにわかりづらいけどオレにはわかる。これ書いたオレ、カコイー!!」
くだらん。やめろ。
わかりづらい条件式がカコイイように感違いする輩が増えたのはベーマガとDr.Dのせいだ
ベーマガは大抵ゲームだから難読化上等でしょう。
見ただけで攻略法が分かっちゃうと興醒めの場合もある。
K=K-(0=K)*INT(RND(1)*11)
>>609 数当てゲームだから難読化OKってことかw
内容が分かってたら絶対買わないが、使ってみると意外と重宝する福袋の中身みたいな。
MID$の最後の引数の1+(N=K)ってとこ
多分、NとKが等しければ2、そうでないなら1を期待してるんだろうけど、
こういう式でN=Kは代入文じゃなくて、比較文として処理されるん?
あまり気が進まないんだけど、1行君のやっていたMID$を使う方法で書いてみた。
確かに短くはなるな。
メッセージの長さが3通りとも全部同じ長さって前提なら、結構いい方法かな。
1 K=INT(RND(1)*11):N=99:WHILE K<>N:INPUT"アテナサイ";N:PRINT MID$("チイサスギアタリデスオオキスギ",1+(SGN(N-K)+1)*6,6):WEND
これが短くする限界かね。
こんな事に挑戦するよりもわかりやすく書く事を心がけようぜ、1行君。
>>こういう式でN=Kは代入文じゃなくて、比較文として処理されるん?
そそ。0か-1になるんだよ。
こんなの使うとわかりづらくなるだけなんだけど、
当時のベーマガではDr.Dがプログラムを短くするテクニックだとほめていたんだよ。
1行で書くとか短く書くってのは今の時代では完全に趣味の領域だね。
昔は記憶領域が小さくて短くせざるをえない時代もあったから、その時代ではアリだったのだろう。
今の時代は小さくすることよりもメンテナンス性やモジュールの再利用性が重視されるようになった。
まぁ、昔と今じゃ価値観が変わったってことだな。
当時は、著しく処理速度が遅かった。
4MHzのZ80でBASICインタプリタだから。
メモリも少なかったし
だから、色々なテクニックがあった。
でも、今の時代は、 ドキュメントになるコードが良いコードだよ。
そりゃ打ち込む時代とコピペの時代じゃ違うけど、
そっちはこの板でやる意味ないのよね。
>>614 > 比較文として処理されるん?
そう、比較文と言うか比較演算子として扱われる
ちなみに C/C++ の = は、代入文じゃなくて演算子
>>こういう式でN=Kは代入文じゃなくて、比較文として処理されるん?
PRINT 1=1 とか
PRINT 1=0 とかやってみれば、テストできるよ
N88BASICが、常に行番号を使い、それに加えてラベルを使う事もできる。
行番号無しで行いたければ、N88の次世代である QBASICを使いなさい。
QuickBASIC や FreeBASIC では、行番号が無くなりラベルを使う。
>>621 定数同士の比較なら=は比較として容易に判別できるけど、
変数同士だと代入と比較をどうやって判別したらいいのかがよくわからない。
これがちゃんと正しく判別できないと、インタプリタ作れないよね?
>>623 よく理解しました。ありがとうございます。
>>624 関係演算子と代入は、構文の中の位置が異なり、
インタプリタは構文解析を行うから混同される事は無い。
BASIC言語において、関係演算子が使われる場所が限定される。
ちなみに、マイクロソフト系は、関係演算の結果を整数の数値として処理している。
>>616 うん。末期のトラ技コンピュータで1行プログラム特集やってた。酔狂だわw
くだらない(←ほめ言葉)プログラムばかりで案外楽しかったな。
>>624 比較を括弧でくくればおk
今思うとBasicでこんなのやるなよと思う。
なぜか当時流行ってて月刊誌やアスキーの薄い本で使われてた記憶がある。
一行でリアルタイムなシューティングゲームは無理?
一行はキツイな
下スクロールで一画面(80×25文字)プログラムなら作れたが……
若いころだったらなw
今のトレンドだとTwitterに1回で投稿できる140文字かな
昔、アスキーで1行コンテストあったな
635 :
ナイコンさん:2014/12/21(日) 12:31:40.55
>>624 本来命令文があるところに変数名に続き=が出てきたら代入文になる、
それだけだよ。
N88-BASIC文法のBNFとかないのかな?
FreeBASICが、ソースコードで公開しているから、調べてみるのも良い
MBASIC86がVectorにある。 N88互換のソースコードつきだから、調べるとよろしい。
動くのであれば
そのマシンでできる事なら何やってもOK、なコンテストだったんでしょう
より多くのマシンに対応できるようにすればするほど
地味な事しかできなくなってくるしね
peekやpokeあるやは
>460で試せないやなあ残念ながら
エントリマップどこかにない?
エントリマップ ← 何それ???
ROM内ルーチンのエントリポイントのアドレスリスト
N88(86)
……(´・ω・`) ショボーン
N-BASICならあるけど、
8086なのかな?
何に使うの?
本体(動作品)が98しかない
PC9801のROM呼び出しを使って、何をしたいの?
ROM-BASICの解析をしたいのかな?
98なら88のエミュレータ動くな
まあ86→z80の変換してROMを移植するのは容易じゃないだろうが。
>>648 本体しかないとはモニターがなくて表示できないってこと?
それともシステムディスクとかソフトがないから何もできないってこと?
センター試験旧数学U・旧数学Bで、まだ行番号付きのBASICがぎりぎり現役だなw
新課程では削除されてるみたいだし、今年で終わりかな?