Construisez une langue de golf avec moi

30

De nombreux utilisateurs de PPCG ont aidé à la création de ce défi, à la fois dans le chat et dans le bac à sable, en particulier Martin Ender , AdmBorkBork , Emigna et user202729

Notre communauté a jugé nécessaire de créer un ensemble de langues spécialement conçues pour le golf, des «langues de golf» comme nous les appelons. De tels langages ont évolué du GolfScript autrefois brillant et désormais maladroit aux langages concis élégants tels que Jelly et Husk . Comme nous pouvons le voir, ces langues sont de plus en plus courtes pour un ensemble de tâches. Donc, en tant qu'experts incontournables ici en ce qui concerne les langues de golf, nous devons concevoir ensemble un langage pour battre toutes les autres langues qui osent rivaliser. Présentation de Bugle!

Bugle: De l'acronyme BuGoL: Bu ilt Go lfing L anguage.

Comment ce défi fonctionnera

Dans le cas où vous n'avez pas compris ce à quoi je fais allusion dans l'introduction, ce défi est un défi de où nous contribuons chacun quelque chose à l'interprète d'une nouvelle langue de golf, améliorant ainsi sa capacité à participer au PPCG avec chaque réponse.

Je posterai la première réponse composée de la base de la spécification de langue / interprète, et toutes les autres réponses continueront à partir de là. Les nouvelles soumissions fourniront les éléments suivants:

  • Un changement aux spécifications de la langue
  • Un interprète à jour, répondant exactement à ce qui est prévu dans les changements
  • Le score mis à jour de la langue (plus de détails dans un peu)

Vous pouvez modifier la spécification de trois manières:

  • Vous pouvez ajouter une seule commande
  • Vous pouvez ajouter deux nouvelles commandes
  • Vous pouvez modifier le comportement d'une commande existante

Concernant le nouvel interpréteur, vous devez utiliser la dernière version, écrite en Python. Il n'est pas nécessaire de jouer au golf. Chaque commande précédemment ajoutée doit pouvoir être testée avec le dernier interpréteur, ainsi que la ou les commandes les plus récentes (celle que vous ajoutez). Vous ne devez pas non plus utiliser un langage offensant à tout moment lors de la mise à jour de l'interpréteur, comme dans les commentaires ou les chaînes de caractères, etc.

La ou les commandes ajoutées peuvent faire tout ce que vous souhaitez . Les seules exigences sont:

  • Il ne produit pas de sortie offensante
  • Ce n'est pas la même chose qu'une autre commande
  • Cela n'empêche pas la réalisation d'un des exemples de défis

En dehors de ceux-ci, cela peut être aussi spécifique ou aussi général que vous le souhaitez. Il peut également s'agir de n'importe quel personnage souhaité. Si vous n'êtes pas sûr que votre ajout constitue une «nouvelle commande», n'hésitez pas à demander dans les commentaires.

Le score de la langue

Vous avez peut-être remarqué que vous devez inclure le score de la langue dans toutes les nouvelles soumissions. Son score est ce qui empêche ce défi d'aller indéfiniment, et est défini comme suit:

Le score actuel est la somme des décomptes d'octets nécessaires à la langue pour effectuer les 20 tâches ci-dessous.

Pour chacune des tâches, les règles d'E / S standard s'appliquent , tout comme les failles standard .

