Деннис, Дверная ручка, Мартин Бюттнер, Крис Шестер-Янг - Пиццерия!


42

Программирование Puzzles & Code Golf собирается получить новый модератор , Деннис ! Этот вызов - дань уважения ему и другим нашим активным (или недавно активным) модераторам: дверной ручке , Мартину Бюттнеру и Крису Шестеруну . Название задачи предназначено для прочтения под мелодию песни Pepto Bismol .

В основном, мы будем рассматривать их все пиццы в Девятнадцатый Укус пиццерии , но мы должны убедиться , что они разделяют это довольно , потому что некоторые из тех модов , как известно, пицца наркоманами!

Пицца, продаваемая пиццерией, представляет собой прямоугольные блоки текста. Ширина и длина пиццы могут быть любыми неотрицательными целыми числами, если их продукт делится на четыре. Каждое пространство сетки в блоке текстовой пиццы представляет собой срез, поэтому всегда можно разбить срезы на четыре равные группы.

Моды коллективно закажут одну пиццу, предоставив параметры ее ширины и длины серверу в любом приемлемом формате, например [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 В основном это рифмовое устройство от диареи.
Увлечения Кэлвина

28
Они требуют, чтобы их соответствующие наборы срезов были связаны путями . Немного страшно, что ты знаешь это обо мне ...
Деннис

22
Хорошо, что с этим странным ломтиком пиццы в форме прямоугольника, который ты мне дал? Я хочу возврат!
Дверная ручка

12
@ Flawr Не для таких как ты, немод.
Увлечения Кэлвина

14
«Самый короткий лейбл в укусах побеждает» - я вижу, что ты там делал.
DankMemes

Ответы:


21

CJam, 20 байтов

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

Я думаю, что это должно работать :)

Попробуйте онлайн

Объяснение:

Это сначала делает пиццу с надписью CC… EE… DD… MM… слева направо и сверху вниз, затем сортирует каждую строку в алфавитном порядке. Единственные разъединения могут происходить между границей CE и границей ED или границей ED и границей DM (если они находятся на соседних рядах). Но сортировка гарантирует, что E направляются в правую сторону, а D - в левую, как C <E> D <M, поэтому 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
Избирательно меняющиеся строки, которыми поделились мы с Дуркнобом. Это одно умное использование $!
Деннис


7

К 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

@ Calvin'sHobbies Похоже, работает на этот вход.
kirbyfan64sos

1
Я собирался использовать тот же подход, и я уверен, что он работает. Это С Крис, хотя.
Деннис

@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

Stuck , 42 33

Это возвращается! И в ужасно длинной форме. :( - Я украл идею Адицу, чтобы сэкономить 9 байт :)

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 'Да. Это выводит CCCCCCEE\nDDDDEEEE\nDDMMMMMM.
Каде

/ me_stupid, простите за это.
лет

4

Rev 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-байтового сохранения эта версия меняет (только) среднюю строку срезов на любое нечетное количество строк.

Rev 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, а затем нам нужно только перевернуть средний ряд.

Оказывается, Деннис и Дурнкоб - единственные моды в этом ряду. И их можно поменять местами, XORing их коды ASCII с 1.

Это удобно, учитывая, что в 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);
} 

Отличное объяснение.
Трихоплакс

1

JavaScript (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, которое стало возможным благодаря новым этапам сортировки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.