相互に排他的なクイン


27

あなたの挑戦は簡単です。互いに出力する文字を共有しない2つのプログラムを作成します。

次の場合、2つのプログラムPQは相互に排他的なクインです。

  1. P出力Q
  2. Q出力P
  3. PQの両方に属する文字cはありません
  4. 各プログラムPおよびQ適切なクインです
    1. これは、空のクインと、自分の(または他の)ソースコードを無効として読み取るクインをカウントします

その他のルール

  • これらのプログラムを組み合わせた最短の長さが優先されます。つまり、size(P)+ size(Q)がスコアであり、最低スコアが勝ちます。
  • 両方のプログラムは同じ言語です
  • 各プログラムは完全なプログラムまたは機能である場合があり、同じである必要はありません。
    • たとえば、Pは完全なプログラムで、Qは関数です。

検証

これはオンラインで試してみてください!ここのスニペットは、2つのプログラムが相互に排他的かどうかを確認できます。入力は最初の2つの引数に入れられます。




3
お互いのソースを読み取る2つのプログラムも禁止されていると思います。
ジュゼッペ

2
この課題に対する非エソランの答えを見てみたいです。(私はそれを行う方法について少し考えていましたが、これまでのところ私は方法を見ていませんでした。しかし、Forthでは可能です。 )
ナサニエル

1
プログラム自体ではなく、両方のプログラムのコンパイラーに同じ引数を渡すことができる場合。通常、コンパイラーフラグは代金を払えば許可されますが、この課題のために、相互に排他的なルールに反すると主張するかもしれません。
ブラックキャップ

回答:


37

> <>、スコア:41 + 41 = 82

編集:両方に3が含まれていました

'd3*}>a!o-!<<8:5@lI55>@z:5ll55>>q:>|q::|,

そして

"r00gr40g44++bb+0p64++?b6+0.22#eW4s )Z

オンラインでお試しください!(行を交換して他の出力を取得します)今回は検証を行います!

><>ここで使用するのが特に難しい言語は、文字を出力する方法が1つしかないためoです。幸いなことに、p utコマンドを使用して、Pristine Worldでのプログラミングのoように、実行中にソースコードを配置できます。回答の。

これは多くの試行錯誤を繰り返しました。私は相互に排他的な2つのプログラムから始めました。

'd3*}>N!o-!<<data

そして

"r00gr40g8+X0pN+?Y0.data

それぞれが自身とそのデータをNだけ変換し、最初のデータは減算し、2番目のデータは加算します。次に、これを逆に出力します。ポイントは各プログラム後のデータは、逆に他のプログラムであるということである(N.だけシフトXプログラムを置く必要があるセルの数であり、oそしてYは、ポインタが戻ってループ細胞である。?ここでo置かれます) 。

どちらも同じ構造に従い、異なる方法で表されます。コード全体で文字列リテラルを実行し、スタックに追加します。使用した文字列リテラルコマンドを再作成し、スタックの一番下に配置します。スタックをループし、各文字にNを加算/減算して印刷します。

最初のプログラムは'文字列リテラルとして使用し、d3*}値39を簡単に作成してスタックの一番下にプッシュします。2番目は"、同じ関数で文字列リテラルとして使用します。それはr、スタックをeverses gセル0,0の文字をETSと再びスタックを反転させます。次にg、セル4,0(g)の値を設定し、8を追加して取得oし、Xに配置します。

両方のプログラムは、異なるループ方法を使用します。最初のプログラムは、スキップコマンド(!)を使用して、左に移動しながら命令の半分だけを実行し、方向を反転して、残りの半分を実行します。2番目のコマンドは、ジャンプコマンド(.)を使用して、セルYのループの開始位置まで逆方向にスキップします。これらの両方は、スタックにアイテムがなくなるとプログラムエラーが発生するまで実行されます。

1つの文字をシフトすると、そのプログラムに不可欠な別の文字に変わり(したがって、他のプログラムのデータとして使用できなかった)、または2つのプログラムは同じ文字にシフトします。例えば:

  1. ++1 = ,= --1
  2. .+2 = 0
  3. *= --3
  4. g+4 = k= o-4

最終的には10(a)になり、これらの問題を回避することができました。シフトが逆になる短いバージョンがあり、最初のプログラムはNを加算し、2番目のプログラムはそれを減算します。ただし、最初のプログラムは一般にASCIIスケールの下端にあるため、これはさらに悪化する可能性があります。そのため、競合を避けるために減算する方が適切です。


