Kolmogorov Flexibilität. AKA Sale!

12

Dies ist eine , , - Herausforderung einen festen Ausgang ohne Eingabe zu erzeugen.

Das Ausgabeformat ist jedoch flexibel - es kann als Standardausgabe ausgegeben, als Standardfehler ausgegeben, als Liste von Zeichen zurückgegeben, als Liste von Bytes zurückgegeben oder als Liste von Ganzzahlen zurückgegeben werden. Wenn Sie der Meinung sind, dass etwas anderes vernünftig erscheint, fragen Sie einfach in den Kommentaren nach!

Hier ist ein einfacher ASCII-Kunst- CODEGOLF mit großen Buchstaben :

 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

Ohne Zeilenumbrüche (oder Leerzeichen in den Zeilen) sind 256 Zeichen zulässig:

 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

Die (0-basierten) Indizes der Nicht-Leerzeichen sind:

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

Sie dürfen keines dieser 97 Bytes in Ihrem Code verwenden , müssen jedoch eine Liste (oder eine ähnliche Ausgabe) dieser Bytes in dieser Reihenfolge erstellen, wobei die fehlenden Bytes durch das 32. Byte in der von Ihnen verwendeten Codepage ersetzt werden (in vielen, vielen) Codeseiten ein Leerzeichen).

Sie können die hübschen * Zeilenumbrüche (aber keine nachgestellten Leerzeichen in den Zeilen) einfügen, wenn dies hilfreich ist.

Zum Beispiel mit der Jelly Code-Seite ist diese Ausgabe akzeptabel:

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

... aber so ist es:

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

...und so ist:

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

(Letzteres ist eine gültige Listenausgabe in einer beliebigen Sprache mit einer beliebigen Codepage, und es kann auch eine angemessene Listenformatierung verwendet werden.)


Hier ist Python 3-Code, der die nicht verfügbaren ASCII-Bytes anzeigt.

* Obwohl der Druck selbst vielleicht gar nicht so hübsch ist!

Jonathan Allan
quelle
Sie dürfen keines dieser 97 Bytes in Ihrem Code verwenden. Bedeutet das, dass ich diese ASCII-Zeichen nicht verwenden darf: $%&*123456=ADHKRY]``ghosvz}~und kein Zeilenvorschub?
Titus
1
@Titus Wenn Ihre Codepage mit ASCII übereinstimmt, dann ja - oder ein Tabulator oder eines der anderen Zeichen im angegebenen Bereich, z. B. die nicht druckbaren oder erweiterten. (Siehe auch das verknüpfte Python-Skript bei TIO)
Jonathan Allan
2
Für das, was es wert ist, ist hier ein Code-Validator (vorausgesetzt, keine spezielle Codepage).
Arnauld
Ich habe es fast in PHP ... brauche nur einen Weg array_map(function($n){return sprintf("%6b",$n);},...)ohne $(ich könnte das tun) UND ohne }(keine Ahnung). Ja; Ich möchte die Daten packen!
Titus

Antworten:

7

Python 2 , 321 203 Bytes

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

Probieren Sie es online!


Erläuterung:

von innen heraus:

cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclkist die Zahl 25731972618407747697792173390589410779249734035626759409848989703511287412985, die mit zulässigen Zeichen codiert ist. (Nein ist 123456erlaubt)

reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbl..bclkf','') ordnet die Zeichenfolge der Dezimalzeichenfolge zu:

  • reduce(lambda x,y:x+y,'..','')ist dasselbe wie ''.join('..')(Nein ist oerlaubt)
  • repr('..')statt str('..')(Nein s, erlaubt)
  • 'abcdefijkl'.find(y) ordnet einen Buchstaben einer Ziffer zu.

enumerate(bin(int(...)))konvertiert den Zahlenstring in einen Binärstring und zählt auf. Dies gibt die Paare[(0,0), (1,b), (2,1), (3,1), ...]