Les 20 tâches:

  1. "Bonjour le monde!" - Sortie de la chaîneHello, World!
  2. 1, 2, Fizz, 4, Buzz - Affiche chaque entier de 1 à 100 (inclus) sur une ligne distincte, les multiples de 3 étant remplacés par Fizz, les multiples de 5 étant remplacés par Buzzet les multiples des deux parFizzBuzz
  3. Produisez le nombre 2014 sans aucun nombre dans votre code source - Sortez le nombre 2014 sans utiliser aucun des caractères 0123456789du code source, sans accéder à des variables externes ou des graines aléatoires
  4. Obfuscated Bonjour tout le monde - la chaîne de sortie Hello, World!, sans utiliser de caractères dans au moins deux des ensembles suivants: hlwd, eor01et 27(insensible à la casse)
  5. Chantez Joyeux anniversaire à votre langage de programmation préféré - Dans un langage de votre choix, sortez les éléments suivants:

    Happy Birthday to You
    Happy Birthday to You
    Happy Birthday Dear [the name of your favourite programming language]
    Happy Birthday to You
    
  6. Nous ne sommes pas étrangers au code du golf, vous connaissez les règles, et moi aussi - Générez les paroles complètes de "Never Gonna Give You Up"

  7. Afficher le signe - Étant donné un nombre, imprimer -1 s'il est négatif, 0 s'il est 0 ou 1 s'il est positif
  8. Conjecture de Collatz (OEIS A006577) - En partant d'un entier, divisez-le par 2 s'il est pair, ou multipliez-le par 3 et ajoutez 1 s'il est impair, et répétez le processus jusqu'à ce que vous atteigniez 1. La sortie doit être le nombre d'itérations qu'il vous amène à atteindre 1.
  9. Un tableau de défis # 1: tableaux alternatifs - Étant donné un tableau d'entiers, vérifiez si tous les éléments indexés pairs sont égaux et tous les éléments indexés impairs sont égaux, et affichez une valeur vraie ou fausse en conséquence
  10. Suis-je un tableau insignifiant?- Étant donné un tableau d'entiers, vérifiez si les différences absolues entre les éléments consécutifs sont toutes inférieures ou égales à 1, et émettez une valeur véridique ou fausse en conséquence
  11. Est-ce que ce nombre est un nombre premier?- Étant donné un entier positif, écrivez un programme complet pour vérifier s'il est premier et affichez une valeur vraie ou fausse en conséquence
  12. Je suis un palindrome. Es-tu?- Étant donné une chaîne, vérifiez si elle est palindrome, alors que votre programme / fonction est également palindrome, et affichez deux valeurs distinctes et cohérentes en conséquence
  13. Additionnez les chiffres sur la norme en - Prenez une série de nombres dans STDIN et sortez leur somme.
  14. Trouver le factoriel - Étant donné un entier n, affichez le produit de tous les entiers entre 1etn inclus.
  15. Code le plus court pour produire une sortie infinie - Sans aucune entrée, produire une sortie infinie, qui, en théorie, ne cessera jamais de sortir.
  16. Cuire une tranche de Pi - Sortez ce texte exact:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. Trouver le plus petit nombre qui ne divise pas N - Étant donné un entier positif N, sortir le plus petit entier positif qui ne divise pas N.
  2. Est-ce pair ou impair?- Étant donné un entier N, sortir sa parité en tant que valeurs véridiques / fausses.
  3. Sortie avec la même longueur que le code - Écrivez le code le plus court dont la sortie a la même longueur que le code, où la sortie n'est pas la même que le code.
  4. Jouez au golf pour le bien! - Écrivez le quine le plus court dans votre langue.

Pour être valide, une nouvelle soumission doit contenir des soumissions pour au moins 2 des problèmes, par au moins 1 octet pour chacune. Vous pouvez augmenter la longueur des autres soumissions, mais le score total doit diminuer d' au moins 2 par réponse. Veuillez également envisager d'inclure un lien vers les programmes mis à jour. Les solutions mises à jour ne doivent pas fonctionner lorsqu'elles sont exécutées avec une version précédente de l'interpréteur.

Comment obtenir des cookies

J'ai une liste de 5 défis, qui ne sont pas obligatoires pour tenter, et n'ont aucune incidence sur votre score, mais sont simplement des défis supplémentaires pour tester si Bugle est suffisamment capable. N'hésitez pas à inclure une solution à n'importe quel nombre d'entre eux dans votre réponse:

  1. Créer un auto-interprète
  2. Créer un quine capable de charge utile
  3. Covfefify une chaîne
  4. Hyperprogrammation: N + N, N × N, N ^ N tout en un
  5. "NŒUD" ou "NON"?

Les descriptions ne sont pas incluses car elles ne sont pas requises pour que tout le monde puisse participer au défi.

Comment gagner

