Elastyczność Kołmogorowa. AKA Wyprzedaż!

12

Jest to , , wyzwaniem produkować stałą wyjście bez wejścia.

Format wyjściowy jest jednak elastyczny - może być drukowany na standardowe wyjście, drukowany na standardowy błąd, zwracany jako lista znaków, zwracany jako lista bajtów lub zwracany jako lista liczb całkowitych. Jeśli uważasz, że cokolwiek innego wydaje się uzasadnione, po prostu zapytaj w komentarzach!

Oto prosty, wielkoliterowy kodek 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

Bez znaków nowej linii (lub spacji w dowolnych wierszach) ma 256 znaków:

 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

Indeksy (oparte na 0) znaków spacji są następujące:

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

Nie możesz używać żadnego z tych 97 bajtów w kodzie, ale musisz utworzyć listę (lub podobnie wyprowadzić) te bajty, w tej kolejności, a brakujące bajty zastąpiono 32 bajtem na używanej stronie kodowej (w wielu, wielu strony kodowe spacja).

Jeśli to pomaga, możesz dołączyć ładnie drukujące * znaki nowej linii (ale bez końcowych spacji na liniach).

Na przykład przy użyciu strony kodowej Jelly takie wyjście jest dopuszczalne:

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

... ale tak jest:

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

...tak więc jest:

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

(Ten ostatni jest prawidłowym wyjściem listy w dowolnym języku z dowolną stroną kodową i można również użyć dowolnego rozsądnego formatowania listy).


Oto kod Python 3, który pokazuje niedostępne bajty ASCII.

* Chociaż sam druk może nie być aż tak ładny!

Jonathan Allan
źródło
Nie możesz używać żadnego z tych 97 bajtów w kodzie Czy to oznacza, że ​​nie mogę używać tych znaków ASCII: $%&*123456=ADHKRY]``ghosvz}~i nie ma nowego wiersza?
Tytus
1
@Titus Jeśli twoja strona kodowa jest zgodna z ASCII, to tak - lub tabulatorem lub dowolnym innym znakiem w podanym zakresie, np. Niedrukowalne lub rozszerzone. (Również - patrz połączony skrypt Pythona w TIO)
Jonathan Allan
2
Dla tego, co jest warte, oto weryfikator kodu (zakładając, że nie ma specjalnej strony kodowej).
Arnauld
Prawie mam go w PHP ... potrzebuję tylko sposobu na array_map(function($n){return sprintf("%6b",$n);},...)bez $(mógłbym to zrobić) ORAZ bez }(bez pojęcia). Tak; Chcę spakować dane!
Tytus

Odpowiedzi:

7

Python 2 , 321 203 bajtów

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

Wypróbuj online!


Wyjaśnienie:

od wewnątrz:

cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclkto liczba 25731972618407747697792173390589410779249734035626759409848989703511287412985zakodowana za pomocą dozwolonych znaków. (Nie 123456wolno)

reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbl..bclkf','') odwzorowuje ciąg na ciąg dziesiętny:

  • reduce(lambda x,y:x+y,'..','')jest taki sam jak ''.join('..')(Nie owolno)
  • repr('..')zamiast str('..')(Nie swolno)
  • 'abcdefijkl'.find(y) odwzorowuje znak na cyfrę.

enumerate(bin(int(...)))konwertuje ciąg liczbowy na ciąg binarny i wylicza. To daje pary[(0,0), (1,b), (2,1), (3,1), ...]

map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8, ... ) konwertuje wyliczoną listę do końcowego wyniku.

  • map(lambda(i,x):.. , .. )zamiast [... for(i,x)in ...](Nie o]wolno)
  • lambda(i,x): ..konwertuje każdą parę (indeks, wartość) na indeks lub 32.
  • (x>'0'and i-8-8-8-8)+8+8+8+8 jest taki sam jak:
    • x>'0'and i or 8+8+8+8, (Nie owolno)
    • [8+8+8+8,i][x>'0']lub [8<<9-7,i][x>'0'](Nie ]wolno)
  • 8+8+8+8= 32(Nie 23wolno)

Oznacza to, że program jest zasadniczo taki sam jak:

print[[32,i][x>'0']for i,x in enumerate(bin(25731972618407747697792173390589410779249734035626759409848989703511287412985))]
TFeld
źródło
Kilka fajnych rzeczy do gry w golfa: D
Jonathan Allan
7

C (gcc) , 318 bajtów

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

Wypróbuj online!

To jest trochę podróż ...

1. Kompresowanie listy