map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8, ... ) wandelt die Aufzählung in das Endergebnis um.

  • map(lambda(i,x):.. , .. )statt [... for(i,x)in ...](Nein o], erlaubt)
  • lambda(i,x): ..konvertiert jedes (Index-, Wert-) Paar entweder in den Index oder 32.
  • (x>'0'and i-8-8-8-8)+8+8+8+8 ist das gleiche wie:
    • x>'0'and i or 8+8+8+8, (Nein o, erlaubt)
    • [8+8+8+8,i][x>'0']oder [8<<9-7,i][x>'0'], (Nein ], erlaubt)
  • 8+8+8+8= 32(Nein ist 23erlaubt)

Das heißt, das Programm ist im Wesentlichen dasselbe wie:

print[[32,i][x>'0']for i,x in enumerate(bin(25731972618407747697792173390589410779249734035626759409848989703511287412985))]
TFeld
quelle
Einige nette Golfarbeit dort: D
Jonathan Allan
7

C (gcc) , 318 Bytes

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

Probieren Sie es online!

Dieser ist ein bisschen eine Reise ...

1. Komprimieren Sie die Liste

Irgendwie müssen wir überprüfen, ob eine bestimmte Ganzzahl einer der speziellen Codepunkte ist. Jede "nackte" Liste ist viel zu lang, deshalb verwenden wir eine Checkliste. Diese Liste hat an Codepunkten, die 'eingeschränkt' sind, einen Wert ungleich Null und an solchen, die es nicht sind, einen Wert ungleich Null.

Leider dauert dies immer noch 512 Bytes, nur um die Liste zu haben (wie es aussieht 0,0,7,7,0,7,0,...). Dies kann mit einer Bitmaske gekürzt werden.

Um die Bitmaske zu verwenden, werden wir jedes Byte in zwei Teile aufteilen. Die ersten 3 Bits wählen eine Maske aus einem Array aus, während die letzten 5 ein Bit im Array auswählen. Das Array kann nicht weiter verkleinert werden, da die standardmäßig verwendeten 32-Bit-Ganzzahlen nicht mehr als 2 ^ 5 = 32 Bit unterstützen.

Unter Verwendung einer Referenzimplementierung schrieb ich:

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

Mit dem Befehl konnte ich die entsprechenden Werte für dieses neue Array generieren echo "obase=16;ibase=2;$(./a.out | rev)" | bc. Dies übergibt die Ausgabe des obigen Programms ( ./a.out) an das revProgramm, das jede Zeile umkehrt. Dies wird zusammen mit einem Header an bc ausgegeben, der die Ausgangsbasis auf 16 und die Eingangsbasis auf 2 setzt. Somit konvertiert bc die Binärziffern in eine hexadezimale Bitmaske.

Das resultierende Array ist in dieser "Beta" -Lösung zu sehen:

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. Umgang mit den Zwängen

Es gibt viele Einschränkungen, die für den obigen Code gelten müssen. Hier gehe ich einzeln durch.

  1. Keine Zuordnung

Dies wird auch von anderen Sprachen wahrgenommen. Ohne Zuweisung in C ist es sehr schwierig, garantierte Werte in Variablen zu erhalten. Für uns ist es am einfachsten, unsere Funktion als vollständiges Programm zu schreiben. Das erste Argument von mainwird übergeben, dessen Wert argc1 ist, wenn es ohne Argumente aufgerufen wird.

  1. Keine Schleife

Die einzigen Schleifenkonstrukte in C sind for, whileund gotoalle enthalten eingeschränkte Zeichen. Dies lässt uns die Rekursion verwenden. Die Hauptfunktion beginnt bei 1 und wird solange wiederholt, bis das Argument> 256 ist. In der Zwischenzeit wird das Argument intern dekrementiert, um einen 0-indizierten Wert zu verwenden.

  1. Hex-Werte

