2012年06月

Pythonの数独ソルバをRubyに移植して気づいたこと

あらゆる数独パズルを解く」で紹介されているPythonの数独ソルバをRubyに移植してみた。移植したのは骨格の部分だけだが、解のある問題であれば解けるはずだ。

もともとは、頭の体操がてら自力で実装を始めた。だが、結局探索することになるなら誰が書いてもほとんど変わらない内容になるだろうと思い、他の人のコードを見てみることにした。

もっと簡潔に書けるし、そもそもグローバル変数を使いすぎだとも思うが、元のコードの意図をなるべく尊重してわざとそのままにしてある。

移植するだけでも様々な気づきがあった。

  • リスト内包表記の簡潔さ
  • Hash生成のイディオム: Hash[keys.zip(vals)]
  • 浅いコピーの罠: values[s] = values[s].delete(d) を values[s].delete!(d) と書いてしばらく悩んだ

解のない問題や複数解のある問題を考慮すると、SQLで数独を解くのが適当なのかもしれない。刈り込みによる高速化も面白そうだ。

応用情報技術者試験に合格した

落ちたら恥ずかしいので黙っていたのだが、4月15日に応用情報技術者試験をこっそり受けた。本日合格者が発表され、僕も無事に合格していた。

合格者の平均年齢は29歳だから、39歳の僕が受かっても偉くともなんともないのだが、「今年は取れそうな資格を手当たりしだい取ろうと思っている」との宣言を有言実行したことにはなる。いつも口ばかりの僕にとっては快挙と言っていい。

記録によれば、受験勉強を始めたのは2月5日だった。勉強期間が長すぎ、中だるみしてしまった感はあるが、覚えたことをいったん忘れ、また覚え直したことが良い結果につながったのかもしれない。

午前問題の対策にはWindowsアプリの「応用情報技術者試験対策」をおもに使った。誤答がなくなるまで繰り返し解き、これでだいぶ自信がついた。

午後問題の対策には『平成24年度【春期】 応用情報技術者 パーフェクトラーニング過去問題集』を使った。一度通して解いただけなので自信こそつかなかったが、問題のレベルや形式が把握でき、やらないよりはましだった。

せっかく高度情報処理技術者試験の一部試験免除資格が得られたので、秋期の情報処理技術者試験も何か受けるつもりだ。合格報告がなければ、きっと落ちたのだと思ってください。

OSS教科書の分離性の説明に納得がいかない

OSS教科書 OSS-DB Silver』巻末の模擬試験、問60に納得がいかない。問題はGoogle ブックスでも見られる。

トランザクションの分離性について適切な記述はどれか。選択せよ。

正答はBだという。

B. 複数のトランザクションを実行する場合、すべてのトランザクションの実行が完了した結果は、トランザクションの実行順序に関係なく同じである。

しかし、これはおかしいのではないか。たとえば、以下の2つのトランザクションを順番を変えて実行したら、結果が異なるのは明らかだ。

  • トランザクション1:「UPDATE tab1 SET c1 = 100」
  • トランザクション2:「UPDATE tab1 SET c1 = 500」

同書312ページにおける分離性の説明はこうだ。

トランザクションは別のトランザクションによる処理の影響を受けない

これであれば納得がいく。

プロフィール

ENECHANGE株式会社VPoT兼CTO室マネージャー。AWS Community Builder (Cloud Operations)。前職はAWS Japan技術サポート。社内外を問わず開発者体験の向上に取り組んでいます

カテゴリ別アーカイブ
月別アーカイブ
ブログ内検索