Jakoś będziemy musieli sprawdzić, czy dana liczba całkowita jest jednym ze specjalnych punktów kodowych. Każda „naga” lista będzie zdecydowanie za długa, dlatego używamy listy kontrolnej. Ta lista ma niezerową wartość w punktach kodowych, które są „ograniczone” i zerową w tych, które nie są.

Niestety nadal zajmuje to 512 bajtów, aby mieć listę (wygląda na to 0,0,7,7,0,7,0,...). Można to skrócić za pomocą maski bitowej.

Aby skorzystać z maski bitowej, podzielimy każdy bajt na dwie części. Pierwsze 3 bity wybiorą maskę z tablicy, a ostatnie 5 bitów wybierze bit z tablicy. Nie możemy dalej zmniejszać tablicy, ponieważ 32-bitowe liczby całkowite używane domyślnie nie obsługują więcej niż 2 ^ 5 = 32 bity.

Korzystając z referencyjnej implementacji napisałem:

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

Byłem w stanie wygenerować odpowiednie wartości dla tej nowej tablicy za pomocą polecenia echo "obase=16;ibase=2;$(./a.out | rev)" | bc. To przekazuje wyjście powyższego programu ( ./a.out) do revprogramu, który odwraca każdą linię. Drukuje to wraz z nagłówkiem do bc, który ustawia bazę wyjściową na 16, a bazę wejściową na 2. W ten sposób bc konwertuje cyfry binarne na szesnastkową maskę bitową.

Powstałą tablicę można zobaczyć w tym rozwiązaniu „beta”:

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. Radzenie sobie z ograniczeniami

Istnieje wiele ograniczeń, które należy nałożyć na powyższy kod. Tutaj przeglądam każdy z nich 1 na 1.

  1. Bez zadania

Jest to odczuwalne również w innych językach, bez przypisania w C bardzo trudno jest uzyskać gwarantowane wartości w zmiennych. Najłatwiejszym sposobem jest napisanie naszej funkcji jako pełnego programu. Pierwszy argument mainzostanie przekazany, którego wartość argcwyniesie 1, jeśli zostanie wywołany bez argumentów.

  1. Bez zapętlania

Jedyne przelotowe konstrukcje w C są for, whilei gotoz których wszystkie zawierają zastrzeżonych znaków. To pozostawia nam korzystanie z rekurencji. Główna funkcja rozpocznie się od 1 i będzie powtarzać się, dopóki argument nie będzie> 256, tymczasem zmniejszy wewnętrznie argument, aby użyć wartości o indeksie 0.

  1. Wartości szesnastkowe

Wartości w powyższej tablicy są szesnastkowe, nawet jeśli są konwertowane na dziesiętne, zawierają pewne ograniczone symbole, w szczególności 123456 (AD może być pisane małymi literami). Aby obejść ten problem, każda stała jest XORowana z inną, tak że usuwane są ograniczone znaki. 1 staje się 9 ^ B, 2 staje się C ^ E, 3 staje się B ^ 8, 4 staje się 8 ^ C, 5 staje się 9 ^ C, a 6 staje się 9 ^ F (jest więcej sposobów na zrobienie tego, wybrałem w ten sposób) .

  1. Druk

Ograniczenia nie pozostawiają nam wielu funkcji drukowania. putchari putsoba są ograniczone, odchodząc printf. Niestety musimy wysłać printfciąg formatu, najlepiej „% c”. Wszystkie takie ciągi mają ten brzydki znak procentu, który chcemy usunąć. Na szczęście zakładamy maszynę typu endian (ponieważ najwyraźniej tego używa TIO i to dość typowe). Konstruując liczbę całkowitą, której bajty w pamięci to 0x25 (%), 0x63 (c), 0x00 (\ 0), cokolwiek (nie ma znaczenia, jest to po terminatorze zerowym) możemy po prostu przekazać jego adres printfi to założy jest ciągiem. Jednym z takich numerów, który działa, jest -989830363 (0xC5006325). Można to łatwo utworzyć pod ograniczeniami 77707-989908070.

Nadal istnieje problem polegający na tym, że nie możemy odwoływać się do żadnych wartości (ponieważ nie możemy ich przypisać i ponieważ nie możemy użyć &), więc musimy użyć literału tablicowego (int []) {...}. Właściwie używamy tego również dla powyższej tablicy maski bitowej.

  1. Nawiasy zamykające

Nie możemy używać „]” lub „}” do zamykania naszych tablic lub funkcji. Na szczęście C ma działające digrafy i trygrafy. :>stanie się ], a ??>stanie się }. Wymaga to przejęcia -trigraphsprzełącznika przez gcc , ponieważ domyślnie ignoruje trygrafy (z naruszeniem standardu).

  1. Operacje bitowe