19

Forth(64ビットリトルエンディアンgforth)、428 + 637 = 1065バイト

s"	:	l	bl	-	;	:	m	l	emit	;	:	s	space	;	:	z	m	m	m	m	s	;	:	p	.	't	'i	'm	'e	z	;	'e	'r	'e	'h	z	:	q	>r	char	l	bl	l	do	dup	@	.	'L	m	s	cell+	loop	r>	.	;	:	n	'e	'p	'y	't	z	;	q	;	's	p	'B	l	p	#tab	p	'p	'u	'd	'Q	char+	z	n	'B	l	p	n":	l	bl	-	;	:	m	l	emit	;	:	s	space	;	:	z	m	m	m	m	s	;	:	p	.	't	'i	'm	'e	z	;	'e	'r	'e	'h	z	:	q	>r	char	l	bl	l	do	dup	@	.	'L	m	s	cell+	loop	r>	.	;	:	n	'e	'p	'y	't	z	;	q	;	's	p	'B	l	p	#tab	p	'p	'u	'd	'Q	char+	z	n	'B	l	p	n
HERE 3245244174817823034 , 7784873317282429705 , 665135765556913417 , 7161128521877883194 , 682868438367668581 , 679209482717038957 , 680053688600562035 , 678116140452874542 , 682868623551327527 , 680649414991612219 , 682868636436227367 , 7136360695317203258 , 7809815063433470312 , 8458896374132993033 , 5487364764302575984 , 7810758020979846409 , 680166068077538156 , 4181938639603318386 , 8081438386390920713 , 8793687458429085449 , 2812844354006760201 , 7784826166316108147 , 676210045490917385 , 681493840106293616 , 7521866046790788135 , 679491013524025953 , 7928991804732031527 , 216 115 EMIT 34 EMIT 9 EMIT 2DUP TYPE 34 EMIT TYPE 

オンラインでお試しください!

検証スクリプト

Forthを使用するアイデアを提供してくれた@Nathanielに感謝します。彼はコメントで、Forthは大文字と小文字を区別しないことを思い出しました。それから気分が変わりました-これがうまくいかない理由を見つけ、続いてこれらの問題の解決策を何度も見つけました。屋内トレーニングバイクを、ひっくり返した形の小さなスピナーのように回転させている間(ハンドルバーの一端をつかんで少し傾けるだけです)。

これらのプログラムを書く前に、どのプログラムでどのキャラクターを使用できるかを書きました。具体的には、2番目のプログラムは大文字、10進数、タブ、およびコンマのみを使用できます。これは、最初のプログラムがすべて小文字であることを意味しますが、ASCII値には大文字を使用しました。

タブは扱いにくいため、代わりに説明でスペースを使用します。

最初のプログラムは次の形式ですs" code"code- s"文字列リテラルを開始し、コードの2番目のコピーで処理されます-標準のクインフレームワーク。ただし、独自のソースコードを出力する代わりに、次のような他のプログラムを作成します。

  • HERE
  • 元の文字列の8バイトごとに、 64-bit-number-literal ,
  • length-of-the-string
  • 115 EMIT 34 EMIT 9 EMIT 2DUP TYPE 34 EMIT TYPE

これは、Forthのデータスペースを使用します。HERE現在割り当てられているデータスペース領域の末尾へのポインタを返し、それに,数字で満たされたセルを追加します。したがって、最初の3つの箇条書きは、を使用して作成された文字列リテラルのように見えs"ます。2番目のプログラムを終了するには:

  • EMIT ASCII値を指定して文字を出力するため、次のようになります。
    • 115 EMIT 小文字を出力します s
    • 34 EMIT 引用文字を出力します "
    • 9 EMIT タブを印刷します
  • 2DUPスタックの上の2つの要素を複製します( a b -- a b a b )。ここでは、文字列へのポインタと長さです
  • TYPE 文字列を出力して、コードの最初のコピーを出力します
  • 34 EMIT"最後の引用符を出力し、最後に
  • TYPE コードの2番目のコピーを出力します

最初のプログラムの仕組みを見てみましょう。多くの場合、数字を回避する必要があります。これは'x、文字リテラルのgforth構文拡張を使用して行われ、場合によってはスペースのASCII値を減算しますbl

