Bien que> <> ne soit pas un langage populaire, il peut être bon pour le golf et a été utilisé sur ce site Web. Il a été inspiré par Befunge et présente quelques similitudes dans ses instructions.
Commandes requises:
> < ^ v
Change la direction du pointeur d'instruction (droite, gauche, haut, bas)
/ \ | _ #
Miroirs; le pointeur changera de direction en fonction de la direction qu'il a déjà.
x
Direction aléatoire.
+ - * , %
Addition, soustraction, multiplication, division et modulo, respectivement. Fait sortir A et B de la pile et pousse l'opérateur B A. La division par 0 déclenche une erreur.
0-9 a-f
Pousse la valeur correspondante sur la pile. a = 10, ..., f = 15
=
Fait sortir A et B de la pile, et pousse 1 si B = A, et 0 sinon.
)
Plus grand que. Sort A et B de la pile et pousse 1 si B <A
(
Inférieur à. Fait sortir A et B de la pile et pousse 1 si B> A
' "
Active l'analyse de chaîne. L'analyse de chaîne pousse chaque caractère trouvé dans la pile jusqu'à ce qu'il trouve un guillemet de fermeture.
!
Ignore l'instruction suivante.
?
Ignore l'instruction suivante si le haut de la pile est nul ou si la pile est vide. (Remarque: cela ne fait rien sortir de la pile!)
:
Duplique la valeur supérieure de la pile.
~
Supprime la valeur supérieure de la pile.
$
Fait pivoter les 2 premières valeurs de la pile dans le sens des aiguilles d'une montre, respectivement. (par exemple, si votre pile est 1, 2, 3, 4, résulterait en 1, 2, 4, 3)
@
Tourne les 3 premières valeurs de la pile dans le sens des aiguilles d'une montre, respectivement. (par exemple, si votre pile est 1, 2, 3, 4, cela entraînerait 1, 4, 2, 3)
&
Pops la première valeur de la pile et la place dans le registre. Appeler à nouveau prendra la valeur dans le registre et la remettra sur la pile.
r
Inverse la pile.
}
Décale la pile vers la droite / fait tourner toute la pile dans le sens des aiguilles d'une montre (par exemple 1,2,3,4 devient 4,1,2,3 Décale
{
la pile vers la gauche / fait tourner la pile entière dans le sens inverse des aiguilles d'une montre (par exemple 1,2,3,4 devient 2,3,4,1 Saute
g
A et B hors de la pile et pousse la valeur en B, A dans la zone de code. Saute
p
A, B et C hors de la pile et change la valeur en C, B en A.
o
Pops et sorties comme un caractère
n
Pops et sorties la valeur
i
Prend un caractère comme entrée utilisateur et pousse sa valeur ASCII dans la pile
;
Termine l'exécution
Il n'est pas nécessaire d'implémenter le thread, bien que vous puissiez le faire si vous le souhaitez.
La réponse la plus courte l'emporte, en cas d'égalité, la première réponse l'emporte.
Vous pouvez utiliser n'importe quelle langue et eval est autorisé.
Le fichier sera fourni via des arguments de ligne de commande et aura une .fish
extension.
Vous pouvez utiliser l' interpréteur Python officiel comme référence si nécessaire. L' article Wiki Esolangs contient plus d'informations sur le fonctionnement de la langue, ainsi que quelques exemples supplémentaires.
Cas de test:
Bonjour le monde!
Code:
"Hello World!"r>?o?<;
Sortie:
Hello World!
Code factoriel :
01::nv
:@*:n>84*o$1+
Sortie (jusqu'à 5):
1 2 6 24 120
la source
1 2 6 24 120 720 ...
et devrait être ce que la sortie de l'interpréteur Python aussi.l
pour pousser la longueur de la pile. Et pour autant que je sache,?
fait apparaître la valeur.Réponses:
APL (Dyalog) (750)
Comme APL n'a pas vraiment de ligne de commande, chargez-la dans un espace de travail (c'est-à-dire avec
)ed F
) puis exécutez-la à partir de la ligne APL comme suit:Il ne gère aucune erreur. Le comportement d'un code incorrect n'est pas spécifié. Il ne peut pas non plus faire de threads. Lorsque la page Esolang et la question entrent en conflit, elle suit la question.
Edit: une version légèrement plus lisible avec des commentaires peut être trouvée ici: https://gist.github.com/anonymous/6428866
la source
Delphi, 1144
Toutes, sauf les instructions de lecture, sont mises en œuvre.
Le code en retrait et commenté se lit comme suit:
Modifier l'historique:
(1306 + 18 = 1324): correction de bugs dans quelques ordres d'opération (Delphi évalue les arguments à l'envers). Correction également du pop stack (ne pouvait pas pop plus d'une fois par instruction).
(1324-33 = 1291): Suppression de la sauvegarde lors de l'écriture du contenu d'une pile vide
(1291-56 = 1235): fonction Turn ajoutée, variables renommées, chiffres d'instructions réduits
(1235-7 = 1228): Variables réorganisées, bug corrigé dans '@'
(1228-37 = 1191): partage de code d'implémentation en le répartissant sur 3 blocs de cas consécutifs
(1191-12 = 1179): Partage maintenant l'implémentation du cycle de pile entre les 3 instructions.
(1179-20 = 1159): fractionnement de l'analyse de chaînes sur 3 blocs de cas, suppression de la variable j, partage d'une autre implémentation
(1159-15 = 1144): 'x' simplifié en le transformant en l'une des 4 instructions de direction
la source
for k in TFile.ReadAllLines(ParamStr(1))do c:=c+k+StringOfChar(' ',80-Length(k));
. Vous pouvez également vous débarrasser def:TextFile
cela, mais vous devez en ajouteruses IOUtils;
au début. Différence: il lit toutes les lignes, et pas seulement les 25 premières lignes.Haskell 1428
Presque tous les caractères minuscules sont utilisés comme noms de fonction.
PS Existe-t-il un jeu sur ces esolangs de ce type (pointeur 2d)? Ils doivent être très amusants!
Un exemple de programme de poisson
la source
zip(['0'..'9']++['a'..'f'])[0..15]
devrait être utilisé à la place dezip['0'..'9'][0..9]++zip['a'..'f'][10..15]
. quel golf incroyable!\q->t$(r q)q
est fondamentalementr>>=t
Python, 978
980981Ne prend pas en charge le filetage.
Versions:
1. 981
2. 980:
p
instruction fixe ; petite amélioration.3. 978:
?
instruction fixe .la source
p
précédents ici, parce que je ne comprenais pas très bien cela.> A, B et C sortent de la pilep
commande prend les trois dernières valeurs de la pile (les fait apparaître)a
b
etc
, et attribue la placec
,b
sur la grille àa
. C'est pourquoi vous ne pouvez pas convertir en code natif.a=pop();b=pop();c=pop()
ouc=pop();b=pop();a=pop()
?a=pop();b=pop();c=pop()
Delphi,
18551701Cette version a un support de thread à un coût assez élevé: la version sans support de thread est actuellement de 1144 caractères, donc le support de thread ajoute 557 caractères (environ 50%)!
Notez que cette implémentation contient quelques idées qui réduiront mon autre soumission de quelques dizaines de caractères (je les appliquerai plus tard).
Ce code exécute parfaitement l'échantillon «multithread hello, world» et la plupart des autres exemples. (Mon interprète me donne une division par exception de zéro lors de l'exécution de l'échantillon «e» - quelqu'un peut-il confirmer cela avec un autre> <> interprète?)
Voici le code en retrait et commenté:
Modifier l'historique:
(1855-154 = 1701): Appliqué toutes les idées de la version non filetée
la source
procedure _.U(v: Int16);
->procedure _.U;
etprocedure _.T(A, b: Int16);
->procedure _.T;
TextFile
peut être écrit commeText
, etAssignFile()
commeAssign()
PHP, 2493 octets
Je sais qu'il a été implémenté avec une taille de compilateur plus petite avec d'autres langages, mais néanmoins avec l'esprit d'un programmeur qui ne dit rien, j'ai trouvé un interpréteur PHP CLI pour
><> Fish
. Le code source complet est ci-dessous.2 caractéristique principale du langage de programmation Fish n'a pas été implémentée, à savoir:
i
d'un caractère. PHP CLI nécessite que l'utilisateur appuie sur la<Enter>
touche pour entrer une entrée dans le tampon d'entrée.Notez que j'ai écrit et optimisé une grande partie des fonctions natives, y compris la création de tableau en utilisant:
au lieu de
Le programme est accessible via l'interface de ligne de commande (CLI) à l'aide de la commande suivante:
J'ai passé un total de 6 heures pour terminer cela en référence à l'interpréteur python d'origine.
Source primaire:
Modifier l'historique
x
syntaxe pour sélectionner l'une des directions au lieu de la sélectionner seule.p
commandechr()
à utiliser avant de pousser la valeur dans la zone de code.la source
Caractères Lua 1640 (1558 non filetés)
Version en filetage, golfée (1640 caractères):
La version de threading fait quelques hacks désagréables avec setfenv et getfenv pour éliminer le besoin d'indexation pour les différents threads.
Version de discussion lisible:
Version non-threading, golfée (1558 caractères, mais peut être un peu plus réduite si la version non-threading va être le critère):
Version lisible:
Ne pas mettre le suivant comme résultat, car utiliser la compression directement n'est pas le but, je suppose;). En utilisant murgaLua (ou n'importe quelle version de Lua avec lzlib et luaSocket (pour le décodage base64)), au nombre magique de 1333:
la source