Dennis, Doorknob, Martin Büttner, Chris Jester-Young-피자 집!


42

Programming Puzzles & Code Golf새로운 중재자Dennis 를 얻으려고합니다 ! 이 도전은 그와 우리의 다른 활동적인 (또는 최근 활동적인) 중재자 인 Doorknob , Martin BüttnerChris Jester-Young 에게 바치는 헌사 입니다. 도전 제목은 Pepto Bismol 노래 의 곡을 읽도록되어 있습니다 .

기본적으로, 우리는 피자에 그들 모두를 치료하는거야 19이 피자를 한 입 ,하지만 우리는 확실히 그들이 상당히 있기 때문에 공유해야 할 몇 가지 의 개조가 피자 중독자 것으로 알려져있다!

피자 가게에서 판매하는 피자는 모두 직사각형 텍스트 블록입니다. 피자의 너비와 길이는 제품이 4로 나눌 수있는 한 음이 아닌 정수일 수 있습니다. 텍스트 피자 블록의 각 그리드 공간은 슬라이스를 나타내므로 슬라이스를 항상 4 개의 동일한 그룹으로 분할 할 수 있습니다.

개조자는 일괄 적으로 피자 하나를 주문하여 너비 및 길이 매개 변수를와 같은 합리적인 형식으로 서버에 제공합니다 [width],[length]. 피자가 테이블에 닿기 직전에, 각 슬라이스에 피자를 먹어야하는 모드의 초기 부분을 표시해야합니다. 모든 사람이 같은 수의 슬라이스를 가져와야합니다.

  • E 데니스
  • D 손잡이 용
  • M 마틴
  • C 크리스를위한

그러나 개조는 약간 당황스럽고, 각각의 슬라이스 세트가 경로로 연결되어 있어야합니다. 슬라이스 (대각선으로 이동하지 않음). 이 작업 을 수행 하는 한 어떻게하는지 신경 쓰지 마십시오.

각 조각에 정확하게 레이블을 지정하면 선택적인 후행 줄 바꿈으로 피자를 개조 품에 전달하십시오.

라벨러는 프로그램 또는 기능 일 수 있으며 라벨이있는 피자를 인쇄하거나 반환 할 수 있습니다. 물린 가장 짧은 라벨러가 이깁니다.

실시 예 1

주문: 4,1

가능한 라벨이있는 피자 :

EDMC
MEDC
CDEM

실시 예 2

주문: 4,4

가능한 라벨이있는 피자 :

MMMM
CCCC
DDDD
EEEE
DEMC
DEMC
DEMC
DEMC
CCCC
DEEM
DEEM
DDMM

실시 예 3

주문: 8,3

가능한 라벨이있는 피자 :

MMMMMMCC
DDDDCCCC
DDEEEEEE
DDDCMMMM
DCDCMEEE
DCCCMEEE

실시 예 4

주문: 20,5

가능한 표시 피자 :

DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEDMMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC

( D의 여기는 단순히 연결되어 있지 않지만 괜찮습니다.)


12
@BetaDecay 주로 설사 운동 장치입니다.
Calvin 's Hobbies

28
이들은 각각의 슬라이스 세트가 경로 연결되어 있어야 합니다. 당신이 나에 대해 알고있는 것이 조금 무섭다 ...
Dennis

22
좋아, 무엇 당신이 나에게 준이 이상한 사각형 윤곽 모양의 피자 조각? 환불을 원합니다!
Doorknob

12
@flawr 당신을 좋아하지 않습니다.
Calvin 's Hobbies

14
" 물린 가장 나쁜 라벨러 이긴다"-나는 당신이 거기에서 한 일을 봅니다.
DankMemes

답변:


21

CJam, 20 바이트

q~1$*4/"CEDM"e*/:$N*

나는 이것이 작동해야한다고 생각한다 :)

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

설명:

