Fleksibilitas Kolmogorov. Penjualan AKA!

12

Ini adalah tantangan , , untuk menghasilkan output yang tetap tanpa input.

Format output, bagaimanapun, fleksibel - dapat dicetak ke standar keluar, dicetak ke kesalahan standar, dikembalikan sebagai daftar karakter, dikembalikan sebagai daftar byte, atau dikembalikan sebagai daftar bilangan bulat. Jika Anda berpikir hal lain tampaknya masuk akal tanyakan di komentar!

Berikut adalah CODEGOLF seni ASCII huruf besar yang sederhana :

 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

Tanpa baris baru (atau spasi tambahan pada baris apa pun), panjangnya 256 karakter:

 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

Indeks (berbasis-0) dari karakter non-spasi adalah:

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

Anda tidak boleh menggunakan salah satu dari 97 byte ini dalam kode Anda tetapi harus menghasilkan daftar (atau output serupa) byte ini, dalam urutan ini, dengan byte yang hilang diganti dengan byte ke-32 di halaman kode yang Anda gunakan (dalam banyak, banyak kode-halaman karakter spasi).

Anda dapat menyertakan baris baru * yang tercetak cantik (tetapi tidak ada spasi tambahan di baris) jika itu membantu.

Misalnya menggunakan halaman kode Jelly output ini dapat diterima:

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

... tapi begitu juga:

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

... dan begitu juga:

[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]

(Yang terakhir ini adalah keluaran daftar yang valid dalam bahasa apa pun dengan halaman kode apa pun, dan orang juga dapat menggunakan pemformatan daftar yang masuk akal.)


Berikut ini adalah kode Python 3 yang menunjukkan byte ASCII yang tidak tersedia.

* Meskipun pencetakan itu sendiri mungkin tidak terlalu cantik!

Jonathan Allan
sumber
Anda tidak boleh menggunakan salah satu dari 97 byte ini dalam kode Anda. Apakah itu berarti saya tidak boleh menggunakan karakter ASCII ini: $%&*123456=ADHKRY]``ghosvz}~dan tidak ada baris baru?
Titus
1
@Titus Jika halaman kode Anda sejajar dengan ASCII, maka ya - atau tab atau karakter lainnya dalam rentang yang diberikan, misalnya yang tidak dicetak atau diperluas. (Juga - lihat skrip Python yang ditautkan di TIO)
Jonathan Allan
2
Untuk apa nilainya, inilah validator kode (dengan asumsi tidak ada halaman kode khusus).
Arnauld
Saya hampir memilikinya di PHP ... hanya perlu cara array_map(function($n){return sprintf("%6b",$n);},...)tanpa $(saya bisa melakukan itu) DAN tanpa }(tidak tahu). Iya; Saya ingin mengemas data!
Titus

Jawaban:

7

Python 2 , 321 203 byte

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','')))))

Cobalah online!


Penjelasan:

dari dalam keluar:

cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclkadalah nomor yang 25731972618407747697792173390589410779249734035626759409848989703511287412985dikodekan dengan karakter yang diizinkan. (Tidak 123456diizinkan)

reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbl..bclkf','') memetakan string ke string desimalnya:

  • reduce(lambda x,y:x+y,'..','')sama dengan ''.join('..')(Tidak odiizinkan)
  • repr('..')alih-alih str('..')(Tidak sdiizinkan)
  • 'abcdefijkl'.find(y) memetakan char ke digit.

enumerate(bin(int(...)))mengubah string angka menjadi string biner, dan menghitungnya. Ini memberi pasangan[(0,0), (1,b), (2,1), (3,1), ...]

