Bauen Sie mit mir eine Golfsprache auf

30

Viele PPCG-Benutzer halfen bei der Erstellung dieser Herausforderung, sowohl im Chat als auch in der Sandbox, insbesondere Martin Ender , AdmBorkBork , Emigna und user202729

Unsere Community hat es für notwendig erachtet, eine Reihe von Sprachen zu erstellen, die speziell für das Golfen entwickelt wurden, "Golfsprachen", wie wir sie nennen. Solche Sprachen haben sich vom einst brillanten, jetzt klobigen GolfScript zu den schlanken, prägnanten Sprachen wie Jelly und Husk entwickelt . Wie wir sehen können, werden diese Sprachen für eine Reihe von Aufgaben immer kürzer. Als offensichtliche Experten für Golfsprachen sollten wir also gemeinsam eine Sprache entwerfen, die jede andere Sprache übertrifft, die es wagt, sich zu behaupten. Wir stellen vor: Bugle!

Bugle: Aus dem Akronym BuGoL: Bu ilt Go lfing L Anguage.

Wie diese Herausforderung funktioniert

Falls Sie nicht verstanden haben, worauf ich in der Einleitung anspielte, handelt es sich bei dieser Herausforderung um eine Frage der , bei der wir beide etwas zum Interpretieren einer neuen Golfsprache beitragen und deren Fähigkeit verbessern, mit jeder Antwort auf PPCG zu konkurrieren.

Ich werde die erste Antwort posten, die aus der Grundlage der Sprachspezifikation / des Dolmetschers besteht, und alle anderen Antworten werden von da an fortgesetzt. Neue Einreichungen bieten die folgenden Dinge:

  • Eine Änderung der Sprachspezifikation
  • Ein zeitgemäßer Dolmetscher, der sich trifft genau den Anforderungen der Änderungen entspricht
  • Die aktualisierte Punktzahl der Sprache (mehr Details in Kürze)

Sie können die Spezifikation auf drei Arten ändern:

  • Sie können einen einzelnen Befehl hinzufügen
  • Sie können zwei neue Befehle hinzufügen
  • Sie können das Verhalten eines vorhandenen Befehls bearbeiten

Die neuen Interpreter In Bezug auf Sie müssen die neueste Version, geschrieben in Python verwenden. Es muss nicht golfen werden. Jeder zuvor hinzugefügte Befehl muss sowohl mit dem neuesten Interpreter als auch mit den neuesten (von Ihnen hinzugefügten) Befehlen testbar sein. Sie dürfen auch zu keinem Zeitpunkt eine anstößige Sprache verwenden, wenn Sie den Interpreter aktualisieren, z. B. in Kommentaren oder Zeichenfolgenliteralen usw.

Die hinzugefügten Befehle können alle gewünschten Aktionen ausführen . Die einzigen Anforderungen sind:

  • Es wird keine anstößige Ausgabe erzeugt
  • Es ist nicht dasselbe wie ein anderer Befehl
  • Dies verhindert nicht, dass eine der Beispielherausforderungen abgeschlossen wird

Abgesehen davon kann es so spezifisch oder allgemein sein, wie Sie möchten. Es kann sich auch um ein beliebiges Zeichen handeln . Wenn Sie sich nicht sicher sind, ob Ihr Zusatz einen neuen Befehl darstellt, können Sie ihn in den Kommentaren nachfragen.

Die Punktzahl der Sprache

Möglicherweise haben Sie bemerkt, dass Sie die Punktzahl der Sprache in allen neuen Einsendungen angeben müssen. Seine Punktzahl verhindert, dass diese Herausforderung für immer bleibt, und ist wie folgt definiert:

Die aktuelle Punktzahl ist die Summe der Anzahl der Bytes, die die Sprache benötigt, um die unter 20 Aufgaben zu erledigen

Für jede der Aufgaben gelten die Standard-E / A-Regeln sowie die Standard- Regelungslücken .

