サイトアイコン alm-ore

つきのうさぎ

   つきの
  うさぎは
 おもちつき
  もちつき
+  うさぎ
----------
つきのうさぎ


中学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バイト文字を変数名に使えるなんて、悪魔の言語だね。

モバイルバージョンを終了