Die Werte im obigen Array sind hexadezimal, auch wenn sie in dezimal umgewandelt wurden. Sie enthalten einige eingeschränkte Symbole, insbesondere 123456 (AD kann in Kleinbuchstaben geschrieben sein). Um dies zu umgehen, wird jede Konstante mit einer anderen XOR-Verknüpfung versehen, sodass die eingeschränkten Zeichen entfernt werden. Aus 1 wird 9 ^ B, aus 2 wird C ^ E, aus 3 wird B ^ 8, aus 4 wird 8 ^ C, aus 5 wird 9 ^ C und aus 6 wird 9 ^ F. .

  1. Drucken

Die Einschränkungen überlassen uns nicht viele Druckfunktionen. putcharund putssind beide eingeschränkt, verlassen printf. Leider müssen wir printfeinen Formatstring senden , idealerweise "% c". Alle diese Zeichenfolgen haben das lästige Prozentzeichen, das wir entfernen möchten. Zum Glück nehmen wir eine Little-Endian-Maschine an (denn anscheinend verwendet TIO diese, und das ist ziemlich typisch). Indem wir die Ganzzahl konstruieren, deren Bytes im Speicher 0x25 (%), 0x63 (c), 0x00 (\ 0) sind, können wir alles (egal, es steht hinter dem Nullterminator) einfach an seine Adresse übergeben printfund es wird angenommen ist eine Zeichenfolge. Eine solche Nummer, die funktioniert, ist -989830363 (0xC5006325). Dies ist unter den Einschränkungen 77707-989908070 einfach zu erstellen.

Es gibt immer noch das Problem, dass wir keine Werte referenzieren können (weil wir sie nicht zuweisen können und weil wir & nicht verwenden können), daher müssen wir ein Array-Literal (int []) {...} verwenden. Wir verwenden dies tatsächlich auch für das obige Bitmasken-Array.

  1. Klammern schließen

Wir können weder ']' noch '}' verwenden, um unsere Arrays oder Funktionen zu schließen. Glücklicherweise hat C Digraphen und Trigraphen, die funktionieren. :>wird werden ], während ??>werden wird }. Dies erfordert, dass gcc den -trigraphsSchalter übernimmt , da standardmäßig Trigraphen ignoriert werden (was gegen den Standard verstößt).

  1. Bitweise Operationen

Wir können weder &Teile unseres Index maskieren, noch können wir sie %auf altmodische Weise verwenden. Deshalb setzen wir auf implementierungsspezifisches Verhalten. Insbesondere verschieben wir unsere 32-Bit-Ganzzahlen weit genug nach links, um Bits zu verlieren, und dann zurück nach rechts. Um zum Beispiel die letzten 5 Bits unserer Zahl zu erhalten, verschieben wir sie zuerst um 27 Bits nach links (Verlassen abcde00000...) und dann um 27 Bits nach rechts (Verlassen ...00000abcde).

  1. Verschiedene Werte

Wir brauchen noch ein paar wörtliche Werte im gesamten Code - diese stammen aus Arnauld's JS-Antwort, plus 27 (aus dem obigen Grund) wird von mir als hinzugefügt 9+9+9.

3. Setzen Sie es zusammen

Hier ist die Beschreibung der Quelle mit all diesen Änderungen zusammen.

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
quelle
Gut gemacht! Gute Erklärung auch. (Ich bin nicht 100% aber glaube, der Header sollte "C (gcc) -trigraphs" lesen)
Jonathan Allan
1
Es steht zur Debatte. Der Code ist nicht gcc-spezifisch, er ist nicht vollständig standardkonform, aber auf meinem Computer kompiliert cc den Code ohne Argumente. Es gibt in TIO nur keinen eingebauten Compiler, der standardmäßig dem Standard entspricht. Wenn es einen (oder einen älteren) Build von gcc gäbe, würden die Trigraphen nur Warnungen generieren.
LambdaBeta
Verwenden Sie die g ++ - ?:Erweiterung, um bitweise Shift Modulo 32, 273 Bytes zu
missbrauchen
Das ist schlau. Ich werde es jedoch so lassen, wie es ist, da diese Version die -trigraphsOption auf einigen C-Compilern nicht benötigt , während ?:gcc erforderlich ist -trigraphs.
LambdaBeta
6

Brainfuck , 635 Bytes

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