Die 20 Aufgaben:

  1. "Hallo Welt!" - Geben Sie den String ausHello, World!
  2. 1, 2, Fizz, 4, Buzz - Gibt jede ganze Zahl von 1 bis 100 (einschließlich) in einer separaten Zeile aus, wobei ein Vielfaches von 3 durch ein FizzVielfaches von 5 durch ein BuzzVielfaches von beidem durch ein Vielfaches von ersetzt wirdFizzBuzz
  3. Produzieren Sie die Nummer 2014 ohne irgendwelche Zahlen in Ihrem Quellcode - Geben Sie die Nummer 2014 aus, ohne eines der Zeichen 0123456789im Quellcode zu verwenden, ohne auf externe Variablen oder zufällige Seeds zuzugreifen
  4. Obfuscated Hallo Welt - Ausgabe der Zeichenfolge Hello, World!, ohne Zeichen in mindestens zwei der folgenden Sätze mit: hlwd, eor01und 27(Groß- und Kleinschreibung)
  5. Singe Happy Birthday in deiner Lieblingsprogrammiersprache - Gib Folgendes in einer Sprache deiner Wahl aus:

    Happy Birthday to You
    Happy Birthday to You
    Happy Birthday Dear [the name of your favourite programming language]
    Happy Birthday to You
    
  6. Wir sind kein Fremder, wenn es um das Codieren von Golf geht, Sie kennen die Regeln und ich auch - geben Sie den vollständigen Text von "Never Gonna Give You Up" aus.

  7. Vorzeichen ausgeben - Geben Sie unter Angabe einer Zahl -1 ein wenn es negativ ist, 0, wenn es 0 ist, oder 1, wenn es positiv ist
  8. Collatz-Vermutung (OEIS A006577) - Ausgehend von einer Ganzzahl dividieren Sie diese durch 2, wenn sie gerade ist, oder multiplizieren Sie sie mit 3 und addieren Sie 1, wenn sie ungerade ist, und wiederholen Sie den Vorgang, bis Sie 1 erreichen. Die Ausgabe sollte die Anzahl der Iterationen sein bringt Sie zu erreichen 1.
  9. Eine Reihe von Herausforderungen Nr. 1: Abwechselnde Reihen - Überprüfen Sie bei einer Reihe von Ganzzahlen, ob alle geraden und alle ungeraden Elemente gleich sind, und geben Sie dementsprechend einen Wahrheits- oder Falschwert aus
  10. Bin ich eine unbedeutende Gruppe? - Überprüfen Sie bei einem gegebenen Array von Ganzzahlen, ob die absoluten Unterschiede zwischen aufeinanderfolgenden Elementen alle kleiner oder gleich 1 sind, und geben Sie dementsprechend einen Wahrheits- oder Falschwert aus
  11. Ist diese Zahl eine Primzahl? - Schreiben Sie bei einer positiven Ganzzahl ein vollständiges Programm, um zu prüfen, ob es eine Primzahl ist, und geben Sie dementsprechend einen Wahrheits- oder Falschwert aus
  12. Ich bin ein Palindrom. Bist du?- Überprüfen Sie anhand eines Strings, ob es sich um ein Palindrom handelt, während es sich bei Ihrem Programm / Ihrer Funktion ebenfalls um ein Palindrom handelt, und geben Sie dementsprechend zwei unterschiedliche und konsistente Werte aus
  13. Summiere die Zahlen auf Standard in - Nimm eine Reihe von Zahlen nach STDIN und gib ihre Summe aus.
  14. Find the Factorial - Gibt bei einer Ganzzahl ndas Produkt aller Ganzzahlen zwischen 1und ausn einschließlich aus.
  15. Kürzester Code für unendliche Ausgaben - Ohne Eingabe wird eine unendliche Ausgabe erzeugt, die theoretisch nie aufhört, Daten auszugeben.
  16. Backe ein Stück Pi - Gib genau diesen Text aus:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. Finden Sie die kleinste Zahl, die N nicht teilt - Geben Sie bei einer positiven ganzen Zahl N die kleinste positive ganze Zahl aus, die N nicht teilt.
  2. Ist das gerade oder ungerade?- Bei einer Ganzzahl N wird die Parität als Wahrheits- / Falschwert ausgegeben.
  3. Ausgabe mit der gleichen Länge wie der Code - Schreiben Sie den kürzesten Code, dessen Ausgabe die gleiche Länge wie der Code hat, wobei die Ausgabe nicht mit dem Code übereinstimmt.
  4. Golf du ein Quine für großes Wohl! - Schreiben Sie die kürzeste Quine in Ihrer Sprache.

Um gültig zu sein, muss eine neue Einreichung für mindestens 2 der Probleme eine Golf-Einreichung mit jeweils mindestens 1 Byte aufweisen . Sie können die Länge anderer Einsendungen erhöhen, aber die Gesamtpunktzahl muss sich pro Antwort um mindestens 2 verringern . Bitte fügen Sie auch einen Link zu den aktualisierten Programmen hinzu. Die aktualisierten Lösungen dürfen nicht funktionieren, wenn sie mit einer früheren Version des Interpreters ausgeführt werden.

Wie bekomme ich Cookies?

Ich habe eine Liste von 5 Herausforderungen, die nicht zwingend zu versuchen sind und sich nicht auf Ihre Punktzahl auswirken, sondern lediglich zusätzliche Herausforderungen sind, um zu testen, ob Bugle fähig genug ist. Fühlen Sie sich frei, eine Lösung für eine beliebige Anzahl dieser in Ihre Antwort aufzunehmen:

  1. Erstellen Sie einen Selbstinterpreter
  2. Erstellen Sie eine Payload-fähige Quine
  3. Eine Zeichenfolge verbergen
  4. Hyperprogrammierung: N + N, N × N, N ^ N in einem
  5. "KNOTEN" oder "NICHT"?

Beschreibungen sind nicht enthalten, da sie nicht für jeden erforderlich sind, um an der Herausforderung teilnehmen zu können.

Wie gewinnt man

Sobald die Mindestpunktzahl erreicht ist ( wir glauben , dass sie 16 ist, obwohl alle Versuche, Golf zu spielen, sehr begrüßt werden), ist die Kette offensichtlich zu Ende, da Lösungen keine bessere Punktzahl erzielen können. Sobald 16 erreicht ist, bleibt die Herausforderung einen Monat lang bestehen , um jedem die Chance zu geben, die Lösungen noch weiter zu verbessern. Nachdem dieser Monat vergangen ist, ist die Herausforderung vorbei.

Sobald die Herausforderung vorbei ist, werde ich den Interpreter auf ein GitHub-Repository migrieren und die üblichen Übungen zur Veröffentlichung einer stabilen Sprache durchführen. Sie können zu diesem Zeitpunkt auch damit beginnen, Lösungen für Herausforderungen in PPCG in der angegebenen Sprache zu veröffentlichen. Versuchen Sie jedoch, die Titelseite nicht mit Antworten zu überfluten. Verteilen Sie sie stattdessen über einen bestimmten Zeitraum.

Formatierung

Um das Auffinden von Informationen in Ihrer Antwort zu erleichtern, formatieren Sie diese bitte wie folgt:

# [N]. [Score]

[New command + description]

[Interpreter/link to interpreter]

[Link to programs]

Wo [N]ist deine Antwortnummer (1 für die erste, 2 für die zweite usw.)

Regeln

  • Sie müssen 3 Stunden zwischen den Antworten warten
  • Sie dürfen nicht zweimal hintereinander posten, es sei denn, 10 Tage (genau 240 Stunden) wurde keine Antwort gepostet.
  • Sie können frühere Befehle nicht entfernen.
  • Ihr Dolmetscher muss nicht Golf spielen, und die Anzahl der Bytes spielt hier keine Rolle.
  • Wenn jemand den Programmen ein Golfspiel vorschlägt, während Ihre Antwort die aktuellste ist, müssen Sie diese in den Golfspielen bearbeiten und Ihre Punktzahl aktualisieren.
    • Sie können dies auch tun, wenn sich Ihre Antwort in der Mitte der Kette befindet, solange Ihre Punktzahl nicht unter der späterer Antworten liegt.
  • Bitte beantworten Sie keine bestehenden PPCG-Anfragen mit dieser Sprache, zumindest bis die Anfrage beendet ist
  • Der Interpreter ist in Python 3 geschrieben und sollte in der gesamten Kette auf diese Weise fortgesetzt werden. Das Ändern der Sprache ist verboten.
  • Um wieder gültig zu sein, muss eine neue Übermittlung Übermittlungen für mindestens 2 der Probleme mit mindestens 1 Byte für jedes enthalten.

