모든 ASCII 열차 탑승


45

모든 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-'

#"화물"안에있는 캐릭터를 나타내는 곳 . 이 전체 선적의 유동성과 성공을 감독하는 일을 맡았으므로 엔진을 각 차량에 연결하는 것도 작업의 일부입니다. 따라서 모든 차량에 레이블을 지정하고 엔진을 트랙에 설치 한 후에는 열차가 조립되어 롤링 될 준비가되었는지 확인해야합니다.

규칙

  • 프로그램이 입력해야하는 유일한 입력은 단일 문자열입니다.
  • 발송물이 비어 있더라도 항상 엔진이 출력되어야합니다.
  • 각 자동차는 하나의 캐릭터 만 가질 수 있으며 운을 밀지 마십시오. 상품이 손상 될 수 있습니다.
  • 다음과 같은 인쇄 가능한 ASCII 문자 만 지원하면됩니다. _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    더 많은 작업을 수행해도 문제는 없지만 최소한입니다.
  • 단일 후행 줄 바꿈과 같이 1-2 후행 공백이 허용됩니다.
  • 이것은 , 가장 짧은 바이트 수입니다.


1
나는 이것이 실제로 kolmogorov-complexity 라고 생각하지 않습니다 . 이 메타 게시물을 기반 으로이 질문은 확실하게 우리의 정의와 맞지 않는 것 사이의 선상에 있으며 개인적 으로이 질문 과 비슷한 태그에 맞지 않는다고 말하면서 문자열 줄 바꿈 유형을 요구합니다.
밀 마법사

5
이것은 아름다운 ascii-art입니다
CAD97

@WheatWizard 여러 장르의 혼합입니다. 엔진은 kolmogrov의 복잡성, ASCII-Art의 모든 것, 그리고 문자열 조작에도 약간의 영향을 미칩니다.
Magic Octopus Urn

나는 열차의 실제 패턴을 압축하는 것이 태그에 합당하다는 인상을 받았다. 그러나 나는 그것을 제거하기 위해 그것을 제거 할 것입니다.
Magic Octopus Urn

답변:



37

자바 스크립트 (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))

엔진 자체를 압축 할 수는 없지만 가능할 수도 있습니다.

테스트 스 니펫


반복되는 문자가 많으므로 바이트를 더 많이 짜낼 수 있어야합니다.
오리온

17
하나는 거의 :-) 소스 코드에 포장 기차 볼 수 있습니다
루이스 Mendo

15
코드는 기차와 비슷하다.
Rohan Jhunjhunwala

브라우저에서 바로 실행되기 때문에 보너스 포인트!
DGM

6

비 펀지, 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를 치고 있습니다.
Zacharý

6

PHP, 218 211 204 187 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.

엔진이나 왜건을 압축하려면 압축을 푸는 데 더 많은 코드가 필요합니다.
나는 더 이상 잠재력이 없다고 본다.


a&$c=$argn 대신""<$c=$argv[1]
Jörg Hülsermann

@ JörgHülsermann Yea이 게시물은 고대였습니다. :)
Titus

4

파이썬 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-'

4

파워 쉘, 167166 바이트

$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'*xc가 char이고 x가 반복 횟수이며, 반복 또는 선행 반복에만 사용되며 중심 문자열 반복에는 추가 +및 추가가 필요 "하므로 여기서는 아무 의미가 없습니다. 압축하면 공간을 절약 할 수 있으며 반복되는 문자 세트는 ___3 자뿐입니다.

설명:

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

" o O O"+" ___ "*$l 다른 비트의 대부분은 왼쪽 부분의 형식을 따르고 오른쪽 부분은 필요한 문자 수를 곱합니다.

" o "+([char[]]$a|%{" | $_ |"})루프 ( |%{}$ 내지)는 문자 배열로하므로 foreach (char $_ in $a)비 파이프 라인 버전 다음 텍스트로 숯을 넣어.

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

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


args를 처리 할 필요가 없었습니다. :).
Magic Octopus Urn

@carusocomputing yay, 알려 주셔서 감사합니다.
colsw

좋은! 다음과 같이 변경 [char[]]$a하여 1 바이트를 절약 할 수 있습니다 $a[0..$l] :)
briantist

아 내가 선언하기 전에 char 배열을 사용 $l하고 있었고 완전히 잊어 버렸습니다. 고마워!
colsw

2

자바, 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]다른 입력으로 ( 279 바이트 ) 여기를보십시오 .
Kevin Cruijssen

2

펄, 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입력의 각 문자를 |(및 공백)으로 둘러 싸서 열차의 두 번째 레벨을 형성합니다.
그런 긴 줄 안에서 a !와 개행 사이의 모든 것은 자동차를 구성하기 위해 반복하려는 패턴입니다. 그 반복은 정규식 덕분에 이루어집니다 s/!(.*)/$1x@F/ge. ( !입력에 포함 할 수 없기 때문에 사용 했습니다).


1

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

1

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

1

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

온라인으로 사용해보십시오

산출:

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

1

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

1

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

온라인으로 사용해보십시오


0

Excel VBA, 218 바이트

범위에서 입력 [A1]을 받고 VBE 즉시 창으로 출력하는 익명 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)]

가독성을위한 형식

[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-'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.