s" ..."      \ the data
: l bl - ;   \ define a word, `l`, that subtracts 32
: m l emit ; \ define a word, `m`, that outputs a character. Because 32 is
             \ subtracted using `l`, lowercase characters are converted to
             \ uppercase, and uppercase characters are converted to some
             \ symbols, which will become useful later
: z m m m m space ; \ `z` outputs four characters using `m`, followed by a
                    \ space. This is very useful because all words used in the
                    \ second program are four characters long
: p . 't 'i 'm 'e z ; \ define a word, `p`, that, given a number, outputs that
                      \ number, followed by a space, `EMIT`, and another space
'e 'r 'e 'h z \ here is where outputting the second program starts - `HERE `
: q \ define a helper word, `q`, that will be called only once. This is done
    \ because loop constructs like do...loop can't be used outside of a word.
  >r \ q is called with the address and the length of the data string. >r saves
     \ the length on the return stack, because we don't need it right now. While
     \ it might seem like this is too complicated to be the best way of doing
     \ this for codegolf, just discaring the length would be done using four
     \ characters - `drop`, which would give you the same bytecount if you could
     \ get the length again in... 0 characters.
  char l \ get a character from after the call to q, which is `;`, with the
         \ ASCII value of $3B, subtract $20 to get $1B, the number of 64-bit
         \ literals necessary to encode the string in the second program.
  bl l \ a roundabout way to get 0
  do   \ iterate from 0 (inclusive) to $1B (exclusive)
    \ on the start of each iteration, the address of the cell we are currently
    \ processing is on the top of the stack.
    dup @ . \ print the value. The address is still on the stack.
    'L m space \ the ASCII value of L is exactly $20 larger than the one of ,
    cell+ \ go to the next cell
  loop
  r> . \ print the length of the string
;
: n 'e 'p 'y 't z ; \ define a word, `n`, that outputs `TYPE`
q ; \ call q, and provide the semicolon for `char` (used to encode the length
    \ of the string in 64-bit words). Changing this to an uppercase U should
    \ make this work on 32-bit systems, but I don't have one handy to check that
's p \ print the code that outputs the lowercase s
'B l p \ likewise, 'B l <=> $42 - $20 <=> $22 <=> the ASCII value of a comma
#tab p \ print the code that outputs a tab
'p 'u 'd 'Q char+ z \ char+ is the best way to add 1 without using any digits.
                    \ it is used here to change the Q to an R, which can't be
                    \ used because of `HERE` in the second program. R has an
                    \ ASCII value exactly $20 larger than the ASCII value of 2,
                    \ so this line outputs the `2DUP`.
n 'B l p n \ output TYPE 34 EMIT TYPE to finish the second program. Note the
           \ that the final `n` introduces a trailing space. Trying to remove
           \ it adds bytes.

これを終了するために、を使用してみましたEVALUATEが、2番目のプログラムは上記の両方のプログラムより大きくなります。とにかく、ここにあります:

: s s" ; s evaluate"s" : l bl - ; : m l emit ; : d here $b $a - allot c! ; : c here swap dup allot move ; : q bl l do #tab emit dup @ bl l u.r cell+ #tab emit 'L m loop ; here bl 'B l 's bl 's bl 'Z l d d d d d d d -rot c bl 'B l 's 'B l d d d d s c 'B l d c 'e 'r 'e 'h m m m m 'A q #tab emit 'e 'p 'y 't m m m m"; s evaluate

あなたが私のs" ..."...アプローチを打ち負かすのに十分これをゴルフダウンすることができたら、先に進み、あなた自身の答えとしてそれを投稿してください。


1
すばらしいです!私のコメントがこの解決策のきっかけとなったことを嬉しく思います!
ナサニエル

16

Perl、(311 + 630 = 941バイト) 190 + 198 = 388バイト

どちらのプログラムも標準出力に出力します。

最初のperlプログラムには、主に印刷可能なASCII文字と改行が含まれており、ちょうど1つの改行で終わりますが、2文字のtheは非ASCIIバイト\ xFFを表します。

@f='^"ÿ"x92;@f=(@f,chr)for 115,97,121,36,126,191,153,194,216,113;print@f[1..5,5,10,5..9,0,9,0,5]'^"ÿ"x92;@f=(@f,chr)for 115,97,121,36,126,191,153,194,216,113;print@f[1..5,5,10,5..9,0,9,0,5]

2番目の行には、この投稿で星に置き換えられるいくつかの高度な制御文字を含む非ASCIIバイトがほとんど含まれていますが、改行はまったく含まれていません。

say$~~q~¿*ÂØ¡Ý*Ý*ÆÍÄ¿*Â׿*Ó***Ö***ßÎÎÊÓÆÈÓÎÍÎÓÌÉÓÎÍÉÓÎÆÎÓÎÊÌÓÎÆËÓÍÎÉÓÎÎÌÄ*****¿*¤ÎÑÑÊÓÊÓÎÏÓÊÑÑÆÓÏÓÆÓÏÓʢءÝ*Ý*ÆÍÄ¿*Â׿*Ó***Ö***ßÎÎÊÓÆÈÓÎÍÎÓÌÉÓÎÍÉÓÎÆÎÓÎÊÌÓÎÆËÓÍÎÉÓÎÎÌÄ*****¿*¤ÎÑÑÊÓÊÓÎÏÓÊÑÑÆÓÏÓÆÓÏÓÊ¢~

最初のプログラムの16進ダンプは次のxxdとおりです。

00000000: 4066 3d27 5e22 ff22 7839 323b 4066 3d28  @f='^"."x92;@f=(
00000010: 4066 2c63 6872 2966 6f72 2031 3135 2c39  @f,chr)for 115,9
00000020: 372c 3132 312c 3336 2c31 3236 2c31 3931  7,121,36,126,191
00000030: 2c31 3533 2c31 3934 2c32 3136 2c31 3133  ,153,194,216,113
00000040: 3b70 7269 6e74 4066 5b31 2e2e 352c 352c  ;print@f[1..5,5,
00000050: 3130 2c35 2e2e 392c 302c 392c 302c 355d  10,5..9,0,9,0,5]
00000060: 275e 22ff 2278 3932 3b40 663d 2840 662c  '^"."x92;@f=(@f,
00000070: 6368 7229 666f 7220 3131 352c 3937 2c31  chr)for 115,97,1
00000080: 3231 2c33 362c 3132 362c 3139 312c 3135  21,36,126,191,15
00000090: 332c 3139 342c 3231 362c 3131 333b 7072  3,194,216,113;pr
000000a0: 696e 7440 665b 312e 2e35 2c35 2c31 302c  int@f[1..5,5,10,
000000b0: 352e 2e39 2c30 2c39 2c30 2c35 5d0a       5..9,0,9,0,5].

2番目のプログラムのhexdumpは次のとおりです。

00000000: 7361 7924 7e7e 717e bf99 c2d8 a1dd 00dd  say$~~q~........
00000010: 87c6 cdc4 bf99 c2d7 bf99 d39c 978d d699  ................
00000020: 908d dfce ceca d3c6 c8d3 cecd ced3 ccc9  ................
00000030: d3ce cdc9 d3ce c6ce d3ce cacc d3ce c6cb  ................
00000040: d3cd cec9 d3ce cecc c48f 8d96 918b bf99  ................
00000050: a4ce d1d1 cad3 cad3 cecf d3ca d1d1 c6d3  ................
00000060: cfd3 c6d3 cfd3 caa2 d8a1 dd00 dd87 c6cd  ................
00000070: c4bf 99c2 d7bf 99d3 9c97 8dd6 9990 8ddf  ................
00000080: cece cad3 c6c8 d3ce cdce d3cc c9d3 cecd  ................
00000090: c9d3 cec6 ced3 ceca ccd3 cec6 cbd3 cdce  ................
000000a0: c9d3 cece ccc4 8f8d 9691 8bbf 99a4 ced1  ................
000000b0: d1ca d3ca d3ce cfd3 cad1 d1c6 d3cf d3c6  ................
000000c0: d3cf d3ca a27e                           .....~

2番目のプログラムでは、引用符で囲まれた文字列(長さ189バイト、チルダで区切られています)は、最後の改行を除く最初のプログラム全体であり、各バイトをビット単位で補完することによってのみエンコードされます。2番目のプログラムは、各バイトを補完することで単純に文字列をデコードします。これは~オペレーターがperlで行います。プログラムは、デコードされた文字列に続いて改行を出力します(sayメソッドは改行を追加します)。

この構成では、2番目のプログラムのデコーダーは6つの異なるASCII文字のみを使用するため、最初のプログラムはASCII文字のみを含み、これらの6文字を除外する限り、実質的に任意にできます。これらの5文字を​​使わずにperlプログラムを書くのは難しくありません。したがって、実際のクインロジックは最初のプログラムにあります。