먼저 CC… EE… DD… MM…이라는 피자를 왼쪽에서 오른쪽으로, 위에서 아래로 만든 다음 각 행을 알파벳 순서로 정렬합니다. CE 경계와 ED 경계 또는 ED 경계와 DM 경계 사이에서 단절이 발생할 수 있습니다 (인접한 행에있을 경우). 그러나 정렬은 E가 오른쪽으로 가고 D가 왼쪽으로 가도록 보장합니다.

q~          read and evaluate the input
1$          copy the width
*4/         multiply with the height and divide by 4
"CEDM"e*    repeat each letter in "CEDM" that many times
/           split into rows of the given width
:$          sort each row
N*          join with newlines

1
Doorknob과 나와 공유 한 행을 선택적으로 되돌립니다. 그것의 하나의 영리한 사용입니다 $!
Dennis


7

K, 61 바이트

{[a;b]{((+:;|:)@x!2)[r@x]}'!#r:(b;a)#,/{(_(a*b)%4)#x}'"EDMC"}

예 :

ryan@DevPC-LX:~/golf$ rlwrap k2
K 2.8 2000-10-10 Copyright (C) 1993-2000 Kx Systems
Evaluation. Not for commercial use. 
\ for help. \\ to exit.

  `0:{[a;b]{((+:;|:)@x!2)[r@x]}'!#r:(b;a)#,/{(_(a*b)%4)#x}'"EDMC"}[4;1]
EDMC
  `0:{[a;b]{((+:;|:)@x!2)[r@x]}'!#r:(b;a)#,/{(_(a*b)%4)#x}'"EDMC"}[4;4]
EEEE
DDDD
MMMM
CCCC
  `0:{[a;b]{((+:;|:)@x!2)[r@x]}'!#r:(b;a)#,/{(_(a*b)%4)#x}'"EDMC"}[8;3]
EEEEEEDD
MMMMDDDD
MMCCCCCC
  `0:{[a;b]{((+:;|:)@x!2)[r@x]}'!#r:(b;a)#,/{(_(a*b)%4)#x}'"EDMC"}[20;5]
EEEEEEEEEEEEEEEEEEEE
DDDDDDDDDDDDDDDEEEEE
DDDDDDDDDDMMMMMMMMMM
CCCCCMMMMMMMMMMMMMMM
CCCCCCCCCCCCCCCCCCCC

ryan@DevPC-LX:~/golf$ 

나는이 것들을 슬라이스해야 사람이 싫어 ...


위아래로 지그재그로 보이는 것처럼 보입니다. 그 맞습니까? 1,8
Calvin 's Hobbies

@ Calvin'sHobbies 해당 입력에서 작동하는 것 같습니다.
kirbyfan64sos

1
나는 같은 접근 방식을 사용하려고 노력했으며 그것이 효과가 있다고 확신합니다. 그것은의 C는 하지만 HRIS.
Dennis

@Dennis Whoops. 결정된.
kirbyfan64sos

7

Pyth, 20 바이트

