Tous à bord du train ASCII!
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ o | C | | O | | D | | E | | | | G | | O | | L | | F | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Vous mieux soyez prêt à prendre le train, car vous êtes sur le point de construire le train sur lequel vous allez monter. Étant donné une chaîne s
, affichez un train entièrement formé comme illustré ci-dessus. La première chose en sortie est toujours le moteur qui « tirera votre chaîne, comme illustré ci-dessous:
o O O o TS__[O] {======| ./o--000"
Après la locomotive se trouvent des wagons contenant chacun caractère de votre précieuse cargaison. Pour éviter toute confusion lors du déchargement, votre société vous a chargé détiqueter lextérieur de ces voitures. Les voitures en question ressembleront toujours à ceci:
___ | # | |___| _|"""""| "`-0-0-"
Où le #
est représentatif du caractère qui se trouve à lintérieur du » cargaison » Lenchaînement du moteur à chaque voiture fait également partie de votre travail, car vous avez été chargé de superviser la fluidité et le succès de toute cette expédition. Donc, une fois que vous avez étiqueté toutes les voitures et que le moteur est sur les rails, vous devez vous assurer que le train est assemblé et prêt à rouler.
Règles
- Le seule lentrée que votre programme doit prendre est une seule chaîne.
- Le moteur doit toujours être sorti, même si votre envoi est vide.
- Chaque voiture ne peut contenir quun seul caractère, ne « t Poussez votre chance, vous risquez dendommager la marchandise.
- Il vous suffit de prendre en charge les caractères ASCII imprimables suivants:
_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Si vous finissez par faire plus, cela « Cest bien aussi, mais cest le strict minimum. - 1-2 espaces de fin sont acceptables, tout comme un seul saut de ligne à la fin.
- Ceci est code-golf ascii-art , le nombre doctets le plus court lemporte.
Commentaires
- Vaguement lié.
- Je ne ‘ Je pense quil sagit en fait de complexité kolmogorov . Bas ed sur ce méta-article cette question est certainement sur la ligne entre ladaptation et ne pas correspondre à notre définition et je dirais personnellement quelle ne correspond pas à la balise similaire à cette question qui demande également un type de retour à la chaîne.
- Cest magnifique ascii -art
- @WheatWizard cest ‘ un mélange de plusieurs genres. Le moteur tomberait sous la complexité kolmogrov, le tout sous ASCII-Art et il tomberait probablement aussi un peu dans la manipulation des cordes.
- Javais limpression que la compression du motif réel du train en valait la peine de létiquette; mais je ‘ Je vais simplement le supprimer pour arrêter largument.
Réponse
05AB1E , 101 99 octets
Première tentative naïve.
" o O O o"ð7×"TS__[O] {======|./o--000""J5ä¹v… _ €ÐJy“ | ÿ | |___| _|"""""|"`-0-0-"“«5ä})øJ»
Commentaires
- Eh bien, le code ‘ ne ressemble pas à un train, mais il ‘ est gagnant maintenant.
Réponse
JavaScript (ES6), 149 144 octets
s=>` o O Oa ___ o a | $& | TS__[O]a |___| {======|a_|"""""| ./o--000"a"\`-0-0-"`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c))
Je ne pense pas que le moteur lui-même puisse être compressé, mais cest peut-être possible.
Extrait de test
let f = s=>` o O Oa ___ o a | $& | TS__[O]a |___| {======|a_|"""""| ./o--000"a"\`-0-0-"`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c)) O.innerHTML = f("CODE GOLF")
<input value="CODE GOLF" oninput="O.innerHTML=f(this.value.replace(/\n/g,"<br>"))"><br> <pre id=O></pre>
Commentaires
- Beaucoup de caractères répétés, devrait être possible de presser quelques octets supplémentaires
- On peut presque voir le train emballé dans le code source 🙂
- Voté principalement parce que le code ressemble à un train
- Points bonus car il sexécute directement dans le navigateur!
Réponse
Befunge, 276 270 octets
p1p~:7>7+#:`#~_$:v >#p0p10:p00:+1g00_v#: v"!!```!!!"v>0p01g\-0g1+53p v"!}!#!}!!"v0 p115< v"!}```}!!"v^:-1< v"}#####}`">00g:| >"(.1.1.a#"^+<v1< v"P!P!p!!! "v5>g00p v"!!!!!p!!!"v6 v"^P\``TU!!"vp v"}>>>>>>|!"v+ >"(111..p0/"v6 v-1:g110">>"<g >:11p!#v_p011^ #-:#1_@>$$$$>,#
Explication
La voiture et le moteur sont codés comme deux ensembles de cinq chaînes sur les lignes 3 à 12. Les valeurs des caractères sont décalés de 1 afin déviter davoir à traiter les guillemets doubles qui ne peuvent pas être utilisés dans une chaîne Befunge.
Le code fonctionne en construisant lensemble complet de caractères nécessaires pour rendre le train sur la pile. Pour chaque ligne de sortie, une chaîne de voiture appropriée est dabord ajoutée à la pile, répétée autant de fois que nécessaire pour la cargaison, puis une copie de la chaîne de moteurs appropriée.
Une fois que chaque ligne a été construite, une paire de flèches vers le bas à gauche des chaînes est remplacée par une flèche vers la droite, de sorte que la prochaine itération de la boucle suit un chemin différent à travers le code, en utilisant un autre paire de chaînes pour la voiture et le moteur.
Une fois que toutes les données ont été construites sur la pile, il ya une boucle de rendu final qui écrit les caractères, en soustrayant 1 à chaque fois pour tenir compte du codage initial .
En prime, la source est conçue sous la forme dune tourelle de canon , au cas où le train serait attaqué . Les golfeurs ont détruit ma tourelle de canon.
Commentaires
- Les golfeurs ont détruit ma tourelle de canon, LOL. +1. Pourtant, cela ‘ bat C # et Java.
Réponse
PHP, 218 211 204 187 183 octets
o O O<?for(;$y<5;print"\n".[" o "," TS__[O]"," {======|","./o--000""][+$y++])for($p=0;$c=a&$argn[$p++];)echo[" ___ "," | $c | "," |___| ","_|"""""|","\"`-0-0-""][+$y];
Prend les entrées de STDIN; exécute avec -nR
.
Compression du moteur ou wagon nécessiterait plus de code pour décompresser quil nen économise sur le stockage.
Je ne vois plus de potentiel ici.
Commentaires
-
a&$c=$argn
au lieu de""<$c=$argv[1]
- @J ö rgH ü lsermann Oui, ce message était ancien. 🙂
Réponse
Python 2, 176 octets
lambda i:"\n".join(map("".join,zip(*[[" o O O"," o "," TS__[O]"," {======|","./o--000""]]+[[" ___ "," | "+x+" | "," |___| ","_|"""""|","\"`-0-0-""]for x in i])))
Exemple:
print f("Python")
donne
o O O ___ ___ ___ ___ ___ ___ o | P | | y | | t | | h | | o | | n | TS__[O] |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Réponse
Powershell, 167 166 octets
$l=($a=$args[0]).Length;" o O O"+" ___ "*$l;" o "+($a[0..$l]|%{" | $_ |"});" TS__[O]"+" |___| "*$l;" {======|"+"_|"""""|"*$l;"./o--000""+""`-0-0-"""*$l
Exemple:
.\train.ps1 "PowerShell!" o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | P | | o | | w | | e | | r | | S | | h | | e | | l | | l | | ! | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Peut-être invalide! Sil est exécuté sans aucun argument, il essaiera dafficher une chaîne vide, et ressemblera à:
o O O o | | TS__[O] {======| ./o--000"
Si exécuté avec une chaîne dentrée vide, il retournera correctement cependant:
.\train.ps1 "" o O O o TS__[O] {======| ./o--000"
(un peu) Ungolfed:
$l=($a=$args[0]).Length " o O O"+" ___ "*$l " o "+($a[0..$l]|%{" | $_ |"}) " TS__[O]"+" |___| "*$l " {======|"+"_|"""""|"*$l "./o--000""+""`-0-0-"""*$l
la compression la plus courte dans Powershell est va être +"c"*x
où c est le caractère et x est le nombre de répétitions, et que « s uniquement pour les répétitions de fin ou de tête, toute répétition de chaîne centrale nécessitera un +
et un "
supplémentaire – donc il ny a pas de raison de voir la compression économiser de lespace, et le seul jeu de caractères répété est ___
qui ne fait que 3 caractères.
Explication:
$l=($a=$args[0]).Length
Prendre le premier argument , mettez-le dans $ a, puis prenez la longueur de $ a et mettez-le dans $ l, ce sont les seules variables dont vous avez besoin.
" o O O"+" ___ "*$l
la plupart des les autres bits suivent ce format de t la partie gauche puis la partie droite multiplient le nombre de caractères requis.
" o "+([char[]]$a|%{" | $_ |"})
loop (|%{}
) via $ a comme un tableau de caractères, donc foreach (char $_ in $a)
pour une version non pipeline, puis mettez le char dans le texte.
cest une approche extrêmement simple, mais parce que je ne peux pas trouver un bon moyen de compresser les chaînes au-delà de cela, cela semble être le plus utile.
sauvé 1 octet grâce à briantist! et là, je pensais que cela ne serait pas plus court ..
Commentaires
- Vous navez pas ‘ Je nai pas à gérer darguments :).
- @carusocomputing yay, merci de me lavoir fait savoir.
- Bien! Vous pouvez économiser 1 octet en changeant
[char[]]$a
à$a[0..$l]
🙂 - ah utilisait un tableau de caractères avant de déclarer
$l
et jai totalement oublié à ce sujet. merci pour cela!
Réponse
Java, 361 octets
class C {static void main(String[]v){Scanner q = new Scanner(System.in);String i = q.nextLine();String[] t = {" o O O ", " o ", " TS__[O] ", " {======|", "./o--000"",};for (char c: i.toCharArray()) {t[0]+="___ ";t[1]+="| # | ".replace("#",c);t[2]+="|___| ";t[3]+="_|\"\"\"\"\"|";t[4]+="\"`-0-0-"";}for(String p:t) System.out.println(p);}}
class C { static void main(String[]v) { Scanner q = new Scanner(System.in); String i = q.nextLine(); String[] t = { " o O O ", " o ", " TS__[O] ", " {======|", "./o--000"", }; for (char c: i.toCharArray()) { t[0]+="___ "; t[1]+="| # | ".replace("#",c); t[2]+="|___| "; t[3]+="_|\"\"\"\"\"|"; t[4]+="\"`-0-0-""; } for(String p:t) System.out.println(p); } }
Exemple
java o O O ___ ___ ___ ___ o | j | | a | | v | | a | TS__[O] |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Commentaires
- Je sais que ‘ a été divisé par deux par an, mais vous pouvez golfez un peu (également en supprimant des espaces):
interface C{static void main(String[]v){String n="\n",b=" o O O ",c=" o ",d=" TS__[O] ",e=" {======|",f="./o--000'";for(String x:new java.util.Scanner(System.in).nextLine().split("")){b+="___ ";c+="| "+x+" | ";d+="|___| ";e+="_|\"\"\"\"\"|";f+="\"`-0-0-'";}System.out.print(b+n+c+n+d+n+e+n+f);}}
( 318 octets ) Ou encore plus si vous remplaceznew java.util.Scanner(System.in).nextLine()
avecv[0]
comme alternative dans put ( 279 octets ) Essayez-le ici .
Réponse
Perl, 137 octets
132 octets de code + 5 octets pour les indicateurs -pF
.
ascii_train.pl
:
#!/usr/bin/perl -apF s/./ | $& | /g;$_=" o O O! ___ o $_ TS__[0]! |___| {======|!"."_|"""""|"." ./o--000"!\"`-0-0-"";s/!(.*)/$1x@F/ge
Notez que jai ajouté le drapeau -a
dans le code, mais ce nest que parce que les anciennes versions de Perl nécessitent -a
lorsque -F
est utilisé.
Pour lexécuter:
echo -n "code-golf" | perl ascii_train.pl
Le lentrée doit être fournie sans nouvelle ligne finale (avec echo -n
par exemple).
Explications:
Daprès ce que jai vu, cest à peu près la même idée comme réponse JavaScript dETHProduction.
Il ne se passe pas beaucoup de choses: malheureusement, les modèles sont un peu trop courts pour que lopérateur x
vaille la peine dêtre utilisé.
Premièrement, s/./ | $& | /g
entoure chaque caractère de lentrée avec |
(et des espaces) pour former le deuxième niveau du train.
Puis à lintérieur longue chaîne, tout entre un !
et une nouvelle ligne est un motif que nous souhaitons répéter pour construire les voitures. Cette répétition se fait grâce à la regex s/!(.*)/$1x@F/ge
. (Jai utilisé !
car lentrée ne peut « t le contenir).
Réponse
SOGL V0.12 , 57 56 octets
Τ¡ā↓mΛC┌─⁵℮Ƨ⅛□→(š;∞⅟¹°⅔Ζ‽ζ÷⁴‘9n,{"s=Ο!NθæιžGš‼t╬¼Xg`‘8n┼
Explication:
..‘ push a compressed string of the locomotive in a single line 9n split in line lengths of 9 ,{ for each character in the input "..‘ push a compressed string of a wagon in a single line 8n split to line lengths of 8 ┼ add horizontally
Réponse
C #, 277 octets
Golfé:
string T(string s){var o=new string[]{" o O O"," o "," TS__[O]"," {======|","./ o--000"" };for(int i=0;i<s.Length;i++){o[0]+=" ___ ";o[1]+="| # | ".Replace("#",s[i]+"");o[2]+=" |___| ";o[3]+="_|\"\"\"\"\"|";o[4]+="\"`-0-0-"";}return string.Join("\r\n",o);
Non golfé:
public string T(string s) { var o = new string[] { " o O O", " o ", " TS__[O]", " {======|", "./ o--000"" }; for (int i = 0; i < s.Length; i++) { o[0] += " ___ "; o[1] += "| # | ".Replace("#", s[i] + ""); o[2] += " |___| "; o[3] += "_|\"\"\"\"\"|"; o[4] += "\"`-0-0-""; } return string.Join("\r\n", o); }
Test:
Console.Write(new AllAboardTheASCIITrain().T("")); o O O o TS__[O] {======| ./ o--000"
Et …
Console.Write(new AllAboardTheASCIITrain().T("Programming Puzzles & Code Golf")); o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | P | | r | | o | | g | | r | | a | | m | | m | | i | | n | | g | | | | P | | u | | z | | z | | l | | e | | s | | | | & | | | | C | | o | | d | | e | | | | G | | o | | l | | f | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./ o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Réponse
C # 221 octets
rien de spécial ne se passe ici .. il suffit de créer chaque ligne et de les joindre avec de nouvelles lignes.
s=>{var t=new[]{" o O O"," o "," TS__[O]"," {======|","./o--000""};foreach(var c in s){t[0]+=" ___ ";t[1]+=$" | {c} | ";t[2]+=" |___| ";t[3]+="_|\"\"\"\"\"|";t[4]+="\"`-0-0-"";}return string.Join("\n",t);};
Réponse
C, 217 212 208 octets
i;f(char*t){char d[]=" o O O o TS__[O] {======|./o--000" ___ | C | |___| _|\"\"\"\"\"|\"`-0-0-"",*p;for(;i<5;i++){printf("%.9s",d+i*9);for(p=t;d[57]=*p++;)printf("%.8s",d+45+i*8);puts("");}}
Ou tput:
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | C | | O | | D | | E | | | | G | | O | | L | | F | | | | I | | N | | | | C | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Réponse
Jq 1.5 , 178 octets
[[" o O O o TS__[O] {======|./o--000""|_nwise(9)]]+[range(length)as$i|[.[$i:$i+1]|" ___ | \(.) | |___| _|\"\"\"\"\"|\"`-0-0-""|_nwise(8)]]|transpose|map(add)[]
Développé
# engine def E:" o O O o TS__[O] {======|./o--000""|_nwise(9); # car (note string interpolation) def C:" ___ | \(.) | |___| _|\"\"\"\"\"|\"`-0-0-""|_nwise(8); # generate train [[E]] + [range(length) as $i| [.[$i:$i+1] |C]] # combine rows and concatenate strings | transpose | map(add)[]
Exemple dexécution
$ jq -MRr train.jq <<< "golf" o O O ___ ___ ___ ___ o | g | | o | | l | | f | TS__[O] |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-" $ wc -c < train.jq 178
Answer
Excel VBA, 218 octets
Fonction de fenêtre immédiate VBE anonyme qui prend lentrée de la plage [A1]
et affiche la fenêtre immédiate de VBE
[B1]=[Len(A1)]:?" o O O"[Rept(" ___ ",B1)]:?" o ";:For i=1To[B1]:?" | "Mid([A1],i,1)" | ";:Next:?:?" TS__[O]"[Rept(" |___| ",B1)]:?" {======|"[Rept("_|""""""""""|",B1)]:?"./o--000""[Rept("""`-0-0-"",B1)]
Formaté pour la lisibilité
[B1]=[Len(A1)] ?" o O O"[Rept(" ___ ",B1)] ?" o ";:For i=1To[B1]:?" | "Mid([A1],i,1)" | ";:Next:?: ?" TS__[O]"[Rept(" |___| ",B1)]: ?" {======|"[Rept("_|""""""""""|",B1)]: ?"./o--000""[Rept("""`-0-0-"",B1)]
Exemple de sortie
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | V | | B | | A | | | | E | | x | | p | | r | | e | | s | | s | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"