Зомби-апокалипсис наступил, и мир подходит к концу. Внезапно кто-то обнаруживает формулу, которая берет текущий час, минуту и день, и выплевывает идеальную ноту для игры на пианино, которая мгновенно убивает каждого зомби, который ее слышит. К сожалению, в мире остался только один пианист, и он забыл, как читать ноты, но он все еще знает, как читать ноты. Конечно, это очень чувствительная ко времени вещь, поэтому вполне естественно, что компьютер это делает. 1
Ваша задача - сделать заметку, например G
, и вывести заметку, помещенную на посох (в скрипичном ключе), например:
-----
-----
|
---|-
|
--O--
-----
Спецификация:
- Вы должны вывести ряд чередующихся строк
-----
(5 штрихов) и пустую строку. Всего будет 5-----
с. Записка должна быть наложена поверх этого персонала. - На входе будет указано, где находится заметка. Вход будет:
- необязательный
H
илиL
, указывая "высокий" или "низкий" - письмо от
A
до сG
указанием поля - необязательный
#
илиb
, указав острый или плоский.
- необязательный
- «Примечание» определяется как:
- Один
O
(заглавная O) выровнен по центру посоха, который находится на месте записки. (Верхняя строкаHF
(высокая F), а нижняя строкаE
(нормальная E).) - Три
|
с (вертикальные полосы), стебель, который будет:- один пробел слева от примечания и спуск вниз (начиная с одного пробела ниже примечания), если примечание находится в средней строке (
B
) или выше, или - один пробел справа от примечания и переход вверх (начиная с одного пробела выше примечания), если примечание находится ниже средней линии.
- один пробел слева от примечания и спуск вниз (начиная с одного пробела ниже примечания), если примечание находится в средней строке (
- A
#
илиb
один пробел слева от примечания, если он указан во входных данных.
- Один
- Строки книги должны быть добавлены, если примечание слишком высоко или низко. Эти линии будут
---
(только 3 штриха по ширине, а не 5) и появятся только в том случае, если примечание находится на или выше / ниже (для линий верхней / нижней бухгалтерской книги соответственно) линий бухгалтерской книги. - Посторонние места могут быть размещены где угодно. например, вы можете сделать так, чтобы пустые строки имели пробелы или пробелы после строк главной книги, если это поможет вам сохранить любые символы.
Вот визуализация для более легкого понимания спецификации со всеми именами примечаний рядом со строками:
HB
--- HA
HG
----- HF
HE
----- HD
HC
----- B
A
----- G
F
----- E
D
--- C
LB
--- LA
LG
--- LF
... (bottom cut off for brevity, you get the idea anyway)
Вот еще несколько примеров, которые вы можете использовать для тестирования вашей программы:
Входные данные: HG#
#O
-|---
|
-|---
-----
-----
-----
Входные данные: LAb
-----
-----
-----
-----
-----
|
--|
|
bO-
Входные данные: HB
O
|--
|
-|---
-----
-----
-----
-----
Входные данные: C
-----
-----
-----
-----
|
---|-
|
-O-
Это код-гольф , поэтому выиграет самый короткий код в байтах!
1: самая реалистичная экспозиция evar! :-П
#
илиb
справа от примечания, а не слева; это действительно то, что требуется?Ответы:
Golfscript,
211210209197195192 символовПриближается к (на момент публикации) победа, версия GolfScript моей последней версии Python :
Проверьте это здесь (первые 2 строки - пользовательский ввод, обычно это происходит из stdin).
«Читаемая» версия:
источник
Рубин -
271267252249234229220214 символовЯ буквально только что выучил Ruby для этого. Так что, безусловно, есть место для улучшения игры в гольф. Или делать что-нибудь на самом деле. Но мне нужен был язык с изменяемыми строками. :)
Немного негольфя
Я могу сократить его еще на 2 символа до 212 символов, если разрешены начальные пустые строки. Это решение не заполняет строки, которые все равно не печатаются:
Честная ли лямбда-игра? Тогда я могу получить 210 символов с первого подхода
Или 207 символов с дополнительными пустыми строками:
Конечно, теперь вам нужно сделать
f.call("HGb")
.источник
!x.nil?
эквивалентно!x
. И для одной строки ifsif x;y;end;
эквивалентноy if x
. Также вы можете использовать буквальный перевод строки в этой строке.if
работу. Если я использую?\n
(если вы это имели в виду), мне нужно добавить пробел, поэтому я ничего не получу. И удаление.nil?
s не работает вообще (всегда оценивается какtrue
)..nil?
, но это стоит того, чтобы у персонажей.!x.nil?
это!!x
. :)Python,
329309295286280277 символовГольф немного больше сейчас. Все еще может быть улучшено, но не уверен, смогу ли я победить решения ruby или golfscript с помощью этого подхода.
Первоначально я печатал построчно, но оказалось, что это заняло слишком много времени, поэтому я генерирую сетку строк, а затем заполняю то, что необходимо заполнить. Ввод осуществляется из командной строки, например:
источник
GolfScript -
243232228227 символовЯ перевел свой ответ CoffeeScript на GolfScript, который гораздо больше подходит для работы со строками.
РЕДАКТИРОВАТЬ: Сохранить шесть символов, правильно используя оператор приращения, три - используя стек, еще шесть - безответственно переопределяя операторы, которые я не использую, и еще один, не печатая завершающий пробел после грациозных строк.
Полностью гольф:
С комментариями:
источник
Go
это. это будет выводитьoo|||
:)Python,
250245242235 символовСовсем другой подход, который в итоге обыграл другого! Код обработки ввода похож, но это все.
Я наметил значение каждого символа на основе строки и столбца, а затем сыграл в гольф печать:
источник
Ява -
921907863 символаЯ строю каждую строку отдельно, сохраняя каждую строку в массиве. Затем переберите массив и распечатайте каждую строку.
О, пожалуйста, не ненавидь меня, это мой первый раз. Я не могу найти faq / введение, поэтому я надеюсь, что мой формат публикации в порядке. Не уверен, насколько серьезно люди относились к количеству символов .... нормальная версия кода - дополнительный перевод строки / пробелы (1313 символов):
источник
args
).[]
, пробелы в скобках и т. Д.Haskell 377C
Безголовая версия:
источник
Грамотный CoffeeScript -
497527 символовЯ уверен, что есть лучший способ построить сетку, но я не могу понять это.
Один помощник по гольфу.
Масштаб АС и персонал.
Наша функция записи примет строковое представление заметки.
Сначала мы определим октаву.
Тогда записка и случайно. Должен любить деконструирующее назначение.
Давайте преобразуем заметку и октаву в индекс и нанесем на карту заметку.
Теперь мы будем сокращать столько персонала, сколько нам нужно.
И нота стволовая.
Теперь давайте выведем результаты.
Наконец, мы экспортируем функцию для тестирования консоли. Эти персонажи не учитываются в общем количестве.
источник
С
325304Теперь на 21 байт короче благодаря @ace !
Выход:
источник
n
и вы можете удалитьi=0
первыйfor
цикл.if
утверждении((i%12)&11)==0
можно заменить на!((i%12)&11)
.?:
имеет более низкий приоритет, чем^
и<
, поэтому вы можете снять скобки с условий перед?
. И вы можете заменитьprintf("%s",
наputs(
.JavaScript
390388Немного проблем, я должен признать ... Я уверен, что есть способы уменьшить это далее ... Я открыт для предложений ...
Первая итерация
Вторая итерация (используется
n.slice(-1)
вместоn[n.length-1]
), бреет 2 байтаБезголовая версия:
источник