map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8, ... ) mengkonversi daftar yang disebutkan ke hasil akhir.

  • map(lambda(i,x):.. , .. )alih-alih [... for(i,x)in ...](Tidak o]diizinkan)
  • lambda(i,x): ..mengkonversi setiap pasangan (indeks, nilai) menjadi indeks atau 32.
  • (x>'0'and i-8-8-8-8)+8+8+8+8 sama dengan:
    • x>'0'and i or 8+8+8+8, (Tidak odiizinkan)
    • [8+8+8+8,i][x>'0']atau [8<<9-7,i][x>'0'], (Tidak ]diizinkan)
  • 8+8+8+8= 32(Tidak 23diizinkan)

Ini berarti bahwa program ini pada dasarnya sama dengan:

print[[32,i][x>'0']for i,x in enumerate(bin(25731972618407747697792173390589410779249734035626759409848989703511287412985))]
TFeld
sumber
Beberapa pekerjaan golf yang bagus di sana: D
Jonathan Allan
7

C (gcc) , 318 byte

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;??>

Cobalah online!

Yang ini sedikit perjalanan ...

1. Mengompresi daftar

Entah bagaimana kita perlu memeriksa apakah integer yang diberikan adalah salah satu poin kode khusus. Daftar 'telanjang' akan terlalu panjang, jadi kami menggunakan daftar periksa. Daftar ini memiliki nilai bukan nol pada titik kode yang 'dibatasi' dan nilai nol pada titik yang tidak.

Sayangnya ini masih membutuhkan 512 byte hanya untuk memiliki daftar (sepertinya 0,0,7,7,0,7,0,...). Ini bisa disingkat dengan bitmask.

Untuk memanfaatkan bitmask, kami akan memecah setiap byte menjadi dua bagian. 3 bit pertama akan memilih topeng dari array sementara 5 bit terakhir akan memilih sedikit dalam array. Kami tidak dapat mengecilkan array lebih jauh karena integer 32-bit yang digunakan secara default tidak mendukung lebih dari 2 ^ 5 = 32 bit.

Menggunakan implementasi referensi saya menulis:

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;
}

Saya bisa menghasilkan nilai yang sesuai untuk array baru ini menggunakan perintah echo "obase=16;ibase=2;$(./a.out | rev)" | bc. Ini meneruskan output dari program di atas ( ./a.out) ke revprogram, yang membalikkan setiap baris. Ini mencetak ini bersama dengan header ke bc yang menetapkan basis output ke 16 dan basis input ke 2. Dengan demikian bc mengubah digit biner menjadi bitmask heksadesimal.

Array yang dihasilkan dapat dilihat dalam solusi 'beta' ini:

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. Menangani kendala

Ada banyak kendala yang perlu ditempatkan pada kode di atas. Di sini saya membahas masing-masing 1-per-1.

  1. Tidak ada tugas

Ini dirasakan oleh bahasa lain juga, tanpa penugasan dalam C sangat sulit untuk mendapatkan nilai yang dijamin ke dalam variabel. Cara termudah bagi kita adalah menulis fungsi kita sebagai program lengkap. Argumen pertama mainakan melewati nilai argcyang akan menjadi 1 jika dipanggil tanpa argumen.

  1. Tidak ada perulangan

Konstruksi hanya perulangan di C adalah for, while, dan gotosemua yang berisi karakter terbatas. Ini membuat kita menggunakan rekursi. Fungsi utama akan mulai dari 1 dan berulang sampai argumen adalah> 256, sementara itu akan mengurangi argumen secara internal untuk menggunakan nilai 0-diindeks.

  1. Nilai hex

Nilai-nilai dalam array di atas adalah heksadesimal, bahkan ketika dikonversi ke desimal, ini mengandung beberapa simbol terbatas, terutama 123456 (AD dapat lebih rendah-cased). Untuk mengatasinya, setiap konstanta di-XOR dengan konstanta lain sehingga karakter yang dibatasi dihapus. 1 menjadi 9 ^ B, 2 menjadi C ^ E, 3 menjadi B ^ 8, 4 menjadi 8 ^ C, 5 menjadi 9 ^ C, dan 6 menjadi 9 ^ F (ada lebih banyak cara untuk melakukannya, saya memilih cara ini) .

  1. Pencetakan

