Праздник середины осени начался!
К сожалению, все мои лунные пирожные были украдены - они становятся слишком дорогими для маленьких людей, таких как я, и я боюсь, что я не смогу есть в этом году!
Поэтому я обращаюсь к вам за помощью. Вы могли бы сделать мне немного?
Для тех, кто не знает, позвольте мне рассказать вам, как выглядит лунный пирог.
Mooncakes бывают разных размеров!
Так что я собираюсь дать вам мой вход , н , когда я хочу один.
Вот несколько примеров вывода, который я хочу:
Лунный пирог размером n = 3:
(@@@@@)
(@MAF@)
(@@@@@)
Лунный пирог размером n = 6:
(@@@@@@@@@@@)
(@ @)
(@ M @)
(@ F @)
(@ @)
(@@@@@@@@@@@)
То есть лунный пирог размером n :
- п строк высоко
- 2n - 1 @s long
- Длина 2n + 1 символов (@s и скобки)
И тебе лучше не бросать мне свои крошечные тренировочные лунные пирожные!
Предположим, что ввод всегда будет n> = 3 .
Mooncakes также содержат одно из следующих украшений :
- MF
- MAF
- HMF
- JCJ
- ТТТ
- ZJ
- LF
- РФ
- CF
Какой, это не имеет значения - до тех пор, пока это вертикально и горизонтально по центру .
Это может быть написано вертикально или горизонтально тоже!
Я хочу разнообразия!
Если ты действительно собираешься сделать мне два одинаковых лунных пирога, украшения лучше будут отличаться!
То есть многократное выполнение вашей программы с одним и тем же вводом не всегда должно давать одинаковое оформление .
Я не могу дождаться, чтобы съесть твои лунные пирожные, поэтому чем раньше я получу их ( чем короче твой код ), тем лучше!
Удачи!
Для тех, кто интересуется декорациями:
они являются инициалами всех альтернативных названий фестиваля середины осени.
Список можно найти на странице Википедии, на которую есть ссылка в верхней части этого поста.
Разъяснения:
Нет никаких правил относительно пробелов в начале и в конце .
Имей столько, сколько хочешь!
Украшения должны быть в самом центре вашего лунного пирога!
На горизонтальных декорациях это означает, что он должен находиться на средней линии торта, а количество символов слева и справа от строки декорации должно быть одинаковым.
На вертикальных декорациях это означает, что он должен находиться в средней колонке вашего торта, а количество символов над и под декорацией должно быть одинаковым.
Не все украшения должны быть использованы!
Единственное требование состоит в том, что для любого заданного ввода n должно быть более одной возможности. Возможности также не должны быть четными.
Функции приемлемы.
MAF
а неMF
? Я не вижуA
в твоих вариантах оформления.Ответы:
Pyth,
71655958 байтСохранено 1 байт благодаря @StevenH.
Попробуйте онлайн. Тестирование.
Так много прокладок.
источник
?%Q2
с@,
(обратный порядок двух вариантов) ...Q
. Я (ab) использовал это много в игре в гольф мой собственный ответ Pyth вниз.JavaScript ES6,
206196192188187180176169165156 байтовСломать
Моя первая попытка код-гольфа. Это, вероятно, может быть в гольф больше.
сэкономили 4 байта благодаря @ETHProductions
Править Я взял на себя смелость использовать, чтобы удовлетворить:
Date.now()%2
new Date%2
это позволяет мне сэкономить еще 7 байтов
+Math.random()>.5
сэкономил еще 4 байта благодаря @Arnauld
источник
['MA','HA'][r]+'F'
можно играть в гольф'MH'[r]+'AF'
.[' R ',' C '][r]
с" ${'RC'[r]} "
, сменяющих друг"
с кавычкой.['MA','HM'][r]+'F'
на самом деле на два байта длиннее['MAF','HMF'][r]
;)' @'[+!s]
вместо(s?' ':'@')
new Date%2
вместоDate.now()%2
.Pyth,
9979716864 байтаПиф
очень плохоумеет делать струны. Или, может быть, я простоплохоиграю в гольф.Можно создавать украшения
MAF
и поHMF
горизонтали, и по украшениямMF
и поCF
вертикали.Попробуйте онлайн!
источник
Vim, 118 байт
Принимает ввод как буфер (например, файл с номером n в качестве его содержимого).
Вот это с непечатными управляющими символами в формате xxd:
Попробуйте онлайн! (Как оказалось, интерпретатор V отлично работает и для нормального кода Vim.)
объяснение
источник
@a
arg1,@b
arg2 и т. Д., Но это особенность V. Технически это не имеет значения, так как у вас есть"aD
в начале, но я просто подумал, что укажу на это. 2) Вы могли бы снять один байт, если быdd@ap
вместо этогоY@apdd
dd@ap
не совсем работает, увы.dd@aP
работает, но затем требует дополнительногоj
и дополнительногоk
по линии.PHP,
342292249185178176 байтПозвонить с
php -r '<code>' <size>
история
Rev 1: начальная версия; все размеры (включая крошечные пирожные), все украшения, все возможные направления
Rev. 2: удалены крошечные пирожные (-36 байт), реструктурированы варианты оформления, удален один предмет оформления (-21) и однобайтовый гольф (-1)
Rev. 3: до четырех украшений; (-17), только горизонтальный для нечетных размеров (-18) плюс незначительный гольф (-8).
Откр. 4: Спасибо Йоргу за то, что он играл в гольф в части «рисованный пирог»; он снял удивительно (-31).
Еще -6 с моим дополнительным игрой в гольф и -27 за использование одной струны вместо массива струн.
Откр. 5: -7 байт в основном благодаря Christallkeks
сломать
Это становится стройнее с каждым часом. :)
источник
for($i=0;$i<$n=$argv[1];$i++){$o[]=str_pad("(@",2*$n-1,!$i|$i==$n-1?"@":" ")."@)";}
!$i|$i==$n-1?"@":" "
; троичный просто не примет твоего (на моей машине), хотя это правильно.for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)==0])."@)\n";
Кроме того, похоже, что вы получили «MAD», играющий в гольф ваши деко ;-)Java 7,
399349 байтОбновленная версия с помощью @Dodge и @Kevin Cruijssen:
Попробуй это здесь!
Новая версия значительно оптимизирована и избавлена от
String
обработки массива. Также, как предлагается, теперь есть только 4 декорации: 2 для четных входов (MF
,ZJ
) и 2 для нечетных входов (MAF
,HMF
), которые объединены в одинString
.Ungolfed:
источник
"MAF"
повторяется?char[]
более эффективно использовать циклы и инициализацию декорации, а также заняться другими делами. @Cyoce Я продублировал,MAF
потому что тогда у меня есть все декорации для четного ввода в индексах0,2,4,6,8
и все декорации для нечетного ввода в индексах1,3,5,7,9
. Это облегчает вычисление случайного индекса для данного входа.Math.random()*5
дает случайное число от0-4
.*2
распространяет это0,2,4,6,8
.+n%2
добавляет1
для нечетных входов, чтобы получить1,3,5,7,9
.Пакетный, 386 байт
Будет выводить только HMF, MAF, MF или CF в зависимости от ситуации. Примечание: некоторые строки заканчиваются пробелами. Переменные:
n
Входной параметр (чтение из STDIN)f
Декоративные префиксы (F
подразумевается суффикс )o
Странностьn
(используется только один раз, ноif
операторы не принимают выражения)l
Ряд верхнего вертикального символа или0
для горизонтального оформленияu
Ряд нижнего вертикального символа или0
для горизонтального оформленияh
Ряд горизонтального оформления (перезаписывается вертикальным украшением)d
Индекс декора в префиксе декорации (0/1 для горизонтальной или 1/3 для вертикальной)c
Строкаn-3
пробеловs
Выходная строка для каждой строки%1
Номер строки, но такжеn
для первого ряда, так что в первом и последнем рядах@
вместо пробелов используется s.источник
C 233 байта
Должен быть в состоянии играть в гольф немного отсюда ...
Большая проблема, это было трудно и некрасиво для кода.
Запустите с этой основной функцией;
источник
Ruby 2.3.1,
449265245233230 символовПохоже, что должен быть ответ ruby, так что вот ответ ruby. Это действительно не так умно, надеюсь, кто-то еще здесь будет умнее;)
Гольф версия:
Трюки с гольфом:
Читаемая версия
тестирование
источник
Мне было скучно ... вот еще две версии:
PHP, 193 байта
порт Lmis´ ответа
PHP, 191 байт
печать торта символ за символом в одном цикле
сломать
источник
Питон 3,
318301297285272 байтаСбил 17 байт с помощью DJMcMayhem
Сбил 4 байта благодаря mbomb007
Сбил ещё 12 байт благодаря DJMcMayhem
Сбил ещё 13 байтов благодаря mbomb007
Мой первый в мире гольф, так что это не так уж и здорово. Я использовал: aliasing math.ceil как y и str.format как z, форматы вложенности, однострочный импорт, лямбда и побитовые операции, а также некоторые другие вещи, чтобы получить это как есть.
Беззвучная версия (разделенный импорт, без псевдонимов и без побитовой операции):
Интересно, что использование не побитовой версии этого все еще производит правильный вывод, однако, вывод отличается:
Non-побитовое:
Поразрядные:
источник
from ... import*
тип импорта, чтобы сохранить несколько байтовimport math;y=math.ceil
чтобы снять два байта. Это даст вам наimport random;import math;y=math.ceil;lambda n:"{a}{}{a}".format("{d}(@{}{b}F{c}@)\n{e}".format(" "*(y((2*n-5)/2)),b=random.sample(["L","R"],1)[0],c=" "*((2*n)-(5+y((2*n-5)/2))),d="(@{}@)\n".format(" "*(2*n-3))*y((n-3)/2),e="(@{}@)\n".format(" "*(2*n-3))*(n-(3+(y((n-3)/2))))),a="({})\n".format("@"*(2*n-1)))
13 байт меньше.format
поскольку вы часто это называете. Проблема в том, что я точно не знаю, как создать псевдоним для функции-члена (напримерstr.format
), поэтому вам придется немного поэкспериментировать. Я не уверен, что это будет короче, хотя.C # 448 байт
Golfed:
Проверьте это здесь
Ungolfed:
источник