Ich habe ein Problem mit einem Cyberclub, der Sie zum Drucken auffordert:
ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
Verwenden von Brainf ** k in maximal 29 Bytes ohne Verwendung des Zeichens ','.
Ich habe einen Arbeitscode:
++++++++++[>++++++>+++++++++<<-]>-->.<[>-.<-]
Meine Schleife ist jedoch zu lang und sendet mir 16 Bytes über das Limit.
Gibt es eine effizientere Möglichkeit, die zweite und dritte Zelle auf 58 und 90 zu setzen, damit ich meine zweite Schleife ausführen kann? Oder gibt es einen besseren Weg, dies alles zusammen zu machen, den ich einfach nicht sehe?
-.
zu ändern.-
, indem Sie das löschen>.<
.+[--->++<]>++++[.-]
für 19 Bytes, aber es druckt auch die Steuerzeichen ...Antworten:
2724 BytesVerbrachte einen ganzen Tag damit, einen Brute Forcer aufzuschreiben und zu beobachten, wie die Ergebnisse eintrafen. Jetzt kann ich mich wieder an die eigentliche Arbeit machen ...Ein weiterer Tag des Brute Forcings später ...Probieren Sie es online!
Die Komponente
++[<++[++<]>>>+]
initialisiert das Band aufDas ist einfach perfekt für das, was wir brauchen!
quelle
+[[>++<<]>->+>+]<[-<-.>]
30 Bytes
Probieren Sie es online!
85 und 171 sind im Brainfuck relativ einfach zu erzeugen (modulare Inverse von 3 und -3 ). 85 liegt ziemlich nahe bei 90 und 171 liegt ziemlich nahe bei 177 ( 59 · 3 ), was hier verwendet wird. Mit ein bisschen Hackery kann ich stattdessen 88 und 176 produzieren .
Aber immer noch ein Byte hinter dem Ziel.
Andere Vorschläge
Im Allgemeinen ist es kürzer, über eine Liste zu iterieren und mit einer Konstanten zu multiplizieren, als auf die andere Weise. Dies gilt insbesondere für 3 oder mehr Werte. Zum Beispiel das:
kann geschrieben werden als:
Es gab nur zwei innere Werte, daher ist dies in diesem Fall keine große Verbesserung. Tatsächlich ist nur das Refactoring um ein Byte kürzer:
Multiplizieren Sie 30 mit 2 und 3 statt 10 mit 6 und 9 . Mit dem Vorschlag von Martin Büttner sind es bereits 38 Bytes, ohne viel am Original zu ändern:
quelle
34 Bytes
Sie haben 11 Bytes gespeichert, aber immer noch 5 Bytes zu lang ...
Ich habe schon Stunden damit verbracht, hoffentlich kann jemand dies verbessern.
quelle