Kaikki ASCII-junassa

Kaikki ASCII-junassa!

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

Paras ole valmis ajamaan junalla, koska olet rakentamassa junaa, jolla aiot ajaa. Anna merkkijono s ja lähetä edellä kuvattu täysin muodostettu juna. Ensinnäkin tuotos on aina moottori, joka ”vetää merkkijonoa pitkin, kuten alla on esitetty yksin:

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

Veturin perässä ovat rautatie-autot, jotka sisältävät kutakin arvokkaan lastin luonne. Hämmennyksen välttämiseksi purkamisen yhteydessä yrityksesi on määrännyt sinut merkitsemään näiden autojen ulkopinnat. Kyseiset autot näyttävät aina tältä:

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

Jos # edustaa merkkiä, joka on ” lasti ” pidä. Moottorin ketjutus jokaiselle autolle on myös osa työsi, koska olet saanut tehtäväksi valvoa koko lähetyksen sujuvuutta ja menestystä. Joten kun olet merkinnyt kaikki autot ja saanut moottorin raiteille, sinun on varmistettava, että juna on koottu ja valmis liikkumaan.

Säännöt

  • Ainoa syötteesi, jonka sinun tulisi käyttää, on yksi merkkijono.
  • Moottorin on aina oltava lähtö, vaikka lähetys olisi tyhjä.
  • Jokaisessa autossa voi olla vain yksi merkki, älä ” työnnä onneasi, saatat vahingoittaa tavaroita.
  • Tarvitset vain seuraavia tulostettavia ASCII-merkkejä: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    Jos päätät tehdä enemmän, ”s myös hieno, mutta tämä on vähimmäisvaatimus.
  • 1–2 perätilaa on hyväksyttäviä, samoin kuin yksi perässä oleva uusi rivi.
  • Tämä on , lyhyin tavumäärä voittaa.

Kommentit