Une fois que le score minimum ( nous pensons être 16, bien que toutes les tentatives de golf vers le bas soient les bienvenues) a été atteint, la chaîne est évidemment terminée car les solutions ne peuvent pas obtenir un meilleur score. Une fois 16 ans atteints, le défi reste vivant pendant 1 mois après, pour donner à chacun une chance de jouer au golf les solutions. Après ce mois, le défi est terminé.

Une fois le défi terminé, je migrerai l'interpréteur sur un référentiel GitHub, et passerai par les machinations habituelles de la libération d'un langage stable. Vous pouvez également commencer à publier des solutions aux défis sur PPCG en ce moment, en utilisant ledit langage, mais veuillez ne pas inonder la première page de réponses. Au lieu de cela, répartissez-les sur une période de temps.

Mise en forme

Afin de faciliter la recherche d'informations dans votre réponse, veuillez les formater comme suit:

# [N]. [Score]

[New command + description]

[Interpreter/link to interpreter]

[Link to programs]

[N]est votre numéro de réponse (1 pour le premier, 2 pour le second, etc.)

Règles

  • Vous devez attendre 3 heures entre la publication des réponses
  • Vous ne pouvez pas poster deux fois de suite, sauf si aucune réponse n'a été publiée pendant 10 jours (exactement 240 heures)
  • Vous ne pouvez pas supprimer les commandes précédentes.
  • Votre interprète n'a pas besoin d'être joué au golf, et son nombre d'octets est complètement hors de propos ici.
  • Si quelqu'un suggère un golf aux programmes alors que votre réponse est la plus récente, vous devez modifier les golfs et mettre à jour votre score.
    • Vous pouvez également le faire lorsque votre réponse est au milieu de la chaîne, tant que votre score ne devient pas inférieur à toutes les réponses ultérieures.
  • Veuillez vous abstenir de répondre à tous les défis PPCG existants en utilisant cette langue, au moins jusqu'à ce que le défi soit terminé.
  • L'interpréteur est écrit en Python 3 et devrait continuer de cette façon tout au long de la chaîne. Changer la langue est interdit.
  • Encore une fois, pour être valide, une nouvelle soumission doit contenir des soumissions pour au moins 2 des problèmes, par au moins 1 octet pour chacune.

Commençons!

caird coinheringaahing
la source
1
Sandbox
caird coinheringaahing
1
Autant demander: Quelqu'un aime-t-il expliquer le downvote? J'apprécierais tous les commentaires que vous aimeriez donner.
caird coinheringaahing
2
@Kaldo Nous ne sommes pas tout à fait sûrs. Le quine doit être de deux octets minimum, mais si le programme vide sort Hello, World!, alors c'est 19 octets. Mais si le comportement du programme vide change, en fonction de l'entrée, il peut être réduit
caird coinheringaahing
1
@WeijunZhou « S'il vous plaît ne pas répondre PPCG tous les défis existant en utilisant cette langue, au moins jusqu'à ce que le défi est terminé »
Caird coinheringaahing
1
@LyricLy Les constructions de syntaxe (telles que les forboucles) sont autorisées et encouragées à être ajoutées
caird coinheringaahing

Réponses:

3

3. Score: 2938 2583 2532 (-51)

Le nouvel interprète est ici .

Principalement dans le but de jouer au quine et de faciliter la sortie, j'ai ajouté la possibilité de dupliquer la pile / deque et également de sortir le modèle entier sous forme de texte rendu plutôt que sous forme d'entiers.

Solutions

1. "Bonjour tout le monde!" - 17 octets (-3)

#"Hello, World!"a

5. Chantez Joyeux anniversaire à votre langage de programmation préféré - 95 octets (-3)

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