Pembatasan tidak meninggalkan banyak fungsi pencetakan yang tersisa untuk kita. putchardan putskeduanya dibatasi, meninggalkan printf. Sayangnya kami harus mengirim printfstring format, idealnya "% c". Semua string seperti itu memiliki tanda sial yang ingin kita hapus. Untungnya kami menganggap mesin little-endian (karena ternyata itulah yang digunakan TIO, dan itu cukup khas). Dengan membangun integer yang byte dalam memori adalah 0x25 (%), 0x63 (c), 0x00 (\ 0), apa saja (tidak masalah, setelah terminator nol) kita bisa meneruskan alamatnya printfdan akan menganggapnya adalah sebuah string. Salah satu nomor yang berfungsi adalah -989830363 (0xC5006325). Ini mudah dibuat di bawah batasan sebagai 77707-989908070.

Masih ada masalah bahwa kami tidak dapat mereferensikan nilai apa pun (karena kami tidak dapat menetapkannya dan karena kami tidak dapat menggunakan &), jadi kami harus menggunakan array literal (int []) {...}. Kami sebenarnya menggunakan ini untuk array bitmask di atas juga.

  1. Kurung penutup

Kami tidak dapat menggunakan ']' atau '}' untuk menutup array atau fungsi kami. Untungnya C memiliki digraf dan trigraph yang berfungsi. :>akan menjadi ], sementara ??>akan menjadi }. Ini membutuhkan gcc untuk -trigraphsberalih, karena mengabaikan trigraph secara default (melanggar standar).

  1. Operasi bitwise

Kita tidak bisa menggunakan &untuk menutupi bit dari indeks kita, juga tidak bisa kita gunakan %untuk sampai ke sana dengan cara kuno. Karena itu kami mengandalkan implementasi perilaku spesifik. Secara khusus kami menggeser bilangan bulat 32-bit kami cukup jauh ke kiri untuk kehilangan bit, lalu kembali ke kanan. Sebagai contoh untuk mendapatkan 5 bit terakhir dari nomor kami, pertama-tama kita menggesernya meninggalkan 27 bit (meninggalkan abcde00000...) kemudian menggesernya kembali ke kanan sebesar 27 bit (meninggalkan ...00000abcde).

  1. Nilai-nilai lain-lain

Kami membutuhkan beberapa nilai literal di seluruh kode - ini diambil dari jawaban JS Arnauld, ditambah 27 (untuk alasan di atas) ditambahkan oleh saya sebagai 9+9+9.

3. Menyatukannya

Berikut ini deskripsi sumber dengan semua perubahan ini secara bersamaan.

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
??>
LambdaBeta
sumber
Kerja bagus! Penjelasan yang bagus juga. (Saya tidak 100% tetapi percaya bahwa tajuknya harus bertuliskan "C (gcc) -trigraphs")
Jonathan Allan
1
Ini untuk diperdebatkan. Kode ini tidak spesifik gcc, tidak sepenuhnya memenuhi standar kode, tetapi pada mesin saya cc mengkompilasinya dengan baik tanpa argumen. Tidak ada kompiler bawaan pada TIO yang sesuai dengan standar secara default, jika ada (atau versi gcc yang lebih lama) maka trigraph hanya akan menghasilkan peringatan.
LambdaBeta
Menggunakan ?:ekstensi g ++ , penyalahgunaan modulo bitwise shift 32, 273 byte
user202729
Itu pintar. Aku akan tetap seperti ini, karena versi ini tidak memerlukan -trigraphsopsi pada beberapa kompiler C, sementara ?:membutuhkan gcc yang membutuhkan -trigraphs.
LambdaBeta
6

brainfuck , 635 byte

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

Cobalah online!

Menanggapi akhirnya dikalahkan oleh Javascript, saya telah melakukan golf apa yang saya bisa dari ini:

