Lié à: créer un interpréteur; # et générer; # code
;#
- Un guide tourbillon
Il s'agit d'un langage simple avec deux commandes. Sa seule structure de données est un accumulateur, qui est initialisé à 0.
;
Incrémenter l'accumulateur#
Calculez la valeur de l'accumulateur modulo 127 et imprimez le caractère ASCII correspondant. Ensuite, réinitialisez l'accumulateur à 0.
Le code source peut contenir des caractères supplémentaires (ASCII imprimable + espaces blancs), mais ceux-ci sont traités comme des commentaires et n'ont aucun effet sur l'exécution du programme.
Défi
Étant donné que la plupart des ordinateurs ne sont pas livrés avec ;#
préinstallés, il serait très utile d'avoir un outil qui peut convertir le ;#
code dans une langue différente. Dans ce défi, vous écrirez un programme pour y parvenir.
Contribution
Certains ;#
code source, pris par argument ou STDIN. Ce code source peut contenir (commenter) des caractères autres que ;
ou #
.
Sortie
Code, dans la même langue que votre soumission, qui, une fois exécuté, imprime / renvoie la même chaîne que le ;#
code d' origine . Ce code résultant peut générer un retour à la ligne après la chaîne cible, si cela convient mieux à votre langue.
Remarques
Une chose à surveiller est les séquences d'échappement, telles que le code qui imprime les barres obliques inverses ou les guillemets. Recherchez également le ;#
code qui pourrait contenir des éléments qui ressemblent à des mots clés ou des commandes dans votre langue.
Restrictions supplémentaires
Tous les programmes doivent se terminer (je considère normalement cela comme un défaut, mais quelqu'un a posé une question à ce sujet, donc je le dis ici).
Exemples
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (python): print(";#")
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (element): \'`
;#
préinstallé ...;
ou#
?Réponses:
Python 2 ,
7669 octetsCode
L'entrée est entourée de guillemets.
Essayez-le en ligne!
Explication
La première partie de la sortie se fait essentiellement par l'entrée, en utilisant
input('print')
. Nous divisons l'entrée sur les hashtags et éliminons le dernier élément. Nous imprimons la représentation de ord (y% 127) , où y est le nombre d'occurrences du point-virgule. Nous ajoutons le,
à la fin de l'impression pour nous assurer que cela n'imprime pas une nouvelle ligne.Cela donnerait le code Python suivant pour le
Hello, World!
programme:Qui peut être essayé en ligne .
la source
brainfuck , 126 octets
Essayez-le en ligne!
Le programme de sortie échouera dans l'implémentation TIO si la
;#
sortie dépasse 65 536 caractères. J'ai également fait une version de 130 octets qui sort[+]
au lieu de<
, en évitant ce problème:Explication
la source
Espace, 291 octets
Remplacez S par un espace, T par une tabulation et N par une nouvelle ligne.
Générer des espaces blancs dans des espaces blancs n'est pas la chose la plus efficace au monde. La génération de tout type de code dynamique nécessite un twittage de bits important qui, dans un langage sans opérations au niveau du bit, ferait exploser la taille du code. Par conséquent, ce programme n'essaie pas de faire quelque chose d'intelligent, optant plutôt pour simplement traduire le programme source un à un. Il se démonte comme suit:
Le code généré par le programme ressemble à:
la source
V ,
192028 octetsBugfix, cassé s'il n'y avait pas
#
à la finBugfix, implémenté
mod 127
Essayez-le en ligne!
Essayez le code généré
Explication:
En V, en mode insertion, tout caractère ASCII peut être inséré par code à l'aide de
<C-v><Code>
. Le code V remplace tout#
par<C-v>0
, où le zéro est un pseudo-accumulateur par#
. Chacun#
remet l'accumulateur à 0, donc en avoir un par fonctionne bien. Ensuite, le code effectue un incrément pour chaque point-virgule trouvé, qui incrémente simplement le nombre suivant qu'il trouve, qui serait le prochain accumulateur. Le0
est ajouté à la fin afin que l'instruction n'échoue pas pour;
s sans un suivi#
.Hexdump:
la source
05AB1E ,
20 19 1816 octets-1 grâce à Adnan
-2 grâce à carusocomputing
-2 grâce à Kevin Cruijssen
Essayez-le en ligne! (inclut la sortie du code 05AB1E exécuté)
la source
';¢
peut êtreg
,žy
pousse 128, peut fonctionner d'une manière ou d'une autre et pourquoi ne pas simplement épeler le mot entier et l'entourer de guillemets?';¢
cas où il y a des caractères autres que;
.žy<
est le même que127
. L'impression du mot entouré de guillemets sera interrompue si l'un des caractères est une citation.ƵQ
est une version compressée de 127 .Python 2 , 75 octets
Essayez-le en ligne! (inclut la sortie de l'exécution du code Python transpilé)
Merci aux ovs pour de nombreux octets!
Explication
Ce programme transpile le #; code en divisant sur #s (
s.split('#')[:-1]
), en comptant le nombre de points-virgules dans chaque module 127 (x.count(';')%127for x in ...
) et en le convertissant en caractère ASCII respectif (chr(...)
). Cette liste est ensuite concaténée (''.join(...)
), convertie en une représentation Python de la chaîne (les backticks) et insérée dans un programme Python squelette pour imprimer des chaînes ("print"+...
).la source
Gelée ,
25 2416 octetsUn programme complet d'impression de code Jelly équivalent (en tant que lien monadique, il renvoie une liste de listes de types mixtes).
Le premier exemple est à essayer en ligne! qui donne ce programme .
Comment?
Compte le
;
s dans chaque passage entre#
s prend chaque module 127 et ajoute un cast à l'instruction ordinale, l'Ọ
atome monadique , après chaque.Jelly dirige implicitement chaque valeur vers STDOUT lors de son exécution dans un programme comme celui-
72Ọ101Ọ108Ọ108Ọ111Ọ44Ọ32Ọ119Ọ111Ọ114Ọ108Ọ100Ọ33Ọ
ci, c'est-à-dire qui s'imprimeraitHello, world!
.Une note concernant l'entrée: Jelly prend l'entrée de chaîne au format Python. Le programme vide pourrait être entrée comme
""
, et les programmes de hachage uniquement comme"#"
,"##"
, etc. D' autres manipulations peuvent être requis pour une entrée contenant antislashs et des citations.la source
Cubiquement ,
138137 octetsEssayez-le en ligne!
Remarque: vous devrez peut-être le remplacer
&6
par?6&
pour qu'il fonctionne sur TIO.&6
est dans la spécification de langue, cependant.Comment ça marche
Programme de sortie:
la source
@6
,%6
et-6
. Les commandes qui auparavant ne faisaient rien quand elles étaient appelées implicitement utilisent maintenant le bloc-notes. Donc@
c'est pareil@6
,%
c'est pareil%6
, etc.JavaScript (ES6), 101 octets
Étant donné une chaîne d'entrée, supprime tous les caractères inutiles, puis retourne la source de la fonction suivante:
Où
...
représente la;#
source nettoyée .la source
C,
9896999897 octets+3 octets car j'ai oublié que C n'est pas interprété :(
Courir avec:
Imprime:
la source
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
produitf(){puts(""");}
, ce qui n'est pas valide. Le défi appelle spécifiquement "Une chose à rechercher est les séquences d'échappement, telles que le code qui imprime les barres obliques inverses ou les guillemets."Gelée , 26 octets
Essayez-le en ligne!
Et essayez ce code Jelly ici!
La sortie Jelly devient du code
Ọø‘‘‘‘‘‘‘‘‘‘‘‘‘Ọø‘‘‘‘‘‘‘‘‘‘Ọø
, qui imprime chr (13) + chr (10)la source
PHP, 72 octets
la source
> <>,
1068177 octetsCeci est mon premier golf à> <> (poisson)! Une langue assez intéressante que je dois dire. Beaucoup de plaisir!
la source
i:1+?!
eni:0(?
, et j'ai également l'impression que vous pourriez économiser quelques octets si vous construisez le résultat sur la pile et attendez la fin de l'entrée pour le produire. Je veux dire, c'est beaucoup deo
s;)C # 169 octets
Golfé:
Version lisible par l'homme:
la source
Haskell ,
106102 octetsEssayez-le en ligne!
Non golfé
la source
Brachylog , 33 octets
Essayez-le en ligne!
Je me sens un peu trop fatigué pour expliquer cela pour le moment, si quelqu'un le voit et se demande comment cela fonctionne, laissez un commentaire pour me le rappeler.
la source
MathGolf , 17 octets
Essayez-le en ligne!
Explication
Étant donné que n'importe quel caractère peut être placé sur la pile (et donc la sortie) en utilisant
'<char>
, cela produira une séquence de ces blocs de code.la source
Þ
.Þ
. ( Les documents que j'utilise indiquent cependant l'ancienne valeur. )MATL ,
3228 octetsEssayez-le en ligne!
Approche complètement différente basée sur un programme
strsplit
plutôt que sur un programme de type automate.la source
En fait , 25 octets
Essayez-le en ligne! (inclut la sortie de l'exécution du code transpilé Actually)
Explication:
la source
shortC , 48 octets
la source
Fourier, 32 octets
Essayez-le sur FourIDE!
Ce fut un défi assez facile car Fourier est essentiellement un surensemble de; #:
la source
CJam, 14 octets
Explication:
la source
APL, 31 octets
Sortie:
Explication:
⌽
: inverser l'entrée{
...}
: passez-le à cette fonction:⍵⊂⍨'#'=⍵
: partition à chacun#
dans la chaîne (depuis le début, c'est pourquoi il fallait d'abord l'inverser)+/¨';'=
: compter les;
s dans chaque partition127|
: modulo 127⌽
: inverser à nouveau'⎕UCS',
: ajoute la chaîne⎕UCS
, qui est la fonction Unicode.⍕
: représentation de chaînela source
⍕
comme la sortie réelle vers STDOUT est la même.Ruby , 47 + 1 = 48 octets
+1 octet pour
-p
.Essayez-le en ligne!
-30 octets grâce à @manatwork !
la source
;
ou#
»./;+#/
→/.*?#/
et le bloc de codes.length-1
→s.count(?;)
. BTW, vos calculs sont également faux, comme cela%
a une priorité plus élevée que-
, donc devrait l'être(s.length-1)%127
. Et dans.gsub
le bloc de code « , vous pouvez accéder aux groupes capturés avec$&
,$1
... de sorte que le|s|
paramètre de bloc de code est généralement pas possible. Et l'interpolation de chaîne stringifies:{"$><<#{$&.count(?;)%127}.chr;"}
. Essayez-le en ligne!gsub
modifie$_
directement, ce qui signifie que vous n'avez pas besoin de le réaffecter. CEPENDANT, vous avez des problèmes si vous avez des caractères de commentaire après votre dernier#
... voir iciPyth,
252324 octets+1 octets grâce à @FryAmTheEggman
Essayez!
gère les caractères qui doivent être échappés en utilisant uniquement des chaînes de 1 caractère.
Exemples de sorties:
Utilise mon; # interprète .
la source
#
dans l'entrée, car cela s'imprimera0
. Vous pouvez résoudre ce problème avecjk
au lieu des
.C, 150 octets
Étendu:
C'est un programme complet qui (devrait) se terminer, ignorer les commentaires et produire un code de sortie toujours correct. Je suppose que EOF = -1
Testé sur SystemResque-Cd 4.9.6, compilé avec gcc 4.9.4
la source
braingasme , 40 octets
Je dois dire que c'est étonnamment court.
Le code généré pour
;
est un+
, qui incrémente la cellule actuelle.Le code généré pour
#
contient une opération modulo manuelle akwardla source
Braingolf , 55 octets
Essayez-le en ligne!
Remplace fondamentalement
;
par1+
,#
avec#~1+%@
et précède le tout avec un0
parce que monadique+
opérateur est rompu en ce moment.1+
ajoute 1 au dernier élément de la pile.#~1+%@
pousse la valeur char de~
(126), ajoute 1 pour faire 127, module avec un autre élément sur la pile, puis pop et imprimez en tant que char.Explication
la source
q / kdb +, 42 octets
Solution:
Exemples:
Notez que le
,
est utilisé pour signifier une liste (par rapport à l'atome) comme l'"\""
est une liste d'un élément, plutôt que d'être un atome.Explication:
Prenez la chaîne d'entrée, supprimez tout ce qui n'est pas un
#
ou un;
, divisé en listes#
, comptez le nombre d'éléments dans chaque liste, effectuez le mod 127 sur le résultat et convertissez-le en une chaîne:Remarques:
#
, sinon le dernier morceau sera supprimé par erreur par le-1_
.;#
.la source
Perl 5 , 78 octets
Essayez-le en ligne!
la source