コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
こういち ◆ou0jbJnEJ0Kb
2019/7/21 17:49
質問
究極の二択(ってほどでもない)
実行速度とファイルサイズ、どちらかを犠牲にしなければならない場合、あなたならどちらを優先しますか?

コメント

アバター
ツララ 2019/7/22 5:08 ◆ArUdBYOYME1V
処理速度はそういうの突き詰めるマニアの人がいるのであんまり考えない。
読みやすさ重視で注釈も入れると、どうしてもサイズが大きくなるから
犠牲にするなら速度派。
処理の待ち時間が気になるなら、気を紛らわせる工夫を考える方が楽しいですし。

そういえばコードゴルフの処理速度版(コードレース?)っていうのあるんですかね。
実測は企画者の環境で計測コードも公開してもらって
お題の仕様実装の平均MILLISEC数で競うとか。

あと、はるさんのコードを短縮したい理由がゲスいですね。
汚いって規則性が読めないとか、何か記述ルールを取り入れたりした方がより良くなる場合とかですよね。
汚いと思っても忖度して綺麗って言われるより、率直に〇〇だから汚いって言ってくれる方がありがたいと思っちゃうんですけど。
指摘が明後日の方向でも、それはそれで話が膨らみますし。
アバター
はる 2019/7/22 7:59 ◆75Vh4SY8TdKS
>汚いって規則性が読めないとか、何か記述ルールを取り入れたりした方がより良くなる場合とかですよね。

はい。
アバター
ugly777 2019/7/22 8:00 ◆B7lOIJDWuOqi
速度優先
アバター
こういち 2019/7/22 8:15 ◆ou0jbJnEJ0Kb
Naさん
動作に支障するかどうかは確かに大事。
mkUでは確かに意味がありますね。QRコードを何枚も読み込むなんて想像したら…
あと4でも容量制限が厳しいので多少は意味があるかと。
3号でもしんいちさんの言う通りサーバーにアップできるバイト数が決まってるので…(きりがないパターン)

GRPやMMLは俺の場合はせいぜい1kB程度なのでそこまで気にはならないです。というかGRPに関しては仕方ない感がある。
SatoshiMcCloudさん

確かに現代だとソースコードが長くても困ることってそんなにないですね。むしろ開発効率が下がって短くしすぎると困る。趣味の領域というか…俺は黒魔術と呼んでいます。(既に滅びかけた古代の技術であり、精神を生贄に捧げなければいけないため。)

高原のなさん
結局どっちも犠牲になるタイプ!まぁなんだかんだプチコンは速いですし、間に合うならそれでいいと思います。

しんいちさん
ループ展開で遅くなることってあるんですね。読み込み時間は盲点でした。
ツララさん
速度が気になるなら気を紛らわせる工夫をするのも確かにありですね。
コードレースは面白そうですが、いざやろうとなると、簡単な問題だと速度に差が出づらくなって、どうしても循環セールスマン問題とか、最短経路問題とか3D関連の問題とか難しめの問題になりがちで参加しづらくなりそう。
アバター
うょリウム(元 SPDX) 2019/7/22 9:23 ◆UTOEg1c1vr.B
GRPファイルを使わずに済めば
(プログラム内でGRP4を描画する)
ファイルサイズ大幅縮小ができます。
※起動が遅くなる場合があります。

いずれにしてもGRPファイルは非常に重いです。
ファイルサイズを考えると、
´(コメント)
を入れずに作ってこんがらがって詰むかもしれませんね。
※今思いついたけどコメントを入れながら作って、あとでコメントを全て消す(全行の´と´以降の文を削除するプログラムを作って使う)という手もアリかもしれませんね。
アバター
はる 2019/7/22 11:01 ◆75Vh4SY8TdKS
そもそもグラフィックとかを、
使うことを考えてなかった。
あまり使うことがないので。
アバター
こういち 2019/7/22 14:57 ◆ou0jbJnEJ0Kb
うょリウムさん
プログラム内でGRP4に描画すると言う手法は一時期多用していました。(ブロック崩しとかがそれ)GRPファイルに比べるととんでもなくサイズを削減できたりしますが、複雑な図形には向かないという欠点。
俺の場合複雑な図形を使う場合はmk_pic(公開キー:S27EE83E)を使ってGRPのサイズを減らしています。

あとからコメントを消すのは普通にありだと思います。(読む側は混乱するけど)
俺はコメントを書かずにコード書いて、後からコメントを付け足すことがよくあります。

