メタボウリングゴルフ


22

あなたの仕事は、最もユニークなバイトを持つ別のプログラム(B)を出力する最短のプログラム(A)を作成し、それが元のプログラム(A)を出力することです。基本的に、一対のウロボロスプログラムの半分(定期的な反復クイン)をゴルフし、残りの半分をボウリングしています。AとBは異なる言語である場合があります。

ルールとスコアリング

最終スコアは<number of unique bytes in B> / <number of bytes in A>です。最高スコアが勝ちます。理論上の最大スコアは256であることに注意してください。

  • プログラムAは少なくとも1バイトの長さが必要です
  • プログラムBを完全に無操作で構成することはできません。つまり、少なくとも1つの文字が何らかの方法で出力に影響を与える必要があります。
  • カインの標準ルールは両方のプログラムに適用されます。特に、どちらの場合もエラーカインは許可されません。

回答形式の一貫性のために、次のようなものから回答を始めてください。

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>

これを明確にするために、2番目の箇条書きを少し明確にする必要があると思います。キャラクターが正確にノーオペレーションであることはどういう意味ですか?
ウィートウィザード

一意のバイトとは、共有バイトを意味しますか、それとも両者の類似性を意味しますか?
KrystosTheOverlord

@KrystosTheOverlord、それは単にプログラムB内にあり、プログラムAとは関係ありません。たとえば、aaaaa1つの一意のバイトとabcde5 つの一意のバイトがあります。
ビーフスター

1
私はちょうどプログラムAは単項またはlenguageにあるプログラムを待っている
無知の実施の形態

4
@EmbodimentofIgnoranceプログラムAは、一意のバイト数ではなく、バイト数でスコア付けされます。Lenguage / Unaryは恐ろしく得点します
Jo King

回答:


14

JaptJapt、スコア:255/38 = 6.71

プログラムA

"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd

プログラムBの長さは8kBを超えているため、リンクが切断されるため、すべてを貼り付けることはしません。サンプルを次に示します。

#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²

NULバイトを機能させる方法を見つけることができなかったため、プログラムBには255個の一意の文字しかありません。プログラムBは基本的に単一のプログラムの255個のコピーで構成されており、1回の無関係なバイトが毎回変更され、最初の254回の実行は無視されます。

説明のために、結果のBについて議論しやすくするために、この単純化されたバージョンのAから始めます。

"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd

このプログラムは、基本的なペイロード対応のJapt quineに基づいています。先頭の文字列には、プログラムの残りの部分の複製が含まれておりiQ ²、引用符と複製を挿入してプログラム全体の文字列表現を作成し、¯23それ自体とその後の部分を削除します。結果の文字列は、プログラムAを出力するプログラムです。

"iQ ²¯23
3õ@i'#+Xd"iQ ²

この文字列をとして参照しますU

Aの最後の行は、U毎回小さな変更を加えて多数の時間を複製します。具体的にXは、範囲内の各数値に対して、charcodeの文字がどこにある[1...3]かを出力します。Japtのデフォルトの動作は、引用符なしでコンマで区切られた文字列を出力することです。したがって、これはSimplified Aの出力です(各との間に印刷できないバイトがあることに注意してください:"#c" + UcX#"iQ

#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²

これをSimplified Bと呼びます。

簡略化されたBは交互に、簡単な構造を有している#cU。幸いなことに、それぞれの#cand Uはカンマで区切られて扱われます。この状況では、その動作は最後を除くすべてUであり、出力には影響しません。出力に影響するSimplified Bの唯一の部分は次のとおりです。

"iQ ²¯23
3õ@i'#+Xd"iQ ²

これは、U出力Simplified Aを既に知っているものと同じです。

Simplified AとProgram Aの唯一の違いは、範囲[1...3]のコピーを生成する代わりに、実際のプログラムが範囲のコピーを生成することです[1...256]。その結果、#cそれぞれが異なる文字を持つ256バージョンになります。ただし、最後のバージョン「Ā」はマルチバイト文字であるため、一意のバイトは追加されませんが、最後以外はすべてU無視されます。


非常に良い:) これは38バイトで動作しますか?
シャギー

@Shaggy 27バイトが保存されるたびに微調整する必要がありますが、それ以外は動作するようです。
カミルドラカリ

1
@ShaggyスコアリングはBの一意のバイト数に基づいており、256バイトしかありません。私の知る限り、新しいバージョンのBでもNullバイトは含まれていません。
カミルドラカリ

ところで、ヌルバイトで動作するようにいくつかのことを試みましたが、すべて失敗しました。
シャギー

5

プログラムA、Gol> <>、256/20バイト= 12.8

"44XFL|r2ssl3%Q4s]|H

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

プログラムB、ゴル> <>

"44XFL|r2ssl3%Q4s]|H	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

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

プログラムは、それ自体を出力し、その後にすべてのバイトを出力するか、それ自体を出力するかを交互に切り替えます。

説明:

"            Wrapping string literal pushes the first line to the stack backwards
 44X         Push 256
    FL|      Push the range from 0 to 255
       r                  Reverse the stack
        2ss               Push a quote
           l3%            If the stack length is divisible by 3
              Q4s]|       Only take the top 20 characters
                   H      And output the stack

1

プログラムA:05AB1E、スコア:256/41 256/31 バイト = 8.258 ...

0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ

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

プログラムB:05AB1E

0"D34çý₅Ýç'q†22ǝ"D34çýq 

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoprstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÝç'q†22ǝ

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

説明:

最短:05AB1Eため、この一つである0"D34çý"D34çý14バイトによって提供@OliverNi。私の答えは、を追加することにより、そのクインの修正版を使用してい₅Ýç'q†vy27ǝD}Jます。

0            # Push a 0 to the stack
             #  STACK: [0]
 "D34çý₅Ýç'q†vDy27ǝ}J"
             # Push the string "D34çý₅Ýç'q†vDy27ǝ}J" to the stack
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J"]
  D          # Duplicate the string
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J","D34çý₅Ýç'q†vDy27ǝ}J"]
   34çý      # Join the stack by '"'
             #  STACK: ['0"D34çý₅Ýç'q†vDy27ǝ}J"D34çý₅Ýç'q†vy27ǝD}J']
₅Ý           # Push a list in the range [0,255]
  ç          # Convert each integer to an ASCII character
   'q†      '# Filter the "q" to the front
      22ǝ    # Insert it at index 22 in the string (replacing the second '₅')
             # (and output the result implicitly)

プログラムBはに到達するとすぐに終了するqため、実際のプログラムBは次のようになります。

0"D34çý₅Ýç'q†22ǝ"D34çýq

それ以降はすべて無視され、スタックの先頭(0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ)が暗黙的に出力されます。

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