Клавиши пианино имеют 3 символа в ширину и 7 символов в высоту. Однако, если бы каждая клавиша была шириной 3 символа, для черных клавиш было бы недостаточно места. Вот почему некоторые из белых клавиш имеют вырезанные части. Есть 3 типа белых клавиш.
Ключи с правой половиной отсутствуют (R):
____
| |
| |
| |
| |
| |
| |
|___|
Ключи с отсутствующей левой половиной (L):
____
| |
| |
| |
| |
| |
| |
|___|
И ключи с левой и правой половинками отсутствуют (M):
___
| |
| |
| |
| |
| |
| |
|___|
На настоящей клавиатуре шаблон выглядит так:
RMLRMML, RMLRMML, RMLRMML...
и повторяется в общей сложности 88 клавиш. Теперь вы не можете видеть это, когда клавиши отображаются по отдельности, но, когда вы нажимаете их вместе, вы можете видеть черные клавиши.
_________________________________________________________
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
Твое задание
Если дано положительное целое число N , напечатайте это ASCII-искусство пианино с N белыми клавишами. Вы должны иметь возможность обрабатывать любое N от 1 до 52 включительно (поскольку настоящие пианино с 88 клавишами имеют 52 белых клавиши). Вот результат теста от 1 до 8, и после этого шаблон увеличивается аналогичным образом.
1
____
| |
| |
| |
| |
| |
| |
|___|
2
________
| | | |
| | | |
| | | |
| | | |
| | |
| | |
|___|___|
3
_____________
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | |
| | | |
|___|___|___|
4
________________
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | |
| | | | |
|___|___|___|___|
5
____________________
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | |
| | | | | |
|___|___|___|___|___|
6
________________________
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | |
| | | | | | |
|___|___|___|___|___|___|
7
_____________________________
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | |
| | | | | | | |
|___|___|___|___|___|___|___|
8
________________________________
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | |
| | | | | | | | |
|___|___|___|___|___|___|___|___|
И последнее, но не менее важное, вот полный вывод из 52 ключей:
_________________________________________________________________________________________________________________________________________________________________________________________________________________
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
Стандартные лазейки запрещены, и выигрывает самый короткий ответ в байтах!
Ответы:
Pyth,
686563 байтаПопробуйте онлайн!
Тестирование.
В этой версии я просто заменил назначения (J и K) внутри, чтобы сохранить 2 байта. Поэтому читайте версию ниже.
Предыдущая 65-байтовая версия с пояснениями
Попробуйте онлайн!
Черная магия
источник
JavaScript (ES6),
155149147 байтГде
\n
представляет буквальный символ новой строки. Использует тот факт, что все строки после первого начинаются с|
символа. Объяснение:Редактировать: Сохранено 2 байта, исправляя неправильное прочтение спецификации по высоте клавиш.
источник
Рубин, 119 байт
Неуправляемый в тестовой программе
источник
> <>,
188182 байтаКоличество белых клавиш для отображения должно присутствовать в стеке при запуске программы.
Изменить : мне удалось сбрить несколько байтов путем объединения вывода для строк 5/6 и 7. Предыдущая версия:
источник
PHP, 238 байт
Как обычно, добавьте код
<?php
, вставьте его в файл PHP (назовем егоkeyboard.php
) и запустите, используя:Еще два байта могут быть сохранены в PHP7 путем сжатия инициализации
$n
и$s
их первого использования:Ungolfed кода, набор тестов и другие лакомства можно найти на GitHub .
источник
Python
32,191185180182171145144133132 байтаДля этого можно было бы поиграть в гольф, но я уже так много поиграл с кодом, что, возможно, не увижу, где находятся места для игры в гольф. Любые предложения по игре в гольф приветствуются.
Изменить: неправильно прочитать спецификации на высоту клавиш. Эта ошибка была исправлена.
Редактировать: Заимствовал 12 ключевых идей Нейла из его ответа Javascript, удалил некоторые скобки и переключился на Python 2, чтобы сохранить 11 байтов.
Редактировать: множество изменений, чтобы свести функцию к одному
for
циклу.Редактировать: теперь программа вместо функции.
Изменить: Теперь, используя,
print"\n|".join()
как предложил Нил, чтобы сохранить 11 байтов. Превратил программу обратно в функцию сохранения байта.источник
"\n|".join
трюк.print
и"\n|"
!C # 1683 байт
Так что ... увидев ответ Нейла выше, это довольно смущает, но я все равно выложу его, потому что это заняло у меня некоторое время (благослови). Я использовал C # для создания моего. Внутри класса «Fncs» я создал массив типичного порядка ключей. Затем я создал функцию, которая может позволить пользователю получить соответствующий индекс для этого массива на основе заданного целого числа. Чтобы редактировать отдельные строки, я создал класс «PianoKeyboard», который содержит словарь, в котором хранятся несколько строк, представляющих отдельные строки. Наконец, я создал функцию «DrawKey», которая добавляет соответствующий текст к отдельным строкам, и функцию «GetKeys», которая возвращает общее значение строки.
источник