"Talk" est un langage basé sur un accumulateur baroquifié qui est créé en réponse à la citation de Dennis sur talk.tryitonline.net.
Waiting for someone to create an esolang called talk.
. Le langage "Talk" a 4 commandes:
00
Si l'accumulateur est 0, réglez l'accumulateur sur 0.01
Si l'accumulateur est 0, réglez l'accumulateur sur 1.10
Si l'accumulateur est 1, réglez l'accumulateur sur 0.11
Si l'accumulateur est 1, réglez l'accumulateur sur 1.
Contribution:
L'entrée peut être prise via n'importe quelle méthode d'entrée acceptable par nos règles d'E / S standard.
Il y a deux entrées, la valeur initiale de l'accumulateur et le programme. Vous pouvez fusionner ces deux entrées en une seule entrée ou diviser votre entrée en commandes valides (par exemple en les prenant comme liste; par exemple
[00, 01, 00]
) si vous le souhaitez.
Production:
- À la fin de l'exécution d'une commande, l'accumulateur est émis implicitement.
Règles:
- L'entrée peut être une chaîne unique ou une liste de caractères.
- Comme il s'agit de code-golf , la réponse la plus courte, en octets, l'emporte.
- Nous prenons des chiffres ou des chaînes / caractères.
Cas de test:
0 0001111101 -> 1
0 000100 -> 1
0 11001000 -> 0
Classements
Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
lang.tryitonline.net
(maintenant c'est le castio.run/#lang
). Donc, une langue appelée Talk causerait de la confusion avec l'URL du salon de discussion alors récemment créé, qui esttalk.tryitonline.net
Réponses:
Gelée , 3 octets
L'entrée est une seule liste: l'accumulateur, suivi des paires.
Essayez-le en ligne!
Comment ça fonctionne
L'
y
atome effectue une translittération; [a, b]y
c remplace a par b , donc il renvoie b si a = c et c si a ≠ c .y@/
replie / réduit l'entréey
avec des arguments échangés, effectuant une translittération par paire.la source
Python 3 , 43 octets
Essayez-le en ligne!
La fonction prend une seule chaîne en entrée, où le premier caractère est l'état initial et le reste de la chaîne représente les commandes. Cette solution peut être facilement portée dans d'autres langages qui prennent mieux en charge les expressions régulières.
La partie difficile est de prouver que la solution donne le bon résultat. Pour voir cela, nous avons besoin d'une analyse approfondie des commandes. Tout d'abord, nous pouvons voir que les commandes ont les propriétés suivantes:
00
et11
conserve l'état de l'accumulateur.01
et10
rend l'état de l'accumulateur identique au deuxième bit quel que soit son état d'origine.Par conséquent, l'état final de l'accumulateur est:
01
ou10
n'existe, l'état final est le même que l'état initial.10
ou01
.Ensuite, nous montrerons que la solution donne le résultat correct dans les deux cas. Nous prouverons la déclaration de l'état final
0
et l'état final de1
peut être prouvé de façon analogue. Si l'état final est0
l'entrée est sous l'une des formes suivantes:^0{2k+1}11(11|00)*
Pour le cas 1 , la chaîne d'entrée
s
doit commencer par2k+1
0, suivi des commandes11
et00
. L'élimination de00
s et11
s donne un seul0
, qui est l'état final..+10{2k+1}11(11|00)*
Pour le cas 2 , la chaîne d'entrée se termine par une
10
commande, suivie de zéro ou plus00
et11
s. Ce modèle équivaut à un1
suivi de2k+1
0, puis de zéro ou plusieurs11
s et00
s. L'élimination de00
s et11
s laisse le dernier des2k+1
0 à la fin de la chaîne, qui représente l'état final.Sur la base de tout ce qui précède, après avoir éliminé
00
s et11
s simultanément en une seule passe (01001
c'est un contre-exemple si00
est éliminé en une passe puis11
en une autre) de l'entrées
, le dernier caractère est l'état final. Par conséquent, l'exactitude de la solution est prouvée.la source
Perl 6 , 17 octets
Essayez-le en ligne!
Profite de « Vous pouvez fusionner ces deux entrées dans une entrée si vous aimez » en prenant comme entrée la valeur de l' accumulateur concaténé avec les commandes , par exemple
1,[00,11]
est10011
. Si ce n'est pas correct, alors ce n'est que 5 octets supplémentaires pour le prendref(accumulator, commands)
. Renvoie un objet de correspondance qui peut être contraint à une chaîne.Explication:
Fondamentalement, cela fonctionne parce que les commandes
00
et11
ne font littéralement rien, tandis que les commandes01
et10
définissent simplement l'accumulateur au deuxième chiffre de la commande. S'il n'y a pas de commandes, il prend à la place la valeur initiale de l'accumulateur.la source
Zsh , 33 octets
La liste de caractères est passée en arguments, la valeur initiale de l'accumulateur est passée en stdin.
Essayez-le en ligne!
39 octets : si les commandes doivent être une seule chaîne
L'entrée est
accumulator
commands
comme arguments.Essayez-le en ligne!
Pour le plaisir, voici un one-liner récursif ( TIO ) de 50 octets :
la source
Python 3 , 52 octets
Essayez-le en ligne!
Correction du type de retour incohérent grâce à Chas Brown
Prend l'entrée en deux chaînes; l'accumulateur et le code.
la source
f(1,'11')==f(1,'01')
estFalse
; il renvoie parfois unint
et parfois unstr
. Alors peut-être spécifier qu'il faut que l'entrée acc soit une chaîne?Brachylog ,
119 octetsEssayez-le en ligne!
Comme cela fait assez longtemps que j'ai pu oublier la notion d' imprimer l'accumulateur après chaque commande , j'ai formulé une solution beaucoup moins naïve avec une certaine inspiration de la réponse Perl de Jo King.
Ancienne solution:
Brachylog ,
1816 octetsEssayez-le en ligne!
-2 octets de changer le format d'entrée.
la source
JavaScript (ES6), 27 octets
Prend l'entrée comme
(a)(code)
, où le code est une liste d'entiers de 2 bits.Essayez-le en ligne!
JavaScript (ES6),
4740 octetsPrend l'entrée comme
(a)(code)
, où le code est une chaîne.Essayez-le en ligne!
Comment?
la source
sed -E,
2619 octetsUn énorme -7 octets de @Cowsquack en réalisant que la suppression de toutes les paires fonctionne également.
Prend l'entrée concaténée ensemble sur stdin. Inspiré par la réponse Perl de Jo King .
Dépouillent paires de fuiteRetirer toutes les paires, puis obtenir le dernier chiffre.Essayez-le en ligne!Essayez-le en ligne!la source
s/.*\B//
, mais de toute façon changer légèrement l'approche donne 19 octets encore plus courts Essayez-le en ligne!s/(.)\1//g
cela fonctionnerait, car cela pourrait supprimer la fin d'une paire et le début de la suivante, mais cela fonctionne toujours. Excellent!s/(.)\1//g
est équivalent às/00|11//g
celui indiqué dans ma solution.Retina 0.8.2 ,
1811 octetsEssayez-le en ligne! Le lien inclut des cas de test. Prend l'entrée concaténée. Sauvegardé 6 octets grâce à @CowsQuack pour avoir souligné que la suppression de tous les caractères doublés et la prise du dernier caractère restant fonctionnaient, bien qu'en fait le port de la réponse originale de @ JoKing aurait pu être joué sur 3 octets même sans cette astuce.
la source
!`.$
, puis encore 4 octets parce que vous n'avez pas à vous limiter aux paires de fin ...Python 3 , 38 octets
Essayez-le en ligne!
Basé sur la solution de Joel . Prend l'entrée comme une liste de la valeur initiale de l'accumulateur (chaîne de longueur un) suivie des commandes (chaînes de longueur deux). Recherche la dernière commande avec deux valeurs inégales et sort son deuxième caractère.
Pour que cela tombe à la valeur initiale de l'accumulateur quand il n'y a pas de telles commandes, nous faisons en sorte que la chaîne de valeur initiale à caractère unique passe le test. Nous le faisons en vérifiant si une liste singleton avec le dernier caractère n'est pas égale à une liste de tous les caractères précédents, qui est passée par n'importe quelle chaîne de longueur un ou chaîne de longueur deux avec deux caractères différents.
la source
Perl 5
-p
,3733 octetsEssayez-le en ligne!
L'entrée est de deux lignes: la première ligne est la séquence de commandes, la seconde est l'accumulateur.
la source
Python 2 , 56 octets
Essayez-le en ligne!
la source
Gelée ,
86 octetsEssayez-le en ligne!
-2 octets merci à Nick Kennedy de m'informer d'un changement de règles. (Son golf proposé
EÐḟFȯṪ
, semble un peu plus intelligent mais a la même longueur que ma solution précédente moinss2
.) Le format d'entrée prend maintenant les commandes comme une liste de chaînes de deux caractères, mais le pied de page de test se traduit de l'ancien format pour plus de commodité.Traduit de ma nouvelle solution Brachylog.
Ancienne version:
Gelée , 13 octets
Essayez-le en ligne!
Je ne suis pas sûr à 100% que c'est correct, mais cela réussit sur les trois cas de test. Prend les commandes comme argument de gauche et l'accumulateur initial comme argument de droite.
la source
EÐḟFȯṪ
avec l'entrée comme par exemple[[0,0],[0,1],[1,1],[1,1],[0,1]]
.Haskell , 29 octets
Définit une fonction sans nom sur la première ligne avec type
(Foldable t, Eq b) => b -> t [b] -> b
. Pour les besoins de ce code golf, nous pouvons l'instancier commeChar -> [String] -> Char
où le premier argument est l'accumulateur et le second est une liste de chaînes, chaque chaîne étant une seule commande.Essayez-le en ligne!
la source
Python, 111 octets
Non golfé. EDIT: AHHH Quelqu'un m'a battu!
la source
Haskell , 36 octets
Essayez-le en ligne!
Prend l'entrée comme
f(string)(char)
où le caractère est l'accumulateur et la chaîne est la liste des commandes.la source
05AB1E , 3 octets
Essayez-le en ligne!
Zip, vidage sur la pile, remplacement.
la source
Stax , 3 octets
Exécuter et déboguer
Pour chaque instruction, effectuez la traduction des caractères.
la source
Keg ,
-ir
, 16 octetsEssayez-le en ligne!
Expliqué:
Prend l'entrée implicite et déplace à droite la valeur des accumulateurs vers le bas
Répétez les étapes suivantes (longueur de la pile - 1 divisé par 2) fois
2.1. Déplacer l'accumulateur vers le haut
2.2. Comparer pour l'égalité avec la première partie de la commande
2.2.1. Si vrai, remplacez l'accumulateur, sinon éclatez le remplacement
L'entrée est prise comme la valeur acc initiale concaténée avec la source. Par exemple
la source
Bash ,
5840 octetsAjoutez un octet pour un programme complet: passez
f
à$0
.58 octetsEssayez-le en ligne!Le ternaire retournera faux lorsque
$1
est défini sur0
, mais le,1
à la fin garantit que l'ensemble((expression))
retournera vrai, sauf une erreur de syntaxe.Lorsque tous les arguments sont consommés, une erreur de syntaxe se produit et la récursivité se termine.
la source
Fusain , 16 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend des arguments séparés. Explication:
Divisez les instructions en paires de chiffres et passez-les en boucle.
Si l'accumulateur est égal au premier chiffre ...
... puis affectez-lui le deuxième chiffre.
Imprimez l'accumulateur à la fin de la boucle.
la source
MATL ,
1312 octetsPrend l'entrée comme une matrice à 2 colonnes où chaque ligne est une commande et un nombre
Essayez-le en ligne! Ou vérifiez tous les cas de test
la source
Gelée , 7 octets
Un lien dyadique acceptant le programme comme une liste d'entiers à gauche et l'accumulateur initial à droite qui donne un entier.
Essayez-le en ligne! Ou voir une suite de tests
la source
PHP , 38 octets
Essayez-le en ligne!
Port fondamentalement de l'idée de Jo King .
la source
Enchantements runiques , 28 octets
Essayez-le en ligne!
Prend l'entrée comme une série d'octets séparés par des espaces (Runic ne comprend pas les listes). Le premier octet est l'état initial et tous les autres octets sont le programme. Aucune validation n'est effectuée (c'est-à-dire qu'elle suppose que seuls les programmes valides sont donnés en entrée et que la valeur utilisée pour représenter
0
et ne importe pas1
).la source
Assemblage x86, 33 octets
Prend l'état initial de l'accumulateur dans
CL
(entier0
ou1
) et l'adresse des commandes comme une chaîne ASCII terminée par zéro dansESI
. Laisse l'état final de l'accumulateurCL
.Pointez l'instruction d'appel sur offset
0x1B
(libelléinterpret
dans l'explication).Explication (à l'aide de la syntaxe Intel):
la source
C (gcc) ,
4541 octetsEssayez-le en ligne!
4 octets rasés grâce à @ErikF!
la source
Cristal , 46 octets
Avec des commandes dans un
Array(Tuple(Int32,Int32))
, comme[{0,0}, {0,1}, {0,0}]
.def f(s,i);i.map{|c,v|s+=~(s^c)&(s^v)%2};s;end
Essayez-le en ligne!
C'est assez simple à comprendre sous une forme plus lisible:
La fonction parcourt chaque commande, décompressant automatiquement les valeurs de tuple dans
c
etv
. Il définit ensuite lestate
par la formuleauquel je suis arrivé principalement par essais et erreurs. Une fois que toutes les commandes ont été traitées, il renvoie la valeur d'état.
la source
C (clang) ,
6862 octetsEssayez-le en ligne!
Prend un pointeur sur le début de la chaîne source, un pointeur sur la fin de la chaîne source (start + strlen (start)) et la valeur initiale de l'accumulateur.
Ancienne version (imprime ASCII 48/49 pour 0/1):
la source
Java (JDK) , 38 octets
Essayez-le en ligne!
Les entrées sont un
int
et unIntStream
de0
,1
,2
ou3
, ce qui correspond à00
,01
,10
,11
de binaire.la source