모두 ASCII 기차 탑승

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

최고 기차를 탈 준비를하세요. 타게 될 기차를 만들려고하기 때문입니다. s 문자열이 주어지면 위에서 설명한대로 완전한 형식의 기차를 출력합니다. 가장 먼저 출력되는 것은 항상 아래에 설명 된 것처럼 “줄을 잡아 당기는 엔진입니다.

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

기관차 뒤에는 귀중한화물의 특성입니다. 하역시 혼란을 방지하기 위해 회사에서 이러한 차량의 외부에 라벨을 지정했습니다. 해당 차량은 항상 다음과 같이 표시됩니다.

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

#는 "화물 " 내부의 캐릭터를 나타냅니다. div> hold. 엔진을 각 자동차에 연결하는 것도 작업의 일부입니다.이 전체 배송의 유동성과 성공을 감독해야합니다. 따라서 모든 자동차에 라벨을 붙이고 선로에 엔진을 장착 한 후에는 열차가 조립되고 주행 할 준비가되었는지 확인해야합니다.

규칙

  • 프로그램이 입력해야하는 입력은 단일 문자열입니다.
  • 배송 물이 비어 있어도 엔진은 항상 출력되어야합니다.
  • 각 차량은 한 문자 만 저장할 수 있습니다. 행운을 빕니다. 상품이 손상 될 수 있습니다.
  • 다음과 같은 인쇄 가능한 ASCII 문자 만 지원하면됩니다. _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    더 많은 작업을 수행하게되면 “도 괜찮습니다. 그러나 이것은 최소한의 것입니다.
  • 단일 후행 줄 바꿈과 마찬가지로 1-2 개의 후행 공백도 허용됩니다.
  • 이것은 code-golf , 최단 바이트 수가 승리합니다.

댓글

  • 상당히 관련이 있습니다.
  • 나는 ' 이것은 실제로 kolmogorov-complexity 라고 생각하지 않습니다. Bas ed on 이 메타 게시물 이 질문은 확실히 우리의 정의를 맞추는 것과 맞지 않는 것 사이의 경계에 있으며 개인적으로 이 질문 은 문자열 줄 바꿈 유형을 요청합니다.
  • 이것은 아름다운 ascii입니다. -art
  • @WheatWizard it ' 여러 장르의 혼합입니다. 엔진은 kolmogrov의 복잡성, 모든 것은 ASCII-Art에 속하고 아마도 문자열 조작에도 약간 떨어질 것입니다.
  • 나는 기차의 실제 패턴을 압축하는 것이 가치가 있다는 인상을 받았습니다. 태그의; 하지만 ' 인수를 중지하기 위해 제거합니다.

답변

05AB1E , 101 99 바이트

순진한 첫 번째 시도

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

온라인으로 사용해보세요!

댓글

  • 코드는 ' 기차와 비슷하지 않지만 ' 지금 승리합니다.

Answer

JavaScript (ES6), 149 144 바이트

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

엔진 자체가 압축 될 수 있다고 생각하지 않지만 가능할 수도 있습니다.

테스트 스 니펫

 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> 

댓글

  • 많은 반복되는 문자가 더 많은 바이트를 압축 할 수 있어야합니다.
  • 소스 코드에 기차가 압축되어있는 것을 거의 볼 수 있습니다. 🙂
  • 코드가 기차와 비슷하기 때문에 주로 Upvoted
  • 보너스 포인트 브라우저에서 바로 실행됩니다!

Answer

Befunge, 276 270 바이트

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

온라인으로 사용해보세요!

설명

자동차와 엔진은 3 ~ 12 행에 5 개 문자열의 두 세트로 인코딩됩니다. 문자 값 Befunge 문자열에서 사용할 수없는 큰 따옴표를 처리 할 필요가 없도록 1만큼 떨어져 있습니다.

코드는 기차를 렌더링하는 데 필요한 전체 문자 집합을 구축하여 작동합니다. 스택. 각 출력 라인에 대해 적절한 자동차 스트링이 먼저 스택에 추가되고화물에 필요한만큼 반복 된 다음 적절한 엔진 스트링의 사본 하나가 반복됩니다.

각 줄이 생성 된 후 문자열 왼쪽에있는 한 쌍의 아래쪽 화살표가 오른쪽 화살표로 대체되므로 루프의 다음 반복은 다른 코드를 사용하여 코드를 통해 다른 경로를 따릅니다. 자동차와 엔진을위한 문자열 쌍입니다.

모든 데이터가 스택에 구축되면 문자를 작성하는 최종 렌더링 루프가 있으며, 초기 인코딩을 설명하기 위해 매번 1을 뺍니다. .

보너스로 소스는 열차가 공격을받을 경우를 대비하여 총 포탑 모양으로 설계되었습니다. . 골퍼가 내 포탑을 파괴했습니다.

댓글

  • 골퍼가 내 포탑을 파괴했습니다. LOL. +1. 그러나 그것은 '가 C # 및 Java를 이겼습니다.

답변

PHP, 218211204187 183 바이트

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

