ドミノ・ピザをネットで注文し終わると、続けてクイズが始まる。
ピザが届くまでに答えを考えて、正解すると割引チケットやサイドメニューのクーポンをもらえる。
いつもイージーやノーマルを選ぶけれども、今日はハードモードに挑戦してみた。
今回の問題は、日本の歴代総理大臣の名前で、
1) 名字が1文字
2) 名前が1文字
3) 名字が3文字
4) 名前が3文字
5) 名字と名前を足して3文字以内
の条件で、多いものから順に答えよ、というもの。
見た瞬間、行ける、ピザ半額チケットはもらったと思った。
データベースに入れてSQL使おうか迷ったけれど、普通にスクリプトで解いた方が早そうだったので、Perlで解く事にした。
まずは歴代総理大臣の一覧データを入手しないといけないが、ウェブを検索しても名字と名前が分かれて書かれたページがなかなか見つからないので焦る。
結構たくさんページを見て回って、ようやく見つけた。
まず、ブラウザに表示されてる名前部分を選択してコピーし、Excelにペーストする。
HTMLのテーブルタグをExcelにペーストするといい感じにExcelの列になってくれるので、名前部分の列をコピーし、今度はvimにペーストする。
この時点で「安倍 晋三(第2次)」みたいに邪魔な文字列が混じってるので、vimの置換機能で「安倍,晋三」に変換する。さらにuniqで重複を取り除く。
ここからPerlで問題を解く。
急いだせいでタイプミスなどあったが5分程で出来た。処理を見直したが問題ない。
Perlを実行して出た答えを、ドミノ・ピザのページに戻って、入力した。
しばらくして、制限時間終了。答え合わせが始まる。
絶対問題ないはず。
問題ないはず。
…問題ないはず。
…だったが、まさかの不正解の判定。
そんな馬鹿なと再度処理を見直すと、しまった、元データが「歴代総理大臣の一覧」ではなく「戦後の歴代総理大臣の一覧」のページだった。
痛恨のミス。
やっと名字と名前が分かれて書かれたページを見つけたので、舞い上がってしまった。よく考えれば総理大臣が少なすぎた。
もうドミノ・ピザは二度と注文しない。
#!/usr/bin/env perl use utf8; @list = qw( 芦田,均 安倍,晋三 伊東正義 宇野,宗佑 羽田,孜 海部,俊樹 岸,信介 吉田,茂 宮沢,喜一 橋本,龍太郎 佐藤,栄作 細川,護煕 三木,武夫 小泉,純一郎 小渕,恵三 森,喜朗 菅,直人 石橋,湛山 村山,富市 大平,正芳 池田,勇人 竹下,登 中曽根,康弘 田中,角栄 東久邇宮,稔彦 鳩山,一郎 鳩山,由紀夫 福田,康夫 福田,赳夫 幣原,喜重郎 片山,哲 麻生,太郎 野田,佳彦 鈴木,貫太郎 鈴木,善幸 ); $hit = 0; foreach (@list) { ($sei, $mei) = split ',', $_; if (length($sei) == 1) { $hit++; } } print "1: $hit\n"; $hit = 0; foreach (@list) { ($sei, $mei) = split ',', $_; if (length($mei) == 1) { $hit++; } } print "2: $hit\n"; $hit = 0; foreach (@list) { ($sei, $mei) = split ',', $_; if (length($sei) == 3) { $hit++; } } print "3: $hit\n"; $hit = 0; foreach (@list) { ($sei, $mei) = split ',', $_; if (length($mei) == 3) { $hit++; } } print "4: $hit\n"; $hit = 0; foreach (@list) { ($sei, $mei) = split ',', $_; if (length($mei) + length($sei) <= 3) { $hit++; } } print "5: $hit\n";