PamGau
Web周り、サッカーの話、ときどきヌコ

RubyでProject Euler - Problem 43

Problem 43 (Project Euler) [原文]

数1406357289は0から9のPandigital数である (0から9が1度ずつ現れるので). この数は部分語が面白い性質を持っている.

d1を1桁目, d2を2桁目の数とし, 以下順にdnを定義する. この記法を用いると次のことが分かる.

  1. d2d3d4 = 406は2で割り切れる
  2. d3d4d5 = 063は3で割り切れる
  3. d4d5d6 = 635は5で割り切れる
  4. d5d6d7 = 357は7で割り切れる
  5. d6d7d8 = 572は11で割り切れる
  6. d7d8d9 = 728は13で割り切れる
  7. d8d9d10 = 289は17で割り切れる

このような性質をもつ0から9のPandigital数の総和を求めよ

取りかかったのは昨日でしたが、いろいろやっているうちについ時間を過ごしてしまいました。

最初、事前の枝刈りでもしようと、ナンクロ(数独)気分で紙と鉛筆で解き始めました。すぐに d6が5であることがすぐにわかり、なんとなく正解にたどり着きました。

さすがにこれはなかろう…とコードを書きました。まず、上の各条件を単純に満たす3桁の数をそれぞれ配列に格納した後、最後の条件に合致する配列から前に向かって各要素をつなぎ合わるような操作を行いました。

各配列の様子を適宜表示させてみると、徐々に解答候補が絞り込まれていく様子がよくわかり、いかにも「プログラムが考えている」ようでした。

もっと効率のよい方法はあるのでしょうが、人間と似たような手順でありながらスタートレックNGのデータ君みたいにPCが高速に解いていくのを観察するのはなかなか楽しいものです。


"RubyでProject Euler - Problem 42" « Home » "RubyでProject Euler - Problem 44"

TrackBack

ご注意
当分の間、トラックバックの受信を行わないことといたしました。過去に戴いたトラックバックのリストについてはそのまま保持いたします。
トラックバックはありません

Comments

ツムジ posted at 2009/08/02 10:14
初めまして。
私も Ruby で Project Euler を解いています。

私はこの問題を、d8d9d10 に当てはまる数の候補を配列に収めておいて、その候補に d7, d6 ... と付け加えていって候補を絞り込んでいく方法を使って、解いてみました。
最初から調べる数が少ない分、かなり速く答えが出ました。
もし、興味がおありでしたら、一度、私のブログも覗きにきてみてください。
ご注意
当分の間、JavaScript が有効でないとコメント投稿できないようにします。スパム対策であって、投稿される方の個人情報を取得する目的ではありません。悪しからずご了承ください。
Recent Entries
京都御苑の「自転車道」
Googleの左サイドバーを消すユーザスタイルシート for Firefox , Opera
"Ruby Way"章頭の言葉
"The worst feelings in life"より
裸の英会話
RubyでProject Euler - Problem 59
RubyでProject Euler - Problem 58
RubyでProject Euler - Problem 57
RubyでProject Euler - Problem 55, 56
RubyでProject Euler - Problem 54
Links
PamGau 系
PamGau::Memo
PamGau::Dust
PamgauSigh Wiki
はてなブックマーク
パンパでガウチョ
kyorecobaのdel.icio.us
BLOGNAVI
XREA.COM
VALUE-DOMAIN
PHP ver 4.4.2
Powered by Nucleus CMS Creative Commons
feedberner banner この日記のはてなブックマーク数
BlogPeople
あわせて読みたい