1 byte disimpan dengan memiliki 32 di sel 0 dan menambah sel 1 (satu-satunya alasan saya awalnya memilikinya dengan cara lain adalah karena perbaikan cepat ketika OrjanJohansen menunjukkan saya tidak bisa menggunakan ])

1 byte disimpan dengan mengurangi sel ketiga (awalnya pada 0) untuk menghasilkan 255=-1

2 byte disimpan dengan mencetak spasi antara karakter 31 dan 36 tanpa menggunakan <>tetapi sebaliknya hanya berhenti pada 32 untuk mencetak dari sel 0 saat bertambah dari 31 hingga 33.

brainfuck , 639 byte

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

Cobalah online!

Pertama kita menghasilkan angka 32. Kemudian kita hanya melalui peningkatan satu sel dan beralih pencetakan antara sel itu dengan yang berisi 32. Angka yang terus bertambah adalah sesuatu yang dilakukan Brainfuck dengan baik.

Menyenangkan mengalahkan Javascript dengan Brainfuck, itu tidak sering terjadi!

Level River St
sumber
Maaf, tetapi ]bukan karakter yang diizinkan. Meskipun Anda masih harus bisa memperbaikinya dan mengalahkan Javascript. :)
Ørjan Johansen
@ ØrjanJohansen diperbaiki
Level River St
Maaf, Anda kehilangan Javascript.
user202729
@ user202729 cukup bagus! masih, saya telah mengalahkan Javascript selama 3 hari. Karena saya tidak dapat menggunakan loop karena ]tidak diizinkan, saya pikir jawaban BF saya mungkin optimal sekarang.
Level River St
5

JavaScript (SpiderMonkey) , 1918 1598 1487 1431 byte

Disimpan 56 byte berkat @ user202729

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)

Cobalah online!

Bagaimana?

Fakta yang =tidak diizinkan adalah show-killer di JS. Kami tidak dapat melakukan tugas variabel apa pun, dan kami juga tidak dapat menggunakan fungsi panah apa pun.

0789+-/|^<<>>

  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

Biarkan shiftCount menjadi hasil dari masking semua kecuali 5 bit rnum yang paling signifikan , yaitu, hitung rnum & 0x1F.

8<<988<<232

Arnauld
sumber
32sebagai 8<<9-7menyimpan satu byte untuk masing-masing 32.
TFeld
1
@TFeld Sebenarnya, saya menambahkan shift ke solver saya, yang baru saja ditemukan 32 = 8<<98(karena ). Beberapa ekspresi lagi dapat dipersingkat dengan cara ini. Masih mengerjakannya. 982(mod32)
Arnauld
3
"show-killer" atau "fun-maker"?
Jonathan Allan
2
@ JonathanAllan ;-) Yang terakhir keluar dari yang pertama!
Arnauld
Maaf jika saya bodoh, tetapi mengapa Anda menautkan ke versi lama SpiderMonkey?
Solomon Ucko
4

Haskell, 623 617 614 594 360 342 byte

Sunting: -234 bytes berkat @Lynn dengan menemukan pengkodean pola sebagai string. -18 byte terima kasih kepada @ Ørjan Johansen.

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))

Cobalah online!

Bagaimana itu bekerja

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
nimi
sumber
3
Anda dapat mengindeks (id:pure(\_->8+8+8+8))oleh 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 dan menyimpan banyak byte.
Lynn
1
342 byte dengan filteralih - alih untilcabang (dan cycleuntuk menghindari tambahan ++pure(...)).
Ørjan Johansen
3

Brain-Flak -r, 4190 4188 byte

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

Cobalah online!

Yang ini agak sulit untuk Brain-flak karena kita tidak bisa menggunakan ]atau }. Berarti satu-satunya karakter yang bermanfaat adalah <>().

Inilah program Haskell yang membantu saya menulis ini

Itu hanya menghitung melewatkan di mana ruang perlu dan mendorong mereka secara individual.

