Programe o código mais curto que calculará o BPM médio (batimentos por minuto) usando 8 pontos de dados passados. Este é o meu primeiro post, e eu não vi uma pergunta semelhante a esta. Como sou fã de jogos de ritmo, seria bom ter uma pequena ferramenta útil para calcular o BPM usando seu próprio teclado e seu próprio senso de ritmo (se você tiver um ...)
Desafio
- Todas as entradas devem ser singulares. (ou seja, apenas pressionando "enter" como "input")
- Seu programa deve receber pelo menos 9 entradas. (Para criar 8 pontos de dados passados.)
- Seu programa deve gerar o BPM das teclas pressionadas, arredondadas em 2 casas decimais. (ie 178,35)
- O tempo começa na primeira entrada. Não iniciar do programa
Isso é código-golfe , então a resposta mais curta vence.
Exemplo de entrada e saída
Forneça pelo menos um exemplo de entrada e saída. Verifique se eles correspondem à sua própria descrição de como deve ser a entrada.
Entrada:
> [Enter-Key]
# User waits 1 second
... 7 more inputs
> [Enter-Key]
Saída:
> 60
O vencedor atual é KarlKastor em 22 Bytes usando Pyth
Mesmo que o vencedor estivesse usando Pyth, a resposta do Matlab foi notável.
Respostas:
Pitão , 22 bytes
(sim, existe um espaço de liderança)
A entrada é pressionada 'enter'.
Se saída adicional for permitida, posso remover os espaços e obter uma pontuação de 20 bytes.
explicação
fonte
MATLAB / Oitava,
58 5655 bytesObrigado @LuisMendo por -1 byte!
Você deve pressionar enter 9 vezes. (Também funciona na oitava.)
Aqui você vê em ação, à esquerda do MATLAB, à direita do Octave:
fonte
round(.,2)
não funciona ou nas versões mais recentes?JavaScript (ES6),
7774 bytesCria um
onclick
evento nowindow
objeto global . Envie batidas clicando em qualquer lugar da janela.Snippet de teste
Mostrar snippet de código
fonte
Python 3,
939281 bytesEconomizou 11 bytes graças a Felipe .
fonte
print('%.2f'%(480/(b-a)))
eprint(f'{480/(b-a):.2f}')
(python3.6 +), mas ambos têm o mesmo bytecountBash + utilitários comuns do Linux, 58
fonte
Javascript,
100,84graças a Powelles , 82 bytes graças a Justin MarinerMostrar snippet de código
fonte
Date.now()
vez denew Date().getTime()
e em48e4
vez de480000
.(a=alert)()
para o seu primeiro uso e depois o usoa()
.48e4
, e instanciar e chamaralert
juntos:(a=alert)()
.s
para usarDate.now()
e largar.getTime()
mais tarde. E então você pode aliasDate.now
para um nome mais curto. E a inicialz=
não é necessária, pois você não está chamando a função recursivamente. Abaixo até 69 bytes aquiJava 1.5+,
345339361337 bytes-34 bytes graças a Michael por apontar que esqueci de corrigir minhas importações
Escuta o usuário enquanto pressiona a barra de espaço. Em seguida, quando o usuário pressionar 9 vezes, imprime novamente para o usuário o BPM atual:
A imagem possui mensagens de depuração não presentes no código golfado.
Ungolfed:
Meio divertido de tentar obter um recorde ...
fonte
String[]a) {new java
2027.03
BPM xD ligeiramente modificado o código para algum melhor aferiçãoC # (.NET Core),
193206189186155143137 bytes-47 bytes graças a TheLethalCoder
-4 bytes graças a Nazar554
-16 bytes graças a Luc
-2 bytes graças a Kamil Drakari
Também adicionado à contagem de bytes:
Programa completo:
fonte
+""
retornando o dobro seria bom.namespace System.Diagnostics{}
provavelmente é mais curto, mas você só usaDiagnostics
naw
qualificação tão completa que provavelmente também é mais curta. Observe que você deve incluirusing System;
na sua contagem de bytes para aConsole
chamada.540000.0
por5.4e5
(end-start).Milliseconds
e definirend
estart
fazerDateTime.Now
.8/TimeSpan.TotalMinutes
vez de54e4/TimeSpan.TotalMilliseconds
. Além disso, por uma verificação rápida usando 'Math.Round (valor, 2)' em vez devalue.ToString("n2")
parecia economizar alguns personagens, parcialmente porque precisava de menos parêntesesC ++, 150 bytes
fonte
#define
e, em vez disso, fazervoid f(){for(int i=0,auto s=clock();i++<9;){getchar();}std::cout<<round(6000/(double(clock()-s)/8000))/100;}
#define G;getchar()
e depois mudarclock();G
paraclock()G
?round
.Python + xingamentos, 122 bytes
Requer que o
curses
módulo seja carregado.-9 bytes graças a Felipe Nardi Batista
fonte
vba, 57
pressione enter ou clique em OK na caixa de mensagem.
fonte
Python 3 , 74 bytes
Experimente online!
Isso fornecerá números tolos no TIO, pois ele executa todas as entradas de uma só vez, mas funciona.
timeit()
retorna o tempo de execução da instrução'input()'
em segundos, excluindo o parâmetro setupinput()
. TIO com um atraso de 1s por entrada para validação.fonte
Java 8,
180135 bytes-45 bytes graças a @SocraticPhoenix que sugere usar
System.in
diretamente.Uma função lambda anônima com um argumento não utilizado que deve ser atribuído a um método de interface funcional que gera um
Exception
(exemplo abaixo). Lê do console; as batidas são enviadas pressionando enter.Ungolfed w / Surrounding Test Code
fonte
System.in
?System.in.read()
para bloquear até que a entrada seja recebida. Obrigado! Atualizará a resposta.C #, 117 bytes
Já existe uma resposta em C # (.NET Core) em que este se baseia. Adicionada string interpolada (que o .NET Core parece não ter) para saída e raspou alguns bytes usando uma matriz longa em vez de DateTime.
Versão humana
fonte
R,
7984 bytesFunciona apenas ao usar enter, pois isso terminará a verificação imediatamente. Usa explicitamente
print
odigits
argumento, manipulando o arredondamento.fonte
Ruby, 58 bytes
fonte