Lass uns anfangen!

Caird Coinheringaahing
quelle
1
Sandbox
Caird Coinheringaahing
1
Könnte man auch fragen: Möchte jemand die Ablehnung erklären? Ich würde jedes Feedback schätzen, das Sie geben möchten.
Caird Coinheringaahing
2
@ Kaldo Wir sind nicht ganz sicher. Das Quine muss mindestens zwei Bytes groß sein, aber wenn das leere Programm ausgegeben wird Hello, World!, sind es 19 Bytes. Wenn sich das Verhalten des leeren Programms jedoch abhängig von der Eingabe ändert, kann es möglicherweise reduziert werden
caird coinheringaahing 13.04.18 um 9:48
1
@WeijunZhou "Bitte beantworten Sie keine bestehenden PPCG-Herausforderungen mit dieser Sprache, zumindest bis die Herausforderung beendet ist"
caird coinheringaahing
1
@LyricLy Syntaxkonstrukte (wie forSchleifen) sind zulässig und sollten hinzugefügt werden
caird coinheringaahing

Antworten:

3

3. Punktzahl: 2938 2583 2532 (-51)

Der neue Dolmetscher ist da .

Hauptsächlich zum Golfen des Quines und zur Vereinfachung der Ausgabe habe ich die Möglichkeit hinzugefügt, den Stack / Deque zu duplizieren und das gesamte Modell in gerenderter Textform anstatt als Ganzzahl auszugeben.

Lösungen

1. "Hallo Welt!" - 17 Bytes (-3)

#"Hello, World!"a

5. Singe Happy Birthday in deiner Lieblingsprogrammiersprache - 95 Bytes (-3)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"a

6. Wir sind keine Fremden, um Golf zu codieren, Sie kennen die Regeln, und ich auch - 1884 Bytes (-3)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"a

16. Backe ein Stück Pi - 149 Bytes (-3)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"a

20. Golf du ein Quine für großes Wohl! - 23 Byte (-39)

$"R34RdR36Ra"R34RdR36Ra

Sprachfunktionen hinzugefügt

  • a

    • Alle: Drucken Sie das gesamte Modell als Text, z. B. als #"Hello, World!"aAusdruckHello, World!
  • d

    • Stack / Deque: Schieben Sie den Stack auf sich selbst.
Textlich
quelle
8

2. Ergebnis: 2938 2583

Der modifizierte Interpreter ist hier auf TIO .

String-Literal ist die naheliegendste Ergänzung der Sprache, vor allem im Kampf Herausforderungen im Zusammenhang mit der .

Lösungen

1. "Hallo Welt!" - 20 Byte (-28)

#"Hello, World!"[o>]

Jede Herausforderung der kann mithilfe der Struktur abgeschlossen werden, #"<string>"[o>]die die angegebene Zeichenfolge ausgibt, bis die 0 erreicht ist, nachdem die Zeichenfolge erreicht wurde.

2. 1, 2, Fizz, 4, Buzz - 419 64 Bytes (-1332)

$1[1+1s:3s%{}"zziF"oooos;0s]:5s%{}"zzuB"oooos;0s]s{:O}]10o:100-]

Vielen Dank an @ user202729 für das großartige Golfen.

3. Produziere die Zahl 2014 ohne irgendwelche Zahlen in deinem Quellcode - 9 Bytes (-4)

#"ĒĎ"[O>]

Verwendet die beiden Zeichen 20 und 14 in Bugle-Codepunkten.

4. Verschleierte Hallo Welt - 19 Bytes (-153)

#"Ifmmp!Xpsme"[-o>]

