以下に2つの推奨ソリューションを説明します。大量のバイトを必要とする問題に対する完全なソリューションと、2番目の部分的なソリューション(N + NおよびN * N部分のみを解決し、484バイトのみを必要とする)クールなトリックのセット!:)
1.完全なソリューション(810147050バイト)
使用してTovTovTov(TOV='hi',SEP=',')
、TOV
要素が所定の位置に文字を複製する免疫がある(両方"hihihi"
と"hhiihhiihhii"
3つの持っている"hi"
それらにSを、そしてすべてがTovTovTov
気にすることは何であるTOV
間に表示される秒SEP
秒)。
を使用した場合SEP=', '
、プログラム全体が文字の重複の影響を受けません(これはクールですが、問題は解決しません)。使用しますSEP=','
。
したがって、"hihihi,hi"
たとえば、プログラムはints配列[3,1]
に"hhiihhiihhii,,hhii"
コンパイルされ[3,0,1]
、"hhiihhiihhii,,hhii"
to およびtoにコンパイルされ[3,0,0,1]
ます。これは、コマンド自体は複製後に意味を変えず、文字の複製によって全体の長さが変わることを意味します。以下のソリューションはプログラムの長さを質問して、これを使用して印刷するか決定するかN+N
、N*N
またはN^N
。
ints配列として推奨される完全なソリューションは次のとおりです。 [6, 12, 9, 18, 9, 142, 11, 38, 8, 9, 260, 11, 73, 8, 22, 75, 7, 10, 14, 3, 1, 22, 24, 18, 15, 8, 10, 16, 3, 1, 22, 24, 18, 15, 8, 10, 45, 16, 7, 22, 3, 1, 22, 24, 18, 15, 8, 22, 3, 1, 22, 24, 18, 15, 8, 25, 3, 1, 22, 24, 18, 15, 8, 48, 3, 1, 22, 24, 18, 15, 8, 277, 3, 1, 22, 24, 18, 15, 8, 3146, 3, 1, 22, 24, 18, 15, 8, 46677, 3, 1, 22, 24, 18, 15, 8, 823564, 3, 1, 22, 24, 18, 15, 8, 16777237, 3, 1, 22, 24, 18, 15, 8, 387420510, 3, 1, 22, 24, 18, 15, 8]
文字列として、これは810147050文字で構成される非常に長いプログラムであり、次で始まります。
hihihihihihi,hihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihih...
2.質問のN + NおよびN * N部分のみを解く(484バイト)
を使用するTovTovTov(TOV='1',SEP=', ')
と、今回はSEP
sは複製の影響を受け",, "
ません(まだ1つしかありませ", "
ん)。したがって、次の推奨ソリューションでは、文字の複製後でも常に33個のコマンドが含まれます。
1111, 111111111111111111111111111111111111111111111111, 1111111111, 1111111111, 1111111111, 111111, 111111111111, 111111111, 11111111111111, 111, 1, 1111111111111111111111, 111111111111111111111111, 111111111111111111, 111111111111111, 11111111, 111111111111, 1111111111111111, 111111111111111, 1111111111111111111111, 111111111111111111111111111111111111, 11, 1111111111111111111111111111, 111111, 111, 111111, 11111111111, 111111111111111111111111111, 1111, 1, 11111111, 1, 11111111
対応するints配列(上記の33個のコマンドのそれぞれTOV
のs(1
s)の数)は次のとおりです。[4,48,10,10,10,6,12,9,14,3,1,22,24,18,15,8,12,16,15,22,36,2,28,6,3,6,11,27,4,1,8,1,8]
文字を所定の場所に複製すると、まったく異なる 33個のコマンドのリストが作成されます。
[8,96,20,20,20,12,24,18,28,6,2,44,48,36,30,16,24,32,30,44,72,4,56,12,6,12,22,54,8,2,16,2,16]
元のint配列(N + Nを計算する)は、コマンドの意味が変わった後でもプログラムが意味をなすように注意深く設計されていますが、N * Nを計算します。たとえば、最初の4
(TovTovTov
「次のopをasciiコードとして処理して文字に変換する」と理解する)は、文字複製後にに変更されます8
。これはまったく異なるコマンドです(「プログラムカウンタを直後にポップされた値がtrueの場合、スタック」)。