tässä metakirjoituksessa tämä kysymys on varmasti linjalla määritelmän sovittamisen ja sopimattomuuden välillä, ja sanoisin henkilökohtaisesti, että se ei sovi samanlaiseen tunnisteeseen kuin tämä kysymys , joka myös kysyy merkkijonon käärimistä.

  • Tämä on kaunis ascii -artisti
  • @WheatWizard it ’ usean tyylilajin sekoitus. Moottori joutuisi kolmogrov-monimutkaisuuteen, koko asia ASCII-Art -alustalle ja luultavasti myös hieman merkkijonojen manipulointiin.
  • Minusta tuntui, että junan todellisen kuvion pakkaaminen olisi kelvollista tunnisteen; mutta minä ’ poistan sen vain lopettaaksesi argumentin.
  • Vastaa

    05AB1E , 101 99 tavua

    Ensimmäinen yritys on naiivi.

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

    Kokeile verkossa!

    Kommentit

    • No, koodi ei ’ muistuta junaa, mutta se ’ voittaa nyt.

    vastaus

    JavaScript (ES6), 149 144 tavua

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

    En usko, että itse moottori voidaan pakata, mutta ehkä se on mahdollista.

    Testikatkelma

     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> 

    kommentit

    • Paljon toistuvia merkkejä, pitäisi olla mahdollista puristaa lisää tavuja
    • Juna voidaan melkein nähdä pakattuna lähdekoodiin 🙂
    • Ylösäänestetty johtuu siitä, että koodi muistuttaa juna
    • Bonuspisteitä, koska se toimii suoraan selaimessa!

    Vastaa

    Befunge, 276 270 tavua

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

    Kokeile verkossa!

    Selitys

    Auto ja moottori on koodattu kahdella viiden merkkijonon rivillä 3-12. Merkkiarvot ovat pois päältä yhdellä, jotta ei tarvitse käsitellä kaksoislainauksia, joita ei voi käyttää Befunge-merkkijonossa.

    Koodi toimii rakentamalla kaikki merkkijonot, joita tarvitaan junan siirtämiseen pino. Kutakin ulostuloriviä varten pinoon lisätään ensin sopiva autosarja, joka toistetaan niin monta kertaa kuin lastille tarvitaan, ja sitten yksi kopio sopivasta moottorijonosta.

    Kun jokainen rivi on muodostettu, merkkijonon vasemmalla puolella olevien alanuolien pari korvataan oikealle osoittavalla nuolella, joten silmukan seuraava iterointi seuraa eri polkua koodin läpi käyttämällä toista pari merkkijonoa autolle ja moottorille.

    Kun kaikki tiedot on koottu pinoon, siellä on lopullinen renderointisilmukka, joka kirjoittaa merkit, vähentämällä 1 joka kerta alkuperäisen koodauksen huomioon ottamiseksi. .

    Bonuksena lähde on suunniteltu -tykkitornin muotoiseksi, jos juna joutuu hyökkäyksen kohteeksi. . Golfarit tuhosivat aseen tornini.

    Kommentit

    • Golfarit tuhosivat aseen tornini, LOL. +1. Silti se ’ s päihittää C #: n ja Java: n.

    Vastaa

    PHP, 218 211 204 187 183 tavua

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

    Ottaa syötteen STDIN: ltä; suoritetaan -nR .

    Moottorin tai vaunu vaatii enemmän koodia purkamiseen kuin se säästää tallennustilaan.
    En näe tässä lisää potentiaalia.

    Kommentit

    • a&$c=$argn ""<$c=$argv[1]
    • @J ö rgH lsermann Kyllä, tämä viesti oli muinainen. 🙂

    Vastaa

    Python 2, 176 tavua

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

    Esimerkki:

    print f("Python") 

    antaa

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

    vastaus

    Powershell, 167 166 tavua

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

    Esimerkki:

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

    Mahdollisesti virheellinen! Jos suoritetaan ilman argumentteja, se yrittää tulostaa yhden tyhjän merkkijonon ja näyttää tältä:

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

    Jos suoritetaan tyhjällä syötemerkkijonolla, se palautuu oikein kuitenkin:

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

    (kinda) Unkari:

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

    lyhin pakkaus Powershellissä on tulee olemaan +"c"*x jossa c on merkki ja x on toistojen lukumäärä, ja että ”vain toistojen perään viemiseen tai johtamiseen, kaikki keskisarjan toistot vaativat ylimääräisen + ja ylimääräinen " – joten tässä ei ole mitään syytä, jos näen pakkauksen säästävän tilaa, ja ainoa toistuva merkistö on ___, joka on vain 3 merkkiä.

    Selitys:

    $l=($a=$args[0]).Length Ota ensimmäinen argumentti , laita se arvoon $ a, ota sitten $ a: n pituus ja laita se dollariin $, nämä ovat ainoat tarvitsemasi muuttujat.

    " o O O"+" ___ "*$l suurin osa muut bitit seuraavat tätä t-muotoa vasen ja oikea osa kerrotaan vaadittujen merkkien määrä.

    " o "+([char[]]$a|%{" | $_ |"}) -silmukka (|%{}) kautta $ a merkintäryhmänä, joten foreach (char $_ in $a) muulle kuin putkiversiolle, laita sitten merkki tekstiin.

    tämä on erittäin yksinkertainen lähestymistapa, mutta koska en löydä hyvää tapaa pakata merkkijonot tämän yli, se näyttää hyödyllisimmältä.

    tallennettu 1 tavu kiitos briantist! ja tässä ajattelin, että tämä ei lyhene.

    Kommentit

    • Et ’ Ei tarvitse käsitellä yhtään argumenttia :).
    • @carusocomputing yay, kiitos ilmoituksesta.
    • Hienoa! Voit säästää yhden tavun muuttamalla [char[]]$a$a[0..$l] 🙂
    • ah käytti char-taulukkoa, ennen kuin ilmoitin $l ja unohdin kokonaan Kiitos siitä!

    Vastaa

    Java, 361 tavua

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

    Esimerkki

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

    Kommentit

    • Tiedän sen ’ puolittunut vuodessa, mutta voit golf melko vähän (myös poistamalla välilyönnit): 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 tavua ) tai vielä enemmän, jos vaihdat new java.util.Scanner(System.in).nextLine() ja v[0] vaihtoehtoisena laita ( 279 tavua ) Kokeile täällä .

    Vastaa

    Perl, 137 tavua

    132 tavua koodia + 5 tavua -pF -lippuille.

    ascii_train.pl:

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

    Huomaa, että lisäsin koodiin -a -lipun, mutta se johtuu vain siitä, että Perlin vanhat versiot vaativat -a kun -F käytetään.

    Sen suorittaminen:

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

    tulo on toimitettava ilman viimeistä uutta riviä (esimerkiksi echo -n).

    Selitykset:
    Mitä olen nähnyt, se on suunnilleen sama idea kuten ETHProductionin JavaScript-vastaus.
    Paljon ei ole meneillään: valitettavasti kuviot ovat hieman lyhyitä, jotta x -operaattoria kannattaa käyttää.
    Ensinnäkin, s/./ | $& | /g ympäröi syötteen jokaisen merkin |: llä (ja välilyönneillä) muodostaakseen junan toisen tason.
    Sitten sen sisällä pitkä merkkijono, kaikki !: n ja uuden rivin välissä on malli, jonka haluamme toistaa autojen rakentamiseksi. Tämä toistaminen tapahtuu regex s/!(.*)/$1x@F/ge -tekniikan ansiosta. (Käytin !, koska syötteessä ei voi olla sitä.)

    Vastaa

    SOGL V0.12 , 57 56 tavua

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

    Kokeile tätä!

    Selitys:

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

    Vastaa

    C #, 277 tavua

    Golfi:

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

    Unolfed:

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

    Testaus:

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

    Ja …

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

    Vastaa

    C # 221 tavua

    mitään erityistä ei tapahdu täällä. Luo vain kukin rivi ja yhdistä ne uusilla riveillä.

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

    vastaus

    C, 217 212 208 tavua

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

    Kokeile online-tilassa

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

    vastaus

    Jq 1.5 , 178 tavua

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

    Laajennettu

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

    Näyteajo

    $ 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 

    Kokeile verkossa

    Vastaa

    Excel VBA, 218 tavua

    Anonyymi VBE-välitön ikkuna -toiminto, joka ottaa syötteen alueelta [A1] ja antaa VBE: n välittömään ikkunaan

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

    Alustettu luettavuutta varten

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

    Esimerkkilähtö

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

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *