Linh hoạt Kolmogorov. Giảm giá AKA! Giảm


12

Đây là một , , thách thức để sản xuất một sản lượng cố định không có đầu vào.

Tuy nhiên, định dạng đầu ra rất linh hoạt - nó có thể được in ra tiêu chuẩn, in thành lỗi tiêu chuẩn, được trả về dưới dạng danh sách các ký tự, được trả về dưới dạng danh sách các byte hoặc được trả về dưới dạng danh sách các số nguyên. Nếu bạn nghĩ bất cứ điều gì khác có vẻ hợp lý chỉ cần hỏi trong các ý kiến!

Dưới đây là một CODEGOLF nghệ thuật ASCII đơn giản, chữ lớn :

 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

Không có bất kỳ dòng mới nào (hoặc dấu cách trên bất kỳ dòng nào), nó dài 256 ký tự:

 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

Các chỉ số (dựa trên 0) của các ký tự không phải dấu cách là:

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

Bạn không được sử dụng bất kỳ 97 byte nào trong mã của mình nhưng phải tạo một danh sách (hoặc đầu ra tương tự) các byte này, theo thứ tự này, với các byte bị thiếu được thay thế bởi byte thứ 32 trong trang mã bạn đang sử dụng (trong nhiều, rất nhiều trang mã một ký tự không gian).

Bạn có thể bao gồm các dòng mới * in ấn (nhưng không có dấu cách trên các dòng) nếu nó giúp.

Ví dụ: sử dụng trang mã Jelly, kết quả này có thể chấp nhận được:

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

... nhưng cũng vậy:

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

...và như vậy là:

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

(Cái cuối cùng này là đầu ra danh sách hợp lệ trong bất kỳ ngôn ngữ nào với bất kỳ trang mã nào và người ta cũng có thể sử dụng bất kỳ định dạng danh sách hợp lý nào.)


Đây là mã Python 3 hiển thị các byte ASCII không có sẵn.

* Mặc dù bản in có thể không thực sự đẹp đến thế!


Bạn không được sử dụng bất kỳ 97 byte nào trong mã của mình Điều đó có nghĩa là tôi không thể sử dụng các ký tự ASCII này: $%&*123456=ADHKRY]``ghosvz}~và không có dòng mới?
Tít

1
@Titus Nếu trang mã của bạn căn chỉnh với ASCII thì có - hoặc một tab hoặc bất kỳ ký tự nào khác trong phạm vi đã cho, ví dụ: không thể in hoặc mở rộng. (Ngoài ra - xem tập lệnh Python được liên kết tại TIO)
Jonathan Allan

2
Đối với những gì nó có giá trị, đây là một trình xác nhận mã (giả sử không có trang mã đặc biệt).
Arnauld

Tôi gần như có nó trong PHP ... chỉ cần một cách để array_map(function($n){return sprintf("%6b",$n);},...)không có $(tôi có thể làm điều đó) VÀ không có }(không có ý tưởng). Đúng; Tôi muốn đóng gói dữ liệu!
Tít

Câu trả lời:


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

Hãy thử trực tuyến!


Giải trình:

từ trong ra ngoài:

cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclklà số 25731972618407747697792173390589410779249734035626759409848989703511287412985được mã hóa với các ký tự được phép. (Không 123456được phép)

reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbl..bclkf','') ánh xạ chuỗi thành chuỗi thập phân của nó:

  • reduce(lambda x,y:x+y,'..','')giống như ''.join('..')(Không ođược phép)
  • repr('..')thay vì str('..')(Không sđược phép)
  • 'abcdefijkl'.find(y) ánh xạ một char đến một chữ số.

enumerate(bin(int(...)))chuyển đổi chuỗi số thành chuỗi nhị phân và liệt kê. Điều này mang lại cho các cặp[(0,0), (1,b), (2,1), (3,1), ...]

