忍者ブログ

備忘録

CSCのブログのバックアップだったけど、こっちがほんちゃんに。

にき

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

にき

ここ数日。123456789を分けるプログラムを組んでいた。
頭の体操で
abcde-fghi=33333
となる数字は?という問題があり、紙とペンを使えば1分もかからず解けはするのだが、これをコンピュータに計算させるならどう組むのがいいのか。ということばかり考えていた。


よくわからなかったので、9桁の数字をばらして入れて、それを各々判定するという方法。
最初は30分くらいかかっていたが、判定方法や数字を9の倍数にするといった工夫で最終的に6分半を切るまで早くなった。
が、他の方法もありそうな感じがしたので、別アプローチを何とか組み上げてみたら3秒で終わった。ビビった。
計算式量自体そう変わらんのではと思っていただけに、予想外の早さに驚く。
数字をばらして入れる部分が結構な負荷だったのだろうか。
判定式のループ部分自体の構造はむしろ前の方がシンプルだと思ったのだが。
中身的にはゼロ判定も普通に入れているし。

配列変数の無効やcntの位置などでかなり頭を使う。cntは使いやすいがrepeatを挟みにくいからな。1zだとだめでz1だと変数として大丈夫だったり、久々なのもあるが結構大変だった。
組み合わせ番号をそろえる工夫が上手くいったが、その分だけ式量は結構増えているはずなんだけどな。
3秒プログラムでも無駄な計算はしているはずで、前のは6分以上無駄な計算をしていたことになるのだが、なんかやっぱり腑に落ちないな。
でも8000万の数字を判定して362880の組み合わせを抽出するのが380秒くらいだったので、ピンポイントで判定できたとしても、0.45%だから2秒弱か。だとしたらアルゴリズムがよっぽど良かったのか。6分での数々の工夫は無駄もいいところだったわけだが、それなりに楽しめた。
結局は枝葉をどれだけ省略できるかなのか。そこが一番の工夫のしどころでもあるし。
6分はなんだかんだ言って総当たりだからな。そうかぁ。
でも本職の人が組むと数行、1秒で済んだりするんだろうか。
PR

コメント

カレンダー

03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

アーカイブ

ブログ内検索

アクセス解析

カウンター

忍者ポイント広告

アクセス解析