Probieren Sie es online!

Als Reaktion darauf, dass ich endlich von Javascript geschlagen wurde, habe ich alles getan, was ich kann:

1 Byte gespart durch 32 in Zelle 0 und Inkrementieren von Zelle 1 (der einzige Grund, warum ich es ursprünglich anders hatte, war eine schnelle Korrektur, als OrjanJohansen darauf hinwies, dass ich es nicht verwenden konnte ])

1 Byte gespart durch Dekrementieren einer dritten Zelle (anfänglich bei 0), um 255= zu erzeugen-1

2 Bytes, die durch das Drucken von Leerzeichen zwischen den Zeichen 31 und 36 ohne Verwendung von gespeichert werden, <>aber stattdessen einfach bei 32 anhalten, um von Zelle 0 aus zu drucken, wenn von 31 bis 33 inkrementiert wird.

Brainfuck , 639 Bytes

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

Probieren Sie es online!

Zuerst erzeugen wir die Zahl 32. Dann erhöhen wir nur eine Zelle und schalten den Druck zwischen der Zelle und der Zelle mit der Zahl 32 um. Stetig steigende Zahlen sind etwas, was Brainfuck gut kann.

Es ist schön, Javascript mit Brainfuck zu schlagen, es kommt nicht oft vor!

Level River St
quelle
Sorry, aber ]kein erlaubter Charakter. Obwohl Sie das immer noch beheben und das Javascript schlagen sollten. :)
Ørjan Johansen
@ ØrjanJohansen behoben
Level River St
Entschuldigung, Sie haben Javascript verloren.
User202729
@ user202729 ziemlich gut! trotzdem habe ich 3 tage lang javascript geschlagen. Da ich keine Schleifen verwenden kann, weil dies ]nicht erlaubt ist, denke ich, dass meine BF-Antwort jetzt wahrscheinlich optimal ist.
Level River St
5

JavaScript (SpiderMonkey) , 1918, 1598, 1487, 1431 Byte

56 Bytes dank @ user202729 gespeichert

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)

Probieren Sie es online!

Wie?

Die Tatsache, dass =das nicht erlaubt ist, ist ein Showkiller in JS. Wir können keine Variablen zuweisen und wir können auch keine Pfeilfunktion verwenden.

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

Sei shiftCount das Ergebnis des Maskierens aller bis auf die niedrigstwertigen 5 Bits von rnum , dh des Berechnens von rnum & 0x1F.

8<<988<<232

Arnauld
quelle
32as 8<<9-7speichert jeweils ein Byte 32.
TFeld
1
32 = 8<<98982(mod32)
3
"Show-Killer" oder "Fun-Maker"?
Jonathan Allan
2
@ JonathanAllan ;-) Der letztere kommt aus dem ersteren!
Arnauld
Tut mir leid, wenn ich dumm bin, aber warum verlinken Sie auf eine alte Version von SpiderMonkey?
Solomon Ucko
4

Haskell, 623 617 614 594 360 342 Bytes

Edit: -234 Bytes dank @Lynn durch Auffinden einer Musterkodierung als String. -18 Bytes dank @ Ø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))

Probieren Sie es online!

Wie es funktioniert

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
quelle
3
Sie können Index (id:pure(\_->8+8+8+8))durch 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 und speichern ein Bündel von Bytes.
Lynn
1
342 Bytes mit filterstatt untilzu verzweigen (und cycleein Extra zu vermeiden ++pure(...)).
Ørjan Johansen
3

Brain-Flak- r, 4190 4188 Bytes

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

Probieren Sie es online!

Dies ist ein wenig schwierig für Brain-Flak , da wir nicht verwenden können , ]oder }. Das heißt, die einzigen nützlichen Zeichen sind <>().

Hier ist ein Haskell-Programm, das mir beim Schreiben geholfen hat

Es zählt nur, zu überspringen, wo Räume sein müssen, und diese einzeln zu verschieben.

