コルモゴロフの柔軟性。別名セール!在庫が残っている間、すべてのCodegolfが


12

これは、、入力なしの固定出力を生成するためのチャレンジです。

ただし、出力形式には柔軟性があります。標準出力に出力、標準エラーに出力、文字のリストとして返される、バイトのリストとして返される、整数のリストとして返される場合があります。他に合理的だと思われるものがある場合は、コメント欄で質問してください!

以下は、シンプルで大きな文字のASCIIアートCODEGOLFです。

 CCCC   OOO   DDDD   EEEEE   GGG    OOO   L      FFFFF
C      O   O  D   D  E      G      O   O  L      F
C      O   O  D   D  EEE    G  GG  O   O  L      FFF
C      O   O  D   D  E      G   G  O   O  L      F
 CCCC   OOO   DDDD   EEEEE   GGGG   OOO   LLLLL  F

改行(または行の末尾のスペース)がない場合、長さは256文字です。

 CCCC   OOO   DDDD   EEEEE   GGG    OOO   L      FFFFFC      O   O  D   D  E      G      O   O  L      FC      O   O  D   D  EEE    G  GG  O   O  L      FFFC      O   O  D   D  E      G   G  O   O  L      F CCCC   OOO   DDDD   EEEEE   GGGG   OOO   LLLLL  F

非スペース文字の(0から始まる)インデックスは次のとおりです。

1, 2, 3, 4, 8, 9, 10, 14, 15, 16, 17, 21, 22, 23, 24, 25, 29, 30, 31, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 61, 65, 68, 72, 75, 82, 89, 93, 96, 103, 104, 111, 115, 118, 122, 125, 126, 127, 132, 135, 136, 139, 143, 146, 153, 154, 155, 156, 163, 167, 170, 174, 177, 184, 188, 191, 195, 198, 205, 207, 208, 209, 210, 214, 215, 216, 220, 221, 222, 223, 227, 228, 229, 230, 231, 235, 236, 237, 238, 242, 243, 244, 248, 249, 250, 251, 252, 255

君は コードでこれらの97バイトを使用するはできませんが、これらのバイトをこの順序で作成(または同様に出力)する必要があります。欠落しているバイトは、使用しているコードページの32番目のバイト(多くの場合、多くのスペース文字をコードページングします)。

役立つ場合は、pretty-printing *改行を含めることができます(ただし、行の末尾にスペースを入れないでください)。

たとえば、Jellyコードページを使用すると、この出力は受け入れられます。

 ¢£¤¥   ®µ½   ÇÐÑ×   ßæçðı   øœþ    $%&   *      12345
6      =   A  D   H  K      R      Y   ]  `      g
h      o   s  v   z  }~¶    ⁴  ⁷⁸  ⁻   Ɓ  Ƒ      ƲȤɓ
ƈ      ɲ   ʂ  ȥ   Ẹ  Ḳ      Ṭ   Ỵ  Ḃ   Ḟ  İ      Ṡ
 ẆẊẎŻ   ẹḥị   ṇọṛṣ   ẉỵẓȧḃ   ḟġḣŀ   ṗṙṡ   ẏż«»‘  ”

...しかし:

 ¢£¤¥   ®µ½   ÇÐÑ×   ßæçðı   øœþ    $%&   *      123456      =   A  D   H  K      R      Y   ]  `      gh      o   s  v   z  }~¶    ⁴  ⁷⁸  ⁻   Ɓ  Ƒ      ƲȤɓƈ      ɲ   ʂ  ȥ   Ẹ  Ḳ      Ṭ   Ỵ  Ḃ   Ḟ  İ      Ṡ ẆẊẎŻ   ẹḥị   ṇọṛṣ   ẉỵẓȧḃ   ḟġḣŀ   ṗṙṡ   ẏż«»‘  ”

...そして:

[32, 1, 2, 3, 4, 32, 32, 32, 8, 9, 10, 32, 32, 32, 14, 15, 16, 17, 32, 32, 32, 21, 22, 23, 24, 25, 32, 32, 32, 29, 30, 31, 32, 32, 32, 32, 36, 37, 38, 32, 32, 32, 42, 32, 32, 32, 32, 32, 32, 49, 50, 51, 52, 53, 54, 32, 32, 32, 32, 32, 32, 61, 32, 32, 32, 65, 32, 32, 68, 32, 32, 32, 72, 32, 32, 75, 32, 32, 32, 32, 32, 32, 82, 32, 32, 32, 32, 32, 32, 89, 32, 32, 32, 93, 32, 32, 96, 32, 32, 32, 32, 32, 32, 103, 104, 32, 32, 32, 32, 32, 32, 111, 32, 32, 32, 115, 32, 32, 118, 32, 32, 32, 122, 32, 32, 125, 126, 127, 32, 32, 32, 32, 132, 32, 32, 135, 136, 32, 32, 139, 32, 32, 32, 143, 32, 32, 146, 32, 32, 32, 32, 32, 32, 153, 154, 155, 156, 32, 32, 32, 32, 32, 32, 163, 32, 32, 32, 167, 32, 32, 170, 32, 32, 32, 174, 32, 32, 177, 32, 32, 32, 32, 32, 32, 184, 32, 32, 32, 188, 32, 32, 191, 32, 32, 32, 195, 32, 32, 198, 32, 32, 32, 32, 32, 32, 205, 32, 207, 208, 209, 210, 32, 32, 32, 214, 215, 216, 32, 32, 32, 220, 221, 222, 223, 32, 32, 32, 227, 228, 229, 230, 231, 32, 32, 32, 235, 236, 237, 238, 32, 32, 32, 242, 243, 244, 32, 32, 32, 248, 249, 250, 251, 252, 32, 32, 255]