最初のプログラムでは、クインロジックは11ワードの辞書を使用し、@fそれらのワードからの出力を組み立てます。最初の単語は、最初のプログラムのソースコードのほとんどを繰り返します。残りの単語は特定の単一文字です。たとえば、単語5はチルダであり、これは2番目のプログラムの2つの文字列リテラルの区切り文字です。括弧内の数字のリストは、どの単語をどの順序で印刷するかを示すレシピです。これは、クインの非常に一般的な一般的な構築方法です。この場合の唯一のひねりは、最初の辞書ワードがバイト単位でビットが補完されて出力されることです。


14

Haskell、306 + 624 = 930バイト

プログラム1:仮引数を取り、文字列を返す匿名関数。

(\b c()->foldr(\a->map pred)b(show()>>c)`mappend`show(map(map fromEnum)$tail(show c):pure b))"İĴİóđđđÝöÝâÝæÝääē××êääē××İēÀħđĮâħēĕóİóòòĮááħááđéêâéêēááĮÀħ""(\b c()->foldr(\a->map pred)b(show()>>c)`mappend`show(map(map fromEnum)$tail(show c):pure b))"

オンラインでお試しください!

プログラム2:q[[40,...]]最後は、仮引数を取り文字列を返す匿名関数です。

z~z=[[['@','0'..]!!4..]!!z]
q[x,q]_=z=<<x++q++[34,34]++x
q[[40,92,98,32,99,40,41,45,62,102,111,108,100,114,40,92,97,45,62,109,97,112,32,112,114,101,100,41,98,40,115,104,111,119,40,41,62,62,99,41,96,109,97,112,112,101,110,100,96,115,104,111,119,40,109,97,112,40,109,97,112,32,102,114,111,109,69,110,117,109,41,36,116,97,105,108,40,115,104,111,119,32,99,41,58,112,117,114,101,32,98,41,41,34],[304,308,304,243,273,273,273,221,246,221,226,221,230,221,228,228,275,215,215,234,228,228,275,215,215,304,275,192,295,273,302,226,295,275,277,243,304,243,242,242,302,225,225,295,225,225,273,233,234,226,233,234,275,225,225,302,192,295]]

オンラインでお試しください!

文字セット1(スペースを含む):

 "$()-:>E\`abcdefhilmnoprstuw×ÝáâäæéêñòóöđēĕħĮİĴ

文字セット2(改行を含む):

!'+,.0123456789<=@[]_qxz~

セット1のみに非ASCII文字が含まれているため、UTF-8バイトもばらばらです。

使い方

  • 通常、プログラム1は、ラムダ式、スペース、括弧、組み込みの英数字関数の自由な使用、および末尾に文字列リテラルとしてのクインデータを使用して記述されます。

    • プログラム1のコアコードは、引用符で囲むだけで文字列リテラルデータに変換されます。
      • これをサポートするために、すべてのバックスラッシュの後にaor が続きます。これは、ラウンドbトリップする有効なエスケープシーケンスを形成しますshow
      • 別の小さな利点は、でありabそしてcそのASCIIコードプログラム2が使用する数値符号に数字を保存し、100未満であるのみ小文字です。
    • プログラム2のコアコードの文字列リテラルエンコーディングは、非ASCII Unicodeを使用することでさらに難読化されます。すべての文字はコードポイントに182が追加され、元の文字と重複しないようにします。
      • 182は、プログラム1のコードの文字列リテラルの長さの2倍であるという事実を悪用してデコードを短縮できることに気づくまで、128でした。(ボーナスとして、プログラム2は改行を使用できます。)
  • プログラム2は通常、最上位の関数方程式(最終的な匿名方程式を除く)、文字リテラルと10進数、リスト/範囲の構文と演算子、およびInt末尾にsのリストのリストとしてのクインデータを使用して記述されます。

    • プログラム1のコアコードは、コードポイントのリストとしてエンコードされ、最後に二重引用符が付きます。
    • プログラム2のコアコードは、プログラム1で使用される文字列リテラルのコードポイントのリストとしてエンコードされますが、それでも182だけ上にシフトされます。

