Project Euler の 79 番目

実は id:tanakaBox さんのダイアリー「ボクノス」で、初めて Project Euler のことを知ったのだけど、「なんだか難しそうだなぁ」と思っていた Problem 79 が、tsort で解けるかも、と思ってやってみたら簡単にいけました。(tsort コマンドを使ったことが無い方はこちらをどうぞ。)

#! /bin/sh

# fetch 'http://projecteuler.net/project/keylog.txt'
# wget 'http://projecteuler.net/project/keylog.txt'

sed 's/\([0-9]\)\([0-9]\)\([0-9]\)/\1 \2 \2 \3/' keylog.txt | tsort | tr -d '\n'
echo ""


sed の部分は、与えられた入力の各行をこんな風に再構成しています。

[ひとつ目の数字] [スペース] [ふたつ目の数字] [スペース] [ふたつ目の数字] [スペース] [みっつ目の数字]


入力 (keylog.txt) :

319
680
...


出力 (tsort に食わせるもの):

3 1 1 9
6 8 8 0
...


この意味は、

  • 3 の後に 1 が出てくる
  • 1 の後に 9 が出てくる
  • 6 の後に 8 が出てくる
  • 8 の後に 0 が出てくる

です。


これを tsort に食わしてやると、うまいことトポロジカルソートしてくれます。

Project Euler
http://projecteuler.net/
Problem 79 - Project Euler
http://projecteuler.net/index.php?section=problems&id=79
Problem 79 - セキュリティキーを解読せよ - ボクノス
http://d.hatena.ne.jp/tanakaBox/20080427/1209276589
tsort - peanutsjamjamのFreeBSD日記 - freebsdグループ
http://freebsd.g.hatena.ne.jp/peanutsjamjam/20060504/p1
On-line Manual of "tsort" - The FreeBSD Project (Japan)
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=tsort&dir=jpman-5.4.0%2Fman§=0