つきの うさぎは おもちつき もちつき + うさぎ ---------- つきのうさぎ
中学1年生くらいのときに、「詰将棋パラダイス」で見た懸賞クイズ。
とてもきれいな覆面算だったので、詩として覚えていた。
「美少女戦士セーラームーン」が世に出るのは、このクイズの数年後。
セーラームーンの主人公の名前を聞いたとき、大爆笑した覚えがある。
以下のようなプログラムを VisualBasic で書いてはいけません。
エレガントじゃないソースだし、そもそも「1つの正答と5つの誤答」を吐き出してしまう。
Module Module1 Sub Main() Dim つ As Integer = 0 Dim き As Integer = 0 Dim の As Integer = 0 Dim う As Integer = 0 Dim さ As Integer = 0 Dim ぎ As Integer = 0 Dim は As Integer = 0 Dim お As Integer = 0 Dim も As Integer = 0 Dim ち As Integer = 0 Dim つきの As Integer Dim うさぎは As Integer Dim おもちつき As Integer Dim もちつき As Integer Dim うさぎ As Integer Dim つきのうさぎ As Integer For つ = 0 To 9 For き = 0 To 9 If つ = き Then つ = つ + 1 For の = 0 To 9 If の = き Or の = つ Then の = の + 1 For う = 0 To 9 If う = つ Or う = き Or う = の Then う = う + 1 For さ = 0 To 9 If さ = つ Or さ = き Or さ = の Or さ = う Then さ = さ + 1 For ぎ = 0 To 9 If ぎ = つ Or ぎ = き Or ぎ = の Or ぎ = う Or ぎ = さ Then ぎ = ぎ + 1 For は = 0 To 9 If は = つ Or は = の Or は = う Or は = さ Or は = ぎ Then は = は + 1 For お = 0 To 9 If お = つ Or お = の Or お = う Or お = さ Or お = ぎ Or お = は Then お = お + 1 For も = 0 To 9 If も = つ Or も = き Or も = の Or も = う Or も = さ Or も = ぎ Or も = は Or も = お Then も = も + 1 For ち = 0 To 9 If ち = つ Or ち = き Or ち = の Or ち = う Or ち = さ Or ち = ぎ Or ち = は Or ち = お Or ち = も Then ち = ち + 1 つきの = つ * 100 + き * 10 + の うさぎは = う * 1000 + さ * 100 + ぎ * 10 + は おもちつき = お * 10000 + も * 1000 + ち * 100 + つ * 10 + き もちつき = も * 1000 + ち * 100 + つ * 10 + き うさぎ = う * 100 + さ * 10 + ぎ つきのうさぎ = つ * 100000 + き * 10000 + の * 1000 + う * 100 + さ * 10 + ぎ If つきの + うさぎは + おもちつき + もちつき + うさぎ = つきのうさぎ And _ つ + き + の + う + さ + ぎ + は + お + も + ち = 45 Then Console.Write("つ=" & つ & _ " き=" & き & _ " の=" & の & _ " う=" & う & _ " さ=" & さ & _ " ぎ=" & ぎ & _ " は=" & は & _ " お=" & お & _ " も=" & も & _ " ち=" & ち & vbNewLine) End If Next Next Next Next Next Next Next Next Next Next End Sub End Module
しっかし、2バイト文字を変数名に使えるなんて、悪魔の言語だね。