(この最後のコードは、任意のコードページの任意の言語での有効なリスト出力であり、合理的なリストフォーマットも使用できます。)


Python 3コードはこちら使用できないASCIIバイトを示すを示します。

*印刷自体は実際にはそれほどきれいではないかもしれませんが!


コードでこれらの97バイトを使用することはできません。つまり、これらのASCII文字は使用できませ$%&*123456=ADHKRY]``ghosvz}~ん。改行​​はありませんか。
タイタス

1
@TitusコードページがASCIIで整列する場合、yes-またはタブまたは指定された範囲内の他の文字のいずれか、たとえば、印刷不能または拡張。(また、リンクされたPythonスクリプトをTIOで参照してください)
ジョナサンアラン

2
価値のあるものについてここにコードバリデーターがあります(特別なコードページがないと仮定)。
アーナウルド

私はほとんどPHPでそれを持っています... array_map(function($n){return sprintf("%6b",$n);},...)なしで$(私はそれを行うことができます)そしてなしで}(アイデアなし)する方法が必要です。はい; データをパックしたい!
タイタス

回答:


7

パイソン2321の 203バイト

print map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8,enumerate(bin(int(reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclkf','')))))

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


説明:

内側から:

cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclk25731972618407747697792173390589410779249734035626759409848989703511287412985許可された文字でエンコードされた数値です。(123456許可されていません)

reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbl..bclkf','') 文字列を10進数文字列にマップします。

  • reduce(lambda x,y:x+y,'..','')''.join('..')(No o's allowed)と同じです
  • repr('..')代わりにstr('..')(No s's allowed)
  • 'abcdefijkl'.find(y) 文字を数字にマップします。

enumerate(bin(int(...)))数値文字列をバイナリ文字列に変換し、列挙します。これはペアを与えます[(0,0), (1,b), (2,1), (3,1), ...]

map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8, ... ) 列挙リストを最終結果に変換します。

  • map(lambda(i,x):.. , .. )代わりに[... for(i,x)in ...](No o]'s allowed)
  • lambda(i,x): ..各(インデックス、値)ペアをインデックスまたはに変換します32
  • (x>'0'and i-8-8-8-8)+8+8+8+8 次と同じです:
    • x>'0'and i or 8+8+8+8、(o許可されていません)
    • [8+8+8+8,i][x>'0']または[8<<9-7,i][x>'0']、(]許可されていません)
  • 8+8+8+8= 3223許可されていない)

これは、プログラムが本質的に同じであることを意味します:

print[[32,i][x>'0']for i,x in enumerate(bin(25731972618407747697792173390589410779249734035626759409848989703511287412985))]

そこにいくつかの素晴らしいゴルフの仕事:D
ジョナサンアラン

7

C(gcc)、318バイト

main(_){--_<88+80+88?printf((int[:>){77707-989908070??>,((int[:>){0xE8E8C79E^0xB0B0080,0xC07E0870^0xE0000C00,0xCC08099C^0xEE0C008E,0xE8888989^0xCC00808,0x9E088990^0x800C0000,0x990C8888^0x080ECC00,0xF9C7a088^0x080000C0,0x9F8C78F8^0x900000??>[_>>(0xC^0x9):>>>(_<<9+9+9>>9+9+9))<<(70^89)>>(70^89)?_:' '),main(_+9-7):0;??>

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

これは少し旅です...

1.リストを圧縮する

どういうわけか、特定の整数が特別なコードポイントの1つであるかどうかを確認する必要があります。「裸の」リストは長すぎるため、チェックリストを使用します。このリストには、「制限」されているコードポイントではゼロ以外の値があり、制限されていないコードポイントではゼロ値があります。

残念ながら、これはリストを保持するためだけに512バイト必要です(のように見えます0,0,7,7,0,7,0,...)。これはビットマスクで短縮できます。

ビットマスクを使用するには、各バイトを2つの部分に分割します。最初の3ビットは配列からマスクを選択し、最後の5ビットは配列内のビットを選択します。デフォルトで使用される32ビット整数は2 ^ 5 = 32ビット以上をサポートしないため、配列をさらに縮小することはできません。

私が書いたリファレンス実装を使用して:

int main() {
    int i;
    int vals[] = {1, 2, 3, 4, 8, 9, 10, 14, 15, 16, 17, 21, 22, 23, 24, 25, 29, 30, 31, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 61, 65, 68, 72, 75, 82, 89, 93, 96, 103, 104, 111, 115, 118, 122, 125, 126, 127, 132, 135, 136, 139, 143, 146, 153, 154, 155, 156, 163, 167, 170, 174, 177, 184, 188, 191, 195, 198, 205, 207, 208, 209, 210, 214, 215, 216, 220, 221, 222, 223, 227, 228, 229, 230, 231, 235, 236, 237, 238, 242, 243, 244, 248, 249, 250, 251, 252, 255, 0};

    for (i = 0; i <= 0xFF; ++i) {
        int j,f;
        f = 0;
        for (j = 0; vals[j]; ++j)
            if (vals[j] == i)
                f = 1;
        if (f)
            printf("1");
        else
            printf("0");

        if (i%32 == 31)
            printf("\n");
    }

    return 0;
}

コマンドを使用して、この新しい配列に適切な値を生成することができました echo "obase=16;ibase=2;$(./a.out | rev)" | bc。これにより、上記のプログラム(./a.out)の出力がrev各行が逆になります。出力ベースを16に、入力ベースを2に設定するbcのヘッダーとともにこれを出力します。したがって、bcは2進数を16進数のビットマスクに変換します。

結果の配列は、この「ベータ」ソリューションで見ることができます。

f(){
    int x;
    int arr[] = {0xE3E3C71E, 0x207E0470, 0x22040912, 0xE4488181, 0x1E048990, 0x91024488, 0xF1C7A048, 0x9F1C78F8};
    for (x=0; x<=0xFF; ++x) {
        int mask = arr[x >> 5];
        int bit = mask >> (x & 0x1F);

        if (bit & 1)
            printf("%c", x);
        else
            printf(" ");
    }
}

2.制約に対処する

上記のコードには多くの制約が必要です。ここでは、それぞれを1行1列で説明します。

  1. 割り当てなし

これは他の言語でも同様に感じられます。Cでの割り当てがなければ、保証された値を変数に入れることは非常に困難です。私たちにとって最も簡単な方法は、関数を完全なプログラムとして書くことです。の最初の引数mainが渡さargcれます。引数なしで呼び出された場合、その値は1になります。

  1. ループなし

Cで唯一のループ構造でありforwhileおよびgotoそのすべての制限された文字が含まれます。これにより、再帰を使用することができます。メイン関数は1から始まり、引数が> 256になるまで再帰します。一方、内部で引数をデクリメントして、0インデックス付きの値を使用します。

  1. 16進値

上記の配列の値は16進数です。10進数に変換された場合でも、いくつかの制限されたシンボル、特に123456(ADは小文字にできます)が含まれます。これを回避するために、各定数は、制限された文字が削除されるように別の定数とXORされます。1が9 ^ Bになり、2がC ^ Eになり、3がB ^ 8になり、4が8 ^ Cになり、5が9 ^ Cになり、6が9 ^ Fになります。 。

  1. 印刷

この制限により、多くの印刷機能が残ります。putcharそしてputs両方残し、制限されていますprintf。残念ながらprintf、フォーマット文字列、理想的には「%c」を送信する必要があります。そのような文字列にはすべて、削除したい厄介なパーセント記号が付いています。幸いなことに、私たちはリトルエンディアンのマシンを想定しています(明らかにTIOが使用しているものであり、非常に典型的だからです)。メモリ内のバイトが0x25(%)、0x63(c)、0x00(\ 0)、何でもかまいません(nullターミネーターの後)、整数を作成することにより、アドレスを渡すことができprintf、それを想定します文字列です。そのような機能する番号の1つは、-989830363(0xC5006325)です。これは77707-989908070の制限の下で簡単に作成できます。

値を参照できないという問題がまだあります(値を割り当てることができないため、&を使用できないため)。したがって、配列リテラル(int []){...}を使用する必要があります。実際には、これを上記のビットマスク配列にも使用します。

  1. 閉じ括弧

']'または '}'を使用して配列または関数を閉じることはできません。幸いなことに、Cには有効な有向グラフと三文字表記があります。:>になりますが]??>になり}ます。これは-trigraphs、デフォルトで3文字表記を無視するため(標準に違反して)、gccがスイッチを取る必要があります。

  1. ビット演算

私たちは、使用することはできません&Googleのインデックスのオフビットをマスクするために、また我々は使用することができます%が昔ながらの方法を取得します。したがって、実装固有の動作に依存しています。特に、32ビット整数を左に移動してビットを失った後、右に戻します。たとえば、数値の最後の5ビットを取得するには、まず27ビット左にシフトし(終了abcde00000...)、次に右に27ビットだけシフトします(終了...00000abcde)。

  1. その他の値

コード全体でさらにいくつかのリテラル値が必要です-これらはArnauldのJS回答から取得され、さらに(上記の理由で)27がとして追加されます9+9+9

3.まとめる

これらすべての変更をまとめたソースの説明を次に示します。

main(_){                // This is our main entry point
--_<88+80+88            // This subtracts 1 from the argument (_) and checks if it is less than 256
    ?                   // If it is less than 256 we 'continue'
printf(                 // first we call printf with...
    (int[:>){           // An integer array that will be interpreted as a string
    77707-989908070     // With the value we determined above, to represent "%c\0\xC5"
    ??>,                // This is a trigraph for }, just as the :> above is a digraph for ]
    ((int[:>){          // We immediately create another integer array
0xE8E8C79E^0xB0B0080,   // Each row is the bit-mask for 32 characters
0xC07E0870^0xE0000C00,
0xCC08099C^0xEE0C008E,
0xE8888989^0xCC00808,
0x9E088990^0x800C0000,
0x990C8888^0x080ECC00,
0xF9C7a088^0x080000C0,
0x9F8C78F8^0x900000??>
[_>>(0xC^0x9):>         // This is {arr}[_>>5] just in a roundabout way
>>(_<<9+9+9>>9+9+9))    // Similarly this is (...)>>(_&0x1F)
<<(70^89)>>(70^89)      // This is <<31>>31 or &1, to check the last bit
?_:' ')                 // If its 1, we print the character, otherwise we print a space
,main(_+9-7):0;         // We recurse, the :0 is the other branch of the if, it terminates execution
??>

よくやった!いい説明も。(私は100%ではありませんが、ヘッダーには「C(gcc)-trigraphs」と表示されるはずです)
ジョナサンアラン

1
議論の余地がある。コードはgcc固有ではなく、完全に標準に準拠したコードではありませんが、私のマシンではccは引数なしで問題なくコンパイルします。TIOにはデフォルトで標準に準拠する組み込みコンパイラはありません。存在する(またはgccの古いビルド)場合、トライグラフは警告を生成するだけです。
LambdaBeta

g ++ ?:拡張機能を使用して、
32、273

それは賢いです。ただし、このバージョンは-trigraphs一部のCコンパイラでオプションを必要としませんが、?:gccにはrequireが必要なので、そのままにしておきます-trigraphs
ラムダベータ

6

brainfuck、635バイト

++++++++++++++++++++++++++++++++.>+.+.+.+.<...>++++.+.+.<...>++++.+.+.+.<...>++++.+.+.+.+.<...>++++.+.+.+....++++.+.+.<...>++++.<......>+++++++.+.+.+.+.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<......>+++++++.<...>++++.<..>+++.<......>+++++++.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.+.+.<....>+++++.<..>+++.+.<..>+++.<...>++++.<..>+++.<......>+++++++.+.+.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<.>++.+.+.+.<...>++++.+.+.<...>++++.+.+.+.<...>++++.+.+.+.+.<...>++++.+.+.+.<...>++++.+.+.<...>++++.+.+.+.+.<..>>-.

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

最後にJavascriptにbeatられたことに応じて、私はこれから何ができるかゴルフをしました。

セル0に32を持ち、セル1をインクリメントすることで1バイト節約されました(最初に他の方法でそれを使用した唯一の理由は、OrjanJohansenが使用できないと指摘したときの迅速な修正によるものです]

生成するために3番目のセルをデクリメントして(最初は0に)1バイト節約255=-1

文字31と36の間のスペースを使用せずに印刷することで2バイト節約されます<>が、代わりに32で停止して、31から33にインクリメントするときにセル0から印刷します。

brainfuck、639バイト

>++++++++++++++++++++++++++++++++.<+.+.+.+.>...<++++.+.+.>...<++++.+.+.+.>...<++++.+.+.+.+.>...<++++.+.+.>....<+++++.+.+.>...<++++.>......<+++++++.+.+.+.+.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>......<+++++++.>...<++++.>..<+++.>......<+++++++.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.+.+.>....<+++++.>..<+++.+.>..<+++.>...<++++.>..<+++.>......<+++++++.+.+.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>.<++.+.+.+.>...<++++.+.+.>...<++++.+.+.+.>...<++++.+.+.+.+.>...<++++.+.+.+.>...<++++.+.+.>...<++++.+.+.+.+.>..<+++.

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

最初に32の数字を生成します。次に、1つのセルをインクリメントし、そのセルと32を含むセルとの間で印刷を切り替えます。

BrainfuckでJavascriptを打ち負かすのはいいことです。めったに起こりません!


申し訳ありませんが]、許可されたキャラクターではありません。それでもあなたはそれを修正してJavascriptを打ち負かすことができるはずです。:)
Ørjanヨハンセン

ØrjanJohansen@固定
レベル川セント

申し訳ありませんが、Javascriptを失いました。
user202729

@ user202729かなり良い!それでも、私はJavascriptを3日間beatられました。]許可されていないためループを使用できないため、BFの回答はおそらく最適だと思います。
レベルリバーセント

5

JavaScript(SpiderMonkey)1918 1598 1487 1431バイト

@ user202729のおかげで56バイト節約

print(8<<98,7/7,9-7,7>>97,8>>97,8<<98,8<<98,8<<98,8,9,0xa,8<<98,8<<98,8<<98,0xe,0xf,7+9,8+9,8<<98,8<<98,8<<98,7+0xe,7+0xf,8+0xf,9+0xf,78^87,8<<98,8<<98,8<<98,77^80,70^88,70^89,8<<98,8<<98,8<<98,8<<98,9<<98,70^99,77>>97,8<<98,8<<98,8<<98,98-070,8<<98,8<<98,8<<98,8<<98,8<<98,8<<98,9^070,80^98,80^99,87^99,87^98,9^077,8<<98,8<<98,8<<98,8<<98,8<<98,8<<98,70-9,8<<98,8<<98,8<<98,7^70,8<<98,8<<98,9^77,8<<98,8<<98,8<<98,7^79,8<<98,8<<98,70^0xd,((8<<98)+' ').repeat(8^0xe)+(8^90),((8<<98)+' ').repeat(8^0xe)+89,8<<98,8<<98,8<<98,7^90,8<<98,8<<98,7+89,((8<<98)+' ').repeat(8^0xe)+(7|97),7+97,((8<<98)+' ').repeat(8^0xe)+(77|98),8<<98,8<<98,8<<98,80|99,8<<98,8<<98,8^0x7e,8<<98,8<<98,8<<98,0x7a,8<<98,8<<98,0x7d,0x7e,0x7f,8<<98,8<<98,8<<98,8<<98,7+0x7d,8<<98,8<<98,0x87,0x88,8<<98,8<<98,0x8b,8<<98,8<<98,8<<98,0x8f,8<<98,8<<98,7+0x8b,((8<<98)+' ').repeat(8^0xe)+0x99,0x9a,0x9b,0x9c,((8<<98)+' ').repeat(8^0xe)+(7+0x9c),8<<98,8<<98,8<<98,0xa7,8<<98,8<<98,0xaa,8<<98,8<<98,8<<98,0xae,8<<98,8<<98,78+99,((8<<98)+' ').repeat(8^0xe)+0xb8,8<<98,8<<98,8<<98,0xbc,8<<98,8<<98,0xbf,8<<98,8<<98,8<<98,97+98,8<<98,8<<98,99+99,((8<<98)+' ').repeat(8^0xe)+0xcd,8<<98,0xcf,0xd0,7+0xca,7+0xcb,8<<98,8<<98,8<<98,7+0xcf,0xd7,0xd8,8<<98,8<<98,8<<98,0xdc,0xdd,0xde,0xdf,8<<98,8<<98,8<<98,7+0xdc,7+0xdd,7+0xde,7+0xdf,0xe7,8<<98,8<<98,8<<98,0xeb,0xec,0xed,0xee,8<<98,8<<98,8<<98,7+0xeb,7+0xec,7+0xed,8<<98,8<<98,8<<98,0xf8,0xf9,0xfa,0xfb,0xfc,8<<98,8<<98,0xff)

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

どうやって?

事実 =許可されいないは、JSのショーキラーです。変数の割り当てはできません。また、矢印関数も使用できません。

上記のコードは、代わりに、10進数、8進数、16進数のいずれかの許容数字を使用して、各数値を個別に計算しています(0789そして、は0xa0xFの)と次の演算子:+-/|^<<>>

  1 = 7/7     |   50 = 80^98   |  136 = 0x88    |  216 = 0xd8
  2 = 9-7     |   51 = 80^99   |  139 = 0x8b    |  220 = 0xdc
  3 = 7>>97   |   52 = 87^99   |  143 = 0x8f    |  221 = 0xdd
  4 = 8>>97   |   53 = 87^98   |  146 = 7+0x8b  |  222 = 0xde
  8 = 8       |   54 = 9^077   |  153 = 0x99    |  223 = 0xdf
  9 = 9       |   61 = 70-9    |  154 = 0x9a    |  227 = 7+0xdc
 10 = 0xa     |   65 = 7^70    |  155 = 0x9b    |  228 = 7+0xdd
 14 = 0xe     |   68 = 9^77    |  156 = 0x9c    |  229 = 7+0xde
 15 = 0xf     |   72 = 7^79    |  163 = 7+0x9c  |  230 = 7+0xdf
 16 = 7+9     |   75 = 70^0xd  |  167 = 0xa7    |  231 = 0xe7
 17 = 8+9     |   82 = 8^90    |  170 = 0xaa    |  235 = 0xeb
 21 = 7+0xe   |   89 = 89      |  174 = 0xae    |  236 = 0xec
 22 = 7+0xf   |   93 = 7^90    |  177 = 78+99   |  237 = 0xed
 23 = 8+0xf   |   96 = 7+89    |  184 = 0xb8    |  238 = 0xee
 24 = 9+0xf   |  103 = 7|97    |  188 = 0xbc    |  242 = 7+0xeb
 25 = 78^87   |  104 = 7+97    |  191 = 0xbf    |  243 = 7+0xec
 29 = 77^80   |  111 = 77|98   |  195 = 97+98   |  244 = 7+0xed
 30 = 70^88   |  115 = 80|99   |  198 = 99+99   |  248 = 0xf8
 31 = 70^89   |  118 = 8^0x7e  |  205 = 0xcd    |  249 = 0xf9
 32 = 8<<98   |  122 = 0x7a    |  207 = 0xcf    |  250 = 0xfa
 36 = 9<<98   |  125 = 0x7d    |  208 = 0xd0    |  251 = 0xfb
 37 = 70^99   |  126 = 0x7e    |  209 = 7+0xca  |  252 = 0xfc
 38 = 77>>97  |  127 = 0x7f    |  210 = 7+0xcb  |  255 = 0xff
 42 = 98-070  |  132 = 7+0x7d  |  214 = 7+0xcf  |
 49 = 9^070   |  135 = 0x87    |  215 = 0xd7    |

注:ビット単位のシフトはモジュロで処理されます32。これは、ECMAScript仕様に明示的に記載されています

してみましょうshiftCountはすべてをマスキングした結果が、最下位の5ビットでRNUM、計算され、RNUM&0x1Fと。

たとえば、8<<98実際に8<<2(これは32)。


32as 8<<9-7はそれぞれのバイトを保存します32
-TFeld

1
@TFeld実際、ソルバーにシフトを追加していまし32 = 8<<98た。982モッド32)。この方法で、さらにいくつかの式を短縮できます。まだそれに取り組んでいます。
アーナルド

3
「ショーキラー」または「ファンメーカー」?
ジョナサンアラン

2
@JonathanAllan ;-)後者は前者から出てきます!
アーナウルド

愚かだとすみませんが、なぜ古いバージョンのSpiderMonkeyにリンクしているのですか?
ソロモンウッコ

4

ハスケル、623 617 614 594 360 342バイト

編集:文字列としてエンコードされたパターンを見つけることにより、@ Lynnのおかげで-234バイト。@ØrjanJohansenのおかげで-18バイト。

map(\i->cycle(8+8+8+8:filter(\_->" XXXX   XXX   XXXX   XXXXX   XXX    XXX   X      XXXXXX      X   X  X   X  X      X      X   X  X      XX      X   X  X   X  XXX    X  XX  X   X  X      XXXX      X   X  X   X  X      X   X  X   X  X      X XXXX   XXX   XXXX   XXXXX   XXXX   XXX   XXXXX  X"!!i>' ')(pure i))!!9)(take(0xf8+8)(iterate(9-8+)0))

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

使い方

map(\i->    )                   -- map the lambda over the
        (take(0xf8+8)           -- first 256 elements of
           (iterate(9-8+)0))    -- the list [0,1,2,....]

                                -- the lambda is:

    cycle                       -- make an infinite list by repeating the list
      8+8+8+8:                  -- wih element 32 followed by
                  pure i        -- the singleton list with 'i'
       filter                   -- but keep 'i' only if
          \_->" XXXX..."!!i>' ' -- the pattern has an 'X' at index 'i', else
                                -- remove it to make an empty list
                                -- i.e. the cycled list is, if the pattern is
                                -- a space: [32,32,32,32,32,32,32,32,32,32,...]
                                -- an 'X':  [32, i,32, i,32, i,32, i,32, i,...]
                                --                                       ^
                                --                        9th element ---/ 
                      !!9       -- pick the 9th element which is the result
                                -- of the lambda

3
インデックスを作成(id:pure(\_->8+8+8+8))until((||" XXXX XXX XXXX XXXXX XXX XXX X XXXXXX X X X X X X X X X XX X X X X XXX X XX X X X XXXX X X X X X X X X X X X XXXX XXX XXXX XXXXX XXXX XXX XXXXX X"!!i<'X').(<1))pred 1 て、大量のバイトを保存できます。
リン

1
342のバイトfilterはなく、untilブランチに(とcycle余分を避けるため++pure(...))。
Ørjanヨハンセン

3

Brain-Flak -r、4190 4188バイト

(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())())())())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())())())()<((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))>()()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())>())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())

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

