Drucken Sie 'A' 1000 Mal mit BrainFuck

11

Was ist der beste BrainFuck-Code (in Bezug auf die Codegröße), um 1000-mal 'A' zu drucken?

Mein Ansatz ist:

  • setze 'A' auf p [0]
  • Stellen Sie 255 auf p [1], um 255 'A' dreimal anzuzeigen
  • Stellen Sie 235 auf p [1], um 235 'A' anzuzeigen.

Dies ist nicht effektiv, aber ich kann keinen Weg finden, Schleppzähler gleichzeitig wie eine Multiplikation zu verwenden

Gibt es einen besseren Ansatz als eine Multiplikation?

Eine allgemeinere Frage: Gibt es eine Regel, um eine Multiplikation mit einer großen Zahl mit dem kleinstmöglichen Code durchzuführen?

Nelson G.
quelle
4
Dies ist ein guter Anfang. Willkommen bei Code Golf! :)
FryAmTheEggman
3
Ich denke, Sie möchten nur eine verschachtelte Schleife verwenden, aber ich kenne BF nicht sehr gut. Hast du Brainfuck-Tipps gesehen ? Wahrscheinlich wäre auch die Esolangs-Seite zu Brainfuck-Konstanten hier eine nützliche Ressource.
Jonathan Allan
4
Ich denke, Sie sollten den besten BrainFuck-Code klären . Sind Sie auf der Suche nach den lesbarsten, elegantesten, mit der geringsten Anzahl von +Zeichen oder einfach der höchsten Kürze?
Jonathan Frech
@ Jonathan Allan: Ja, das ist der Zweck dieser Frage: Wie man eine verschachtelte Schleife verwendet. Es ist eine faszinierende Sprache in der Nähe von ASM, aber ich verstehe einige Aspekte nicht
Nelson G.
Könnte ich diese Variante auf BF verwenden -> github.com/gergoerdi/brainfuck64
Shaun Bebbers

Antworten:

17

Die Methode, die Sie derzeit zu verwenden scheinen, ist 39 Byte:

>>+++[<-[-<.>]>-]++++[<----->-]<-[-<.>](ohne das zu bekommen A) ( Try It Online! )

(3-mal schleifen, jedes Mal den Zähler auf 255 setzen und so oft drucken, dann 20 subtrahieren, 1 subtrahieren und so oft drucken)

Es ist jedoch viel kürzer, 250-mal zu schleifen und jedes Mal 4-mal zu drucken (danke an jimmy23013 für die Optimierung gegenüber meiner ursprünglichen Loop-4-Loop-250-Print-1-Lösung):

>------[<....>-] (16 Bytes)

Wenn Ihre Zellen unbegrenzt sind (ich gehe davon aus, dass sie 8-Bit sind, sonst würden Sie wahrscheinlich nicht versuchen, 255 zum Golfen zu verwenden):

>>++++++++++[<++++++++++[<..........>-]>-] (42 Bytes).

HyperNeutrino
quelle
Dies scheint jedoch 8-Bit-Zellen anzunehmen ...
John Dvorak
2
@ JohnDvorak: In der Frage wurde das Setzen von Zellen auf 255 als Teil der effektivsten Lösung erwähnt, die das OP sich vorstellen kann. Das scheint ein ziemlich klarer Hinweis auf (ab) die Verwendung von 8-Bit-Zellenumbruch zu sein.
randomdude999
@ JohnDvorak Was randomdude999 gesagt hat, aber ich habe eine Methode mit 10x10x10 hinzugefügt, falls die Zellen unbegrenzt sind.
HyperNeutrino
250 mal ....wäre kürzer.
Jimmy23013
@ jimmy23013 ... nicht sicher, wie ich nicht daran gedacht habe und meine 10x10x10-Lösung immer noch optimiert, um diese LOL zu machen. Vielen Dank!
HyperNeutrino
1

47 Bytes (keine Unterläufe)

Ich habe diese Lösung gerade in 47 Bytes gemacht. Ich habe versucht, es anders zu machen, als ich normalerweise versuchen würde, Platz zu sparen, indem ich Zähler zwischen zwei Werten jongliere. Es wird angenommen, dass A in p [4] vorgeladen ist.

+++++[>++++>+++++<<-]>[>[>+>.<<-]>[->.<<+>]<<-]

Erklärt

Place 5 into p[0]
+++++
Loop 5 times to put p[1]=20, p[2]=25
[>++++>+++++<<-]>
Loop 20 times
[>
Move pointer to p[2] and loop 25 times.
Also move p[2] to p[3]

[
Increment p[3] from 0, effectively moving the value from p[2] to p[3]
>+
Print p[4]
>.
Decrement p[2]
<<-]
Shift over to p[3]
>
[
Decrement p[3]
->
Print p[4]
.<
Increment p[2]
<+>]
Move back to p[1] and decrement
<<-
Repeat until p[1] is 0
]
Josh Bacon
quelle
1

Der kürzeste Weg, um die Nummer 65 für 'A' zu erhalten, ist >+[+[<]>>+<+]>, und >------[<....>-]am Ende fügen Sie einfach HyperNeutrino hinzu . so wird der vollständige Code >+[+[<]>>+<+]>>------[<....>-](30 Bytes)

Schütze
quelle
Woher weißt du, dass dieser Weg am kürzesten ist? Es ist sicherlich kürzer, aber wissen Sie mit Sicherheit, dass niemand einen kürzeren finden wird?
Post Rock Garf Hunter
@ SriotchilismO'Zaic ja, ich meinte nicht wirklich, dass es das kürzeste lol war
Schütze