Allen aan boord van de ASCII-trein

Allen aan boord van de ASCII-trein!

 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-" 

U kunt het beste wees bereid om met de trein te rijden, want je staat op het punt de trein te bouwen waarop je gaat rijden. Gegeven een string s, voer dan een volledig gevormde trein uit zoals hierboven afgebeeld. De eerste output is altijd de locomotief die “aan je touwtje trekt, zoals hieronder alleen afgebeeld:

 o O O o TS__[O] {======| ./o--000" 

Na de locomotief zijn treinwagons met elk karakter van uw kostbare lading. Om verwarring bij het lossen te voorkomen, heeft uw bedrijf u de opdracht gegeven om de buitenkant van deze autos te labelen. De autos in kwestie zullen er altijd als volgt uitzien:

 ___ | # | |___| _|"""""| "`-0-0-" 

Waar de # representatief is voor het teken dat binnen de ” lading ” hold. Het koppelen van de motor aan elke auto maakt ook deel uit van je werk, aangezien je de taak hebt om toezicht te houden op de soepelheid en het succes van deze hele verzending. Dus als je eenmaal alle wagens hebt gelabeld en de motor op de rails hebt gezet, moet je ervoor zorgen dat de trein is gemonteerd en klaar is om te rijden.

Regels

  • De de enige invoer die uw programma mag gebruiken, is een enkele string.
  • De motor moet altijd worden uitgevoerd, zelfs als uw zending leeg is.
  • Elke auto kan maar één teken bevatten, niet push uw geluk, u kunt de goederen beschadigen.
  • U hoeft alleen de volgende afdrukbare ASCII-tekens te ondersteunen: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    Als u uiteindelijk meer doet, dat “is ook goed, maar dit is het absolute minimum.
  • 1-2 spaties aan het einde zijn acceptabel, evenals een enkele nieuwe regel aan het einde.
  • Dit is , wint het kortste aantal bytes.

Opmerkingen

  • Vaag gerelateerd.
  • Ik don ‘ denk niet dat dit eigenlijk kolmogorov-complexiteit is. Bas ed op deze meta-post deze vraag staat zeker op de grens tussen passend en niet passend bij onze definitie en ik zou persoonlijk zeggen dat het niet past in de tag vergelijkbaar met deze vraag die ook om een soort stringomwikkeling vraagt.
  • Dit is prachtig ascii -art
  • @WheatWizard het ‘ is een mix van meerdere genres. De motor zou onder kolmogrov-complexiteit vallen, de hele zaak onder ASCII-Art en het valt waarschijnlijk ook een beetje in stringmanipulatie.
  • Ik had de indruk dat het comprimeren van het eigenlijke patroon van de trein het waard zou zijn van de tag; maar ik ‘ zal het gewoon verwijderen om het argument te stoppen.

Antwoord

05AB1E , 101 99 bytes

Naïeve eerste poging.

" o O O o"ð7×"TS__[O] {======|./o--000""J5ä¹v… _ €ÐJy“ | ÿ | |___| _|"""""|"`-0-0-"“«5ä})øJ» 

Probeer het online!

Reacties

  • Nou, de code ‘ lijkt niet op een trein, maar ‘ wint nu.

Antwoord

JavaScript (ES6), 149 144 bytes

s=>` o O Oa ___ o a | $& | TS__[O]a |___| {======|a_|"""""| ./o--000"a"\`-0-0-"`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c)) 

Ik denk niet dat de engine zelf kan worden gecomprimeerd, maar misschien is het mogelijk.

Testfragment

 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,"&lt;br&gt;"))"><br> <pre id=O></pre> 

Reacties

  • Veel herhaalde karakters, het zou mogelijk moeten zijn om nog wat bytes te persen eruit.
  • Je kunt de trein bijna zien ingepakt in de broncode 🙂
  • Opgestemd voornamelijk omdat de code op een trein lijkt
  • Bonuspunten omdat het draait precies daar in de browser!

Answer

Befunge, 276 270 bytes

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_@>$$$$>,# 

Probeer het online!

Uitleg