我々が使用することはできませんので、この1は脳非難のために少し難しいです]}。唯一の有用な文字の意味はです<>()

ここでは「私を助けたHaskellのプログラムがこれをライトS

スペースが必要な場所をスキップし、それらを個別にプッシュするだけです。


これは確かに最適ですか?
user202729

@ user202729そうではないと思う。それも可能性があります。小刻みに動く部屋はありませんが、それが最適であることを証明することはできません。私たちには{}コンピューターがないので、有限時間で実際に最適なものを見つけることができます。
ポストロックガーフハンター

最終的には最適なソリューションを生成するプログラムを作成することになりますが、予想よりも少し遅くなります。
user202729

@ user202729まあ、それは最適ではありませんでした。短いものを見つけました。
ポストロックガーフハンター

3

JavaScript(SpiderMonkey)1001 919 789 441バイト

print(/u/.exec().map.call('0777700077700077770007777700077700007770007000000777777000000700070070007007000000700000070007007000000770000007000700700070077700007007700700070070000007777000000700070070007007000000700070070007007000000707777000777000777700077777000777700077700077777007',''.repeat.bind(Number)).map(/u/.exec().find.bind(/()/.exec().fill(Number.bind(0,88-070)).fill(/u/.exec().fill,!0),''.indexOf)).map(Map.call.bind(Map.call)))

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