STDIN에서 입력을 가져옵니다. -nR로 실행 .

엔진 압축 또는 왜건은 저장 공간에 절약하는 것보다 압축을 풀려면 더 많은 코드가 필요합니다.
여기서는 더 이상 잠재력이 없습니다.

댓글

  • iv id ""<$c=$argv[1]
  • 대신 = “eb3c24fb4e”>

  • @J ö rgH ü lsermann 예이 게시물은 오래되었습니다. 🙂
  • 답변

    Python 2, 176 바이트

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

    예 :

    print f("Python") 

    제공

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

    답변

    Powershell, 167 166 바이트

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

    예 :

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

    유효하지 않을 수 있습니다! 인수없이 실행하면 빈 문자열 하나를 인쇄하려고 시도하고 다음과 같이 표시됩니다.

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

    빈 입력 문자열로 실행하면 올바르게 반환됩니다. 그러나 :

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

    (종류) Ungolfed :

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

    Powershell에서 가장 짧은 압축은 +"c"*x가 될 것입니다. 여기서 c는 문자이고 x는 반복 횟수입니다. 이는 후행 또는 선행 반복에만 해당됩니다. 모든 중앙 문자열 반복에는 추가

    및 추가 "-압축이 공간을 절약하는 것을 볼 수있는 지점이 없으며, 반복되는 문자 집합은 다음과 같습니다. ___ (3 자)

    설명 :

    $l=($a=$args[0]).Length 첫 번째 인수를 가져옵니다. , $ a에 넣은 다음 $ a의 길이를 가져 와서 $ l에 넣으십시오. 이것들이 필요한 유일한 변수입니다.

    " o O O"+" ___ "*$l 대부분 다른 비트는 t의이 형식을 따릅니다. 왼쪽 부분, 오른쪽 부분에 필요한 문자 수를 곱합니다.

    " o "+([char[]]$a|%{" | $_ |"}) 루프 (|%{}) $ a를 문자 배열로 사용하므로 파이프 라인이 아닌 버전의 경우 foreach (char $_ in $a) 다음 문자를 텍스트에 넣습니다.

    이것은 매우 간단한 접근 방식입니다. 하지만이 이후의 문자열을 압축하는 좋은 방법을 찾을 수 없기 때문에 가장 유용한 것 같습니다.

    briantist 덕분에 1 바이트를 절약했습니다! 그리고 여기서는 이것이 더 짧아지지 않을 것이라고 생각했습니다 ..

    댓글

    • 당신은 ' 인수를 처리 할 필요가 없습니다. :).
    • @carusocomputing yay, 알려 주셔서 감사합니다.
    • 좋습니다. to $a[0..$l] 🙂
    • ah는 $l를 선언하기 전에 char 배열을 사용하고 있었고 완전히 잊었습니다. 감사합니다.

    답변

    Java, 361 바이트

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

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

    댓글

    • 알고 있습니다 '가 1 년 반이되었습니다. 골프 꽤 많이 (공백 제거) : 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 바이트 ) 또는 new java.util.Scanner(System.in).nextLine()v[0]가있는 div> put ( 279 바이트 ) 여기에서 사용해보세요 .

    답변

    Perl, 137 바이트

    132 바이트 코드 + -pF 플래그 용 5 바이트

    ascii_train.pl :

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

    코드에 -a 플래그를 추가했지만 이전 버전의 Perl에 -a가 필요한 경우에만 -F가 사용됩니다.

    실행하려면 :

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

    입력은 마지막 줄 바꿈없이 제공되어야합니다 (예 : echo -n 포함).

    설명 :
    제가 본 것과 거의 같은 생각입니다. ETHProduction의 JavaScript 답변입니다.
    “많이 진행되지 않습니다. 슬프게도 패턴이 짧아서 x 연산자를 사용할 가치가 있습니다.
    첫째, s/./ | $& | /g는 입력의 각 문자를 | (및 공백)로 묶어 열차의 두 번째 레벨을 형성합니다.
    그런 다음 그 안에 긴 문자열, !와 줄 바꿈 사이의 모든 것은 자동차를 만들기 위해 반복하려는 패턴입니다. 이러한 반복은 정규식 s/!(.*)/$1x@F/ge 덕분에 이루어집니다. (입력에 포함될 수 없기 때문에 !를 사용했습니다.)

    답변

    SOGL V0.12 , 57 56 바이트

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

    여기에서 사용해보세요!

    설명 :

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

    답변

    C #, 277 바이트

    골프 :

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

    미 골프 :

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

    테스트 :

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

    그리고 …

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

    답변

    C # 221 바이트

    특별한 일이 없습니다. 각 줄을 만들고 새 줄로 결합하기 만하면됩니다.

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

    답변

    C, 217 212 208 바이트

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

    온라인으로 사용해보기

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

    답변

    Jq 1.5 , 178 바이트

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

    확장

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

    샘플 실행

    $ 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 바이트

    범위 [A1] 및 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)]  

    가독성을 위해 형식 지정

    h2>

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

    샘플 출력

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

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다