Nie możemy użyć &do maskowania bitów z naszego indeksu, ani nie możemy użyć, %aby dostać się tam w staromodny sposób. Dlatego polegamy na zachowaniu specyficznym dla implementacji. W szczególności przesuwamy nasze 32-bitowe liczby całkowite wystarczająco daleko w lewo, aby stracić bity, a następnie z powrotem w prawo. Na przykład, aby uzyskać ostatnie 5 bitów naszego numeru, najpierw przesuwamy go w lewo o 27 bitów (pozostawiając abcde00000...), a następnie przesuwamy z powrotem w prawo o 27 bitów (pozostawiając ...00000abcde).

  1. Różne wartości

Potrzebujemy jeszcze kilku dosłownych wartości w całym kodzie - są one zaczerpnięte z odpowiedzi JS Arnaulda, plus 27 (z powyższego powodu) dodałem jako 9+9+9.

3. Złóż to razem

Oto opis źródła ze wszystkimi tymi zmianami razem.

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
źródło
Dobra robota! Ładne wyjaśnienie. (Nie jestem w 100%, ale wierzę, że nagłówek powinien brzmieć „C (gcc) -trigrafs”)
Jonathan Allan
1
To jest do debaty. Kod nie jest specyficzny dla gcc, nie jest w pełni zgodny ze standardami, ale na mojej maszynie cc kompiluje go bez żadnych argumentów. Po prostu nie ma wbudowanego kompilatora w TIO, który byłby domyślnie zgodny ze standardem, gdyby istniała (lub starsza wersja gcc), wówczas trygrafy generowałyby tylko ostrzeżenia.
LambdaBeta
Używając ?:rozszerzenia g ++ , nadużywaj bitowego przesunięcia modulo 32, 273 bajtów
user202729,
To sprytne. Mam zamiar to zachować, jak jest, ponieważ ta wersja nie potrzebuje -trigraphsopcji w niektórych kompilatorach języka C, a ?:wymaga gcc, który wymaga -trigraphs.
LambdaBeta
6

pieprzenie mózgu , 635 bajtów

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

Wypróbuj online!

W odpowiedzi na to, że w końcu zostałem pokonany przez Javascript, grałem w golfa, co mogę z tego:

Zapisano 1 bajt, mając 32 w komórce 0 i zwiększając komórkę 1 (jedynym powodem, dla którego początkowo miałem inny sposób, była szybka poprawka, gdy OrjanJohansen wskazał, że nie mogę użyć ])

1 bajt zapisany przez zmniejszenie trzeciej komórki (początkowo w 0) w celu wygenerowania 255=-1

2 bajty zapisane przez drukowanie spacji między znakami 31 i 36 bez użycia, <>ale zamiast tego po prostu zatrzymując się na 32, aby drukować z komórki 0 przy zwiększaniu z 31 do 33.

pieprzenie mózgu , 639 bajtów

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

Wypróbuj online!

Najpierw generujemy liczbę 32. Następnie po prostu zwiększamy jedną komórkę i przełączamy drukowanie między tą komórką a tą zawierającą 32. Ciągłe zwiększanie liczb to coś, co Brainfuck robi dobrze.

Fajnie jest pokonać Javascript za pomocą Brainfuck, nie zdarza się to często!

Level River St
źródło
Przepraszamy, ale ]nie jest dozwoloną postacią. Chociaż nadal powinieneś być w stanie to naprawić i pokonać Javascript. :)
Ørjan Johansen
@ ØrjanJohansen naprawiono
Level River St
Przepraszamy, straciłeś Javascript.
user202729,
@ user202729 całkiem nieźle! wciąż miałem JavaScript pobity przez 3 dni. Ponieważ nie mogę używać pętli, ponieważ ]jest to niedozwolone, myślę, że moja odpowiedź BF jest teraz prawdopodobnie optymalna.
Level River St
5

JavaScript (SpiderMonkey) , 1918 1598 1487 1431 bajtów

Zaoszczędzono 56 bajtów dzięki @ 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)

Wypróbuj online!

W jaki sposób?

Fakt, że =nie jest dozwolony, jest zabójcą show w JS. Nie możemy wykonać żadnego przypisania zmiennej, a także nie możemy użyć żadnej funkcji strzałki.

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

Niech shiftCount będzie wynikiem maskowania wszystkich oprócz 5 najmniej znaczących bitów rnum , czyli obliczenia rnum i 0x1F.

