『プログラマ脳を鍛える数学パズル』キャンペーンクイズに挑戦したお

20個のカラーボックスで作る本棚は何通り?『プログラマ脳を鍛える数学パズル』キャンペーンクイズの解答 codezine
http://codezine.jp/article/detail/9005


問題の内容についてはリンク先を参照。


ここでは「俺なんでこんな糞コードになったの?」について考えます。愚痴と反省です



僕の結果は606通りで、正解は610通りでした。
点対称な1通りor線対称な2通りを見逃したのが原因かと思われます。先生怒らないから出てこなかった子は手を挙げなさい

何で見逃したの?

プログラムのオーダーがデカすぎて至る所に高速化の記述をしたから。
「こうやってこう進むと、こっちからこう進むのと重複するから、切り捨ててもいいよね!」

countPut.CountBox関数のwhileループとかまさにこれです。
元はforで辿っていたのですが、removeJointでぶった切ってます。この辺でしょう。


でも解答例のRubyには条件を付けて中断させたりするような記述は無いです。しかもめっっっっっちゃ早い。何で?
次の文を引用。

この配列に対して、「縦に置いた場合(2×3)、横に置いた場合(3×2)の位置に「1」をセットして、次の位置に置けるかを調べる」ということを繰り返します。
(ページ中央、ソースコード上)


一緒じゃん。

でも「次の位置」の定義が違いました。

解答例のRubyの「次の位置」とは、面積ブロックの「隣のセル」を指します。

自分が作成したプログラムの「次の位置」とは、既に置かれたブロックに隣接するセル(+ごみ)を指します。


つまり、解答例では右方向にしか再帰が伸びませんが、自分が作成したプログラムは右下へ再帰が伸びます。
やった!オーダー爆上がりだぜ!!解空間の重複もするぜ!!!

重複が絶対に起きないのでCountBoxのanswerリストのような解の重複調べも不要。



僕の脆くて硬い頭を何とかしたいものです。

で、見つからなかった4パターンって何ですか…

続きを読む

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : Java アルゴリズムとデータ構造

[WP]どうでもいい記事

懸賞用のプログラムを作成するのでお休み

[WP]no.020 数独を解く

個人的にはナンバープレース(ナンプレ)という名称の方が馴染んでますね。はい。


数独を解きます。WeeklyPrograming仕様なので超簡単な問題しか解けませんし、高速なアルゴリズムとは言い難い内容。

そもそも数独、とても簡単なルールと正解パターンの少なさにより、ペイントロジック以上に直感で埋めないと解けない問題が
多いです。ううむ。

ためしに雑誌の問題を入力して解いてみたのですが、2か所ほど、自分で適当に推測して入力する場面がありました。
間違っていたらエラー吐くので、その場合は元に戻ってやりなおし。
「使えねーなこれ」というのが第一印象。使えないツールで良い気がする。


VBAで作ろうとしたのですが所詮マクロ程度の内容しか扱えなかったので、html+javascriptで。
htmlだし、どこかのサーバにうpする予定。

続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : Javascript アルゴリズムとデータ構造

[WP]no.019 HTMLで3D描画@GLを使わずに

HTML/Javascriptでも、WebGLを用いるよう初期化すれば、とても美しいかつ高速な三次元描画が可能です。

そんな事知ったことか。


ここでは「getContext("2d")」で2Dキャンバスを取得し、行列演算によって透視変換を行い、描画します。ゴリ押し。

あんまり美しくない、簡素で、言うほど高速でない三次元描画が可能です。


透視変換について、こちらのサイトを参照。ほぼそのまま使ってます。

■3次元図形表示技術■2次元への投影方法
http://www.geocities.co.jp/SiliconValley-Bay/4543/Rubic/Mathematics/Mathematics-5.html


視点方向の回転ができないので、それをしたい場合は行列に手を必要があるなど。

続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : HTML5

[WP]no.018 HTML5でシューティングゲーム

本当は全く別で正規表現書いていたのですが、途中混乱したので。
触ろうと思って結局触っていなかったHTML5をやってみました。

htmlでjavascriptを書いてゲームを作る・弄るというのは「まさおコンストラクションFX」を思い出します。
現在Javaのセキュリティ対策によって潰されてしまいましたが。

福田直人のホームページ
http://www.t3.rim.or.jp/~naoto/naoto.html
(旧トップページ→まさおコンストラクション FX Update 16)


中学生ぐらいの時、ボスとか移動床の挙動作って遊んでいた記憶があります。

シューティングゲームはまさおとは殆ど関係ないのでお話はこれまで


ここで作成したシューティングゲームは、やっていることはPythonで作成したシューティングゲームと全く同じ。
具体的なパラメータは適当に決めたものなので挙動は異なりますが、Javascriptでも結構できるものですね…



続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : HTML5

プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++JavaRubyUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
1815位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
333位
アクセスランキングを見る>>