As teclas do piano têm 3 caracteres de largura e 7 caracteres de altura. No entanto, se cada tecla tivesse 3 caracteres de largura, não haveria espaço suficiente para as teclas pretas. É por isso que algumas das teclas brancas têm partes delas cortadas. Existem 3 tipos de teclas brancas.
Teclas com a metade direita faltando (R):
____
| |
| |
| |
| |
| |
| |
|___|
Teclas com a metade esquerda ausente (L):
____
| |
| |
| |
| |
| |
| |
|___|
E as teclas com as metades esquerda e direita ausentes (M):
___
| |
| |
| |
| |
| |
| |
|___|
Em um teclado real, o padrão é o seguinte:
RMLRMML, RMLRMML, RMLRMML...
e repete-se para um total de 88 teclas. Agora você não pode vê-lo quando as teclas são mostradas individualmente, mas quando você as junta, pode ver as teclas pretas.
_________________________________________________________
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
Sua tarefa
Dado um número inteiro positivo N , imprima essa arte ASCII de um piano com N teclas brancas. Você deve ser capaz de lidar com qualquer N de 1 a 52, inclusive (já que os pianos de 88 teclas reais têm 52 teclas brancas). Aqui está a saída de teste de 1 a 8 e, depois disso, o padrão aumenta de maneira semelhante.
1
____
| |
| |
| |
| |
| |
| |
|___|
2
________
| | | |
| | | |
| | | |
| | | |
| | |
| | |
|___|___|
3
_____________
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | |
| | | |
|___|___|___|
4
________________
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | |
| | | | |
|___|___|___|___|
5
____________________
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | |
| | | | | |
|___|___|___|___|___|
6
________________________
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | |
| | | | | | |
|___|___|___|___|___|___|
7
_____________________________
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | |
| | | | | | | |
|___|___|___|___|___|___|___|
8
________________________________
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | |
| | | | | | | | |
|___|___|___|___|___|___|___|___|
E por último mas não menos importante, aqui está uma saída completa de 52 teclas:
_________________________________________________________________________________________________________________________________________________________________________________________________________________
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
As brechas padrão são proibidas e a resposta mais curta em bytes vence!
Respostas:
Pitão,
686563 bytesExperimente online!
Suíte de teste.
Nesta versão, substituí as atribuições (J e K) dentro para economizar 2 bytes. Portanto, leia a versão abaixo.
Versão anterior de 65 bytes com explicação
Experimente online!
Magia negra
fonte
JavaScript (ES6),
155149147 bytesOnde
\n
representa o caractere literal de nova linha. Aproveita o fato de que todas as linhas após a primeira começam com um|
personagem. Explicação:Edit: Salvo 2 bytes, corrigindo minha leitura incorreta das especificações na altura das chaves.
fonte
Ruby, 119 bytes
Ungolfed in program program
fonte
> <>,
188182 bytesO número de teclas brancas a serem exibidas deve estar presente na pilha no início do programa.
Edit : eu consegui raspar alguns bytes combinando a saída das linhas 5/6 e 7. Versão anterior:
fonte
PHP, 238 bytes
Como de costume, acrescente o código
<?php
, coloque-o em um arquivo PHP (vamos chamá-lokeyboard.php
) e execute-o usando:Mais dois bytes podem ser salvos no PHP7 pressionando a inicialização
$n
e$s
o primeiro uso:O código não-protegido, uma suíte de testes e outros itens podem ser encontrados no github .
fonte
Python
32,191185180182171145144133132 bytesIsso poderia ser um pouco de golfe, mas eu já brinquei tanto com o código que talvez não veja onde estão os pontos de golfe. Todas as sugestões de golfe são bem-vindas.
Edit: Leia mal as especificações na altura das teclas. Este bug foi corrigido.
Edit: A idéia-chave 12 de Neil emprestada de sua resposta Javascript, removeu alguns parênteses e mudou para Python 2 para salvar 11 bytes.
Editar: Muitas alterações para reduzir a função a um
for
loop.Edit: Agora um programa em vez de uma função.
Edit: Agora usando
print"\n|".join()
como sugerido por Neil para salvar 11 bytes. Tornou o programa novamente em uma função para salvar um byte.fonte
"\n|".join
truque.print
e"\n|"
!Bytes em C # 1683
Então .... depois de ver a resposta de Neil acima, isso é muito embaraçoso, mas eu vou postar mesmo assim porque demorei um pouco (abençoe). Eu usei o C # para criar o meu. Dentro da classe "Fncs", criei uma matriz da ordem típica de chaves. Em seguida, criei uma função que permite ao usuário obter um índice apropriado para essa matriz com base em um determinado número inteiro. Para editar linhas individuais, criei uma classe "PianoKeyboard" que contém um dicionário que armazena várias seqüências representando as linhas individuais. Por fim, criei a função "DrawKey", que anexa o texto apropriado às linhas individuais e a função "GetKeys", que retorna o valor geral da string.
fonte