Esta tarea es simple: escriba un programa o función que genere la lista de todas las notas musicales (usando nombres de notas en inglés) de A ♭ a G♯.
Todas las notas sin un nombre que consista en una sola letra (es decir, notas negras en un teclado musical) deben tener su nombre impreso dos veces, una vez como una nota aguda, una vez como una plana. Las notas agudas o planas que se pueden describir con una sola letra, como B♯ (C) o F ♭ (E) no deben emitirse.
Aquí hay un ejemplo de la salida:
Ab, A, A#, Bb, B, C, C#, Db, D, D#, Eb, E, F, F#, Gb, G, G#
Presupuesto
El programa o función no debe tomar ninguna entrada.
Las notas se pueden imprimir en cualquier orden y en cualquier salida de lista permitida por nuestras reglas estándar de E / S
Los símbolos Unicode agudos y planos (♯ / ♭) pueden sustituirse con
b
y#
Como siempre, las lagunas estándar están prohibidas.
Como se trata de código de golf , el programa más pequeño, en bytes, gana.
fuente
"C "
lugar de"C"
?Respuestas:
Malbolge ,
482370353 bytesR1: comas eliminadas en el medio (como no es requerido por el desafío)
R2: afeitarse unos pocos bytes
Pruébalo en línea!
fuente
Conjunto CP-1610 ( Intellivision ), 31 DECLEs 1 = 39 bytes
Una rutina que toma un puntero de salida en R4 y escribe las notas allí, separadas por espacios. En el código de ejemplo, escribimos directamente en la pantalla.
Volcado hexadecimal (solo rutina)
Fuente completa
Salida
captura de pantalla de jzIntv
1. Un código de operación CP-1610 está codificado con un valor de 10 bits, conocido como 'DECLE'. Esta rutina tiene 31 DECLEs de largo, comenzando en $ 4820 y terminando en $ 483E (incluido).
fuente
Python 3 , 50 bytes
Pruébalo en línea!
Python 2: 48 bytes
Este código se puede ajustar para incluir B # y Cb, sin costo de bytes adicionales. Esto se puede lograr reemplazando
5
con6
.Además, es (finalmente) más corto que simplemente generar la cadena simple:
Python 3 , 51 bytes
Pruébalo en línea!
Python 2: 50 bytes
fuente
05AB1E ,
161513 bytes-2 bytes gracias a @maxb .
Pruébalo en línea.
Salidas como una lista, donde las notas de un solo carácter tienen un espacio final.
Explicación:
Ver este consejo 05AB1E mío (sección Cómo comprimir grandes números enteros? ) Para entender por qué
Ž7×
es1999
.Ž7×
alternativamente podría ser₄·<
(1000, doble, disminuir en 1) para el mismo número de bytes.fuente
7£
realmente necesario? Parece funcionar bien sin él.Jalea , 18? * 20 bytes
Un enlace monádico que devuelve una lista de listas de caracteres.
* Si una lista mixta de (a) listas de caracteres y (b) caracteres es aceptable, elimine el final
W€
de 18.Pruébalo en línea!
¿Cómo?
fuente
bytes
en el encabezado.Retina 0.8.2 , 33 bytes
Pruébalo en línea! Explicación:
Inserte los nombres de las notas base.
Expanda cada nota para incluir versiones planas y nítidas.
Eliminar
B#
,E#
y también las notas que los siguen (Cb
yEb
).fuente
Perl 6 , 41 bytes
Pruébalo en línea!
Producto cruzado simple de las notas y los objetos punzantes / planos, seguido de la eliminación de las notas inválidas adicionales. Este es un bloque de código anónimo que produce la cadena:
fuente
R , 50 bytes
Pruébalo en línea!
Aburrida respuesta.
R , 60 bytes
Pruébalo en línea!
fuente
Cb
yE#
.Carbón , 21 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
Japt ,
2322 bytesIntentalo
fuente
<6
pero está<5
en la explicación.dzaima / APL REPL,
382825 bytesPruébalo en línea!
fuente
⎕←
.{}
LOL.Stax ,
1715 bytesEjecutar y depurarlo
Programa de bonificación: imprime los símbolos elegantes
fuente
Ruby , 43 bytes
Pruébalo en línea!
Con el rango,
0..20
esto imprimiría una matriz que contiene todos los planos, todos los naturales y todos los objetos punzantes. Los no deseadosFb Cb E# B#
se omiten al usar el rango2..18
Las notas se imprimen ordenadas de acuerdo con https://en.wikipedia.org/wiki/Circle_of_fifths , o en otras palabras, ascendentes en 7 semitonos (una relación de frecuencia de casi exactamente 1,5) cada vez.
Esto lleva al orden de las letras de las notas, en el que cada nota tiene cinco grados inclusive (conocido como "quinto") sobre la anterior. Por ejemplo
F->C
esFGABC
fuente
brainfuck , 106 bytes
Pruébalo en línea!
Emite cada nota separada por retornos de carro.
fuente
Zsh , 36 bytes
Una solución más fea, pero guarda dos caracteres.
(F)
se une a una lista de nuevas líneas y//[BE]#???
elimina las partes de la cadena que necesitamos.Pruébalo en línea!
Zsh , 38 bytes
Siempre lo disfruto cuando Zsh vence a Perl (espero no hablar demasiado pronto ...).
Pruébalo en línea!
fuente
Jalea , 21 bytes
Pruébalo en línea!
fuente
Brachylog , 36 bytes
Pruébalo en línea!
Actualmente estoy en el proceso de forzar al índice de potencia bruta que me permitiría deshacerme
⟨h₅ct₁₄⟩⟨h₁₂ct₅⟩
(y por extensión↺
, ya que la salida no necesita estar en el mismo orden que la salida de ejemplo), pero está tomando bastante mientras que ... tal vez debería dedicar un minuto para calcular en qué orden se generan las sublistas y calcular el índice de esa manera ...fuente
Lienzo , 23 bytes.
Pruébalo aquí!
22 bytes con nuevas líneas adicionales en la salida
fuente
PHP , 65 bytes
Hace la lista con un bucle. Los elementos están separados por
_
un separador final.Pruébalo en línea!
PHP , 43 bytes
PHP genera todo tal cual, cuando no está dentro
<?php
y las?>
etiquetas.Pruébalo en línea!
fuente
Pyth ,
2321 bytesPruébalo en línea!
Editar: reescritura parcial para guardar 2 bytes, versión anterior: ¡
s%2c*<r1G7"b #"xLG"fhoq
Pruébelo en línea!fuente
Commodore C64 / TheC64 Mini (probablemente otras variantes básicas de Commodore de 8 bits) - 52 bytes BASIC tokenizados
Al presionar la
CTRL
tecla plusN
en el teclado C64 se ingresa al 'modo de negocios' en el juego de caracteres para mayúsculas / minúsculas. Podemos imprimir esto en una cadena en un byte / token; y como tenemos 40 columnas, no se requiere el espacio de G a G #.No necesitamos cerrar la cadena en este caso, ya que no es una línea con múltiples estados con un
:
separador.A continuación se muestra cómo se ve esto en una pantalla Commodore C64 (y compatibles).
fuente
Barril , 43 bytes
La cuerda, comprimida.
TIO
fuente
APL (Dyalog Unicode) , 45 bytes
Pruébalo en línea!
⎕R
Operación eplace simple, que antecede,
a cada elemento en la cadena que coincide con cada letra en el⎕A
alfabeto, luego suelta los primeros 2 caracteres, que son,
.fuente
Brainfuck, 214 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 84 bytes
Pruébalo en línea!
Solo devolver la cadena (como se muestra a continuación) sería más corto en 36 bytes, pero ¿dónde está la diversión en eso?
fuente
brainfuck ,
de 255115 bytesPruébalo en línea!
fuente
All notes without a name consisting of a single letter (i.e. black notes on a musical keyboard) should have their name printed twice, once as the sharp of a note, once as the flat of one. Sharp or flat notes that can be described with a single letter, like B♯ (C) or F♭ (E) should not be outputted.
Eso me parece bastante claro, y no veo ningún historial de edición en el OP en mi pantalla.Bash 5 , 42 bytes
Salida:
fuente
Perl 5 ,
4741 bytesPruébalo en línea!
fuente
T-SQL, 124 bytes
Los saltos de línea son solo para fines de visualización.
Más largo pero mucho más interesante que la versión trivial (50 bytes) :
fuente
Z80Golf ,
3129 bytesPruébalo en línea!
Explicación :
Z80Golf es solo una máquina de fantasía simple basada en la CPU Z80 de 8 bits. El programa se carga en la ubicación de la memoria.
0x0000
y el resto de la memoria se llena con ceros. La salida se realiza mediante una llamada0x8000
, que generará el valor del registro A como un carácter.El programa comienza con los datos que se procesarán, 6 bytes en total. Cada par de bytes especifica un sufijo de nota y una máscara de bits que controla qué letras se pueden combinar con esta nota. Para guardar bytes, el carácter de sufijo se invierte (
xor 0xff
): esto permite que los datos se ejecuten como instrucciones con pequeños efectos secundarios, lo que permite eliminar un salto que omite estos datos:Así es como la CPU decodifica esto:
Estos datos se leen dos bytes a la vez en el par de registros DE. El puntero de la pila se usa para señalar el siguiente elemento. Comienza en 0, y debido a que el Z80 usa una pila descendente completa, cualquier mensaje emergente leerá el siguiente par de datos: todas las operaciones de la pila son de 16 bits.
El bucle externo se implementa con un contador decreciente en el registro B, para el cual el Z80 proporciona soporte especial en forma de
djnz
instrucción:La carta actual se encuentra en el registro A. Debido a que el incremento se ajusta bien al comienzo del ciclo, cargamos uno menos que el valor de inicio real de
A
:fuente