VceQs*L/*FQ4"CEDM"SN

@aditsu의 정렬 트릭을 사용합니다.

데모.

골프를 타면서 같은 길이의 많은 대체 프로그램을 생각해 냈습니다.

VceQs*L/*FQ4"CEDM"SN
VceQsCm"CEDM"/*FQ4SN
VceQs*L*FQ"CEDM"%4SN
VceQ%4s*L*FQ"CEDM"SN
VcQs*L/*Qvz4"CEDM"SN    (Newline separated input)
jbSMceQs*L/*FQ4"CEDM
Vcs*L/*FQ4"CEDM"hQSN

6

붙어 , 42 33

돌아온다! 그리고 엄청나게 긴 형태로. :(-나는 9 바이트를 절약하기 위해 aditsu의 정렬 아이디어를 훔쳤다 :)

t;g*4/[4*"CEDM"z"];F*":j0GK'$:Nj

설명:

t;g*4/                              # Take |-separated input,
                                    #   store the first value in var stack,
                                    #   multiply the two numbers and divide by 4.
      [4*"CEDM"z                    # Wrap that value in an array, make 3 copies
                                    #   to get a list of length 4, zip with "EDMC"
                "];F*":j0GK         # For each item, multiply letter by value to
                                    #   to get string, join the result, split into
                                    #   segments the size of the saved variable.
                            '$:Nj   # For each item, sort so the letters are in the correct
                                    #   order, join by newline, print.

입력 예 :

20|5

출력 예 :

CCCCCCCCCCCCCCCCCCCC
CCCCCEEEEEEEEEEEEEEE
DDDDDDDDDDEEEEEEEEEE
DDDDDDDDDDDDDDDMMMMM
MMMMMMMMMMMMMMMMMMMM

간단하게 연결될 것 8|3입니까?
yo '

@yo '예. 출력 CCCCCCEE\nDDDDEEEE\nDDMMMMMM합니다.
Kade

/ me_stupid, 죄송합니다.
yo '

4

개정 1 C, 74

i;f(w,h){for(i=w*h;i--;i%w||puts(""))putchar(h-i/w*2==1^"CDEM"[i*4/w/h]);}

1 바이트 절약을 위해이 버전은 홀수 행에 대해 슬라이스의 중간 행을 뒤집습니다 (단지).

개정 0 C, 75

i;f(w,h){for(i=w*h;i--;i%w||puts(""))putchar(h==3&i/w==1^"CDEM"[i*4/w/h]);}

여기에 많은 대답이 지그재그이지만 대부분의 경우 문자를 순서대로 (왼쪽에서 오른쪽으로, 위에서 아래로) 출력하면됩니다.

높이 1, 2 또는 4를 위해 지그재그 필요 없음

4보다 큰 높이에는 지그재그가 필요 없습니다 (각 모드의 피자 배급량은 줄 바꿈됩니다).

따라서 우리는 실제로 높이가 3 일 때 지그재그 만하면되고 중간 줄만 뒤집 으면됩니다.

결과적으로 Dennis와 Doorknob은 해당 행의 유일한 개조입니다. ASCII 코드를 1로 XOR하여 교환 할 수 있습니다.

C에서 문자열을 쉽게 바꿀 수있는 방법이 없기 때문에 편리합니다.

테스트 프로그램에서 언 골프

i;
f(w,h){
  for(i=w*h;i--;i%w||puts(""))            //loop through all squares. puts inserts a newline at the END of each line.
  putchar(h==3&i/w==1^"CDEM"[i*4/w/h]);   //put the letter, XORing D and E for the middle row of height 3.
}

W,H;
main(){
  scanf("%d%d",&W,&H);
  f(W,H);
} 

좋은 설명입니다.
trichoplax

1

자바 스크립트 (ES6) 107

지그재그 솔루션. 템플릿 문자열을 사용하면 줄 바꿈이 중요하고 계산됩니다.

FireFox로 스 니펫을 테스트하십시오.

f=(w,h)=>{for(i=o=r='',z=l=1;--l?l:c='CDEM'[l=w*h/4,i++];r[w-1]&&(o+=r+`
`,r='',z=!z))r=z?r+c:c+r;return o}


//TEST

(test=_=>([w,h]=I.value.match(/\d+/g),O.innerHTML=f(w,h)))()
<input id=I value='8 3'><button onclick='test()'>-></button>
<pre id=O></pre>


0

망막 , 83 바이트

이 답변에 사용 된 기능은이 도전보다 새로운 것입니다 (중요하지는 않습니다 ...). 바이트 수는 ISO 8859-1 인코딩을 가정합니다.

\d+
$*#
#(?=.*¶(.+))
$1
\G####
CDEM
S_`((.)+?(?=.*¶(?<-2>#)+$))|\D
O`.
T`DE`ED
O%`.

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

이것은 새로운 정렬 단계 덕분에 어느 정도 실현 가능한 aditsu의 솔루션을 구현합니다.

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