Erfüllt die Regeln Nr. 1 (nein HLWDhlwd) und Nr. 3 (nein)27 ).

5. Singe Happy Birthday in deiner Lieblingsprogrammiersprache - 98 Bytes (-230)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"[o>]

6. Wir sind keine Fremden, um Golf zu codieren, Sie kennen die Regeln und ich auch - 1887 Bytes (-5006)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"[o>]

16. Backe ein Stück Pi - 149 Bytes (-290)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"[o>]

20. Golf du ein Quine für großes Wohl! - 62 Byte (-12)

#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]

Sprachfunktion hinzugefügt

  • "...": String-Literal.
    • Stack / Deque: Schieben Sie die Bugle-Codepunkte jedes Zeichens nach oben / vorne auf den Stack / Deque.
    • Band / Gitter: Schreiben Sie die Bugle-Codepunkte jedes Zeichens von der aktuellen Zelle aus auf das Band / Gitter rechts. Bewegt den Cursor nicht.
    • \n wird genauso behandelt wie andere Zeichen.
    • Derzeit ist kein Escapezeichen vorhanden, daher können Sie "mit diesem Befehl nicht in den Speicher schreiben (34). Zumindest für den ist es kein allzu großes Problem, da nicht alle der hier aufgeführten Herausforderungen in die " in der Ausgabe enthalten sind.

Weiteres Golfen ist immer willkommen, besonders für "Never gonna give you" und das Quine. Insbesondere ist die obige Quine die erste nicht-triviale Quine, die ich jemals hergestellt habe. Ich bin fest davon überzeugt, dass jemand eine kürzere finden kann.

Bubbler
quelle
Ich hoffe, es gibt die Arten von Ergänzungen, die alle anderen machen, anstatt nur integrierte Funktionen für die spezifischen Herausforderungen hinzuzufügen. +1
Caird Coinheringaahing
@ user202729 Wahrscheinlich habe ich den Bug eingeführt. Vielen Dank für die Fehlerbehebung und die FizzBuzz-Lösung.
Bubbler
3

1. Ergebnis: 9638

Der Basisinterpreter kann gefunden werden hier und die Einreichungen hier . Es ist ziemlich lang, also habe ich es in GitHub aufgenommen, anstatt den größten Teil des Beitrags in Anspruch zu nehmen.

Lösungen

Alle diese Lösungen sind die Unicode-Programme, die mit dem -u Kommandozeilen-Flag ausgeführt werden, aber die Scores werden so gezählt, als ob sie mit der Bugle-Codepage codiert wären.

1. "Hallo Welt!" - 48 Bytes

$72o101o108o108o111o44o32o87o111o114o108o100o33o

Drücken Sie einfach und geben Sie dann den Zeichencode jedes Zeichens in der Zeichenfolge aus.

2. 1, 2, Fizz, 4, Buzz - 1396 Bytes

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Gleiche Technik wie die Hello, World! Beispiel

3. Produzieren Sie die Nummer 2014 ohne Zahlen in Ihrem Quellcode - 13 Bytes

#++O--O+O+++O

#Verwendet das Band, +erhöht die Zelle, Ogibt als Ganzzahl und aus- dekrementiert sie

4. Verschleierte Hallo Welt - 172 Bytes

#+++++++++[>++++++++<-]>o<++++[>+++++++<-]>+o+++++++oo+++o>++++[>+++++++++++<-]>o------------o[-]++++++++[>+++++++++++<-]>-o<<<o+++o------o--------o[-]+++[>+++++++++++<-]>o

Verwendet seine inhärente Ähnlichkeit mit Brainfuck. Erfüllt die Regeln 1 und 3

5. Singen Sie Happy Birthday in Ihrer Lieblingsprogrammiersprache - 328 Bytes

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

Alle Herausforderungen in die haben Struktur.

6. Wir sind kein Fremder, wenn es um das Codieren von Golf geht. Sie kennen die Regeln und ich auch - 6893 Bytes

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. Geben Sie das Vorzeichen aus - 18 Bytes

$?:Zs0=0s-s:1s-++O

