O desafio
O código mais curto por contagem de caracteres para produzir uma parte de um teclado de piano a partir de uma nota de entrada em um determinado comprimento.
A entrada será composta de uma nota ( [ACDFG]#|[A-G]
) para começar a imprimir o teclado e um número positivo representando o comprimento das teclas a serem impressas, incluindo a primeira nota.
A primeira chave deve ser impressa por extenso - se tiver uma chave sustenido à esquerda, será cortada, o mesmo para quando a chave de início for sustenido, a chave esquerda também será cortada.
Uma tecla Sharp não é contada, apenas teclas brancas.
Casos de teste
Input
C 14
Output
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
Input
D# 1
Output
### |
### |
### |
### |
### |
| |
| |
| |
_|____|
Input
A 7
Output
## ### | ### ### | ### ##
## ### | ### ### | ### ##
## ### | ### ### | ### ##
## ### | ### ### | ### ##
## ### | ### ### | ### ##
| | | | | | | |
| | | | | | | |
| | | | | | | |
|____|____|____|____|____|____|____|
A contagem de códigos inclui entrada / saída (ou seja, programa completo).
language-agnostic
code-golf
rosetta-stone
LiraNuna
fonte
fonte
[A-G]#*
? Isso significa que precisamos lidar, digamos,B#####
comoE
?Respostas:
GolfScript - 80 caracteres
Cabe em uma linha de #SO sem a barra de rolagem :)
GolfScript - 81 caracteres
Versão bem formatada (27 x 3)
GolfScript - 82 caracteres
GolfScript - 85 caracteres
Versão bem formatada (17 x 5)
GolfScript - 94 caracteres
GolfScript - 98 caracteres
GolfScript - 101 caracteres
GolfScript - 109 caracteres
GolfScript - 120 caracteres
GolfScript - 127 caracteres
fonte
Perl, 133 (129) caracteres
Perl,
167160156147142133D'oh!147144137134133 charsAqui está uma solução de 129 caracteres, pegando emprestadas várias idéias da solução Ruby da molf:
e com a ajuda do Acme :: AsciiArtinator :
fonte
Ruby - 125 caracteres
146144140137134126125 chars(A segunda nova linha não é necessária e adicionada apenas para evitar uma barra de rolagem no SO. Os pontos e vírgulas podem ser substituídos por novas linhas, se desejado.)
A versão do Ruby 1.9 é diferente, mas de igual comprimento (substituindo
a[0]
pora.ord
e"_"
por?_
):Ligue com
fonte
i%7%4<1||t>4?"_|___":"###__"
parai%7%4&&t<5?"###__":"_|___"
e salve 2 caracteres. Eu amo esse%7%4
idiomaLilyPond, 285
288291310315330333340350caracteresDe acordo com o tema musical, aqui está uma solução em uma linguagem projetada para composição de partituras musicais, LilyPond:
Uso:
$ lilypond thisfile.ly <input.in >output.out 2>/dev/null
fonte
RetroGolf - Applesoft BASIC: 236
239245249257245267285Mostrado em várias linhas para facilitar a leitura, mas deve ser uma única linha:
Pode ser testado com este Interpretador BASIC da Applesoft em Javascript ou um emulador .
Piano http://img685.imageshack.us/img685/3407/piano2.png
fonte
C # - 315
Eu insisto no golfe em C # embora não seja uma linguagem muito concisa ...
fonte
Python - 164
fonte
t
eu
e multiplicando por 7?Octave, 153
154155158159162172180186185188197199200206207209212214215219240244268caracteresPor que usar apenas C ou C # ou F # (ou B ou D) quando você pode programar com um oitavo completo?
(agrupado a cada 60 caracteres para maior clareza)
Sim ... esta solução realmente calcula a transposta conjugada complexa de uma string.
Uso:
$ octave -q thisfile.m <input.in >output.out
fonte
C - 197
203207216224232240personagensEsta versão equivalente de 194 caracteres assume que o estouro de buffer está correto.
fonte
for(j=0; j<=l*5+h; j++)
<- espaços inúteis, e você parece tê-los incluído na contagem de caracteres tambémPostScript: 239
245293312(normal); 219224225231(ASCII85)Versão binária expandida por meio da codificação ASCII85 em um programa de 219 caracteres com apenas caracteres ASCII imprimíveis:
Uso:
$ gs -q -dNOPROMPT -dNODISPLAY -dBATCH thisfile.ps <input.in >output.out
fonte
F #: 224
225, 226, 248, 252, 270, 276, 299, 306CaracteresUsei módulos de 2 para detectar um espaço ou libra. '' é 32% 2 = 0 '#' é 35% 2 = 1 e como minha condicional retornou zeros para falso, eu apenas multipliquei o resultado dos módulos.
Usou o <| operador para raspar um caractere de espaço. Sobrecarga de operador usado para salvar outro char.
original
fonte
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 com até 99 teclas. O piano padrão tem 52 teclas brancas, então isso deve ser suficiente.
Exemplos:
O último exemplo imprime o teclado padrão, junto com teclas pretas imaginárias em cada extremidade.
fonte
PianoScript - 2 caracteres
É uma linha simples:
Uso:
Resultado:
Mais informações sobre a linguagem PianoScript podem ser encontradas aqui .
fonte
JavaScript - 195 caracteres
Ei, o golfe é um jogo onde você só compete contra você mesmo, certo? :)
Solução por gnarf; portado para Rhino (com uma pequena correção e alterações de formatação) por KirarinSnow; ainda mais lascado por gnarf; erro corrigido por KirarinSnow. esconderijo
k[1]
por cwallenpooleUso:
$ cp input.in 0; rhino thisfile.js
Versão de demonstração HTML rápida: Teste de golfe - Adiciona
readFile=prompt;print=function(a) {document.write("<pre>"+a);}
fonte
s=s[b](1-q,p=s.length-3)
Python3 - 158
Economizar em
input
vsraw_input
. Perde()
paraprint
fonte
F #: 355 caracteres significativos
Tudo em uma linha:
Expandido:
fonte
gets
ou equivalente, economizaríamos 22 caracteres!SETL
165 caracteres; Tradução da solução Gribblers Python.
fonte
D2 (modelos): 331
370400+ 17 caracteres(com base na solução Ruby.)
Comprimido:
Explicado:
Como não podemos passar parâmetros da
dmd
entrada, isso deve ser feito no código. Suporta apenas até 99 chaves.fonte
Haskell:
212211208 caracteresEle ainda assume letras compatíveis com ASCII (especificamente, a sequência "@ABCDEFG"), mas não requer mais Char.ord
fonte
Ruby - 113 caracteres
É executado com argumentos de linha de comando
Ruby - 118 caracteres
fonte
PHP - 208 caracteres
Deve ser melhorado.
A entrada deve ser entregue na constante chamada PIANO.
fonte
F #
414386372 caracteres significativos:Ah, e um bônus, este script vai realmente lidar com "F # 372" corretamente - não vou incomodá-lo colando-o aqui ...
System.Console.ReadLine () é uma chatice ...
fonte