Las teclas del piano tienen 3 caracteres de ancho y 7 caracteres de alto. Sin embargo, si cada tecla tuviera 3 caracteres de ancho, no habría suficiente espacio para las teclas negras. Es por eso que algunas de las teclas blancas tienen partes de ellas cortadas. Hay 3 tipos de teclas blancas.
Claves con la mitad derecha faltante (R):
____
| |
| |
| |
| |
| |
| |
|___|
Claves con la mitad izquierda faltante (L):
____
| |
| |
| |
| |
| |
| |
|___|
Y teclas con las mitades izquierda y derecha faltantes (M):
___
| |
| |
| |
| |
| |
| |
|___|
En un teclado real, el patrón de estos es el siguiente:
RMLRMML, RMLRMML, RMLRMML...
y se repite para un total de 88 teclas. Ahora no puede verlo cuando las teclas se muestran individualmente, pero cuando las junta, puede ver las teclas negras.
_________________________________________________________
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
Tu tarea
Dado un número entero positivo N , imprima este arte ASCII de un piano con N teclas blancas. Debería poder manejar cualquier N de 1 a 52 inclusive (dado que los pianos de 88 teclas reales tienen 52 teclas blancas). Aquí está la salida de prueba de 1 a 8, y después de eso el patrón aumenta de manera similar.
1
____
| |
| |
| |
| |
| |
| |
|___|
2
________
| | | |
| | | |
| | | |
| | | |
| | |
| | |
|___|___|
3
_____________
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | |
| | | |
|___|___|___|
4
________________
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | |
| | | | |
|___|___|___|___|
5
____________________
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | |
| | | | | |
|___|___|___|___|___|
6
________________________
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | |
| | | | | | |
|___|___|___|___|___|___|
7
_____________________________
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | |
| | | | | | | |
|___|___|___|___|___|___|___|
8
________________________________
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | |
| | | | | | | | |
|___|___|___|___|___|___|___|___|
Y por último, pero no menos importante, aquí hay una salida completa de 52 teclas:
_________________________________________________________________________________________________________________________________________________________________________________________________________________
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
Las lagunas estándar están prohibidas, ¡y la respuesta más corta en bytes gana!
Respuestas:
Pyth,
686563 bytesPruébalo en línea!
Banco de pruebas.
En esta versión, simplemente sustituí las asignaciones (J y K) dentro para guardar 2 bytes. Por lo tanto, lea la versión a continuación.
Versión anterior de 65 bytes con explicación
Pruébalo en línea!
Magia negra
fuente
JavaScript (ES6),
155149147 bytesDonde
\n
representa el carácter literal de nueva línea. Aprovecha el hecho de que todas las líneas después del primer comienzo con un|
personaje. Explicación:Editar: ahorré 2 bytes al corregir mi lectura incorrecta de la especificación en la altura de las teclas.
fuente
Ruby, 119 bytes
Sin golf en el programa de prueba
fuente
> <>,
188182bytesEl número de teclas blancas para mostrar debe estar presente en la pila al inicio del programa.
Editar : Me las arreglé para reducir algunos bytes mediante la combinación de la salida para las líneas 5/6 y 7. Versión anterior:
fuente
PHP, 238 bytes
Como de costumbre, anteponga el código
<?php
, póngalo en un archivo PHP (nombremoskeyboard.php
) y ejecútelo usando:Se pueden guardar dos bytes más en PHP7 apretando la inicialización
$n
y$s
en su primer uso:El código no protegido, un conjunto de pruebas y otras cosas se pueden encontrar en github .
fuente
Python
32,191185180182171145144133132 bytesEsto podría usar algo de golf, pero ya he jugado tanto con el código que es posible que no vea dónde están los puntos de golf. Cualquier sugerencia de golf es bienvenida.
Editar: lee mal la especificación sobre la altura de las teclas. Este error se ha corregido.
Editar: tomó prestada la idea clave de Neil de su respuesta de Javascript, eliminó algunos paréntesis y cambió a Python 2 para guardar 11 bytes.
Editar: muchos cambios para reducir la función a un
for
bucle.Editar: ahora un programa en lugar de una función.
Editar: ahora usando
print"\n|".join()
como lo sugiere Neil para guardar 11 bytes. Volvió el programa a una función para guardar un byte.fuente
"\n|".join
truco.print
y"\n|"
!C # 1683 bytes
Entonces ... después de ver la respuesta de Neil arriba, esto es bastante vergonzoso, pero lo publicaré de todos modos porque me tomó un tiempo (bendición). Usé C # para crear el mío. Dentro de la clase "Fncs", creé una matriz del orden típico de las teclas. Luego, creé una función que puede permitir al usuario obtener un índice apropiado para esta matriz en función de un número entero dado. Para editar líneas individuales, creé una clase "PianoKeyboard" que contiene un diccionario que almacena múltiples cadenas que representan las líneas individuales. Finalmente, creé la función "DrawKey" que agrega el texto apropiado a las líneas individuales y la función "GetKeys" que devuelve el valor general de la cadena.
fuente