Ad Hoc Garf Hunter
sumber
Apakah ini terbukti optimal?
user202729
@ user202729 Saya kira tidak. Itu bisa saja. Tidak ada satu ton ruang gerak, tetapi saya masih jauh dari mampu membuktikan bahwa itu optimal. Walaupun karena kita tidak memiliki {}pencarian komputer sebenarnya dapat menemukan yang optimal dalam waktu yang terbatas.
Ad Hoc Garf Hunter
Saya akhirnya menulis sebuah program yang menghasilkan solusi optimal, namun itu sedikit lebih lambat dari yang saya harapkan. Namun, saya masih cukup cepat untuk menjalankannya.
user202729
@ user202729 Yah itu tidak optimal. Saya menemukan yang lebih pendek.
Ad Hoc Garf Hunter
3

JavaScript (SpiderMonkey) , 1001 919 789 441 byte

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)))

Cobalah online!

Akhirnya mengalahkan BF !!!

Ide umum

Konversi setiap karakter string string panjang ke indeks atau 32, tergantung pada nilainya.

Array.prototype.map? Cara mendapatkan array

Brute paksa untuk melihat objek mana yang dapat diakses dengan mengakses properti objek (karena ]tidak diperbolehkan, jadi hanya properti dengan nama yang cocok dengan pengidentifikasi yang dapat diakses).

RegExp.prototype.execmengembalikan objek seperti array ketika ada kecocokan. Ketika tidak ada argumen yang diberikan, argumen default ke undefined, jadi /u/.exec()cocok dan mengembalikan array.

Dapatkan 2 nilai berbeda yang sewenang-wenang pada 2 karakter yang berbeda

Kami ingin memiliki (x,y)=>x=='0'?32:y, tetapi kami tidak dapat menggunakan =.

Sebaliknya, kita akan lakukan

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

Kita dapat mapmerangkai beberapa fungsi, tetapi =>tidak diizinkan, jadi hanya beberapa fungsi yang dapat digunakan. Itu mungkin telah terikat thisdan beberapa argumen terikat (sehingga memiliki bentuk (x,y,z)=>pre_filled_function.call(pre,filled,args,etc,x,y,z))

Setelah mempertimbangkan daftar fungsi ( repeat exec bind create map indexOf replace fill find reduce filter findIndex call bind apply), saya memutuskan bahwa fungsi berikut akan digunakan (setelah mempertimbangkan semua kombinasi lainnya)

  • repeat: number -> string yang berbeda.
  • find: thisArg -> elemen pertama dalam kecocokan array.

Gagasan umumnya adalah:

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

di mana somefunctionmempertimbangkan thisargumen ( x) dan argumen pertama ( elem1atau elem2) dan mengembalikan apakah cocok.

Fungsi panah terakhir ditulis ulang menjadi [].find.bind([elem1,elem2],somefunction).

Array literal

Kita bisa menggunakan regex exec untuk mendapatkan array, dan fillitu dengan nilai yang berbeda. Misalnya /()/.exec()mengembalikan array panjang-2, maka kita bisa mengisinya sesuai kebutuhan.

Yang somefunctionmana yang kita butuhkan?

Kita memerlukan satu yang mengembalikan nilai kebenaran / kepalsuan bergantung pada this(yang merupakan 1 dari 2 fungsi yang akan kita kembalikan) dan argumen pertama (harus berupa string atau array).

Untuk itu, saya menggunakan indexOf- itu mengembalikan nilai fals jika iff argumen pertama adalah awalan dari thisargumen.

Mewakili fungsi literal

pengguna202729
sumber
1
tersandung ujung penjelasan dan akhirnya menggantung cabang
Ørjan Johansen
2