Überprüft, ob die Eingabe größer als Null, kleiner als Null (geändert in Ausbeute -1statt 1) und gleich Null ist, bevor die Summe berechnet wird.

8. Collatz-Vermutung (OEIS A006577) - 36 Bytes

#$?:1-[:2s%{3×1+}2s÷]:1s-₀+₁]₀O

Dies führt die Schleife auf dem Stapel durch, schaltet jedoch auf das Band um, um die Anzahl bei jeder Iteration zu erhöhen.

9. Eine Reihe von Herausforderungen # 1: Alternierende Reihen - 35 Bytes

#?>?>+>?[[<+<<->>>-]+<[-<<]>[>]?]<O

Dies ist eine leichte Modifikation von Mitch Schwartz 'Antwort auf die bestehende Herausforderung.

10. Bin ich ein unbedeutender Array? - 46 Bytes

$1 0-?…1[s:sr-:Z1s-2×1+×1s-Z1-L2s-×]1+Z1-O

Alle Kredit geht an Emigna für Herstellung dieser

11. Ist diese Zahl eine Primzahl? - 31 Bytes

$?:1s-:[:1s-:];L1s[×L2s-]:×%O

Verwendet den Satz von Wilson und berechnet (n-1)!² % n

12. Ich bin ein Palindrom. Bist du? - 13 Bytes

$?:R=:O:=R:?$

Die erste Hälfte des Programms bis zu O, setzt den Stapel auf , als [x, x]wo xentweder Trueoder False. OKnallt den Spitzenwert und gibt ihn aus. Der Rest des Programms stellt nur sicher, dass keine Fehler erzeugt werden. Zum Glück, wenn? drückt es nur ''(die leere Zeichenfolge) auf das Ende der Datei stößt .

13. Summieren Sie die Zahlen nach Standard in - 19 Bytes

$?:[?:];L0s[+L1s-]O

Dies kann in zwei Teile geteilt werden: ?:[?:];undL0s[+L1s-] . Der erste Teil sammelt alle Eingaben in den Stapel. Der zweite Teil drückt die Summe der beiden oberen Elemente, während die Länge größer als 1 ist.

14. Finden Sie das Factorial - 25 Bytes

$?:[:1s-:];L1s-Z[×L1s-]O

Dies hat eine ähnliche Struktur wie das Summenprogramm, aber anstatt mehrere Eingaben zu drücken, werden [:1s-:];die Bereiche von 1 .. nund zum Stapel verschoben[×L1s-] das Produkt .

15. Kürzester Code zur Erzeugung einer unendlichen Ausgabe - 5 Bytes

#+[O]

Verwenden Sie eine while-Schleife, wobei sich das 1Symbol ständig unter dem Zeiger befindet. Ausgänge 1für immer.

16. Backen Sie ein Stück Pi - 439 Bytes

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. Finden Sie die kleinste Zahl, die N nicht teilt

$?:1:[:rs%0=s1+srr:Rs]1s-O

Dies verwendet eine Probedivision, die beendet wird, wenn das Ergebnis des Modulo nicht gleich ist 0.

18. Ist das gerade oder ungerade? - 5 Bytes

$2?%O

Einfaches Modulo von 2

19. Ausgabe mit der gleichen Länge wie der Code - 16 Bytes

$16:[32+:o33s-:]