De auto en de motor zijn gecodeerd als twee sets van vijf reeksen op regel 3 tot 12. De tekenwaarden staan 1 uit om te voorkomen dat u te maken krijgt met dubbele aanhalingstekens die “niet kunnen worden gebruikt in een Befunge-string.

De code werkt door de volledige set tekens op te bouwen die nodig zijn om de trein op de stapel. Voor elke uitvoerregel wordt eerst een passende autostreng aan de stapel toegevoegd, zo vaak als nodig herhaald voor de lading, en vervolgens een kopie van de juiste motortekenreeks.

Nadat elke regel is geconstrueerd, wordt een paar pijlen naar beneden links van de strings vervangen door een pijl naar rechts, zodat de volgende iteratie van de lus een ander pad door de code volgt, met een andere paar snaren voor de auto en de motor.

Zodra alle gegevens op de stapel zijn opgebouwd, is er een laatste rendering-lus die de tekens wegschrijft, waarbij er telkens 1 wordt afgetrokken om rekening te houden met de initiële codering .

Als bonus is de bron ontworpen in de vorm van een geschutskoepel , voor het geval de trein wordt aangevallen . Golfspelers hebben mijn geschutskoepel vernietigd.

Opmerkingen

  • Golfers hebben mijn geschutskoepel vernietigd, LOL. +1. Toch is het ‘ verslaat C # en Java.

Antwoord

PHP, 21821104187 183 bytes

 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]; 

Neemt input van STDIN; voer uit met -nR .

Het comprimeren van de engine of wagen zou meer code nodig hebben om te decomprimeren dan het bespaart bij opslag.
Ik zie hier geen potentieel meer.

Opmerkingen

  • a&$c=$argn in plaats van ""<$c=$argv[1]
  • @J ö rgH ü lsermann Ja, dit bericht was oud. 🙂

Antwoord