map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8, ... ) chuyển đổi danh sách liệt kê thành kết quả cuối cùng.

  • map(lambda(i,x):.. , .. )thay vì [... for(i,x)in ...](Không o]được phép)
  • lambda(i,x): ..chuyển đổi từng cặp (chỉ mục, giá trị) thành chỉ mục hoặc 32.
  • (x>'0'and i-8-8-8-8)+8+8+8+8 giống như:
    • x>'0'and i or 8+8+8+8, (Không ođược phép)
    • [8+8+8+8,i][x>'0']hoặc [8<<9-7,i][x>'0'], (Không ]được phép)
  • 8+8+8+8= 32(Không 23được phép)

Điều này có nghĩa là chương trình về cơ bản giống như:

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

Một số công việc chơi golf tuyệt vời ở đó: 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;??>

Hãy thử trực tuyến!

Đây là một chút của một cuộc hành trình ...

1. Nén danh sách

Bằng cách nào đó chúng ta sẽ cần kiểm tra xem một số nguyên đã cho có phải là một trong những điểm mã đặc biệt hay không. Mọi danh sách 'khỏa thân' sẽ quá dài, vì vậy chúng tôi sử dụng danh sách kiểm tra. Danh sách này có giá trị khác không tại các điểm mã bị 'hạn chế' và giá trị 0 tại các điểm không có.

Thật không may, điều này vẫn mất 512 byte chỉ để có danh sách (nó trông như thế 0,0,7,7,0,7,0,...). Điều này có thể được rút ngắn với một bitmask.

Để sử dụng bitmask, chúng ta sẽ chia mỗi byte thành hai phần. 3 bit đầu tiên sẽ chọn một mặt nạ từ một mảng trong khi 5 bit cuối sẽ chọn một bit trong mảng. Chúng tôi không thể thu hẹp mảng thêm nữa vì các số nguyên 32 bit được sử dụng theo mặc định không hỗ trợ nhiều hơn 2 ^ 5 = 32 bit.

Sử dụng một triển khai tham chiếu tôi đã viết:

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

Tôi đã có thể tạo các giá trị thích hợp cho mảng mới này bằng cách sử dụng lệnh echo "obase=16;ibase=2;$(./a.out | rev)" | bc. Điều này chuyển đầu ra của chương trình trên ( ./a.out) sangrev chương trình, đảo ngược từng dòng. Nó in cái này cùng với một tiêu đề thành bc, đặt cơ sở đầu ra thành 16 và cơ sở đầu vào thành 2. Do đó bc chuyển đổi các chữ số nhị phân thành bitmask thập lục phân.

Mảng kết quả có thể được nhìn thấy trong giải pháp 'beta' này:

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. Xử lý các ràng buộc

Có rất nhiều ràng buộc cần phải được đặt vào đoạn mã trên. Ở đây tôi đi qua từng người trong số họ từng người một.

  1. Không có nhiệm vụ

Điều này cũng được cảm nhận bởi các ngôn ngữ khác, không có sự gán trong C, rất khó để có được bất kỳ giá trị được bảo đảm nào thành các biến. Cách dễ nhất cho chúng tôi là viết chức năng của chúng tôi như là một chương trình đầy đủ. Đối số đầu tiên mainsẽ được thông qua giá trị argcsẽ là 1 nếu được gọi mà không có đối số.

  1. Không lặp

Các cấu trúc chỉ lặp trong C là for, whilegototất cả đều có chứa các ký tự bị hạn chế. Điều này khiến chúng ta sử dụng đệ quy. Hàm chính sẽ bắt đầu từ 1 và lặp lại cho đến khi đối số> 256, trong khi đó, nó sẽ làm giảm đối số bên trong để sử dụng giá trị 0 được lập chỉ mục.

  1. Giá trị hex

Các giá trị trong mảng trên là thập lục phân, ngay cả khi được chuyển đổi thành số thập phân, chúng chứa một số ký hiệu bị hạn chế, đáng chú ý nhất là 123456 (AD có thể được đặt thấp hơn). Để giải quyết vấn đề này, mỗi hằng số được XOR với một hằng số khác để các ký tự bị hạn chế được loại bỏ. 1 trở thành 9 ^ B, 2 trở thành C ^ E, 3 trở thành B ^ 8, 4 trở thành 8 ^ C, 5 trở thành 9 ^ C và 6 trở thành 9 ^ F (có nhiều cách để làm điều đó, tôi đã chọn cách này) .

  1. In ấn

Các hạn chế không để lại nhiều chức năng in ấn cho chúng tôi. putcharputsđều bị hạn chế, rời đi printf. Thật không may, chúng tôi phải gửi printfmột chuỗi định dạng, lý tưởng là "% c". Tất cả các chuỗi như vậy có dấu phần trăm đáng tiếc mà chúng tôi muốn loại bỏ. May mắn thay, chúng tôi giả sử một cỗ máy nhỏ bé (vì rõ ràng đó là những gì TIO sử dụng, và đó là điều khá điển hình). Bằng cách xây dựng số nguyên có byte trong bộ nhớ là 0x25 (%), 0x63 (c), 0x00 (\ 0), bất cứ điều gì (không quan trọng, sau khi kết thúc null), chúng ta có thể chuyển địa chỉ của nó sang printfvà nó sẽ giả sử nó là một chuỗi. Một số như vậy hoạt động là -989830363 (0xC5006325). Điều này dễ dàng tạo ra theo các hạn chế là 77707-989908070.

Vẫn còn vấn đề là chúng ta không thể tham chiếu bất kỳ giá trị nào (vì chúng ta không thể gán chúng và vì chúng ta không thể sử dụng &), vì vậy chúng ta phải sử dụng một mảng bằng chữ (int []) {...}. Chúng tôi thực sự sử dụng điều này cho mảng bitmask ở trên là tốt.

  1. Đóng ngoặc

Chúng tôi không thể sử dụng ']' hoặc '}' để đóng các mảng hoặc hàm của chúng tôi. May mắn thay, C có các bản vẽ sơ đồ và bộ ba hoạt động. :>sẽ trở thành ], trong khi ??>sẽ trở thành }. Điều này đòi hỏi gcc phải thực hiện -trigraphschuyển đổi, vì nó bỏ qua các bộ ba theo mặc định (vi phạm tiêu chuẩn).

  1. Hoạt động bitwise

Chúng ta không thể sử dụng &để che dấu các bit khỏi chỉ mục của mình, chúng ta cũng không thể sử dụng %để đến đó theo cách lỗi thời. Do đó chúng tôi dựa vào hành vi cụ thể thực hiện. Cụ thể, chúng tôi dịch chuyển các số nguyên 32 bit của mình đủ xa sang bên trái để mất bit, sau đó quay lại bên phải. Ví dụ, để có được 5 bit cuối cùng của số chúng ta, trước tiên chúng ta dịch chuyển nó sang trái 27 bit ( abcde00000...sau đó) sau đó dịch chuyển nó sang bên phải thêm 27 bit (để lại ...00000abcde).

  1. Giá trị linh tinh

Chúng tôi cần thêm một vài giá trị theo nghĩa đen trong toàn bộ mã - những giá trị này được lấy từ câu trả lời JS của Arnauld, cộng với 27 (vì lý do trên) được tôi thêm vào như 9+9+9.

3. Đặt nó lại với nhau

Dưới đây là mô tả về nguồn với tất cả những thay đổi này cùng nhau.

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

Bạn đã làm rất tốt! Giải thích tốt quá. (Tôi không phải là 100% nhưng tin rằng tiêu đề nên đọc "C (gcc) -trologistss")
Jonathan Allan

1
Đó là tranh luận. Mã không phải là gcc cụ thể, mã không tuân thủ tiêu chuẩn hoàn toàn, nhưng trên cc máy của tôi biên dịch nó tốt mà không có đối số. Theo mặc định, không có trình biên dịch tích hợp trên TIO phù hợp với tiêu chuẩn, nếu có (hoặc bản dựng cũ của gcc) thì các bộ ba sẽ chỉ tạo ra các cảnh báo.
LambdaBeta

Sử dụng ?:tiện ích mở rộng g ++ , lạm dụng thay đổi
bitulo

Thật khéo léo. Tuy nhiên, tôi sẽ giữ nó vì phiên bản này không cần -trigraphstùy chọn trên một số trình biên dịch C, trong khi ?:yêu cầu gcc yêu cầu -trigraphs.
LambdaBeta

6

Brainfuck , 635 byte

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

Hãy thử trực tuyến!