Post Rock Garf Hunter
quelle
Ist das nachweislich optimal?
User202729
@ user202729 vermute ich nicht. Es könnte aber sein. Es gibt nicht viel Spielraum, aber ich bin weit davon entfernt zu beweisen, dass es optimal ist. Obwohl wir da nicht haben{} Computersuche haben, konnten tatsächlich das Optimum in endlicher Zeit finden.
Post Rock Garf Hunter
Am Ende schreibe ich ein Programm, das die optimale Lösung generiert, jedoch etwas langsamer als erwartet. Trotzdem immer noch schnell genug, um ausgeführt zu werden.
user202729
@ user202729 Naja es war nicht optimal. Ich habe einen kürzeren gefunden.
Post 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)))

Probieren Sie es online!

Endlich schlägt BF !!!

Grund Idee

Konvertieren Sie jedes Zeichen der langen Zeichenfolge in den Index oder 32, abhängig vom Wert.

Array.prototype.map? Wie bekomme ich ein Array?

Brute Force , um festzustellen, auf welche Objekte zugegriffen werden kann, indem auf Objekteigenschaften zugegriffen wird (da dies ]nicht zulässig ist, sind nur Eigenschaften mit einem Namen zugänglich, der einem Bezeichner entspricht).

RegExp.prototype.execGibt ein Array-ähnliches Objekt zurück, wenn eine Übereinstimmung vorliegt. Wenn kein Argument zur Verfügung gestellt, auf das Argument Standardwert undefined, so /u/.exec()Streichhölzer und ein Array zurück.

Erhalte 2 willkürliche unterschiedliche Werte für 2 verschiedene Charaktere

Wir wollen haben (x,y)=>x=='0'?32:y , aber wir können nicht verwenden =.

Stattdessen werden wir tun

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

Wir können mapdie Zeichenfolge über eine Funktion, aber=> legen, dies ist jedoch nicht zulässig, sodass nur einige Funktionen verwendet werden können. Es kann gebundene thisund einige gebundene Argumente haben (so hat es die Form (x,y,z)=>pre_filled_function.call(pre,filled,args,etc,x,y,z))

Nach Prüfung einer Liste von Funktionen (repeat exec bind create map indexOf replace fill find reduce filter findIndex call bind apply ) entscheide ich, dass die folgenden Funktionen verwendet werden (nach Prüfung aller anderen Kombinationen)

  • repeat: number -> verschiedene Strings.
  • find: thisArg -> erstes Element in der Arrayübereinstimmung.

Die allgemeine Idee wäre:

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

wo somefunctionberücksichtigt das thisArgument ( x) und das erste Argument (elem1 oder elem2) und zurückgegeben, ob es übereinstimmt.

Die letzte Pfeilfunktion wird umgeschrieben [].find.bind([elem1,elem2],somefunction) .

Array-Literal

Wir können regex exec verwenden, um ein Array fillmit unterschiedlichen Werten zu erhalten. Beispielsweise/()/.exec() ein Array der Länge 2 zurück, dann können wir es nach Bedarf füllen.

Welche somefunction brauchen wir?

Wir brauchen eine, von der ein wahrer / falscher Wert abhängt this (dies ist eine von zwei Funktionen, die wir zurückgeben) und dem ersten Argument (muss eine Zeichenfolge oder ein Array sein).

Dafür habe ich verwendet indexOf- es gibt einen falschen Wert zurück, wenn das erste Argument ein Präfix von istthis Arguments ist.

Stellen Sie die Funktionsliterale dar

user202729
quelle
1
stolpert über das Ende der Erklärung und hängt von einem Ast ab
Ørjan Johansen
2

