Esta tarefa é simples: escreva um programa ou função que produza a lista de todas as notas musicais (usando nomes de notas em inglês) de A ♭ a G♯.
Todas as notas sem um nome consistindo em uma única letra (ou seja, notas pretas em um teclado musical) devem ter seu nome impresso duas vezes, uma vez como a afiada de uma nota, uma vez como o plano de uma. Notas nítidas ou planas que podem ser descritas com uma única letra, como B♯ (C) ou F ♭ (E), não devem ser produzidas.
Aqui está um exemplo da saída:
Ab, A, A#, Bb, B, C, C#, Db, D, D#, Eb, E, F, F#, Gb, G, G#
Especificações
O programa ou função não deve receber nenhuma entrada.
As notas podem ser impressas em qualquer ordem e em qualquer lista de saída permitida por nossas regras de E / S padrão
Os símbolos Unicode nítidos e planos (♯ / ♭) podem ser substituídos por
b
e#
Como sempre, as brechas padrão são proibidas.
Como esse é o código-golfe , o menor programa, em bytes, vence.
fonte
"C "
vez de"C"
?Respostas:
Malbolge ,
482370353 bytesR1: vírgulas removidas entre elas (conforme não exigido pelo desafio)
R2: economize alguns bytes
Experimente online!
fonte
Montagem CP-1610 ( Intellivision ), 31 DECLEs 1 = 39 bytes
Uma rotina que pega um ponteiro de saída em R4 e escreve as notas ali, separadas por espaços. No código de exemplo, escrevemos diretamente na tela.
Hex dump (somente rotina)
Fonte completa
Saída
captura de tela do jzIntv
1. Um código de operação CP-1610 é codificado com um valor de 10 bits, conhecido como 'DECLE'. Essa rotina tem 31 DECLEs, começando em US $ 4820 e terminando em US $ 483E (incluído).
fonte
Python 3 , 50 bytes
Experimente online!
Python 2: 48 bytes
Esse código pode ser ajustado de modo a incluir B # e Cb, ao custo de bytes adicionais. Isso pode ser alcançado substituindo
5
por6
.Além disso, é (finalmente) mais curto do que apenas produzir a sequência simples:
Python 3 , 51 bytes
Experimente online!
Python 2: 50 bytes
fonte
05AB1E ,
161513 bytes-2 bytes graças a @maxb .
Experimente online.
Saída como uma lista, onde as notas de caractere único estão com um espaço à direita.
Explicação:
Veja este 05AB1E ponta do meu (seção Como comprimir grandes inteiros? ) Para entender por que
Ž7×
é1999
.Ž7×
Como alternativa, pode ser₄·<
(1000, dobro, diminuir em 1) para a mesma contagem de bytes.fonte
7£
realmente necessário? Parece funcionar bem sem ele.Gelatina , 18? * 20 bytes
Um link monádico retornando uma lista de listas de caracteres.
* Se uma lista mista de (a) lista de caracteres e (b) caracteres for aceitável, remova o final
W€
de 18.Experimente online!
Quão?
fonte
bytes
no cabeçalho.Retina 0.8.2 , 33 bytes
Experimente online! Explicação:
Insira os nomes das notas de base.
Expanda cada nota para incluir versões simples e nítidas.
Excluir
B#
,E#
e também as notas seguintes eles (Cb
eEb
).fonte
Perl 6 , 41 bytes
Experimente online!
Simples produto cruzado das notas e objectos cortantes / planos, seguido pela remoção de notas extras inválidas. Este é um bloco de código anônimo que produz a string:
fonte
R , 50 bytes
Experimente online!
Resposta chata.
R , 60 bytes
Experimente online!
fonte
Cb
eE#
.Carvão , 21 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Japonês ,
2322 bytesTente
fonte
<6
mas está<5
na explicação.dzaima / APL REPL,
382825 bytesExperimente online!
fonte
⎕←
.{}
LOL.Stax ,
1715 bytesExecute e depure
Programa de bônus: imprima os símbolos extravagantes
fonte
Ruby , 43 bytes
Experimente online!
Com o intervalo,
0..20
isso imprimiria uma matriz contendo todos os apartamentos, todos os naturais e todos os objetos cortantes. Os indesejadosFb Cb E# B#
são omitidos usando o intervalo2..18
As notas são impressas de acordo com https://en.wikipedia.org/wiki/Circle_of_fifths , ou em outras palavras, subindo 7 semitons (uma taxa de frequência de quase exatamente 1,5) a cada vez.
Isso leva à ordem da letra da nota fornecida, na qual cada nota é inclusive cinco graus (conhecida como "quinto") acima da nota anterior. Por exemplo
F->C
éFGABC
fonte
brainfuck , 106 bytes
Experimente online!
Produz cada nota separada por retornos de carro.
fonte
Zsh , 36 bytes
Uma solução mais feia, mas salva dois caracteres.
(F)
junta-se a uma lista de novas linhas e//[BE]#???
remove as partes da string de que precisamos.Experimente online!
Zsh , 38 bytes
Eu sempre gosto quando Zsh vence Perl (espero não falar tão cedo ...).
Experimente online!
fonte
Gelatina , 21 bytes
Experimente online!
fonte
Braquilog , 36 bytes
Experimente online!
Atualmente, estou no processo de forçar brutalmente o índice do conjunto de poderes que me deixaria me livrar
⟨h₅ct₁₄⟩⟨h₁₂ct₅⟩
(e por extensão↺
, já que a saída não precisa estar na mesma ordem que a saída de exemplo), mas está demorando bastante enquanto ... talvez eu deva reservar um minuto para realmente descobrir em que sublistas de ordem são geradas e calcular o índice dessa maneira ...fonte
Tela , 23 bytes
Experimente aqui!
22 bytes com novas linhas extras na saída
fonte
PHP , 65 bytes
Faz a lista com um loop. Os itens são separados por
_
um separador à direita.Experimente online!
PHP , 43 bytes
O PHP produz qualquer coisa como está, quando não está dentro
<?php
e?>
tags.Experimente online!
fonte
Pitão ,
2321 bytesExperimente online!
Editar: Reescrever parcial para salvar 2 bytes, versão anterior:
s%2c*<r1G7"b #"xLG"fhoq
Experimente online!fonte
Commodore C64 / TheC64 Mini (provavelmente outras variantes BASIC de 8 bits do Commodore) - 52 bytes BASIC tokenizados
Pressionar a
CTRL
tecla maisN
no teclado C64 entra no 'modo comercial' no conjunto de caracteres para caracteres maiúsculos / minúsculos. Podemos imprimir isso em uma string em um byte / token; e como temos 40 colunas, o espaço de G a G # não é necessário.Não precisamos fechar a string nesse caso, pois não é uma linha com várias instruções com um
:
separador.A aparência dessa tela na tela do Commodore C64 (e compatíveis) é mostrada abaixo.
fonte
Barril , 43 bytes
A sequência, compactada.
TIO
fonte
APL (Dyalog Unicode) , 45 bytes
Experimente online!
⎕R
Operação de substituição simples , precedendo,
cada elemento da cadeia de caracteres que corresponde a cada letra do⎕A
alfabeto e, em seguida, eliminando os 2 primeiros caracteres, que são,
.fonte
Brainfuck, 214 bytes
Experimente Online!
fonte
JavaScript (Node.js) , 84 bytes
Experimente online!
Retornar a string (como mostrado abaixo) seria mais curto em 36 bytes, mas qual é a graça?
fonte
brainfuck ,
255115 bytesExperimente online!
fonte
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.
Isso parece bastante claro para mim e não vejo histórico de edições no OP na minha tela.Bash 5 , 42 bytes
Saída:
fonte
Perl 5 ,
4741 bytesExperimente online!
fonte
T-SQL, 124 bytes
Quebras de linha são apenas para fins de exibição.
Mais longo, mas muito mais interessante que a versão trivial (50 bytes) :
fonte
Z80Golf ,
3129 bytesExperimente online!
Explicação :
O Z80Golf é apenas uma máquina de fantasia simples, baseada no CPU Z80 de 8 bits. O programa é carregado no local da memória
0x0000
e o restante da memória é preenchido com zeros. A saída é feita chamando0x8000
, que produzirá o valor do registro A como um caractere.O programa começa com os dados que serão processados, 6 bytes no total. Cada par de bytes especifica um sufixo da nota e uma máscara de bit controlando qual das letras pode ser combinada com esta nota. Para salvar bytes, o caractere de sufixo é invertido (
xor 0xff
) - isso permite que os dados sejam executados como instruções com pequenos efeitos colaterais, possibilitando a remoção de um salto que ignora esses dados:É assim que a CPU decodifica isso:
Esses dados são lidos dois bytes de cada vez no par de registradores DE. O ponteiro da pilha é usado para apontar para o próximo elemento. Começa em 0 e, como o Z80 usa uma pilha completa e descendente, todos os pops lerão o próximo par de dados - todas as operações da pilha são de 16 bits.
O loop externo é implementado com um contador decrescente no registrador B, para o qual o Z80 fornece suporte especial na forma da
djnz
instrução:A carta atual é mantida no registro A. Como o incremento se encaixa bem no início do loop, carregamos um a menos que o valor inicial real de
A
:fonte