Anyable

ゲームを作るお兄さんのメモ帳

2016/01

Project Euler - Problem 11

Problem 8と似たような問題
変わったのは要素が2桁になったこと、上下左右斜めに調べなきゃいけないことの2点。

解答は最大でも99^4になることは明らかであり

99^4 < 128^4 = ( 2^7 )^4 = 2^28 < 2^32

であることから32bit整数にも収まってしまう。

「上下左右斜めに調べる」ってのはプログラム的な問題ではあるけど、数学的な問題では無いと思う。

多次元配列をサポートしている言語であれば上下左右斜めに走査するのは難しくないし、1次元のみの配列しかサポートしていない言語であっても、擬似的に2次元のようにアクセスしてしまえば同じ話。

問題文では8方向に走査して調べるかのように書いてあるけど、積なので右方向に調べれば左方向は調べる必要は無い。
ちなみに、自分は実装時に右・下・右下の3方向のみ走査して誤答してしまった。

Cocos2d-x開発環境構築

スマホアプリを作りたいな、ということでCocos2d-xに挑戦してみた。
ひとまず、サンプルアプリの実行までは行けたのでメモしておく。

詳細な手順はググればいっぱい出てくるんでリンクだけで勘弁して下さい。
このバージョンの組み合わせで動いたよ、っていう備忘録的な記事のつもりです。
なお、Mac未所持なのでiOSアプリは未考慮です。

ベースの開発環境

  • Windows 7 Home Premium Service Pack1 (64bit)
  • Microsoft Visual Studio Community 2013

Android開発環境の構築

参考サイト
Android開発環境の構築

インストールしたものとそのバージョン

  • JDK 8u72
  • Android SDK r24.4.1
  • Android NDK r10e

※参考サイトではeclipseを利用していたが、Visual Studioで行くつもりなので手順がちょっと違う。

Visual StudioでCocos2d-xの開発環境を作る

参考サイト
Cocos2d-x開発環境の構築

インストールしたものとそのバージョン

  • Cocos2d-x v3.9
  • Python 2.7.10
  • apache-ant 1.9.6

※apache-antのzip解凍時にLhaplusを使用したらエラーが出たが、7-Zipを使うとエラー無く解凍出来た。

メモ

UnityだとUnityからすぐにAPKを出力できるんだけど、Cocos2d-x + Visual Studioではそんな簡単にはいかないのかな?

\TestProject\proj.android\build_native.pyを実行することでAPKは作れた。
APIバージョンがどうなってるのか、debug版がビルドされたけどリリース版はどうやるのか?とかは知らん。

eclipseを使ってのAPK作成記事はたくさん引っかかる。
けど個人的にeclipseが好きになれないのでVSだけで完結したいなぁと思ってるだよね。(VSも好きにはなれないけどw)

一応Visual StudioからAPKを出力する記事(試してません)
Cocos2d-xの記事では無いのでビルド設定周りをちゃんとしないと動かないんじゃないかな?と予想。
VisualStudio上でAndroidNDKを使った開発を行う

Android Studioを使った記事も一応残しておく(こっちもまだ未確認)
[Cocos2d-x] Cocos2d-x 3.7 で Android Studio を使う

Project Euler - Problem 10

Problem 7に続き素数の問題

200万までの素数であっても、エラトステネスのふるいなら200万bitのメモリがあれば求められる。

2000000bit = 250000Byte = 約244KB

なので、大したメモリも食いはしない。

どちらかと言うと、この問題は総和を求める途中で2^32を超えてしまうことが問題だろうか?
とは言え2^64には収まるので、64bit整数使えば話は終わりなのだが・・・

Problem 7と大差の無い問題なので、あまりおもしろくないね。

Project Euler - Problem 9

愚直に求めても対して時間のかからない問題。

a + b + c = 1000なのでaとbを2重のfor文で回してピタゴラスの定理を満たすかをチェックしていく。

一組しか無いと問題文で明記されているので、見つかればそこでヤメればOKなので簡単かと。

愚直に求めない場合は、ちょっとややこしいことになるっぽい?(もっと良い解法あるんだろうけど、頭が足りない)

  1. ピタゴラス数には原始ピタゴラス数というものがある。
  2. 全てのピタゴラス数は原始ピタゴラス数の整数倍で表すことができる。
  3. よって原始ピタゴラス数を順番に処理していくと、目的の数字が算出できる。

「原始ピタゴラス数を順番に処理する」ってのが、実装がめんどくさいよね。

参考にしたサイト

Project Euler - Problem 8

初めて外部からデータをもらうタイプの問題。
(この程度のデータ、コード内に書いても良いとは思うけど)

単純そうに見えて、言語に寄ってはハマる可能性のある問題

13個の整数の積で、整数は1桁なので最大は9となる。
つまり解答の最大値は9 ^ 13であり

9 ^ 13 > ( 2 ^ 3 ) ^ 13 = 2 ^ 39

という条件式から、この問題の解凍は32bit整数に収まらない可能性があることがわかる。
64bit整数なら必ず収まるので、64bit整数使えるなら簡単だけどね。

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

  • ライブドアブログ