はるさん
プチコンだとグラフィック使わなくても出来ることは多いですからね。俺も昔はあまり使っていませんでした。
アバター
はる 2019/7/22 14:58 ◆75Vh4SY8TdKS
プチコン以外でも、
あまりグラフィック使いません。
アバター
ugly777 2019/7/22 17:18 ◆B7lOIJDWuOqi
>プチコン以外でも、
>あまりグラフィック使いません。
例:CSS
アバター
うょリウム(元 SPDX) 2019/7/23 1:28 ◆UTOEg1c1vr.B
グラフィックの利点は
FOR-NEXT命令からの変数とかで
グラデーションが簡単に作れることです!(話がそれすぎている)
アバター
こういち 2019/7/23 8:30 ◆ou0jbJnEJ0Kb
はるさん
>プチコン以外でも、
>あまりグラフィック使いません。
意外。

うょリウムさん
グラフィックは使いこなせれば複雑な図形も描けますからね。
アバター
Na 2019/7/23 14:52 ◆QoELVrBXBQCI
GRP圧縮ソフトとか作ってみようかなー?
アバター
takumi 2019/7/23 15:46 ◆Ce3Q40uXWJjn
GRPを文字列化するので、
SPMのストアでGRPを必死に文字列に変えたのを覚えてる。
アバター
はる 2019/7/23 15:54 ◆75Vh4SY8TdKS
ugly777さん

そうですね。


takumiさん

大豆男さんのツールには、
お世話になりましたね。
アバター
ツララ 2019/7/23 20:17 ◆ArUdBYOYME1V
予めシステムで読み込まれてるテキストやスプライトやBGのグラフィックを
見えないページにGCOPYで切り貼りして再構築して差し替えってやってる人
結構いるんじゃないんです?
単色の矩形の組み合わせ画像ならスプライトのサイズ変更したものの組み合わせで表現できそうですし
SPANIMの線形補間で中間画像作ればサイズも節約できそう。

mk_picのセーブ関係のフォーマットがそんなに優れてるなら
解析して他のお絵かきツールに転用とかはしないんです?
あと、紹介するならちゃんと作者さんの名前も書いて。

コードレースですけど、むしろ僅差のせめぎ合いになるから面白いんじゃないんです?
大差がつかないと面白くないって俺TUEEEEしたい人ですか?だとしたらちと幻滅かも。
単純に計算量が多い問題なら
例としてソートのプログラムとかあるんじゃないんです?(ソート関係だとやり尽くされてる感ありますけど)
そんなに難しく考えなくてもいいと思いますけどネ。
ネタなんて身近な思いつきとかで、これ計算の力で何とかできないかナーっていうのでいいと思いますよ。
やってみたら簡単だったとか意外と難しかったっていう発見あると面白いじゃないですか。
最近のだと、キルル2さんの『シンプルなループ』トピックで
「DATA文で終わりの要素が分かってるけど要素数が不明なデータを配列に読み込む処理」
を処理速度に着眼した流れが面白かったですね。
アバター
おちゃめ 2019/7/28 22:21 ◆jH1opV6FnGyx
実行速度とファイルサイズはケースバイケースなので一概にどちらを取るとは言えないですね。
実行速度においてはすでに60fps出ているゲームであればそれを200fpsに高速化しても無意味です。
したがって、動作速度が30fpsとか15fps(もしくはそれ以下)というのであれば高速化を行う意味があるため高速化を重視するかもしれません。

また、ファイルサイズがプログラムの大きさという意味であるならば1画面プログラムやQSPといった制限付きプログラムを除けばそこまで重視する必要性を私は感じません。
私の経験上普通に記述したら1MBになるけど短縮したら1KBになるなんてことはなくてコメントがやたら多いプログラムなどを除けばせいぜい半分になればいい方だからです。
それならばプチコン3号であればGRPをプチコンBIGで保存しなおす方が遥かにファイルサイズの削減に繋がります。(圧縮済みのGRPファイルは数分の1〜数10分の1にサイズが小さくなり、プチコン標準命令で読み出しができる)

QSPとかならば可読性は度外視してもQSPに収まるということが何より優先されるためサイズを小さくするということが求められます。
しかし、ソースコードをそこまで短縮化するのはサイズ制限付きプログラム以外ではあまり大きな意味を持たないと思います。(mkIIのQRコードも圧縮されているため無理に短縮したプログラムと普通に記述したプログラムではQRコードの枚数にそれほどの差は出ない)
私自身、こういった制限付きプログラムを作るに慣れているため別にサイズを優先しなくても普通に作った時点である程度は短縮されているためサイズ優先をしても制限付きプログラム以外では大きなメリットはありません。