Gibt die ersten 16 druckbaren ASCII-Zeichen in umgekehrter Reihenfolge aus: 0/.-,+*)('&%$#"!

20. Golf du ein Quine für großes Wohl!

$1[93, 76, 111, 91, 49, 59, 104, 48, 79, 49, 111, 54, 51, 0]
36o1O0h;1[oL]

Kredit geht an user202729 für so dass diese


Sprachspezifikation

Berufung

bugle.pyDerzeit nimmt eine Reihe von Flags den Dateinamen / Code an, der ausgeführt werden soll. Bis jetzt hat es 4 Befehlszeilen-Flags:

  • -f/ --filegibt an, dass Code aus einer Datei gelesen werden soll
  • -c/ --cmd/ --cmdlineGibt an, dass Code wird über die Befehlsleitung zugeführt.

    -cund -fkönnen nicht im selben Aufruf verwendet werden

  • -u/ --unicodeweist den Interpreter an, den Code mit der Unicode-Codierung zu lesen. Standardmäßig wird die unten stehende Bugle-Codierung verwendet

  • -l/ --lengthgibt nach der Ausführung die Länge der Datei in Bytes an STDERR aus

Der folgende Aufruf wurde verwendet, um die obigen Übermittlungen zu testen

$ python bugle.py -f -u [file]

Codepage

Bugle verwendet 512 Zeichen in seiner Codepage. Das 0xFFZeichen darf nicht für einen Befehl verwendet werden , da es angibt, dass der nächste Hexadezimalwert in die zweite Hälfte der Codepage indiziert werden soll. Die verwendeten Zeichen sind:

ÀÁÂÄÆÃÅĀĄ\t\nĆČÇĎÐ
ÈÉÊËĒĖĚĘÌÍÎÏĪĮĹĽ
 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~¶
ŁŃŇÑŊÒÓÔÖŒÕØŌŔŘŚ
ŠŤŦÙÚÛÜŮŪŴÝŶŸŹŽŻ
àáâäæãåāąćčçďðèé
êëēėěęìíîïīįĺľłń
ňñŋòóôöœøōõŕřßśš
ťŧùúûüůūŵýŷÿźžż◊
ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜ
ΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ
αάβγδεέζηήθιίΐκλ
μνξοόπσςτυύΰφχψω
ώǴḰḾṔẂǵḱḿṕẃḂḞĠḢṀ
ȮṖṠṪẊḃḟġḣṁȯṗṡṫẋ§
ĂĞĬŎŬĴăğĭŏŭĵªº‹›
ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒ
ɠɦƙɱɲƥʠɼʂƭʋȥ©®ıȷ
ЉЊЕРТЗУИОПШАСДФГ
ХЈКЛЧЋЅЏЦВБНМЂЖљ
њертзуиопшасдфгх
јклчћѕџцвбнмђжÞþ
†∂∆≈≠√∈∉∌∋∩∪¬∧∨⊕
¤₽¥£¢€₩‰¿¡⁇⁈‼⁉‽⸘
…°•”“„’‘≤«·»≥ᴇ∞¦
×⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾
÷₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎

Oder sehen Sie es in Tabellenform . Beachten Sie dies \tund \nstellen Sie die Tabulatoren bzw. Zeilenumbrüche dar. Beachten Sie auch, dass die 16. Zeile mit einem nicht druckbaren Zeichen endet: und möglicherweise nicht in allen Browsern angezeigt wird.

Erinnerung

Der Interpreter verfügt derzeit über 5 integrierte Speichermodelle. Jedes Speichermodell erfordert ein Zeichen, das dem Interpreter mitteilt, dass er dieses Modell verwenden soll:

  • Stapel ($ ): Ein Standardstapel, der das Verschieben, Verschieben usw. von Werten unterstützt.
  • Infinite Tape ( #): Ein Tape à la Brainfuck, das zunächst nur ist0 s besteht.
  • Unendliches Gitter ( G): Ein 2d-Gitter, unendlich in beide Richtungen, das nur 0s enthält
  • Deque ( D): Eine vom Modul implementierte Dequecollections .
  • Register ( S): Ein einzelner Wert, mit dem ein Wert gespeichert werden kann.

Im Raster ist auch ein einzelner Wert gespeichert, der in Zellen geschrieben oder in Zellen geschrieben werden kann.

Darüber hinaus können die Band- und Rastergrößen sowie das Wickelverhalten mithilfe eines anderen Aufrufbefehls geändert werden. Diese verschiedenen Befehle übernehmen eine bestimmte Anzahl von Werten aus dem aktuellen Speichermodell als Anpassungsparameter:

  • Tape ( À): Nimmt zwei Werte auf - size ( int) und wrapping ()bool )
  • Tape ( Á): Nimmt einen Wert - Größe (int ). Wickelt sich am Ende des Bandes
  • Band ( Â): Nimmt einen Wert - Größe ( int). Wickelt nicht am Ende
  • Gitter ( Ǵ): Nimmt 4 Werte an - x Größe ( int), y Größe ( int), x Umbruch ( bool) und y Umbruch ( bool)

Der verwendete Speichertyp kann sich während eines Programms durch die Verwendung von ändern ₀₁₂₃₄₅₆₇₈₉, die auf den 0-indizierten nverwendeten Speichertyp zugreifen ( ist der erste, ist der zweite usw.), jedoch können derzeit keine Werte zwischen verschiedenen Speichertypen ausgetauscht werden.

Verzweigung

Bisher hat Bugle zwei Verzweigungsbefehle, die beide mit einem ]Zeichen abgeschlossen sind:

  • Während ([ ): Brainfuck-artige While-Schleifen. Diese rufen bei Verwendung einen Wert aus dem Stack / Deque ab oder greifen auf die Zelle unter dem Zeiger in Tape / Grid zu.

    Beispiel: #?[-O]Zählt von der Eingabe abwärts bis0

  • If / else ( {und }). Einmalige Ausführung von while-Schleifen. Wenn der Wert false ist, wird die if-Klausel übersprungen und geht zur else-Klausel, getrennt durch }. Sie verhalten sich wie while-Schleifen beim Speicherzugriff.

    Beispiel: {0}1]ist ein logisches NICHT-Gatter