ついにBFを打ち負かす!!!

一般的なアイデア

値に応じて、長い文字列stringの各文字をインデックスまたは32に変換します。

Array.prototype.map?配列を取得する方法

オブジェクトプロパティにアクセスすることで、どのオブジェクトにアクセスできるかを強引]判断します(許可されていないため、識別子に一致する名前のプロパティのみにアクセスできます)。

RegExp.prototype.exec一致する場合、配列のようなオブジェクトを返します。引数が指定されていない場合、引数のデフォルトはundefinedであるため/u/.exec()、配列に一致して返します。

2つの異なる文字で2つの任意の異なる値を取得する

欲しいけど(x,y)=>x=='0'?32:y使えない=

代わりに、私たちはやろうとしている

new Array(a)
    .map(x=>x=='0'?()=>32:function()this)
    .map((x,y,z)=>x.call(y,z))

map何らかの関数で文字列を使用できますが、=>これだけの数の関数を使用することができ、許可されていません。thisバインドされた引数といくつかのバインドされた引数を持っている可能性があります(そのため、形式があります(x,y,z)=>pre_filled_function.call(pre,filled,args,etc,x,y,z)

関数のリスト(repeat exec bind create map indexOf replace fill find reduce filter findIndex call bind apply)を検討した後、次の関数を使用することを決定します(他のすべての組み合わせを検討した後)

  • repeat:番号->異なる文字列。
  • find:thisArg->配列一致の最初の要素。

一般的な考え方は次のとおりです。

[].map.call('07070707...', (x,y,z)=>[elem1,elem2].find(somefunction,x,y,z)

where somefunctionは、this引数(x)と最初の引数(elem1or elem2)を考慮し、一致するかどうかを返します。

最後の矢印関数はに書き換えられ[].find.bind([elem1,elem2],somefunction)ます。

配列リテラル

regex execを使用しfillて、異なる値を持つ配列を取得できます。たとえば/()/.exec()、長さ2の配列を返す場合、必要に応じて入力できます。

どちらsomefunctionが必要ですか?

this(これから返す2つの関数のうちの1つである)および最初の引数(文字列または配列である必要があります)に応じて、真偽値を返すものが必要です。

そのために使用しましたindexOf-最初の引数が引数のプレフィックスである場合、偽の値を返しthisます。

関数リテラルを表す


1
説明の終わりにつまずき、枝からぶら下がってしまう
Ørjanヨハンセン

2

TI-Basic(83シリーズ)、578バイト

8XFact8-ΔTbl
seq(X and XX≤8+8 or 8≤X and X≤Xmax or 7+7≤X and X<9+9 or 7+7+7≤X and X<8π or 9π<X and X<πXmax or 9 nCr 7≤X and X+X<77 or X=7²-7 or 7²≤X and X≤7*9-9 or X=70-9 or X=8²+ΔTbl or X=78-Xmax or X=9*8 or X=89-7-7 or X=89-7 or X=89 or X=900-807 or X=88+8 or 809-707<X and X≤97+77-70 or 9X=999 or 8X=990-70 or X=888-770 or X=899-777 or 8*7+77-8≤X and X+X<Ans or 7²X/77=77+7 or 999+77<8X and 7X<970-9-7 or 8²X=8888+8 or X+X=99+99+88 or 7X=9099-8077 or 9+8≤X/9 and X<997-770-70 or X=99+8² or X=87+80 or X=80+90 or X=87+87 or X=87+90 or X=87+97 or X=98+90 or X=999-808 or X=97+98 or X=99+99 or X=99+99+7 or 9²8<πX and X+X+X≤70*9 or 70π-π-π<Xand X+X+X≤9²8 or 70π<X and X<70π+π or 997-770≤X and X+X+X≤99*7 or 77+79+79≤X and X+8+9≤Ans or 77π<X and X<Ans-Xmax or 7*8*9-8≤X+X and X+X≤7*8*9 or X=Ans,X,0,Ans
8XFact+Ansseq(X,X,⁻8XFact,70π+π

TI-Basicには、スペース文字を0x29に移動して0x20にすることができるなど、奇妙なデザインの選択肢を持つ独自の非常に特殊な「コードページ」があります。randM(コマンドに。

TI-Basicに適切な種類のオブジェクトを出力させる方法を理解することは困難です。文字列は複数の理由で機能しません。トークンを使用せずにトークンを参照する方法はありません。また、"文字。ので、私たちはただ、リストを書くことはできません{し、}禁止されています。私たちは許可されています[]行列にと文字をが、行列は最大99行と列で許可されるため、1行256列の行列は機能しません。変数に割り当てるために使用することはできません。また、リスト変数に到達しʟたりL₁L₆、とにかく。

そのため、ここでは、文字が出力したい文字の1つである場合を示す不等式を含む複雑な論理式を書き留めます。次に、seq(コマンドして1、これらの位置や0他の場所にあるリストを生成します。そこから、別のseq(コマンドといくつかの算術演算がジョブを終了します。

それは刺激的な部分でした。残りは定数をゴルフすることであり、私はおそらくそれを可能な限り行っていないでしょう。私が使用するトリックの1つは、デフォルトでXmax10XFact 4であり、ΔTbl1です。


1 * 256マトリックスは機能しませんが、3 * 99マトリックスのようなものを作成し、div / modを使用してマトリックスにインデックスを付けることはできますか?
user202729

また、(禁止されているため、インデックスを作成することもできません。
ミシャラヴロフ

条件式(if a then b else c)またはfloorまたはmodはありますか?数値の精度は10進数で最大15桁ですか?
user202729

これらはすべて存在します。でマトリックスエントリを取得することはできません。[A](I,J)私が理解していることから[A](int(I/99),I-99int(I/99))、マトリックスのすべての要素を読み取るようなことをしたいということから、[A]それもできません。(ちなみに、これ)も禁止されています。幸い、終了括弧を閉じる必要はありませんが、多くのコマンドの使用方法が制限されています。)
ミシャラブロフ

ビットマスクに似た配列をエンコードするために数値を使用することを考えています。Pythonの(123456789 >> X)&1に似ています。
user202729

1

Brain-Flak -r、3894バイト

(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())<((())((()())()))>)))(((((((()()()()()()()())(()()()()()()()()())(()()()()()()()()()())()()()()())))<((((((((()()()()()()()()()()()()()())((((((((((()()()()()()()()()()()()()()())((()()()()()()()()()()()()()()()())()))))<((((((((((((()()()()()()()()()()()()()()()()()()()()())())())())())()()()()()()())))<((((((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()())())())()))))()()()())())())>)))()()()()()()()()()())>))))))()()())())())())())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())>)))())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())())())<((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))>()()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())())())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())>()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())

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

