PPCG 선임 장난


19

우리는 곧 전체 사이트를 졸업하고 있으며 졸업하기 전에해야 할 일이 하나 있습니다. 고전적인 "물로 복도를 채운다"개그를 변형시켜야한다고 생각합니다.

도전

당신의 프로그램은 텍스트를 읽고 거꾸로 물 컵으로 덮은 텍스트를 출력합니다. 거꾸로 된 물 컵은 다음과 같습니다. /~\
이 컵은 입력에서 공백에만 배치 할 수 있으며 컵의 세 문자가 공백이 아닌 문자 바로 위에 오도록 배치 할 수 있습니다 (그렇지 않으면 물이 쏟아짐) 밖!). 컵은 다른 컵 위에 쌓을 수 없습니다. 컵은 사용 가능한 모든 개구부에 배치해야하며 모든 입력은 무한한 공백 필드로 둘러싸여 있다고 가정합니다.

입력이 공백이있는 사각형으로 채워져 있다고 가정 할 수 있습니다.

우리는 장난없이 누구도 알아 채지 않고 장난을 풀어야하므로 각 언어에서 가장 적은 바이트가 이깁니다.

테스트 사례

입력:

     ____________________________________________
    /   ___    /   ___    /   ______/   ________/
   /   /__/   /   /__/   /   /     /   /_______
  /   _______/   _______/   /     /   //__    /
 /   /      /   /      /   /_____/   /___/   /
/___/      /___/      /_________/___________/

산출:

     /~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\
     ____________________________________________
    /   ___    /   ___    /   ______/   ________/
   /   /__//~\/   /__//~\/   /     /   /_______
  /   _______/   _______/   //~\  /   //__    /
 //~\/      //~\/      //~\/_____//~\/___//~\/
/___/      /___/      /_________/___________/

입력:

 L
LOL  ROFL:ROFL:LOL:ROFL:ROFL
 L\\        ____I____
    ========    |  |[\
            \___O==___)
            ___I_I__/

산출:

 L   /~\/~\/~\/~\/~\/~\/~\
LOL  ROFL:ROFL:LOL:ROFL:ROFL
 L\\/~\/~\  ____I____
    ========/~\ |  |[\
            \___O==___)
            ___I_I__/

1
이것은 그 중 일부 부활 할 수있는 시간이 될 수있는 2 차원 패턴 매칭 언어를 ...
mbomb007

답변:


10

레티 나 , 41 바이트

바이트 수는 ISO 8859-1 인코딩을 가정합니다.

(?<=(.)*)(?=.*¶(?>(?<-1>.)*)\S{3})   
/~\

첫 번째 줄에는 3 개의 후행 공백이 있습니다.

입력을 사각형으로 채워야합니다.

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

설명

이것은 상당히 표준적인 수직 매칭입니다 :

(?<=(.)*)

많은 문자를 그룹으로 캡처하여 일치 이전의 문자를 계산합니다 1.

(?=.*¶(?>(?<-1>.)*)\S{3})

다음 행에서 같은 위치에 공백이 아닌 문자가 3 개 있는지 확인합니다. 이것은 1비어있을 때까지 그룹에서 팝 (?<-1>.)*하고 원자 그룹과의 역 추적을 방지 함으로써 수행됩니다 (?>...).

마지막으로 실제 공간과 일치합니다. 이것들은 단순히 리터럴 문자열로 대체됩니다 /~\. 편리하게 일치 항목은 왼쪽에서 오른쪽으로 발견되며 겹칠 수 없습니다.


3

자바 스크립트 (ES6), 163 바이트

a=>(z=a.split`
`,z.unshift(z[0].replace(/./g,' ')),z).map((b,i)=>b.replace(/   /g, (c,j)=>(!z[i+1]||!z[i+1][j+2]||/ /.test(z[i+1].slice(j,j+3))?c:'/~\\'))).join`
`

신속하게 해킹 된 솔루션으로 확실하게 골프를 즐길 수 있습니다. 위의 빈 줄을 추가하고 트리플 공간을 찾은 후 다음 줄에 공백이 없으면 컵으로 바꿉니다. 입력이 직사각형이라는 가정을 허용합니다. 입력의 모든 백 스페이스는 이스케이프해야합니다 (JS에서 예상 한대로).


이에 대한 잘못된 출력을 반환한다고 생각합니다 a test.
Neil

1

자바 스크립트 (ES6), 109 바이트

s=>s.replace(/.*\n/,m=>(t=m).replace(/./g,' ')+m).replace(eval(`/   (?=[^]{${t.length-3}}[^ ]{3})/g`),"/~\\")

직사각형 입력을 요구할뿐만 아니라 첫 번째 행이 유일한 입력 행인 경우에도 개행으로 끝나는 것으로 가정합니다. 동적으로 생성 된 lookahead를 사용하여 구멍에 의해 혼동되지 않도록 3 개의 비 공백보다 3 개의 공간을 찾습니다.

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