Eingebaute Funktionen

Durchläufe von Ziffern werden als Ganzzahlen interpretiert und werden einfach so wie sie sind in das aktuelle Speichermodell übertragen / geschrieben.

Natürlich habe ich Bugle mit einigen grundlegenden eingebauten Funktionen ausgestattet, so wenig wie möglich, damit andere im Verlauf der Kette weitere hinzufügen können. Die Basisbefehle lauten wie folgt:

  • +

    • Stack / Deque: Addiere die oberen beiden Werte
    • Band / Gitter: Erhöht die aktuelle Zelle
  • -

    • Stack / Deque: Subtrahieren Sie die beiden oberen Werte
    • Tape / Grid: Dekrementiert die aktuelle Zelle
  • %

    • Stack / Deque: Modulieren Sie die beiden oberen Werte
  • :

    • Stack / Deque: Duplizieren Sie den obersten Wert
  • ;

    • Stack / Deque: Pop den obersten Wert
    • Tape / Grid: Nullen Sie die aktuelle Zelle
  • <

    • Band / Gitter: Verschieben Sie eine Zelle nach links
  • =

    • Stack: Sind die beiden obersten Werte gleich?
    • Raster: Eine Zelle nach unten bewegen
  • >

    • Band / Gitter: Eine Zelle nach rechts bewegen
  • ?

    • Stack / Deque: Wertet eine Eingabezeile aus
    • Tape / Grid: Nehmen Sie ein Zeichen der Eingabe
  • L

    • Stack / Deque: Schieben Sie die Länge des Stapels / Deques
  • O

    • Alle: Den aktuellen Wert ausgeben
  • R

    • Stapel: Kehren Sie das obere Element um, wenn möglich, andernfalls den Stapel um
  • Z

    • Stack: Top Element ist positiv?
  • ^

    • Raster: Eine Zelle nach oben verschieben
  • h

    • Alle: Drucken Sie das vollständige Speichermodell
  • o

    • Alle: Gibt den aktuellen Wert als Zeichen aus
  • r

    • Stack: Drehe die oberen 3 Werte
    • Deque: Drehen Sie die Deque- nZeiten, wobei nder Höchstwert ist
  • s

    • Stack / Deque: Tauschen Sie die beiden oberen Werte
    • Stack: Splat den Spitzenwert
  • ×

    • Stapel: Multiplizieren Sie die oberen beiden Werte
    • Raster: Schreiben Sie den Zeigerwert in die aktuelle Zelle
  • ÷

    • Stack: Teilen Sie die oberen beiden Werte
    • Gitter: Schreibe die aktuelle Zelle auf den Zeigerwert
Caird Coinheringaahing
quelle