Entrada
Você recebe um mapa 2D com bolas e chão nele. Se parece com isso:
1 5 2
3
4
__________________________
Cada número é uma bola e o _
nível do solo. O _
caractere sublinhado não é permitido em nenhuma outra linha que não seja a linha do nível do solo. Só são 0-9
permitidos espaços, novas linhas e dígitos acima do nível do solo. Você não pode assumir que a última linha é o nível do solo - linhas vazias abaixo do nível do solo são permitidas. Você também pode adicionar espaços, para preencher linhas vazias, se isso ajudar.
As bolas podem ter números de 0
até 9
, podem ser colocadas uma acima da outra, mas não embaixo da terra. Os números da bola serão únicos.
Suponha que cada personagem tenha um metro .
Obter mapa da pastebin!
O caso de teste 1 - deve produzir algo como este
Caso de teste 2 - deve produzir os mesmos resultados que o primeiro mapa
Desafio
Seu desafio é ler um mapa como esse de um arquivo ou de stdin
- você tem permissão para usar cat balls.txt | ./yourexecutable
- e a velocidade de saída de cada bola quando ela atingir o chão.
Aqui está a fórmula para a velocidade:
Suponha que h
seja a diferença do número da linha entre o número da linha do solo e o número da linha da bola e que g
seja igual 10m/s^2
.
Resultado
Você deve imprimir cada número e velocidade de bolas m/s
no nível do solo. Por exemplo N - Vm/s
, onde N
é o número da bola e V
sua velocidade. Você também pode gerar uma matriz, se desejar.
Feliz codificação! :)
Respostas:
MATL ,
31302725 bytesInput é uma matriz de caracteres 2D com
;
como separador de linhas:Experimente online! Ou inclua uma inicial
t
no código para exibir o mapa para maior clareza.Aqui estão os outros casos de teste: primeiro , segundo .
Explicação
fonte
C,
125122121 bytesCompile e execute com
gcc -w golf.c -lm && cat balls.txt | ./a.out
.fonte
0 ... 9
ocorre no arquivo de texto. De qualquer forma, +1, porque não apontar isto é minha culpa_
. No entanto, isso pode ser corrigido com um byte extra (em!=
vez de<
).C -
194 (-5)150137 bytesCom um pouco mais de tempo e pensamento, consegui 44 bytes.
Graças ao orlp por me ajudar a economizar 13 bytes
Vou começar com o meu código C:
E versão legível por humanos:
Compile e execute assim:
gcc -o balls ballsgolf.c -lm && cat 1.txt | ./balls
Resultado
fonte
~(c=getchar())
vez de(c=getchar())!=EOF
.if (x != -1)
é o mesmo queif (~x)
(nas máquinas de complemento de dois) porque~-1
é (exclusivamente)0
. Em C, o golfe nunca é usadowhile(cond)
, poisfor(;cond;)
é tão longo e oferece mais oportunidades para o golfe. No seu exemplo, isso pode se tornarfor(;~(c=getchar());n=c==95?l:n)b[c]=(l+=c==10);
.l=1
pode ser contornado criandol
o primeiro argumento paramain
, pois o tempo de execução C passa o número de argumentos para main como seu primeiro argumento (argc
) e, quando você chama um programa sem nenhum argumento de linha de comando (./a.out
), entãoargc = l = 1
.n=0;
é desnecessário, pois números inteiros globais são inicializados automaticamente como 0. Então, isson;
será suficiente.Pyth,
27262524 bytesExperimente online!
fonte
Matlab,
100968990 bytesMuitos bytes salvos graças a Luis Mendo
Formato de entrada:
Explicação:
fonte
Python 3, 84 bytes
Versão 6, 84 bytes: (Obrigado à Leaky Nun!)
Versão 5, 91 bytes:
Versão 4, 92 bytes:
Versão 3, 99 bytes:
Versão 2, 102 bytes:
As versões acima usam uma matriz de seqüências de caracteres como entrada.
Versão 1, 140 bytes:
Isso leva o diretório do arquivo como entrada do usuário.
fonte
1 for l in i
->1for l in i
(n-1)*20
->~-n*20
print
chamada?e
, porque o tokenizador Python tentará analisá-lo como notação científica de ponto flutuante (por exemplo1e5
). Exemplo que não:f = lambda n:-1if n<0else 1
. Um exemplo que falha na versão do Python é0or 1
porque o tokenizer pensa que0o
inicia um número octal.Python 3, 84 bytes
Uma função anônima que aceita entrada por argumento como uma sequência de linhas múltiplas com todas as linhas vazias preenchidas com espaços e retorna uma matriz em que cada elemento está no formato [número da bola, velocidade].
Como funciona
Experimente no Ideone
fonte
f = MyAnswer
e ligar usandof(x)
. Existe um consenso de que não há necessidade de nomear lambdas . Bom desafio, a propósito!JavaScript (ES6) 93
Editar 2 bytes salvos thx @Jacajack
Uma função com uma sequência multilinha como parâmetro de entrada. A saída não é classificada (pois isso não é solicitado)
Teste
fonte
sqrt(x)
seria mais curto do quepow(x,.5)
?