TI-Basic (Serie 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 hat eine spezielle "Code-Seite" mit seltsamen Design-Optionen wie dem Verschieben des Leerzeichens auf 0x29, sodass 0x20 der randM(Befehl sein kann.

Es ist schwierig herauszufinden, wie man TI-Basic dazu bringt, die richtige Art von Objekt auszugeben. Zeichenfolgen würden aus mehreren Gründen nicht funktionieren: Es gibt keine Möglichkeit, auf ein Token zu verweisen, ohne das Token zu verwenden, und wir dürfen das "Zeichen auch nicht verwenden. Wir können nicht einfach eine Liste schreiben, weil {und }verboten sind. Wir dürfen die Zeichen [und ]für Matrizen verwenden, aber eine 1 × 256-Matrix funktioniert nicht, da Matrizen höchstens 99 Zeilen und Spalten enthalten dürfen. Wir können nicht verwenden , um Variablen zuzuweisen, und wir können nicht an die Listenvariablen gelangen ʟoder sowieso L₁durch L₆.

Hier schreiben wir also eine komplizierte logische Formel mit Ungleichungen auf, die besagt, wenn ein Zeichen eines der Zeichen ist, die wir ausgeben möchten. Dann verwenden wir den seq(Befehl, um eine Liste mit 1an diesen Positionen und 0anderswo zu generieren . Von dort aus beendet ein weiterer seq(Befehl und ein wenig Rechnen den Job.

Das war der aufregende Teil; der Rest spielt mit den Konstanten und ich habe das wahrscheinlich nicht so oft wie möglich gemacht. Einer der Tricks, die ich benutze, ist standardmäßig Xmax10, XFact4 und ΔTbl1.

Mischa Lawrow
quelle
Während eine 1 * 256-Matrix nicht funktioniert, können Sie so etwas wie eine 3 * 99-Matrix erstellen und div / mod verwenden, um die Matrix zu indizieren?
User202729
Oh, wir können auch nichts indizieren, weil (es verboten ist.
Mischa Lawrow
Gibt es einen bedingten Ausdruck (wenn a dann b sonst c) oder Floor oder Mod? Die Genauigkeit der Zahlen beträgt ca. 15 Dezimalstellen, oder?
User202729
Alle diese existieren. Wir kommen mit einfach nicht zu einem Matrixeintrag [A](I,J), und nach meinem Verständnis möchten Sie so etwas wie [A](int(I/99),I-99int(I/99))alle Elemente der Matrix auslesen [A]- das können wir auch nicht. (Übrigens )ist auch verboten. Zum Glück müssen wir keine endenden Klammern schließen, aber es schränkt ein, wie viele Befehle verwendet werden können.)
Misha Lawrow
Ich denke darüber nach, eine Zahl zu verwenden, um ein Array zu codieren, ähnlich einer Bitmaske. Gefällt mir (123456789 >> X) & 1 in Python.
User202729
1

Brain-Flak- r, 3894 Bytes

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

Probieren Sie es online!

Ich habe ein Programm geschrieben, um für jede Ausgabe das optimale Brain-Flak-Programm zu generieren. Annehmen, dass:

  • <> ist nicht benutzt
  • Mein Programm ist korrekt

Dann ist diese Lösung optimal.

Ich war jedoch ein bisschen faul und implementierte eine Lösung, die nicht sehr schwer zu finden ist und die in 1M13s (Zeit in Anspruch nimmt) ausgeführt wird Ö(n5)oder so). Möglicherweise suche ich später nach einer effizienteren Lösung.

user202729
quelle
1

Python 2 , 162 157 Bytes

Achtung : Nicht druckbare Zeichen voraus!

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

Probieren Sie es online!

Basierend auf der bestehenden Antwort von TFeld , jedoch mit einigen Änderungen:

A bytearrayähnelt a str, ist jedoch iterierbar, es gibt Ganzzahlen, keine Zeichen. Wir können es verwenden, um ein Basis-N-Literal zu codieren und es reduce(lambda x,y: x*N+y, my_bytearray)zu decodieren.

Da Python 2-Dateien standardmäßig nicht codiert sind, können nur Zeichen in ASCII (0..127) verwendet werden. Null-Byte, Zeilenumbrüche, Backslashes und Anführungszeichen benötigen 1 Byte mehr.

Es ist auch nicht möglich, alle Basen zu verwenden.

Angesichts dieser Einschränkungen habe ich ein Programm geschrieben , um die kürzeste Darstellung zu finden n.

user202729
quelle