とはいえ、プチコン4もセーブ容量に最大512MBの制限があるため少しでもサイズを小さくするという行為は無意味な行為とは言えないですね。
短縮するのが楽しいという人ならばいいですが、そうでない人は労力の割に合わない気がします。
アバター
おちゃめ 2019/7/28 22:24 ◆jH1opV6FnGyx
ちなみに80年代の携帯型コンピュータであるポケコンではハードウェアのスペックの問題でメモリと速度の両方の制限がありました。そのため高速化とプログラム短縮の両面を同時に行うということは日常茶飯事でした。(80年代初頭のポケコンはメモリが数100バイト〜1KB程度しかなかった)
その際は、メインルーチンは限界まで速度重視のプログラムにしてメインルーチン以外は少しでもサイズを小さくするため限界まで短縮を行うことが多かったですね。
この限界までの高速化によってプチコン3号と比べて1万倍くらい遅いポケコンBASICで疑似3Dゲームを作ったりしていました。
高速化をしなければ0.5fpsも出ないくらい遅い速度になるため私が知る限りはポケコンのBASICでまともな疑似3Dゲームを作った人は私が作ったゲーム以外では存在しませんが、速度が遅いポケコンだからこそ高速化の恩恵は非常に大きかったです。

ポケコンとは異なり、プチコン4ならば速度もメモリも余裕があるためプログラムを作る人がやりやすいやり方で問題はないというのが私の考えです。
アバター
おちゃめ 2019/7/28 22:39 ◆jH1opV6FnGyx
ツララさんへ
限界までの速度を競うのであればあらかじめ必要な条件をすべて提示しておかなくてはなりません。(ソートの問題ならばデータの要素数だけではなく何番目がどんな値をすべて最初に決めておく)
そうでないと条件が変わるだけで処理時間が変化するため条件後出しだと「限界までの速度」は競うことができません。
分かりやすく例えるならば、足の速さを競う場合に最初にゴールまでの距離や身体のどこがゴールラインを超えたらゴールとみなすかを決めずに競うようなものです。

あとタイム計測をする場合も公平に行う必要があるためどのような条件下で比較するのかというのがすごく重要になってきます。(計測する環境によって微妙に速度は変わってくる)
私が以前ナノ秒単位の計測プログラムを作った際には計測方法に異議を唱える人がいましたが、限界までの速度計測であればFOR〜NEXTのループ〇回分をMILLISECで計測というだけでは条件不足になるため私が作ったような環境による誤差が出にくいプログラムが必要になるのです。
http://ochameclub.web.fc2.com/petitcom3/lecture/speedup_nano.htm
このプログラムはMILLISECがまだ使えない頃のプチコン3号で作ったので今だったら自前で作ったミリ秒単位で計測ができるTIMER()関数の部分をMILLISECに置き換えた方がベターです。

私がポケコンで限界までの高速化を行った際には最も高速動作する場合の処理速度計測だけではなく実際のゲームの動作に即して何%の確率でキー入力判定が起こり、何%の確率でイベント発生が行われるかを把握した状態で行いました。
http://ochameclub.web.fc2.com/E500/TECH/if4.htm
高速化というのは机上での計算で終わる話ではなく実効速度こそが重要だと私は思っています。(max速度、min速度、avr速度のどれを重視するかで高速化のやり方は変わってくるしどれが最も高速なのかという判断も変わってくる)

速度比較はこんな感じで限界を競うというのは非常に困難なのですが、コードの短さ(文字数の少なさ)は客観的な比較が容易なのでコードの短さを競うコードゴルフはあるけど限界までの速度を競う速度ゴルフみたいなものは無いのです。
アバター
Soybeanman 2019/7/29 18:09 ◆SDLkyXUP6WqK
>>はるさん
http://wiki.hosiken.jp/petc3gou/?Toukou%2FGRP%A2%CEDATA%CA%D1%B4%B9%BC%AB%BA%EE%CC%BF%CE%E1%BD%B8
これですね。
使って頂けてすごい嬉しいです!

変換ロジックは割と単純で、ドットの長さ(0bit目は0)と色(0bit目は1)(一つ前に長さが指定されていなければ長さ1に戻る)を0〜63555から10,13,34[1]を除いた文字コードで表しているだけになります。
[1] 代わりに0,2,4、つまり長さ0,1,2(2ならば色を2回書けばいいだけなので使わなくても文字数は変わらない)を使う

是非使ってみてね(露骨な宣伝)

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -