O apocalipse zumbi chegou e o mundo está chegando ao fim. De repente, alguém descobre uma fórmula que leva a hora, minuto e dia atuais e cospe a nota perfeita para tocar em um piano que mata instantaneamente todos os zumbis que a ouvem. Infelizmente, resta apenas um pianista no mundo, e ele esqueceu de ler notas, mas ainda sabe ler partituras. Obviamente, isso é muito sensível ao tempo, por isso parece natural ter um computador. 1 1
Seu desafio é tomar uma nota, como G
, e enviar a nota colocada em uma pauta (na clave de sol), assim:
-----
-----
|
---|-
|
--O--
-----
Especificação:
- Você deve gerar uma equipe de linhas alternadas de
-----
(5 traços) e uma linha em branco. Haverá 5-----
s no total. A nota deve ser sobreposta a essa equipe. - A entrada especificará onde a nota está localizada. A entrada será:
- um opcional
H
ouL
, especificando "alto" ou "baixo" - uma letra de
A
paraG
, especificando o tom - um opcional
#
oub
, especificando afiado ou achatado.
- um opcional
- A "nota" é definida como:
- Um
O
(capital O) alinhado ao meio da pauta, que está no lugar da nota. (A linha superior éHF
(F alto) e a linha inferior éE
(E normal).) - Três
|
s (barras verticais), a haste, que será:- um espaço à esquerda da nota e indo para baixo (iniciando um espaço abaixo da nota) se a nota estiver na linha do meio (
B
) ou acima, ou - um espaço à direita da nota e subindo (iniciando um espaço acima da nota) se a nota estiver abaixo da linha do meio.
- um espaço à esquerda da nota e indo para baixo (iniciando um espaço abaixo da nota) se a nota estiver na linha do meio (
- Um
#
oub
um espaço diretamente à esquerda da nota, se especificado na entrada.
- Um
- Linhas de razão devem ser adicionadas se a nota for muito alta ou baixa. Essas linhas terão
---
(apenas 3 traços de largura, em oposição a 5) e aparecerão apenas se a nota estiver acima ou abaixo / abaixo (para as linhas de contabilidade superior / inferior, respectivamente) as linhas de contabilidade. - Espaços estranhos podem ser colocados em qualquer lugar que você desejar; por exemplo, você pode fazer com que as linhas em branco tenham espaços ou após as linhas do razão, se isso ajudar a salvar caracteres.
Aqui está uma visualização, para entender a especificação mais facilmente, com todos os nomes das notas ao lado das linhas:
HB
--- HA
HG
----- HF
HE
----- HD
HC
----- B
A
----- G
F
----- E
D
--- C
LB
--- LA
LG
--- LF
... (bottom cut off for brevity, you get the idea anyway)
Aqui estão mais alguns exemplos que você pode usar para testar seu programa:
Entrada: HG#
#O
-|---
|
-|---
-----
-----
-----
Entrada: LAb
-----
-----
-----
-----
-----
|
--|
|
bO-
Entrada: HB
O
|--
|
-|---
-----
-----
-----
-----
Entrada: C
-----
-----
-----
-----
|
---|-
|
-O-
Isso é código-golfe , então o código mais curto em bytes vencerá!
1: evar exposição mais realista! :-P
#
oub
à direita da nota e não à esquerda; é realmente o que é necessário?Respostas:
Golfscript,
211210209197195192 caracteresChegando para a vitória (a partir deste post), uma versão GolfScript da minha versão mais recente do Python :
Teste aqui (as 2 primeiras linhas são inseridas pelo usuário, normalmente vêm do stdin).
Versão 'legível':
fonte
Ruby -
271267252249234229220214 caracteresEu literalmente aprendi Ruby por isso. Portanto, certamente há espaço para melhorias no golfe. Ou fazendo qualquer coisa realmente. Mas eu precisava de uma linguagem com strings mutáveis. :)
Um pouco não-destruído:
Posso cortá-lo em mais 2 caracteres para 212 caracteres se linhas em branco iniciais forem permitidas. Esta solução não preenche as linhas que não são impressas de qualquer maneira:
O jogo justo da lambda? Então eu consigo 210 caracteres com a primeira abordagem
Ou 207 caracteres com linhas em branco adicionais:
Claro, agora você precisaria fazer
f.call("HGb")
.fonte
!x.nil?
é equivalente a!x
. E para uma linha ifs,if x;y;end;
é equivalente ay if x
. Além disso, você pode usar uma nova linha literal nessa sequência.if
que trabalhar. Se eu usar?\n
(se é isso que você quis dizer), preciso adicionar um espaço, para não ganhar nada. E remover os.nil?
s não funcionou (sempre avaliado comotrue
)..nil?
, mas vale a pena em caracteres.!x.nil?
é!!x
. :)Pitão,
329309295286280277 caracteresJogou golfe um pouco mais agora. Ainda pode ser melhorado, mas não tenho certeza se posso vencer as soluções ruby ou golfscript com essa abordagem.
Inicialmente, eu estava imprimindo linha por linha, mas acabou demorando muito, então eu gere uma grade de strings e preenche o que precisa ser preenchido. A entrada é da linha de comando, por exemplo:
fonte
GolfScript -
243232228227 caracteresTraduzi minha resposta do CoffeeScript para o GolfScript, que é muito mais adequado para as manipulações de strings.
EDIT: Salva seis caracteres usando o operador de incremento corretamente, três fazendo bom uso da pilha, mais seis redefinindo irresponsavelmente os operadores que não estou usando e mais um não imprimindo o espaço à direita após as linhas de graça.
Totalmente jogado:
Com comentários:
fonte
Go
nele. a saída seráoo|||
:)Pitão,
250245242235 caracteresUma abordagem muito diferente que acabou superando a minha outra! O código de processamento de entrada é semelhante, mas é isso.
Mapeei o valor de cada caractere com base na linha e na coluna e depois joguei a impressão:
fonte
Java -
921907863 caracteresEu construo cada string separadamente, armazenando cada string em uma matriz. Em seguida, passe pela matriz e imprima cada linha.
Oh, por favor, não me odeie, é a minha primeira vez. Não posso encontrar nenhuma pergunta / introdução, por isso espero que meu formato de postagem esteja correto. Não tenho certeza do quanto as pessoas são sérias sobre a contagem de caracteres .... versão normal do código - extra é quebra de linha / espaços (1313 caracteres):
fonte
args
).[]
, espaços ao redor parênteses, etc.Haskell 377C
Versão não destruída:
fonte
CoffeeScript alfabetizado -
497527 caracteresTenho certeza de que há uma maneira melhor de construir a grade, mas não consigo descobrir.
Um ajudante de golfe.
AC maior escala e pessoal.
Nossa função de notação terá a representação de string de uma nota.
Primeiro vamos determinar a oitava.
Então a nota e acidental. Adoro desconstruir a tarefa.
Vamos converter a nota e oitava em um índice e plotar a nota.
Agora, cortaremos apenas o número de funcionários que precisarmos.
E o caule da nota.
Agora vamos mostrar os resultados.
Por fim, exportaremos a função para teste do console. Esses caracteres não contam para o total.
fonte
C,
325304Agora 21 bytes mais curtos graças ao @ace !
Resultado:
fonte
n
e pode remover oi=0
no primeirofor
loop.if
instrução,((i%12)&11)==0
pode ser substituído por!((i%12)&11)
.?:
tem uma precedência muito menor que^
e<
, portanto, você pode remover os colchetes das condições anteriores ao?
. E você pode substituirprintf("%s",
porputs(
.JavaScript
390388Um pouco de desafio, vou ter que admitir ... Tenho certeza de que há maneiras de reduzir isso ainda mais ... Estou aberto a sugestões ...
Primeira Iteração
Segunda iteração (usando em
n.slice(-1)
vez den[n.length-1]
), raspa 2 bytesVersão não destruída:
fonte