名古屋で数学するプログラマ(仮)

@antimon2 が趣味兼一部本職の数学で何かするときのブログ。

平成変換(『CodeIQの問題・パズルを考えよう!』提案その1)

CodeIQの問題・パズルを考えよう!(by CodeIQ×はてな)』に応募してみます。

平成変換

平成変換とは?

平成変換とは、田村三郎著の「数学パズルランド—身近な素材でパズる」(isbn:4061329049、講談社ブルーバックス、絶版)で紹介されている数字パズルです。
著者の田村氏が京都府の上山秀幸氏から平成 3 年の年賀状でもらった問題として、以下のような文章が紹介されています:

 下のような規則で自然数Mから別の自然数Nを生成する操作を《平成変換》と呼ぶことにする。
自然数Mの連続した各位の数が、自然数Nの連続した各位の数の方にるか、または、方根にる。』
(例)[5]63→(256)3→(16)[3]→(49)→7 (4 step)
[問題]
 (西暦)1991(年)を(平成)3(年)に《平成変換》せよ!

(Webで紹介するにあたって傍点や傍線を別の表現に置き換えました)

この問題の解答は、田村氏によって同著書内に載っています。と言っても 3→→1991 の逆向きの変換手順が載っているのですが、すぐに分かるように平成変換は可逆変換なので、どちらでも同じことです。一応、1991→→3 に向きを直した解答例を以下に示します。

19(9)1→19[31]→[19](9)61→(36)1(36)1→6(16)1→(64)1→(81)→(9)→3 (8 step)

平成変換できる年、できない年

同著書には、田村氏による「どのような数が 3 に平成変換できるのか、あらゆる自然数は 1 桁の自然数に平成変換されるだろうか」といった数学的考察も加えられています。
その全てを載せるのにここはスペースが限られているので、その結果として分かりやすい以下の事実だけ述べておきます。

  • 西暦年、平成年のいずれかが 5 の倍数の年は、平成変換できない。
    • 例:(西暦)2000(年)は(平成)12(年)に平成変換できない。
  • (西暦)1989(年)は 1(平成元年)に平成変換できない。

つまり、今年(西暦2013年、平成25年)も、平成変換できない、というわけです。ちょっと残念。

提案する問題

これを踏まえて、こんな問題を考えてみました。

【パズル】平成変換


■平成変換とは?
西暦年を平成年に変換する数字パズルです。
以下の規則に従って、整数(>0)を別の整数(>0)に変換していきます。
『前の数の連続した各位の数が、次の数の連続した各位の数の方にるか、または、方根にる。』
(例:(西暦)1991(年)→→(平成)3(年)の場合)

19(9)1->19[31]->[19](9)61->(36)1(36)1->6(16)1->(64)1->(81)->(9)->3

※このように、「方にる」変換部分を「[ ]」で括り、「方根にる」変換部分を「( )」で括ることにします。前の数と次の数は「->」でつなぎます。「->」の個数がステップ数となります。またこの例のように 1 ステップ内に 2 つ以上の変換が混在してもOKです。


■問題
今年(2013→→25)…は、残念ながら平成変換不可能(ヒント:5 は何乗しても下 1 桁が 5 のまま)なので、来年でいきましょう。
(西暦)2014(年)を(平成)26(年)に《平成変換》してください!
できる限りステップ数の短い解答を高評価とします!


■注意事項
 ・「[ ]」や「( )」のネスト(入れ子)は禁止です。
  例:[9(9)]←×
 ・「[」や「(」の直後に「0」が来るのも禁止とします。
  例:2(01)4←×
 ・「[0]」「[1]」「(0)」「(1)」は、変換前後で結果が変わらないのでこれも禁止にしておきます。


■解答方法
answer.txt
サンプル解答用ファイルにならって、1 行目に平成変換の解答を書き、アップロードしてください。

answer.txt:

19(9)1->19[31]->[19](9)61->(36)1(36)1->6(16)1->(64)1->(81)->(9)->3


■注意事項
 ・1 行目に、2014 を 26 に変換する平成変換の解答を書いてください。
  ただし、「[ ]」は括った部分を平方(2 乗)する変換、「( )」は平方根を取る変換を表し、
  「->」は前の数と次の数の区切りを表します。
 ・1 行目に、数字と「[」「]」「(」「)」「-」「>」と改行以外の文字を書いた解答は評価 1(最低点)になります。
 ・1 行目は、「2014」に「[」「]」「(」「)」のいずれかを組み合わせた文字列から始まり、必ず「26」で
  終わるようにしてください。これに従っていないものは評価 1(最低点)になります。
 ・変換結果が正しくない場合も評価 1(最低点)になります。
 ・以下の禁止事項に該当するものも評価 1(最低点)になります。
  ・「[ ]」や「( )」のネスト(入れ子)は禁止です。
   例:[9(9)]←×
  ・平方数でない数を「()」で平方根変換するのも禁止です。
   例:7(18)8←×
  ・「[」や「(」の直後に「0」が来るのも禁止とします。
   例:2(01)4←×
  ・「[0]」「[1]」「(0)」「(1)」は、変換前後で結果が変わらないのでこれも禁止にしておきます。
 ・採点対象は answer.txt の 1 行目だけです。2 行目以降には自由にお書きください。
  例えば、自分が解答に至るまでに考えたことや作ったプログラム(言語不問)などを書いてくださってもかまいません。
  もちろん、2 行目以降には何も書かなくても構いません。

こんなんでどうでしょう?

因みに私も、解答例は 1 つ見付けてはいますが、それが最短解かどうかは未確認です。てかきっともう少し短い解があるような気がしてます。


【2013/08/08 12:45 Twitterでの指摘その他を反映して微修正】

【2013/08/09 23:17 平成変換チェックスクリプトを組んでみました。今日のブログ記事参照】