チュートリアル、プログラム1

  • bおよびcは、それぞれプログラム2および1の文字列リテラルの値であり、ラムダ式の最終引数として指定されます。()プログラムが関数を定義するというPPCGのルールを満たすためだけの仮引数です。
  • foldr(\a->map pred)b(show()>>c)またはの長さに等しい回数をb適用map predすることにより、プログラム2のコアコードに文字列をデコードします。show()>>c == c++c182
  • tail(show c)文字列cをプログラム1のコアコードに変換し、最後に二重引用符を追加します。
  • :pure bこれをリスト内の文字列と組み合わせますb
  • map(map fromEnum)$ 文字列をコードポイントのリストに変換します。
  • `mappend`show(...) 結果のリストのリストをシリアル化し、プログラム2のコアコードに最後に追加します。

チュートリアル、プログラム2

  • トップレベルz~z=[[['@','0'..]!!4..]!!z]は、コードポイントを文字に変換する関数です(すべての文字toEnumが使用できるわけではないため、記述する必要があります)。
    • そのコードポイント引数も呼ばれzます。怠inessマーカー~はこの位置では効果がありませんが、スペース文字は避けます。
    • ['@','0'..] は、ASCIIコード64で始まり、各ステップで16ずつジャンプする逆方向のステップリストの範囲です。
    • これに適用する!!4と、\NULキャラクターが得られます。
    • [ ..]範囲内でそれをラップすると、!!zインデックス付けするすべての文字のリストが得られます。
    • キャラクターは最終的にシングルトンリストにラップされます。これにより、使用できないおよびの代わりにzリストを使用して関数をマッピング=<<できます。map<$>
  • トップレベルq[x,q]_=z=<<x++q++[34,34]++xは、クインデータリストからプログラム1を構成する関数です。
    • xは、プログラム1のコアのデータ(最後の二重引用符を含む)であり、内部qは、プログラム2のコアの難読化されたデータです_
    • x++q++[34,34]++x 2つの二重引用符を含む部分をASCIIコード34で連結します。
    • z=<<z連結をマッピングしてプログラム1を構成し、コードポイントから文字に変換します。
  • 最後q[[40,...]]q、クインデータと結合する匿名関数です。

5

ゼリー128 90 87 86 85 79 16 + 32 = 48バイト

“OṾ⁾ọṙŒs”OṾ⁾ọṙŒs

オンラインでお試しください!

79,7806,8318,7885,7769,338,115ỌṘ

オンラインでお試しください!

最初のプログラムは次のことを行います。

“OṾ⁾ọṙŒs”OṾ⁾ọṙŒs
“OṾ⁾ọṙŒs”          String literal: 'OṾ⁾ọṙŒs'
         O         ord: [79, 7806, 8318,...]
          Ṿ        Uneval. Returns '79,7806,8318,7885,7769,338,115'
           ⁾ọṙ     Two character string literal: 'ọṙ'
              Œs   Swap case the two char literal: 'ỌṘ'.

これは、文字列を離れる79,7806,8318,7885,7769,338,115ỌṘチェーンの二つの引数として、それらは暗黙のうちに終わりに連結して印刷されています。

2番目のプログラムは、返される数値のリストのchr)を計算しますOṾ⁾ọṙŒsプリント“OṾ⁾ọṙŒs”(引用符付き)と残して、入力を返す“OṾ⁾ọṙŒs”OṾ⁾ọṙŒs完全な出力として。


5

Gol> <>23 + 23 = 46 22 + 22 = 44 20 + 20 = 40バイト

"lF{3+|3d*HqlJJJQpp2

オンラインでお試しください!

'5ssTMMMotK-g6.6~Io

オンラインでお試しください!

オンラインで確認してください!

仕組み

"lF{3+|3d*HqlJJJQpp2

"..."        Push everything to the stack
 lF{3+|      Add 3 to everything on the stack
       3d*   Push 39 `'`
          H  Print everything on the stack (from the top) and halt

'5ssTMMMotK-g6.6~Io

'...'        Push everything to the stack
 5ss         Push 37 (34 `"` + 3)
    T    t   Loop indefinitely...
     MMMo      Decrement 3 times, pop and print
               At the end, `o` tries to print charcode -3, which is fishy (thanks Jo King)
               Program terminates

から適応 ジョー・キングの回答> <>回答。出力およびリピートのためのより多くの代替コマンドがあるため、gまたはの必要はありませんでしたp、2つの本体ははるかに短くなりました。

もう1つの主な違いは、スタックの最上部で相手のクオートを直接生成することです。この方法では、の不変式を保持する方がわずかに簡単でしたquote + my code + opponent code(reversed and shifted)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.