あらゆる出力に最適なBrain-Flakプログラムを生成するプログラムを作成しました。と仮定する:

  • <> 使用されていません
  • 私のプログラムは正しいです

、このソリューションは最適です。

しかし、私は少し怠けていて、非常に難しくない解決策を実装し、1分13秒で実行されます(時間がかかります) On5とか、ぐらい)。後でもっと効率的な解決策を探すかもし​​れません。


1

パイソン2162の 157バイト

警告:印刷できない文字が先にあります!

print map(lambda(i,x):(x>'0'and i-0xe0/7)+0xe0/7,enumerate(bin(reduce(lambda x,y:(x<<0xd-7)-x+y,bytearray('7?QcZ;+BqiQJUS!?B0W![<LBU7X!frQd(SQdB\0')))))

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

TFeldの既存の回答に基づいていますが、いくつかの変更があります。

A bytearraystr反復可能であることに似ていますが、反復すると文字ではなく整数が得られます。これを使用して、base-Nリテラルをエンコードし、reduce(lambda x,y: x*N+y, my_bytearray)デコードできます。

Python 2ファイルにはデフォルトでエンコードがないため、ASCII(0..127)の文字のみを使用できます。ヌルバイト、改行、バックスラッシュ、引用符はさらに1バイト必要です。

また、すべてのベースを使用することはできません。

私が書いたプログラムの最短表現を見つけるためにn、これらの制限が与えられ、。

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