Để đáp lại việc cuối cùng bị Javascript đánh bại, tôi đã đánh gôn những gì tôi có thể làm được từ đây:

1 byte được lưu bằng cách có 32 trong ô 0 và tăng ô 1 (lý do duy nhất ban đầu tôi có nó theo cách khác là vì cách khắc phục nhanh khi OrjanJohansen chỉ ra rằng tôi không thể sử dụng ])

1 byte được lưu bằng cách giảm một ô thứ ba (ban đầu là 0) để tạo 255=-1

2 byte được lưu bằng cách in khoảng trắng giữa các ký tự 31 và 36 mà không sử dụng <>mà thay vào đó chỉ dừng lại ở 32 để in từ ô 0 khi tăng từ 31 đến 33.

cân não , 639 byte

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

Hãy thử trực tuyến!

Đầu tiên chúng ta tạo số 32. Sau đó, chúng ta chỉ cần tăng một ô và chuyển đổi in giữa ô đó và ô chứa 32. Số tăng dần đều là thứ Brainfuck làm tốt.

Thật tuyệt khi đánh bại Javascript với Brainfuck, điều đó không xảy ra thường xuyên!


Xin lỗi, nhưng ]không phải là một nhân vật được phép. Mặc dù bạn vẫn có thể sửa nó và đánh bại Javascript. :)
janrjan Johansen

@ RjanJohansen đã sửa
Level River St

Xin lỗi, bạn đã mất Javascript.
dùng202729

@ user202729 khá tốt! Tuy nhiên, tôi đã bị Javascript đánh bại trong 3 ngày. Vì tôi không thể sử dụng các vòng lặp vì ]không được phép, tôi nghĩ rằng câu trả lời BF của tôi có lẽ là tối ưu.
Cấp sông St

5

JavaScript (SpiderMonkey) , 1918 1598 1487 1431 byte

Đã lưu 56 byte nhờ @ 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)

Hãy thử trực tuyến!

Làm sao?

Thực tế là = không được phép là một kẻ giết người trong chương trình. Chúng tôi không thể thực hiện bất kỳ phép gán biến nào và chúng tôi cũng không thể sử dụng bất kỳ chức năng mũi tên nào.

07số 89+-/|^<<>>

  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 :

Đặt shiftCount là kết quả của việc che giấu tất cả trừ 5 bit rnum có ý nghĩa ít nhất , nghĩa là tính toán rnum & 0x1F.

8<<988<<232


32như 8<<9-7tiết kiệm một byte cho mỗi 32.
TFeld

1
@TFeld Trên thực tế, tôi đã thêm ca vào bộ giải của mình, thứ vừa tìm thấy 32 = 8<<98(bởi vì982(mod32)). Một vài biểu thức có thể được rút ngắn theo cách này. Vẫn đang làm việc trên nó.
Arnauld

3
"Kẻ giết người show" hay "kẻ tạo niềm vui"?
Jonathan Allan

2
@Jonathan ALLan ;-) Cái sau xuất phát từ cái trước!
Arnauld

Xin lỗi nếu tôi ngu ngốc, nhưng tại sao bạn liên kết với một phiên bản cũ của SpiderMonkey?
Solomon Ucko

4

Haskell, 623 617 614 594 360 342 byte

Chỉnh sửa: -234 byte nhờ @Lynn bằng cách tìm mã hóa mẫu dưới dạng chuỗi. -18 byte nhờ @ janrjan 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))

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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
Bạn có thể lập chỉ mục (id:pure(\_->8+8+8+8))theo 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 và lưu một loạt byte.
Lynn

1
342 byte với filterthay vì untilđến chi nhánh (và cycleđể tránh thêm ++pure(...)).
Ørjan Johansen

3

Brain-Flak -r, 4190 4188 byte

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

Hãy thử trực tuyến!

Cái này hơi khó với Brain-flak vì chúng ta không thể sử dụng ]hoặc }. Có nghĩa là các nhân vật hữu ích duy nhất là <>().

Đây là một chương trình Haskell đã giúp tôi viết bài này

Nó chỉ đếm lên bỏ qua những nơi cần phải có và đẩy những cái đó riêng lẻ.


Đây có phải là tối ưu chứng minh?
dùng202729