8<<988<<232

Arnauld
źródło
32jak 8<<9-7zapisuje bajt dla każdego 32.
TFeld
1
32 = 8<<98982(mod32)
3
„show-killer” czy „fun-maker”?
Jonathan Allan
2
@JonathanAllan ;-) Ten drugi pochodzi z tego pierwszego!
Arnauld
Przepraszam, jeśli jestem głupia, ale dlaczego łączysz się ze starą wersją SpiderMonkey?
Solomon Ucko
4

Haskell, 623 617 614 594 360 342 bajtów

Edytuj: -234 bajty dzięki @Lynn, znajdując kodowanie wzorca jako ciąg znaków. -18 bajtów dzięki @ Ø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))

Wypróbuj online!

Jak to działa

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
źródło
3
Można indeksu (id:pure(\_->8+8+8+8))przez 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 i zapisać pęczek bajtów.
Lynn
1
342 bajtów z filterzamiast untildo gałęzi (i cycleaby uniknąć zbędnego ++pure(...)).
Ørjan Johansen
3

Brain-Flak -r, 4190 4188 bajtów

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

Wypróbuj online!

Ten jest trochę trudny dla Brain-flak, ponieważ nie możemy użyć ]lub }. Oznacza to, że jedynymi przydatnymi postaciami są <>().

Oto program Haskell, który pomógł mi to napisać

Liczy się tylko pomijanie tam, gdzie muszą być spacje, i popychanie ich indywidualnie.

Ad Hoc Garf Hunter
źródło
Czy to jest optymalnie optymalne?
user202729,
@ user202729 Podejrzewam, że nie. Tak może być. Nie ma tony wahadłowego pokoju, ale daleko mi do udowodnienia , że jest optymalny. Chociaż ponieważ nie mamy {}wyszukiwania, komputer może znaleźć optymalny w skończonym czasie.
Ad Hoc Garf Hunter
W końcu piszę program, który generuje optymalne rozwiązanie, jednak jest on nieco wolniejszy niż się spodziewam. I nadal jest wystarczająco szybki, aby go uruchomić.
user202729,
@ user202729 Cóż, to nie było optymalne. Znalazłem krótszy.
Ad Hoc Garf Hunter
3

JavaScript (SpiderMonkey) , 1001 919 789 441 bajtów

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

Wypróbuj online!

Wreszcie bije BF !!!

Główny pomysł

Konwertuj każdy znak długiego łańcucha na indeks lub 32, zależnie od wartości.

Array.prototype.map? Jak zdobyć tablicę

Brutalna siła, aby zobaczyć, które obiekty są dostępne poprzez dostęp do właściwości obiektu (ponieważ ]jest to niedozwolone, więc dostępne są tylko właściwości o nazwie pasującej do identyfikatora).

RegExp.prototype.execzwraca obiekt podobny do tablicy, gdy występuje dopasowanie. Jeśli nie podano żadnego argumentu, domyślnie jest to argument undefined, więc /u/.exec()dopasowuje i zwraca tablicę.

Uzyskaj 2 dowolne odrębne wartości dla 2 różnych znaków

Chcemy mieć (x,y)=>x=='0'?32:y , ale nie możemy użyć =.

Zamiast tego zrobimy

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

Możemy mapnapisać nad jakąś funkcją, ale=> nie jest to dozwolone, więc można użyć tylko kilku funkcji. Może mieć związane thisi niektóre powiązane argumenty (więc ma formę (x,y,z)=>pre_filled_function.call(pre,filled,args,etc,x,y,z))

Po rozważeniu listy funkcji (repeat exec bind create map indexOf replace fill find reduce filter findIndex call bind apply ) postanawiam, że zostaną użyte następujące funkcje (po rozważeniu wszystkich innych kombinacji)

  • repeat: liczba -> różne ciągi.
  • find: thisArg -> pierwszy element w dopasowaniu tablicowym.

Ogólny pomysł byłby następujący:

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

gdzie somefunctionrozważa thisargument ( x) i pierwszy argument (elem1 lub elem2) i zwraca, czy pasuje.

Ostatnia funkcja strzałki jest przepisana na [].find.bind([elem1,elem2],somefunction) .

Dosłownie tablica

Możemy użyć regex exec, aby uzyskać tablicę fillo różnych wartościach. Na przykład/()/.exec() zwraca tablicę o długości 2, a następnie możemy wypełnić ją w razie potrzeby.

Który somefunction potrzebujemy?

