El reto
El código más corto por número de caracteres para generar una parte de un teclado de piano a partir de la nota de entrada en una longitud determinada.
La entrada estará compuesta por una nota ( [ACDFG]#|[A-G]
) desde la que comenzar a imprimir el teclado y un número positivo que representa la longitud de las teclas a imprimir, incluida la primera nota.
La primera clave debe imprimirse en su totalidad; si tiene una clave aguda izquierda, se cortará, lo mismo que cuando la clave inicial es aguda, la clave izquierda también se cortará.
Una tecla aguda no se cuenta, solo las teclas blancas.
Casos de prueba
Input
C 14
Output
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
Input
D# 1
Output
### |
### |
### |
### |
### |
| |
| |
| |
_|____|
Input
A 7
Output
## ### | ### ### | ### ##
## ### | ### ### | ### ##
## ### | ### ### | ### ##
## ### | ### ### | ### ##
## ### | ### ### | ### ##
| | | | | | | |
| | | | | | | |
| | | | | | | |
|____|____|____|____|____|____|____|
El recuento de códigos incluye entrada / salida (es decir, programa completo).
language-agnostic
code-golf
rosetta-stone
LiraNuna
fuente
fuente
[A-G]#*
? ¿Significa esto que tenemos que manejar, digamos,B#####
comoE
?Respuestas:
GolfScript - 80 caracteres
Cabe en una línea de #SO sin la barra de desplazamiento :)
GolfScript - 81 caracteres
Versión con buen formato (27 x 3)
GolfScript - 82 caracteres
GolfScript - 85 caracteres
Versión con un formato agradable (17 x 5)
GolfScript - 94 caracteres
GolfScript - 98 caracteres
GolfScript - 101 caracteres
GolfScript - 109 caracteres
GolfScript - 120 caracteres
GolfScript - 127 caracteres
fuente
Perl, 133 (129) caracteres
Perl,
167160156147142133¡Oh!147144137134133 caracteresAquí hay una solución de 129 caracteres, tomando prestadas varias ideas de la solución Ruby de molf:
y con la ayuda de Acme :: AsciiArtinator :
fuente
Ruby - 125 caracteres
146144140137134126125 caracteres(La segunda línea nueva no es necesaria y se agrega solo para evitar una barra de desplazamiento en SO. Los puntos y coma se pueden reemplazar por líneas nuevas si se desea).
La versión Ruby 1.9 es diferente pero de igual longitud (reemplazando
a[0]
pora.ord
y"_"
por?_
):Llamar con
fuente
i%7%4<1||t>4?"_|___":"###__"
ai%7%4&&t<5?"###__":"_|___"
y guardar 2 caracteres. Me encanta ese%7%4
modismoLilyPond, 285
288291310315330333340350caracteresDe acuerdo con el tema musical, aquí hay una solución en un lenguaje diseñado para componer partituras musicales, LilyPond:
Uso:
$ lilypond thisfile.ly <input.in >output.out 2>/dev/null
fuente
RetroGolf - Applesoft BÁSICO: 236
239245249257245267285Se muestra en varias líneas para facilitar la lectura, pero debe ser una sola línea:
Puede probarse con este intérprete de Applesoft BASIC en Javascript o un emulador .
Piano http://img685.imageshack.us/img685/3407/piano2.png
fuente
C # - 315
Persisto jugando al golf en C # aunque no es un lenguaje muy escueto ...
fuente
Python - 164
fuente
t
yu
y multiplicando por 7?Octava, 153,
154,155,158,159,162,172,180,186,185,188,197,199,200,206,207,209,212,21,215,219,240,244,268caracteres¿Por qué usar solo C o C # o F # (o B o D) cuando puedes programar con una octava completa?
(envuelto cada 60 caracteres para mayor claridad)
Sí ... esta solución realmente calcula la transpuesta conjugada compleja de una cadena.
Uso:
$ octave -q thisfile.m <input.in >output.out
fuente
C - 197
203207216224232240caracteresEsta versión equivalente de 194 caracteres asume que el desbordamiento del búfer está bien.
fuente
for(j=0; j<=l*5+h; j++)
<- espacios inútiles, y parece que también los incluiste en el recuento de caracteresPostScript: 239
245293312(normal); 219224225231(ASCII85)Versión binaria expandida a través de codificación ASCII85 en un programa de 219 caracteres con solo caracteres imprimibles ASCII:
Uso:
$ gs -q -dNOPROMPT -dNODISPLAY -dBATCH thisfile.ps <input.in >output.out
fuente
F #: 224
225, 226, 248, 252, 270, 276, 299, 306CharsUsé módulos de 2 para detectar un espacio o libra. '' es 32% 2 = 0 '#' es 35% 2 = 1 y dado que mi condicional devolvió ceros por falso, simplemente multipliqué el resultado de los módulos.
Usó el <| operador para afeitarse un espacio char. Se usó la sobrecarga del operador para guardar otro carácter.
original
fuente
let g s i=for i=1 to i do printfn"%s"(String.replicate 99 s).[t+4*p..t+int(x.[2..])*5+5*p]
sed, 231
235234235237238244268269270276279280282287300307314329338caracteresFunciona para hasta 99 teclas. El piano estándar tiene 52 teclas blancas, por lo que esto debería ser suficiente.
Ejemplos:
El último ejemplo imprime el teclado estándar, junto con teclas negras imaginarias en cada extremo.
fuente
PianoScript - 2 caracteres
Es una sola línea:
Uso:
Salida:
Puede encontrar más información sobre el lenguaje PianoScript aquí .
fuente
JavaScript - 195 caracteres
Oye, el golf es un juego en el que solo compites contra ti mismo, ¿verdad? :)
Solución por gnarf; portado a Rhino (con una pequeña corrección y cambios de formato) por KirarinSnow; más astillado por gnarf; error corregido por KirarinSnow. caché
k[1]
de cwallenpooleUso:
$ cp input.in 0; rhino thisfile.js
Versión rápida de demostración HTML: Prueba de golf - Adiciones
readFile=prompt;print=function(a) {document.write("<pre>"+a);}
fuente
s=s[b](1-q,p=s.length-3)
Python3 - 158
Ahorrar en
input
contraraw_input
. Perder()
porprint
fuente
F #: 355 caracteres significativos
Todo en una línea:
Expandido:
fuente
gets
o equivalente, ¡ahorraríamos 22 caracteres!SETL
165 caracteres; Traducción de la solución Gribblers Python.
fuente
D2 (plantillas): 331
370400+ 17 caracteres(basado en la solución Ruby).
Comprimido:
Explicado:
Dado que no podemos pasar los parámetros de
dmd
la entrada, debemos hacerlo en el código. Admite solo hasta 99 teclas.fuente
Haskell:
212211208 caracteresTodavía asume letras compatibles con ascii (específicamente, la secuencia "@ABCDEFG"), pero ya no requiere Char.ord
fuente
Ruby - 113 caracteres
Se ejecuta con argumentos de línea de comando
Ruby - 118 caracteres
fuente
PHP - 208 caracteres
Tendrá que ser mejorado.
La entrada debe entregarse en la constante denominada PIANO.
fuente
F #
414386372 personajes importantes:Ah, y una ventaja, este script realmente manejará "F # 372" correctamente - aunque no te molestaré pegándolo aquí ...
System.Console.ReadLine () es un fastidio ...
fuente