@ user202729 Tôi nghi ngờ là không. Nó có thể là mặc dù. Không có một tấn phòng ngọ nguậy nhưng tôi không thể chứng minh rằng nó là tối ưu. Mặc dù vì chúng ta không có {}một tìm kiếm máy tính thực sự có thể tìm thấy tối ưu trong thời gian hữu hạn.
Đăng Rock Garf Hunter

Tôi cuối cùng đã viết một chương trình tạo ra giải pháp tối ưu, tuy nhiên nó chậm hơn một chút so với những gì tôi mong đợi. Tuy nhiên, tôi vẫn đủ nhanh để chạy.
dùng202729

@ user202729 Vâng, nó không tối ưu. Tôi tìm thấy một cái ngắn hơn.
Đăng Rock 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)))

Hãy thử trực tuyến!

Cuối cùng cũng đánh bại BF !!!

Ý tưởng chung

Chuyển đổi từng ký tự của chuỗi chuỗi dài thành chỉ mục của nó hoặc 32, tùy thuộc vào giá trị.

Array.prototype.map? Làm thế nào để có được mảng

Brute force để xem đối tượng nào có thể truy cập bằng cách truy cập các thuộc tính đối tượng (bởi vì] không được phép, do đó chỉ các thuộc tính có tên khớp với mã định danh mới có thể truy cập được).

RegExp.prototype.exectrả về một đối tượng giống như mảng khi có sự trùng khớp. Khi không có đối số được cung cấp, đối số mặc định là undefined, vì vậy/u/.exec() khớp và trả về một mảng.

Nhận 2 giá trị riêng biệt tùy ý trên 2 ký tự khác nhau

Chúng tôi muốn có (x,y)=>x=='0'?32:y, nhưng chúng tôi không thể sử dụng =.

Thay vào đó, chúng tôi sẽ làm

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

Chúng ta có thể mapchuỗi trên một số chức năng, nhưng =>không được phép, vì vậy chỉ có thể sử dụng một vài chức năng. Nó có thể có ràng buộc thisvà một số đối số ràng buộc (vì vậy nó có dạng (x,y,z)=>pre_filled_function.call(pre,filled,args,etc,x,y,z))

Sau khi xem xét danh sách các hàm ( repeat exec bind create map indexOf replace fill find reduce filter findIndex call bind apply), tôi quyết định rằng các hàm sau sẽ được sử dụng (sau khi xem xét tất cả các kết hợp khác)

  • repeat: số -> các chuỗi khác nhau.
  • find: thisArg -> phần tử đầu tiên trong mảng khớp.

Ý tưởng chung sẽ là:

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

trong đó somefunctionxem xét thisđối số ( x) và đối số đầu tiên ( elem1hoặc elem2) và trả về liệu nó có khớp hay không.

Hàm mũi tên cuối cùng được viết lại thành [].find.bind([elem1,elem2],somefunction) .

Mảng chữ

Chúng ta có thể sử dụng regex exec để lấy một mảng và fillnó với các giá trị khác nhau. Ví dụ /()/.exec()trả về một mảng length-2, sau đó chúng ta có thể điền nó khi cần.

somefunctionsao chúng ta cần?

Chúng ta cần một giá trị trả về giá trị trung thực / sai lệch phụ thuộc vào this(đó là 1 trong 2 hàm chúng ta sẽ trả về) và đối số đầu tiên (phải là một chuỗi hoặc mảng).

Đối với điều đó, tôi đã sử dụng indexOf- nó trả về giá trị giả mạo nếu đối số đầu tiên là tiền tố của thisđối số.

Đại diện cho chức năng chữ


1
vấp ngã khi kết thúc lời giải thích và cuộn dây treo trên cành cây
rjan Johansen

2

