En rapport avec: Faire un; # interprète
Dans le défi ci-dessus, la tâche consistait à créer un interprète pour le langage ésotérique ;#
.
La ;#
langue
Le langage a exactement deux commandes: ;
et #
(tous les autres caractères sont ignorés par l'interpréteur):
;
: Incrémenter l'accumulateur
#
Modulez l'accumulateur par 127, imprimez le caractère ASCII correspondant et réinitialisez l'accumulateur à 0.
Défi
Parce que je suis paresseux mais que je veux encore tester quelques cas de test, j'ai besoin d'un programme ou d'une fonction qui convertit le texte brut en ;#
code.
Contribution
L'entrée est une chaîne, prise en argument ou via stdin. Il ne contiendra que des caractères ASCII imprimables et des nouvelles lignes.
Sortie
La sortie est le ;#
programme généré en retournant ou en imprimant sur stdout. Tant que le programme est valide, il peut contenir des caractères en excès autres que #
et ;
tous les autres caractères sont ignorés.
Exemples
Input: Hello, World!
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Input: ABC
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Input: ;#
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Classement
la source
;#
ignore tous les autres caractères, donc le programme généré continuerait à fonctionner.;
. Deuxièmement, 127 est correct, comme indiqué dans la question liée qui contient la spécification du langage; #.Réponses:
; # + , 61 octets
Joué par Conor O'Brien
Essayez-le en ligne!
Notez que l'entrée a un octet de fin nul.
la source
; # + , 40 octets
Essayez-le en ligne! L'entrée se termine par un octet nul.
Explication
Le code est divisé en deux parties: la génération et l'itération.
Génération
Cela met les constantes
;
et#
en mémoire en tant que telles:Itération
la source
#
@tuskiomi. Essayez-le en ligne!brainfuck ,
5954 octetsEssayez-le en ligne!
la source
Gelée ,
1087 octetsEssayez-le en ligne!
-2 octets grâce à @Emigna
-1 octet grâce à @Dennis
la source
O”;ẋ;€”#
place?;€
peut devenirp
.GS2 , 6 octets
Essayez-le en ligne!
Hexdump réversible (xxd)
Comment ça marche
la source
■
= qu'est-ce que c'est?2
est la commande de multiplication? GS2 is weird: P■
est simplement la carte , et GS2 implémente des chaînes en tant que listes d'entiers.2
est-ce que XOR ...Taxi, 779 octets
Essayez-le en ligne!
Ungolfed:
Explication:
la source
05AB1E , 8 octets
Essayez-le en ligne!
Explication
la source
Brainfuck, 43 octets
Un octet nul termine le programme.
Explication
la source
Python 3 , 39 octets
Essayez-le en ligne!
la source
for s in input():print(";"*ord(s)+"#")
est un octet plus court.> <> , 22 octets
Essayez-le en ligne ou au terrain de jeu du poisson
L'entrée est STDIN, la sortie est STDOUT. Dans> <>, les caractères et les codes ASCII sont identiques. Il suffit donc de lire un caractère, de l’imprimer
";"
et de le décrémenter jusqu’à 0, puis d’imprimer"#"
et de boucler jusqu’à épuisement des entrées.la source
F #, 79 octets
Essayez-le en ligne!
Étendu
convert prend la chaîne d'entrée et génère un programme; #
Usage
la source
Python 2 - 36 octets
Essayez-le en ligne!
la source
PowerShell,
292725 octetsAssez simple. Prend l'entrée comme argument de ligne de commande. La sortie est un # programme valide qui imprime le texte demandé.
la source
#
et;
comme tous les autres caractères sont ignorés.«$args
est assez.brainfuck , 47 octets
Essayez-le en ligne!
Voir aussi: la réponse de ovs , qui adopte une approche similaire, mais avec une méthode différente pour générer des constantes et une disposition de cellules différente.
Explication:
Ce défi cadre assez bien avec la spécification "brainfuck", ce qui signifie que la solution est essentiellement triviale. Brainfuck prend les entrées en tant que valeurs ASCII, ce qui est exactement ce que # doit produire en tant que.
Le schéma de transposition est simple: générez la valeur ASCII pour
;
et#
, impression;
égale à la valeur ASCII du caractère saisi, imprimez#
, répétez pour chaque entrée.la source
Mathematica, 49 octets
Explication
Convertit la chaîne en entrée en une liste de codes de caractères, puis
Map
la fonctionStringRepeat[";",#]<>"#"&
sur la liste, puisStringJoin
le résultat avec la chaîne vide.la source
<>""
?StringJoin
ing (<>
) la chaîne vide concatène chaque chaîne.Aceto , 19 octets
Puisqu'il y a un interprète à Aceto , j'ai pensé qu'il serait également possible que Aceto réponde à ce défi. Il s'inscrit parfaitement dans une courbe de Hilbert du 2ème ordre:
Tout d'abord, nous lisons un caractère unique (
,
), nous le dupliquons et le nions pour vérifier s'il s'agit d'une nouvelle ligne (d!
lors de la lecture d'une nouvelle ligne, un caractère vide est normalement placé sur la pile). J'utilise ensuite ce que je pense être une astuce assez astucieuse pour gérer le cas newline de manière compacte:`'\n
Si la valeur sur la pile est
True
(nous lisons une nouvelle ligne), ce code signifie: do (`
) place un caractère littéral sur la pile ('
), qui est une nouvelle ligne:\n
.Si la valeur sur la pile est
False
(nous n'avons pas lu de nouvelle ligne), ce code signifie: ne (`
) lit pas un caractère littéral ('
). Cela signifie que le caractère suivant est exécuté en tant que commande. Heureusement, une barre oblique inversée échappe à la commande suivante (elle évite ainsi qu’elle ne soit exécutée),n
elle n’imprime donc pas de nouvelle ligne (ce quin
généralement le cas).Le reste du code est simple. nous convertissons le caractère de la pile en entier de son codepoint unicode (
o
), nous poussons un point-virgule littéral (';
), multiplions le nombre par la chaîne (*
comme dans Python),p
rintons le résultat, poussons un littéral ('
)#
,p
leons aussi, et retournez à laO
rigin.Courir avec
-F
si vous voulez voir des résultats immédiats (à cause de la mise en mémoire tampon), mais cela fonctionne aussi sans.la source
Perl, 24 octets
Courez avec
perl -pe
.Solution alternative:
Courez avec
perl -nE
.la source
Soulagement , 11 octets
Oui, nouvelles langues.
Explication
la source
Fourier , 19 octets
Essayez-le sur FourIDE!
Pour exécuter, vous devez placer la chaîne de saisie entre guillemets.
Pseudocode d'explication
la source
Befunge-98 (FBBI) , le
231710 octets-5 octets grâce à Jo King .
Essayez-le en ligne!
la source
JavaScript,
5554515048 octetsEssayez-le en ligne
Des alternatives
Si nous pouvons prendre l’entrée comme un tableau de caractères individuels, alors 5 octets peuvent être sauvegardés.
Si nous pouvons aussi sortir sous forme de tableau, 2 autres octets peuvent être sauvegardés.
la source
\n
devrait devenir;;;;;;;;;;#
..
en[^]
, ce qui laisserait encore un octet plus court quemap/join
?join()
votre réponse précédente était inutile étant donné la spécification de;#
, et vous pouvez également déclarer que l'entrée de votre fonction est un tableau de caractères, bien que la seconde suggestion soit un peu exagérée. Quoi qu'il en soit, cela vous ramène au maximum à 48 octets.En fait , 11 octets
Essayez-le en ligne!
Explication:
la source
APL (Dyalog) , 18 octets
Essayez-le en ligne!
⎕UCS
Convertir en points de code Unicode';'⍴¨⍨
utiliser chaque point de code pour remodeler ( ⍴ = Rho ≈ R , R Eshape) un point - virgule#',¨⍨
ajoute un hachage à chaque chaînela source
Ruby,
28 ans25 octets24 octets, plus le
-n
commutateur de ligne de commande à utiliser de manière répétéestdin
.3 octets sauvés (et sortie corrigée sur les nouvelles lignes!) Grâce à manatwork.
la source
.ord
en travaillant directement avec les codes de caractères:$_.bytes{|b|$><<?;*b+?#}
. Il y a une différence: celle-ci code également la nouvelle ligne dans l'entrée. Je ne suis pas sûr de ce que le propriétaire de la question a l'intention de dire par «Cela ne contiendra que des caractères ASCII imprimables et des nouvelles lignes.», Mais pour moi, les sons comme les nouvelles lignes devraient également être encodés.bytes
. J'ai posé la question à OP au sujet des sauts de ligne et je l'éditerai plus tard.PHP, 54 octets
Essayez-le en ligne!
la source
Alice , 12 octets
Essayez-le en ligne!
Explication
la source
PHP, 48 octets
la source
jq, 30 caractères
(26 caractères de code + 4 caractères d'options de ligne de commande)
Échantillon échantillon:
Test en ligne
la source
Pyth, 10 octets
Essayez le!
la source
Röda , 24 octets
Essayez-le en ligne!
la source