6. Nous ne sommes pas étrangers au codage du golf, vous connaissez les règles, et moi aussi - 1884 octets (-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. Cuire une tranche de Pi - 149 octets (-3)

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

20. Jouez au golf pour le bien! - 23 octets (-39)

$"R34RdR36Ra"R34RdR36Ra

Fonctionnalités linguistiques ajoutées

  • a

    • Tout: imprimer l'intégralité du modèle sous forme de texte, par exemple des #"Hello, World!"aimpressionsHello, World!
  • d

    • Stack / Deque: Poussez la pile sur elle-même.
LyricLy
la source
8

2. Score: 2938 2583

L'interpréteur modifié est ici sur TIO .

Le littéral de chaîne est l'ajout le plus évident au langage, principalement pour lutter contre les .

Solutions

1. "Bonjour tout le monde!" - 20 octets (-28)

#"Hello, World!"[o>]

Tout peut être complété à l'aide de la structure #"<string>"[o>]qui génère la chaîne donnée jusqu'au 0 après que la chaîne est atteinte.

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

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

Merci à @ user202729 pour avoir joué au golf à ce sujet.

3 Produisez le numéro 2014 sans aucun nombre dans votre code source - 9 octets (-4)

#"ĒĎ"[O>]

Utilise les deux caractères 20 et 14 dans les codes codés Bugle.

4. Bonjour le monde obscurci - 19 octets (-153)

#"Ifmmp!Xpsme"[-o>]

Répond aux règles # 1 (non HLWDhlwd ) et # 3 (non 27).

5. Chantez Joyeux anniversaire à votre langage de programmation préféré - 98 octets (-230)

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

6. Nous ne sommes pas étrangers au codage du golf, vous connaissez les règles, et moi aussi - 1887 octets (-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. Cuire une tranche de Pi - 149 octets (-290)

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

20. Jouez au golf pour le bien! - 62 octets (-12)

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

Fonction de langue ajoutée

  • "...": Chaîne littérale.
    • Stack / Deque: Poussez les points de code Bugle de chaque caractère vers le haut / avant de la pile / deque.
    • Bande / grille: Écrivez les points de code Bugle de chaque caractère sur la bande / grille à droite, à partir de la cellule actuelle. Ne déplace pas le curseur.
    • \n est géré comme les autres caractères.
    • Il n'y a pas de caractère échappé pour le moment, vous ne pouvez donc pas écrire "(34) dans la mémoire à l'aide de cette commande. Ce n'est pas un problème trop important, du moins pour l'instant, car tous les répertoriés ici n'ont pas "dans la sortie.

Tout autre golf est toujours le bienvenu, en particulier pour "Never Gonna Give You" et la quine. Plus précisément, le quine ci-dessus est le premier quine non trivial que j'ai jamais fait, donc je crois fermement que quelqu'un peut en proposer un plus court.

Barboteur
la source
Il y a le genre d'ajouts que j'espère que tout le monde fait, plutôt que d'ajouter simplement des éléments internes pour les défis spécifiques. +1
caird coinheringaahing
@ user202729 C'est probablement moi qui ai introduit le bogue; merci de le corriger et de la solution FizzBuzz.
Bubbler
3

1. Résultat: 9638

L'interprète de base peut être trouvé ici , et les soumissions ici . C'est assez long, donc je l'ai inclus sur GitHub, plutôt que de reprendre la majeure partie du message.

Solutions

Toutes ces solutions sont des programmes Unicode, exécutés avec l' -uindicateur de ligne de commande, mais les scores sont comptés comme s'ils étaient encodés avec la page de codes de Bugle.

1. "Bonjour tout le monde!" - 48 octets

$72o101o108o108o111o44o32o87o111o114o108o100o33o

Appuyez simplement sur puis sortez le code de caractère de chaque caractère de la chaîne.

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

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Même technique que le Hello, World! Exemple

3. Produisez le numéro 2014 sans aucun nombre dans votre code source - 13 octets

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

#utilise la bande, +incrémente la cellule, Osort comme un entier et- décrémente

4. Hello World obscurci - 172 octets

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

Utilise sa similitude inhérente au brainfuck. Répond aux règles # 1 et # 3

5. Chantez Joyeux anniversaire à votre langage de programmation préféré - 328 octets

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

Tous les ont ce type de structure, pour le moment.

6. Nous ne sommes pas étrangers au codage du golf, vous connaissez les règles, et moi aussi - 6893 octets

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. Afficher le signe - 18 octets

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

Vérifie si l'entrée est supérieure à zéro, inférieure à zéro (modifiée pour donner -1au lieu de1 ) et égale à zéro, avant de prendre leur somme.

8. Conjecture de Collatz (OEIS A006577) - 36 octets

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

Cela effectue le bouclage sur la pile, mais bascule sur la bande pour incrémenter le nombre à chaque itération.

9. Un tableau de défis # 1: tableaux alternatifs - 35 octets

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

Ceci est une légère modification de la réponse de Mitch Schwartz au défi existant, votez pour!

10. Suis-je un tableau insignifiant? - 46 octets

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

Tout le crédit va à Emigna pour faire ce

11. Ce nombre est-il un nombre premier? - 31 octets

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

Utilise le théorème de Wilson et calcule (n-1)!² % n

12. Je suis un palindrome. Es-tu? - 13 octets

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

La première moitié du programme, jusqu'à O, définit la pile comme [x, x]xest Trueou False. Oaffiche la valeur supérieure et la génère. Le reste du programme s'assure simplement qu'aucune erreur n'est produite. Heureusement, lorsque ?rencontre la fin du fichier, il pousse simplement'' (la chaîne vide).

13. Additionnez les nombres sur la norme en - 19 octets

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

Cela peut être divisé en deux parties: ?:[?:];et L0s[+L1s-]. La première partie collecte toutes les entrées de la pile. La deuxième partie pousse la somme des deux éléments supérieurs, tandis que la longueur est supérieure à 1.

14. Trouvez le factoriel - 25 octets

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

Il a une structure similaire au programme de somme, mais au lieu de pousser plusieurs entrées, le [:1s-:];pousse la plage de 1 .. nla pile et [×L1s-]prend le produit.

15. Code le plus court pour produire une sortie infinie - 5 octets

#+[O]

Utilisez une boucle while, avec le 1continuellement sous le pointeur. Sorties 1pour toujours.

16. Cuire une tranche de Pi - 439 octets

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. Trouvez le plus petit nombre qui ne divise pas N

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

Cela utilise la division d'essai, se terminant lorsque le résultat du modulo n'est pas égal 0.

18. Est-ce pair ou impair? - 5 octets

$2?%O

Modulo simple par 2

19. Sortie avec la même longueur que le code - 16 octets

$16:[32+:o33s-:]

Sort les 16 premiers caractères ASCII imprimables à l'envers: 0/.-,+*)('&%$#"!

20. Jouez au golf pour le bien!

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

Le crédit va à user202729 pour faire ce


Spécification de la langue

Appel

bugle.pyprend actuellement une série de drapeaux, puis le nom / code du fichier à exécuter. Pour l'instant, il dispose de 4 drapeaux de ligne de commande:

  • -f/ --filespécifie que le code doit être lu à partir d'un fichier
  • -c/ --cmd/ --cmdlinespécifie que le code est fourni via la ligne de commande.

    -cet -fne peut pas être utilisé dans le même appel

  • -u/ --unicodeindique à l'interpréteur de lire le code avec l'encodage Unicode. La valeur par défaut est d'utiliser l'encodage de Bugle ci-dessous

  • -l/ --lengthaffiche la longueur du fichier, en octets, vers STDERR après exécution

L'appel suivant a été utilisé pour tester les soumissions ci-dessus

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

Page de code

Bugle utilise 512 caractères dans sa page de codes. Le 0xFFcaractère ne doit pas être utilisé pour une commande , car il est utilisé pour indiquer que la prochaine valeur hexadécimale à indexer dans la seconde moitié de la page de code. Les caractères utilisés sont:

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

Ou voyez-le sous forme de tableau . Notez que \tet \nreprésentent respectivement tab et newline. Notez également que la 16e ligne se termine par un caractère non imprimable:, et peut ne pas s'afficher sur tous les navigateurs.

Mémoire

L'interpréteur dispose actuellement de 5 modèles de mémoire. Chaque modèle de mémoire nécessite un caractère pour dire à l'interpréteur de commencer à utiliser ce modèle:

  • Stack ( $): une pile standard, qui prend en charge les valeurs poussées, sautées, etc.
  • Bande infinie ( #): Une bande, à la brainfuck, qui au départ n'est0 art.
  • Grille infinie ( G): une grille 2D, infinie dans les deux sens, contenant uniquement 0s
  • Deque ( D): Un deque , tel qu'implémenté par le collectionsmodule.
  • Register ( S): une valeur unique, qui peut être utilisée pour stocker une valeur.

La grille a également une valeur unique enregistrée dans son pointeur qui peut être écrite ou écrite dans des cellules.

De plus, les tailles de bande et de grille et le comportement de wrapping peuvent être modifiés à l'aide d'une commande d'invocation différente. Ces différentes commandes prennent un nombre donné de valeurs du modèle de mémoire actuel comme paramètres de personnalisation:

  • Tape ( À): prend deux valeurs - size ( int) et wrapping ( bool)
  • Bande ( Á): prend une valeur - taille (int ). Enveloppe à la fin de la bande
  • Bande ( Â): prend une valeur - taille ( int). Ne s'enroule pas à la fin
  • Grid ( Ǵ): prend 4 valeurs - x size ( int), y size ( int), x wrap ( bool) et y wrap ( bool)

Le type de mémoire utilisé peut changer pendant un programme à l'aide de ₀₁₂₃₄₅₆₇₈₉, qui accède au ntype de mémoire utilisé indexé 0 ( est le premier, est le deuxième, etc.), mais, actuellement, les valeurs ne peuvent pas être échangées entre différents types de mémoire.

Ramification

Jusqu'à présent, Bugle a deux commandes de branchement, toutes deux terminées par un ]caractère:

  • Tandis que ([ ): boucles while de style brainfuck. Ces pop une valeur de la pile / deque si elle est utilisée, ou accéder à la cellule sous le pointeur dans la bande / grille.

    Exemple: #?[-O]compte de l'entrée jusqu'à0

  • Si / sinon ( {et }). Exécution unique en boucle. Si la valeur sautée est fausse, la clause if est ignorée, passant à la clause else, séparée par }. Ils se comportent de la même manière que les boucles while concernant l'accès à la mémoire.

    Exemple: {0}1]est une porte NOT logique

Fonctions intégrées

Les séries de chiffres sont interprétées comme des entiers, et sont simplement poussées / écrites telles quelles dans le modèle de mémoire actuel.

Évidemment, j'ai équipé Bugle de quelques fonctions intégrées de base, aussi peu que possible, pour permettre aux autres d'en ajouter plus à mesure que la chaîne progresse. Les commandes de base sont les suivantes:

  • +

    • Stack / Deque: ajoutez les deux premières valeurs
    • Bande / grille: incrémente la cellule actuelle
  • -

    • Stack / Deque: Soustrayez les deux premières valeurs
    • Bande / Grille: décrémenter la cellule actuelle
  • %

    • Stack / Deque: Modulo les deux premières valeurs
  • :

    • Stack / Deque: Dupliquez la valeur supérieure
  • ;

    • Stack / Deque: Pop la valeur supérieure
    • Bande / grille: mettre à zéro la cellule actuelle
  • <

    • Bande / grille: déplacer vers la gauche d'une cellule
  • =

    • Pile: les deux premières valeurs sont-elles égales?
    • Grille: descendre d'une cellule
  • >

    • Bande / grille: déplacer vers la droite d'une cellule
  • ?

    • Stack / Deque: évaluer une ligne d'entrée
    • Bande / grille: prendre un caractère d'entrée
  • L

    • Stack / Deque: Poussez la longueur de la pile / deque
  • O

    • Tous: affiche la valeur actuelle
  • R

    • Pile: inversez l'élément supérieur si possible, sinon inversez la pile
  • Z

    • Pile: l'élément supérieur est positif?
  • ^

    • Grille: remonter d'une cellule
  • h

    • Tout: imprimer le modèle de mémoire complète
  • o

    • Tout: imprimer la valeur actuelle sous forme de caractère
  • r

    • Pile: faites pivoter les 3 premières valeurs
    • Deque: faites pivoter les ntemps de deque , où nest la valeur maximale
  • s

    • Stack / Deque: échange les deux premières valeurs
    • Stack: Splat la valeur supérieure
  • ×

    • Pile: multipliez les deux premières valeurs
    • Grille: écrire la valeur du pointeur dans la cellule actuelle
  • ÷

    • Pile: divisez les deux premières valeurs
    • Grille: écrire la cellule actuelle dans la valeur du pointeur
caird coinheringaahing
la source