TI-Basic (sê-ri 83), 578 byte

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 có "trang mã" rất đặc biệt của riêng mình với các lựa chọn thiết kế kỳ lạ như di chuyển ký tự không gian sang 0x29 để 0x20 có thể là randM(lệnh.

Thật khó để tìm ra cách để TI-Basic xuất ra đúng loại đối tượng. Chuỗi sẽ không hoạt động vì nhiều lý do: không có cách nào để tham chiếu mã thông báo mà không sử dụng mã thông báo và chúng tôi cũng không cho phép "ký tự. Chúng tôi không thể chỉ viết một danh sách, bởi vì {}bị cấm. Chúng tôi được phép [và các ]ký tự cho ma trận, nhưng ma trận 1 x 256 không hoạt động, vì ma trận được phép tối đa 99 hàng và cột. Chúng tôi không thể sử dụng để gán cho các biến và chúng tôi không thể nhận được tại các biến danh sách ʟhoặc L₁thông qua L₆.

Vì vậy, ở đây, chúng tôi viết ra một công thức logic phức tạp với sự bất bình đẳng cho biết khi một nhân vật là một trong những nhân vật chúng tôi muốn xuất ra. Sau đó, chúng tôi sử dụng seq(lệnh để tạo một danh sách với 1các vị trí đó và các vị trí 0khác. Từ đó, một seq(lệnh khác và một số số học kết thúc công việc.

Đó là phần thú vị; phần còn lại là chơi gôn và tôi có lẽ đã không làm điều đó nhiều nhất có thể. Một trong những thủ thuật tôi sử dụng là theo mặc định, Xmaxlà 10, XFactlà 4 và ΔTbllà 1.


Trong khi ma trận 1 * 256 không hoạt động, bạn có thể tạo một thứ như ma trận 3 * 99 và sử dụng div / mod để lập chỉ mục ma trận không?
dùng202729

Ồ, chúng tôi cũng không thể lập chỉ mục mọi thứ, vì (bị cấm.
Misha Lavrov

Có biểu thức điều kiện (nếu a thì b khác c) hoặc sàn hoặc mod không? Số chính xác là ~ 15 chữ số thập phân phải không?
dùng202729

Tất cả những thứ này tồn tại. Chúng ta không thể có được một mục nhập ma trận [A](I,J), và từ những gì tôi hiểu bạn muốn làm một cái gì đó như [A](int(I/99),I-99int(I/99))để đọc tất cả các yếu tố của ma trận [A]- chúng ta cũng không thể làm điều đó. (Nhân tiện, )cũng bị cấm. May mắn thay, chúng ta không phải đóng dấu ngoặc đơn kết thúc, nhưng nó giới hạn cách chúng ta có thể sử dụng nhiều lệnh.)
Misha Lavrov

Tôi đang suy nghĩ về việc sử dụng một số để mã hóa một mảng, tương tự như bitmask. Giống như (123456789 >> X) & 1 bằng Python.
dùng202729

1

Brain-Flak -r, 3894 byte

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

Hãy thử trực tuyến!

Tôi đã viết một chương trình để tạo ra chương trình Brain-Flak tối ưu cho bất kỳ đầu ra nào. Giả sử:

  • <> Không được sử dụng
  • Chương trình của tôi là chính xác

, sau đó giải pháp này là tối ưu.

Tuy nhiên, tôi hơi lười biếng và thực hiện một giải pháp không khó để đưa ra, và nó kết thúc trong vòng 1m13 (mất thời gian Ôi(n5)hoặc là). Tôi có thể tìm kiếm giải pháp hiệu quả hơn sau này.


1

Python 2 , 162 157 byte

Cảnh báo : Nhân vật không thể in được phía trước!

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

Hãy thử trực tuyến!

Dựa trên câu trả lời hiện có của TFeld , nhưng với một vài thay đổi:

A bytearraytương tự như strnó lặp đi lặp lại, tuy nhiên, việc lặp lại nó mang lại số nguyên, không phải ký tự. Chúng ta có thể sử dụng nó để mã hóa một chữ N cơ sở và reduce(lambda x,y: x*N+y, my_bytearray)để giải mã nó.

Vì các tệp Python 2 không có mã hóa theo mặc định, chỉ các ký tự trong ASCII (0..127) có thể được sử dụng. Null byte, dòng mới, dấu gạch chéo ngược và dấu ngoặc kép mất thêm 1 byte.

Ngoài ra, không thể sử dụng tất cả các cơ sở.

Tôi đã viết một chương trình để tìm đại diện ngắn nhất n, với những hạn chế đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.