TI-Basic (83 series), 578 bytes

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 memiliki "halaman kode" yang sangat istimewa dengan pilihan desain yang aneh seperti memindahkan karakter spasi ke 0x29 sehingga 0x20 dapat menjadi randM(perintah.

Sulit untuk mengetahui bagaimana mendapatkan TI-Basic untuk menghasilkan objek yang tepat. String tidak akan berfungsi karena berbagai alasan: tidak ada cara untuk mereferensikan token tanpa menggunakan token, dan kami juga tidak diizinkan "karakternya. Kami tidak bisa hanya menulis daftar, karena {dan }dilarang. Kami diizinkan [dan ]karakter untuk matriks, tetapi matriks 1 oleh 256 tidak berfungsi, karena matriks diizinkan paling banyak 99 baris dan kolom. Kita tidak dapat menggunakan untuk menetapkan variabel, dan kita tidak bisa mendapatkan variabel daftar ʟatau L₁melalui L₆pula.

Jadi di sini, kita menuliskan formula logis yang rumit dengan ketidaksetaraan yang mengatakan kapan karakter adalah salah satu yang ingin kita hasilkan. Kemudian kami menggunakan seq(perintah untuk membuat daftar dengan 1posisi itu dan di 0tempat lain. Dari sana, seq(perintah lain dan beberapa aritmatika menyelesaikan pekerjaan.

Itu adalah bagian yang menyenangkan; sisanya adalah bermain golf konstanta dan saya mungkin belum melakukan itu sebanyak mungkin. Salah satu trik yang saya gunakan adalah bahwa secara default, Xmaxadalah 10, XFactadalah 4, dan ΔTbl1.

Misha Lavrov
sumber
Sementara matriks 1 * 256 tidak akan berfungsi, dapatkah Anda membuat sesuatu seperti matriks 3 * 99 dan menggunakan div / mod untuk mengindeks matriks?
user202729
Oh, kami juga tidak bisa mengindeks hal-hal, karena (dilarang.
Misha Lavrov
Apakah ada ekspresi kondisional (jika a maka b selain c) atau lantai atau mod? Presisi angka ~ 15 angka desimal kan?
user202729
Semua ini ada. Kita tidak bisa mendapatkan entri matriks [A](I,J), dan dari apa yang saya mengerti Anda ingin melakukan sesuatu seperti [A](int(I/99),I-99int(I/99))membaca semua elemen dari matriks [A]- kami juga tidak bisa melakukan itu. (Ngomong-ngomong, )juga dilarang. Untungnya, kita tidak harus menutup tanda kurung, tetapi membatasi bagaimana kita dapat menggunakan banyak perintah.)
Misha Lavrov
Saya sedang berpikir tentang menggunakan nomor untuk mengkodekan array, mirip dengan bitmask. Seperti (123456789 >> X) & 1 dalam Python.
user202729
1

Brain-Flak -r, 3894 bytes

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

Cobalah online!

Saya menulis sebuah program untuk menghasilkan program Brain-Flak yang optimal untuk output apa pun. Asumsikan bahwa:

  • <> tidak digunakan
  • Program saya benar

, maka solusi ini optimal.

O(n5)

pengguna202729
sumber
1

Python 2 , 162 157 byte

Peringatan : Karakter yang tidak dapat dicetak di depan!

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')))))

Cobalah online!

Berdasarkan jawaban TFeld yang ada , tetapi dengan beberapa perubahan:

A bytearraymirip dengan stryang iterable, namun, iterasi memberikan bilangan bulat, bukan karakter. Kita dapat menggunakannya untuk mengkodekan basis-N literal dan reduce(lambda x,y: x*N+y, my_bytearray)mendekodekannya.

Karena file Python 2 tidak memiliki encoding secara default, hanya karakter dalam ASCII (0..127) yang dapat digunakan. Null byte, baris baru, garis miring terbalik dan kutipan membutuhkan 1 byte lebih.

Juga, tidak mungkin menggunakan semua pangkalan.

Saya menulis sebuah program untuk menemukan representasi terpendek dari n, mengingat pembatasan itu.

pengguna202729
sumber