Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
1110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130154
次のページ(過去)
投稿
おちゃめ ochame_nako
第2回プチコンコードゴルフを開催します。 今回のお題は「桁数を求めるプログラム」です。 数値変数Aに入っている値の整数部分が何桁かを表示してください。 例えばAの値が1の時は1桁なので「1」と表示、Aの値が10の時は2桁なので「2」と表示、Aの値が100の時は3桁なので「3」と表示します。 Aの値が9.9のように小数である場合は整数部分が9(1桁)であるため「1」と表示、-99のように負数である場合には符号を除いた99(2桁)を元に「2」となるように表示してください。 詳細ルールはコメントにて
7そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
ゲージ関数のスプライト版を作ってみました
1そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
昔の8bitパソコンでコンソールオンリーのゲームが多かったのはハードウェアのスペック面でグラフィックが使用できなかったりメモリが少ないという問題があったりBASICでは速度面で難しいといった問題がありましたが、プチコン3号ではその問題はない(むしろ速度面ではコンソールの方がスプライトよりも遅い)ので「コンソールキャラオンリー」は趣味の世界となっていますね。 私も制限を使ったプログラミングは好きなので応援しています。
3そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
プログラムとは関係ない話ですが、まげさんの世代で生ホタルを見たことがないというと都会生まれの都会育ちですか?
0そうだね
プレイ済み
返信[13]
親投稿
おちゃめ ochame_nako
私もプレイしてみましたが初プレイでパーフェクトでした。 易しめのバランス調整をしているならばこれで問題ないと思いますが、よほどの熟練者でないとパーフェクトは取れないようにするならば調整の必要があります。 的を小さくするというのもバランス調整の1つの方法ですが他にもいくつかの方法があります。 まず、じっくり狙えば比較的簡単にパーフェクトが狙えるため時間制限を設けるという方法、的の中心に行くこと自体を難しくするならばカーソルを非表示にして感覚でプレイさせる方法、カーソルの位置に確実に当たるのが難易度を下げている要因の1つになっているため似非物理演算を行う(吹く強さを適当な速度に変換して重力の影響を適当に加える)方法などです。 ルールについては自分で良いと思ったものに変更して問題ないと思います。 ちなみに前回の縄跳びゲームは個人的にはちょうど良いくらいの難易度に感じました。
0そうだね
プレイ済み
返信[30]
親投稿
おちゃめ ochame_nako
第1回となる今回は超有名なFizzBuzzで行いました。 第2回のネタは見つかったので今週末には開催しようと思います。 第3回以降は未定になっています。 ネタはこのトピで随時募集を行っているので気軽にご提案ください。 リスト短縮を意識せず、マルチステートメントで記述しなくても1画面に収まるくらいのシンプルな内容のものが望ましいです。 第2回は金曜の晩~日曜の晩に掛けての48時間程度(丸2日程度)にしようと思うのですが、開催期間などでも「第1回と同じく1日(24時間程度)の方が良い」「3日(4日)くらいは欲しい」などのご意見があれば気軽に言ってください。 もちろん私の代わりにプチコン3号コードゴルフを開催してくれる人がいれば私に遠慮せずどんどん行ってください。
2そうだね
プレイ済み
返信[29]
親投稿
おちゃめ ochame_nako
というわけで、今回のコードゴルフのトップはVSYNCさんの66文字でした。 一旦数字を表示しておいてLOCATE 0,によってY座標を保持してX座標のみ0にすることで数字の上にFizzやBuzzという文字を上書きするという考えは思いつきませんでした。 mkIIのリスト短縮法は開拓しつくした感じがあったのですが、プチコン3号では私もまだまだみたいですね。
0そうだね
プレイ済み
返信[28]
親投稿
おちゃめ ochame_nako
KUさんへ 確かにHQ9F+ならばFizzBuzzは1文字で作れるけどHQ9F+のインタープリタのサイズを考えると・・・(笑) でも、HQ9F+を書く人がいるとは思いませんでしたのでネタとしては十分OKです。 あんぱん うまたろうさんへ その無駄を省くことからすべてが始まります。 そこで限界まで達したら別の表記方法(別のアルゴリズム)がないかを検討していけば良いです。
0そうだね
プレイ済み
返信[27]
親投稿
おちゃめ ochame_nako
pinfuさんへ 分かりやすいコード、きちんと整形して表示というのはコードゴルフとは全く異なるものですが、普通に作るならばこれはベターな選択肢だと思いますよ。 コア/co.aさんへ 3DSでMiiverseを見ると3D文字が邪魔になってしまいますからね。 (余分な改行を除いて)77文字というのは結構短いと思います。 あと画面内に結果が収まるというのも良いですね。
0そうだね
プレイ済み
返信[26]
親投稿
おちゃめ ochame_nako
VSYNCさんへ 66文字(スペース込み)で今回最も短かったです。 おめでとうございます。 今回はLOCATE 0,を使うことが最短への要でしたね。 もちろん、その他の部分も無駄な部分は一切ありません。すばらしい! ツララさんへ 3の倍数だけではなく3が付く数字も○○するというのはFizzBuzzとは少し異なるためプログラムを作ってみるのもいいかもしれませんね。 各桁の数字をどうやって取得するのかも様々な方法があるため楽しめそうです。
1そうだね
プレイ済み
返信[25]
親投稿
おちゃめ ochame_nako
うえこうさんへ 1から100までの結果をそのままリスト上で記述して表示するというのは本来は無駄な作業ですが、今回のように結果が正しければ問題ないという場合にはこれでも正解です。 2行で作っている方は3つのIF文の判定の関係で改行しないと正常に動作しませんが、3の倍数や5の倍数をフラグを用いて判断しているのは良いと思います。 ナツキさんへ 指摘ありがとうございます。 まともに校正してない書き込みというのが丸わかりなミスですね(笑)
1そうだね
プレイ済み
返信[24]
親投稿
おちゃめ ochame_nako
みき★さんへ 3と5の最小公倍数である15単位で表示を行うというのは今回の場合だと最短には繋がりませんでしたが、良いアイデアですね。 パターン化できるものを見つけ出すということが短縮への一歩になりますので。 けいさんへ (WAIT 10削除で)81文字(スペース、改行込み)なので普通に考えれば短い部類です。 今回の最短のための重要ポイントであるLOCATE 0,は含まれていたもののIF~THENを使ったのが最短を逃した原因ですね。 36文字のやつはネタとしてはありだと思いますよ(笑)
1そうだね
プレイ済み
返信[23]
親投稿
おちゃめ ochame_nako
ここからすぐに短縮可能と気づくのはコロンが省略できるということです。 ただし、PRINT(?)とNEXTの間のコロンは省略できません。 これは!!A*!!Bを!!(A*B)とすることで解決できます。(カッコの後のコロンは省略できる) 今回は結果がスクロールされてもOKだったのですが、もしも、画面内に1~100までの結果をすべて表示するという場合にはPRINTの最後の部分に”,:”を付ければOKです。 PRINTの最後が「,」になるため今度はコロンが省略できないということです。 過去にmkIIで作ったプログラムをプチコン3号にベタ移植しただけなので私のプログラムは最短では無いですが、リスト短縮の仕組みが大体でも分かれば良いかなと思います。
0そうだね
プレイ済み
返信[22]
親投稿
おちゃめ ochame_nako
以上を組み合わせるとSTR$(I)*!!(I MOD 3)*!!(I MOD 5))+"Fizz"*!(I MOD 3)+"Buzz"*!(I MOD 5)を表示すれば良いことが分かります。 アルゴリズムを変えない限りはここから根本的に短くするのは無理なのでここから無駄な部分を省いて1文字ずつ短くしていきます。 まず、気付くのはI MOD 3とI MOD 5が2カ所使われているという点です。 これはそれぞれ別の変数に入れることで短縮が可能です。 それによって演算優先順位の関係で必要不可欠だったカッコも省略でき!A、!Bで済むようになります。 FOR I=1TO 100:A=I MOD 3:B=I MOD 5:?STR$(I)*!!A*!!B+"Fizz"*!A+"Buzz"*!B:NEXT
0そうだね
プレイ済み
返信[21]
親投稿
おちゃめ ochame_nako
表示する場合に"Fizz"*!(I MOD 3)とすると!(I MOD 3)の値はIが3で割り切れる場合には1になるため"Fizz"を1個表示し、3で割り切れない場合には値は0になるため"Fizz"を0個表示(=表示しない)となります。 Buzzも同様に"Buzz"*!(I MOD 5)とするとIが5の倍数の時のみBuzzと表示可能です。 FizzやBuzzを表示する場合は数字の表示は行わないようにしなくてはなりません。 これはFizzやBuzzを表示する場合は0個数字を表示すれば解決です。これはさらに論理反転を追加して!!という形にすることで「0を0」に「0以外の値を1」にできます。 STR$(I)*!!(I MOD 3)*!!(I MOD 5)
0そうだね
プレイ済み
返信[20]
親投稿
おちゃめ ochame_nako
これで基本的な考え方が分かったと思うので私が作ったプログラムの解説をします。 3の倍数というのは3で割った余りが0なので上記のようにI MOD 3==0という条件式になりますが、論理反転(!)を使うことで!(I MOD 3)とすることができます。 論理反転はfalseとtrueを反転する演算子です。 プチコン3号ではfalseは0ですが、0以外の数字はtrueとして扱われるためI MOD 3は3で割り切れない時はtrueとして扱われるのでそれを反転した!(I MOD 3)は3で割り切れる場合になるためです。
0そうだね
プレイ済み
返信[19]
親投稿
おちゃめ ochame_nako
まとめが遅れてすみません。 とりあえず、考え方と私が作ったプログラムの簡単な解説をしておきます。 FizzBuzzのプログラムを作るポイントは「3の倍数」と「5の倍数」をどのように判断するかということになります。 「3の倍数」というのは「3で割ったら割り切れる数」であるため「3で割ったら余りがゼロになる数」かどうかで判断すれば良いです。 プチコン3号には剰余を求める(割り算の余りを求める)演算子であるMODが用意されています。 これを使えば「Aが3で割り切れる場合」というのは IF A MOD 3==0 THEN ~ と表記できます。 あと「5で割り切れる場合」と「3で割り切れる、かつ、5で割り切れる場合」を判定してやれば完成です。
0そうだね
プレイ済み
返信[49]
親投稿
おちゃめ ochame_nako
3DSのSELECTボタンは基本的にDS用ソフトやバーチャルコンソールでの互換性のために用意されているもので3DS用ソフトではSELECTボタンはSTARTボタンと同じ働きをするようになっているみたいです。 そのため今後のバージョンアップでSELECTボタンにmkIIまでのような停止を割り当てたり他の機能を割り当てたりするのは無理でしょうね。
0そうだね
プレイ済み
返信[15]
親投稿
おちゃめ ochame_nako
私もサンプルを作ったり、自作関数を作ったり、初心者向け講座を書いたりしているため「それが役だった」と言ってくれる人がいればうれしいのも事実ですが、「役立てて欲しい」と思いつつもすべて自己満足でやっているんですよね。 自分が楽しんでいるんだから対価(→この場合は利用者の喜びの反応)は無くても問題はありません。 それに自分が楽しめてないのに他人を楽しめるようにするなんて難しいと私は思います。 これはオリジナルのゲームであろうとサンプルプログラムであろうと変わらないと思います。
5そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
私もイカさんと同じく自分が作ってみたいゲームを作るべきだと思います。 それは自分が楽しいと思わないことは長続きしないからです。 ただし、作りたいゲームが複雑で難しいゲームの場合は自分が作れそうなレベルに単純化しなければならないこともあるかもしれません。 どうしても、初心者でも作れるオススメゲームを聞きたいというのであれば私は100m走ゲームを推します。 これは表示キャラが1つ、移動方向が一方であってもゲームとして成立する上に判定がすごく単純だからです。 100m走ではなくただの連打ゲームでもいいです。 あとは、避けゲーですね。 これは画面固定のタイプ、スクロールするタイプなど様々なものがありますが敵キャラを出さなければ当たり判定も単純化できるため初心者にもオススメです。 ヘビゲームはゲームとして成立させるための必要最小限の要素が多いため初心者向けの中では難易度が高めですね。
2そうだね
プレイ済み