Potrzebujemy takiego, który zwraca wartość prawdy / fałszu zależy od this (która jest 1 z 2 funkcji, którą zwrócimy) i pierwszego argumentu (musi być łańcuchem lub tablicą).

Użyłem do tego indexOf- zwraca wartość fałszowania, jeśli pierwszy argument jest przedrostkiem thisargumentu.

Reprezentują literały funkcji

użytkownik202729
źródło
1
potyka się o wyjaśnienia i kończy zwisające z gałęzi
Ørjan Johansen
2

TI-Basic (seria 83), 578 bajtów

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 ma swoją własną specjalną „stronę kodową” z dziwnymi opcjami projektowania, takimi jak przeniesienie znaku spacji na 0x29, aby 0x20 mógł byćrandM( poleceniem.

Trudno jest wymyślić, jak uzyskać TI-Basic, aby wyświetlał odpowiedni rodzaj obiektu. Łańcuchy nie działałyby z wielu powodów: nie ma sposobu na odwołanie się do tokena bez użycia tokena, a także nie wolno nam tej "postaci. Nie możemy po prostu napisać listy, ponieważ {i }są zabronione. Dozwolone są znaki [i ]dla macierzy, ale macierz 1 na 256 nie działa, ponieważ macierze są dozwolone maksymalnie 99 wierszy i kolumn. Nie możemy użyć do przypisania do zmiennych, i nie możemy dostać się do zmiennych listy ʟani L₁w L₆żaden sposób.

Tutaj zapisujemy skomplikowaną logiczną formułę z nierównościami, która mówi, że znak jest jednym z tych, które chcemy wyprowadzić. Następnie używamy seq(polecenia, aby wygenerować listę z 1tymi pozycjami i 0gdzie indziej. Stamtąd kolejne seq(polecenie i trochę arytmetyki kończy zadanie.

To była ekscytująca część; reszta gra w golfa w stałe i prawdopodobnie nie zrobiłem tego tak dużo, jak to możliwe. Jedną z sztuczek, których używam, jest to, że domyślnie Xmaxjest to 10, XFactto 4 i ΔTblto 1.

Misza Ławrow
źródło
Chociaż matryca 1 * 256 nie będzie działać, czy możesz zrobić coś takiego jak matryca 3 * 99 i użyć div / mod do indeksowania macierzy?
user202729,
Nie możemy też indeksować rzeczy, ponieważ (jest to zabronione.
Misza Ławrow
Czy istnieje wyrażenie warunkowe (jeśli a następnie b c) lub floor lub mod? Dokładność liczb wynosi ~ 15 cyfr dziesiętnych, prawda?
user202729,
Wszystkie istnieją. Po prostu nie możemy dostać się do wpisu macierzy iz tego [A](I,J), co rozumiem, chcesz zrobić coś takiego, jak [A](int(I/99),I-99int(I/99))odczytanie wszystkich elementów macierzy [A]- nie możemy tego zrobić. (Nawiasem mówiąc, )jest również zabronione. Na szczęście nie musimy zamykać nawiasów końcowych, ale ogranicza to sposób, w jaki możemy używać wielu poleceń.)
Misha Lavrov
Myślę o użyciu liczby do zakodowania tablicy, podobnej do maski bitowej. Jak (123456789 >> X) i 1 w Pythonie.
user202729,
1

Brain-Flak -r, 3894 bajtów

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

Wypróbuj online!

Napisałem program do generowania optymalnego programu Brain-Flak dla każdego wyjścia. Zakładać, że:

  • <> nie jest używany
  • Mój program jest poprawny

, to rozwiązanie jest optymalne.

O(n5)

użytkownik202729
źródło
1

Python 2 , 162 157 bajtów

Ostrzeżenie : Przedmioty niedrukowalne przed nami!

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

Wypróbuj online!

Na podstawie istniejącej odpowiedzi TFeld , ale z kilkoma zmianami:

A bytearrayjest podobny do strtego, że jest iterowalny, jednak iteracja daje liczby całkowite, a nie znaki. Możemy go użyć do zakodowania literału base-N i reduce(lambda x,y: x*N+y, my_bytearray)odkodowania go.

Ponieważ pliki Pythona 2 nie mają domyślnie kodowania, można używać tylko znaków w ASCII (0..127). Bajt zerowy, znaki nowej linii, ukośniki odwrotne i cytaty zajmują jeszcze 1 bajt.

Ponadto nie można używać wszystkich baz.

Napisałem program, aby znaleźć najkrótszą reprezentację n, biorąc pod uwagę te ograniczenia.

użytkownik202729
źródło