Python 2, 176 bytes

 lambda i:"\n".join(map("".join,zip(*[[" o O O"," o "," TS__[O]"," {======|","./o--000""]]+[[" ___ "," | "+x+" | "," |___| ","_|"""""|","\"`-0-0-""]for x in i])))  

Voorbeeld:

print f("Python") 

geeft

 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-" 

Antwoord

Powershell, 167 166 bytes

$l=($a=$args[0]).Length;" o O O"+" ___ "*$l;" o "+($a[0..$l]|%{" | $_ |"});" TS__[O]"+" |___| "*$l;" {======|"+"_|"""""|"*$l;"./o--000""+""`-0-0-"""*$l 

Voorbeeld:

.\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-" 

Mogelijk ongeldig! Als het zonder args wordt uitgevoerd, zal het proberen een lege string af te drukken en eruit zien als:

 o O O o | | TS__[O] {======| ./o--000" 

Als het wordt uitgevoerd met een lege invoertekenreeks, zal het correct terugkeren echter:

.\train.ps1 "" o O O o TS__[O] {======| ./o--000" 

(nogal) Ungolfed:

$l=($a=$args[0]).Length " o O O"+" ___ "*$l " o "+($a[0..$l]|%{" | $_ |"}) " TS__[O]"+" |___| "*$l " {======|"+"_|"""""|"*$l "./o--000""+""`-0-0-"""*$l 

kortste compressie in Powershell is wordt +"c"*x waarbij c het teken is en x het aantal herhalingen, en dat “is alleen voor herhalingen aan het begin of einde, herhalingen in het midden van de tekenreeks vereisen een extra + en een extra " – dus het heeft geen zin dat ik kan zien dat compressie ruimte bespaart, en de enige herhaalde tekenset is ___ wat uit slechts 3 tekens bestaat.

Uitleg:

$l=($a=$args[0]).Length Neem het eerste argument , plaats het in $ a, neem dan de lengte van $ a en plaats het in $ l, dit zijn de enige variabelen die je nodig hebt.

" o O O"+" ___ "*$l de meeste de andere bits volgen dit formaat van t het linker gedeelte en dan het rechter gedeelte maal het aantal vereiste tekens.

" o "+([char[]]$a|%{" | $_ |"}) loop (|%{}) via $ a als een char-array, dus foreach (char $_ in $a) voor een niet-pijplijnversie, plaats dan het char in de tekst.

dit is een extreem eenvoudige benadering, maar omdat ik geen goede manier kan vinden om de strings hier voorbij te comprimeren, lijkt het me het nuttigst.

bespaarde 1 byte dankzij briantist! en hier dacht ik dat dit niet korter zou worden.

Reacties

  • Je hebt ‘ t hoeft geen argumenten aan te pakken :).
  • @carusocomputing yay, bedankt voor het laten weten.
  • Leuk! Je kunt 1 byte besparen door naar $a[0..$l] 🙂
  • ah gebruikte een char-array voordat ik $l verklaarde en helemaal vergeten was daarover. bedankt daarvoor!

Answer

Java, 361 bytes

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); } }  

Voorbeeld

java o O O ___ ___ ___ ___ o | j | | a | | v | | a | TS__[O] |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-" 

Reacties

  • Ik weet het ‘ is een half jaar geleden, maar je kunt golf nogal wat (ook door spaties te verwijderen): 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 bytes ) Of zelfs meer als je new java.util.Scanner(System.in).nextLine() met v[0] als alternatief in put ( 279 bytes ) Probeer het hier .

Antwoord

Perl, 137 bytes

132 bytes code + 5 bytes voor -pF vlaggen.

ascii_train.pl:

 #!/usr/bin/perl -apF s/./ | $& | /g;$_=" o O O! ___ o $_ TS__[0]! |___| {======|!"."_|"""""|"." ./o--000"!\"`-0-0-"";s/!(.*)/$1x@F/ge  

Merk op dat ik een -a vlag in de code heb toegevoegd, maar dit is alleen omdat oude versies van Perl -a vereisen wanneer -F wordt gebruikt.

Om het uit te voeren:

echo -n "code-golf" | perl ascii_train.pl 

De invoer moet worden aangeleverd zonder een laatste nieuwe regel (met bijvoorbeeld echo -n).

Uitleg:
Van wat ik heb gezien, is het ongeveer hetzelfde idee als het JavaScript-antwoord van ETHProduction.
Er is niet veel aan de hand: helaas zijn de patronen een beetje te kort om de x -operator het gebruiken waard te maken.
Ten eerste, s/./ | $& | /g omringt elk teken van de invoer met | (en spaties) om het tweede niveau van de trein te vormen.
Dan daarbinnen lange string, alles tussen a ! en een nieuwe regel is een patroon dat we willen herhalen om de autos te construeren. Die herhaling wordt gedaan dankzij de regex s/!(.*)/$1x@F/ge. (Ik heb ! gebruikt omdat de invoer het “niet kan bevatten).

Antwoord

SOGL V0.12 , 57 56 bytes

Τ¡ā↓mΛC┌─⁵℮Ƨ⅛□→(š;∞⅟¹°⅔Ζ‽ζ÷⁴‘9n,{"s=Ο!NθæιžGš‼t╬¼Xg`‘8n┼ 

Probeer het hier!

Uitleg:

..‘ 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 

Antwoord

C #, 277 bytes

Golfed:

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); 

Ungolfed:

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); } 

Testen:

Console.Write(new AllAboardTheASCIITrain().T("")); o O O o TS__[O] {======| ./ o--000" 

En …

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-" 

Antwoord

C # 221 bytes

er gebeurt hier niets bijzonders .. maak gewoon elke regel en voeg er nieuwe regels bij.

 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);};  

Antwoord

C, 217 212 208 bytes

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("");}} 

Probeer het online

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-" 

Antwoord

Jq 1.5 , 178 bytes

[[" o O O o TS__[O] {======|./o--000""|_nwise(9)]]+[range(length)as$i|[.[$i:$i+1]|" ___ | \(.) | |___| _|\"\"\"\"\"|\"`-0-0-""|_nwise(8)]]|transpose|map(add)[] 

Uitgebreid

# 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)[] 

Voorbeeldrun

$ 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 

Probeer het online

Answer

Excel VBA, 218 bytes

Anonieme VBE onmiddellijke vensterfunctie die invoer haalt uit bereik [A1] en outputs naar het VBE onmiddellijke venster

 [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)]  

Opgemaakt voor leesbaarheid

 [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)]  

Voorbeelduitvoer

  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-"  

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *