fundo
O echo
programa é tão legal. Você pode dizer qualquer coisa, e ele repete suas palavras perfeitamente, sempre! Quão legal é isso! Desapontador, ele repete a entrada de uma só vez, independentemente da sua velocidade de digitação, o que não é muito realista. Nós vamos ter que consertar isso.
A tarefa
Seu programa deve receber sua contribuição do STDIN ou equivalente mais próximo. Ele deve ler as linhas do usuário, uma a uma, possivelmente exibindo algum prompt, até que elas entrem em uma linha vazia. Depois disso, imprimirá as linhas em STDOUT ou equivalente mais próximo, na mesma ordem em que foram dadas. A última linha (vazia) não é impressa e a última linha impressa não precisa ter uma nova linha à direita.
Além disso, o programa deve preservar os intervalos de tempo entre cada linha: se o usuário x
levar alguns segundos para inserir uma linha, levará x
alguns segundos para o programa imprimi-la. Isso se aplica também à primeira e à última linha; a linha vazia não é impressa, mas o programa espera mesmo assim antes de terminar.
Exemplo
Aqui está uma sessão de exemplo com o programa. Todas as ações que não produzem texto são descritas entre colchetes, e o prompt (opcional) é exibido como >
.
[begin program]
> fhtagn[enter; 1.48s passed since starting program]
> yum yum[enter; 3.33s passed since previous enter]
> so cool![enter; 2.24s passed since previous enter]
> [enter; 0.23s passed since previous enter]
[wait 1.48s]fhtagn
[wait 3.33s]yum yum
[wait 2.24s]so cool!
[wait 0.23s, then end program]
Sem as ações, a sessão fica assim:
> fhtagn
> yum yum
> so cool!
>
fhtagn
yum yum
so cool!
Regras e Pontuação
Os tempos de espera devem ser precisos em 0,01 segundos (na prática, se o ser humano médio não pode dizer a diferença, você está bem). A menor contagem de bytes vence e as brechas padrão não são permitidas. Se o seu idioma tiver uma função interna precisamente para esta tarefa, você não poderá usá-lo.
yum yum
, o que foi bastante complicado.Respostas:
CJam,
4541393634 bytesIsso realmente não faz sentido no intérprete on-line, é claro, mas funciona no interpretador Java.
Não exibe um prompt.
Explicação
fonte
JavaScript,
119112 bytesNa esperança de encontrar mais alguns bytes para cortar.
fonte
j=i=[]
(++
ainda funcionará!) Também, o seuwhile
não precisa!=''
, pois é falso! Tão decepcionado que eu perdimap
! +1!=''
. Estava preocupado se a entrada era0
, mas parece lidar com isso bem. Eu já havia notado a[]
possibilidade de incremento antes, mas tinha sido bobo e tentei fazerj++
isso. Fazendo++j
obras, já que[]++
é aparentemente 0 XD Obrigado!do...while
loops em JSJavaScript, 120 bytes
Sem chance de chegar perto do CJam com essa abordagem, mas com um script direto.
fonte
Pitão, 68 bytes
Desperdiçou muitos bytes na chamada para
sleep
, já que Pyth não temsleep
função.fonte
Ruby, 74
Truques:
*a
na primeira linha, inicializa uma matriz vazia. Eu poderia usar em$*
vez disso, mas é um pouco superficial, pois é preenchido com algumas invocações e só me salva um byte.$/
é uma nova linha e$_
é a última linha recuperada porgets
.Edit: Dormir no final custa mais 20 bytes, provavelmente uma maneira de jogar golfe
fonte
Time.now
o tempo suficiente usandodef n;Time.now;end
, economizando 2 bytes inteirosPython 3, 124
Funciona apenas em plataformas Windows
Manter a entrada e os horários em listas separadas me custam mais 3 bytes . Provavelmente não é a melhor abordagem.
Uma versão amigável de 129 bytes para Unix, com crédito para o Mego :
fonte
time()
vez declock()
salvar 2 bytes?SWI-Prolog, 185 bytes
Provavelmente há muito para jogar golfe aqui, mas isso servirá por enquanto ...
fonte
PowerShell,
26119012195 BytesAcessórios para TessellatngHeckler e tomkandy pela assistência e inspiração no golfe
Isso é muito semelhante em conceito à versão de 121 bytes abaixo, estamos apenas criando e construindo dinamicamente uma lista de objetos, em vez de passar por um loop while para armazená-los em uma matriz explícita
$a
. Nos dois casos, essa lista de objetos é canalizada para o mesmo loop foreach|%{...}
.($b=!$b+!$_)
Desta vez, a indexação no seletor de matriz de resultados é formulada para eliminar asif($_){$_}
iterações abaixo, o que economiza mais alguns bytes.Anterior, 121 bytes
Expandido e explicado:
Anteriormente, 190 bytes
Anterior-er-er, 261 bytes
Sagrada verbosidade, Batman! Vamos dividir:
fonte
$a=1,1;while($a[-1]-ne""){$a+=Measure-Command{$b=read-host};$a+=$b};$i=2;while($i-lt$a.length){sleep -m $a[($i++)].totalmilliseconds;$a[($i++)]}
@
dessa matriz, pois não é necessário nesse contexto, então, para 121 .$($l=1;while($l){Measure-Command{$l=read-host};$l})|%{($_,(sleep -m($_.Ticks/1e4)))[($b=!$b+!$_)]}
- e com uma mudança para a alternância, de modo que quando a corda é esvaziá-la não de alternância, e dorme em vez - 98do{...}while($l)
loop e solte$l=1;
para obter 95 ) #Perl 6, 70 caracteres
O interpretador Perl 6 define apenas três variáveis simbólicas (diferente da loucura do Perl 5). Para ser exato,
$/
,$!
, e$_
. Este programa usa todos eles, para evitar o custo de declarar variáveis usandomy
.get
lê uma linha de STDIN. Não contém uma nova linha, diferente do Perl 5.now
builtin retorna um horário atual. Quando subtraído, fornece um intervalo que pode ser passado para uma string.Um método com nada à esquerda (como
.push
e.map
neste código) funciona$_
.Usando
repeat while
loop (conhecido comodo while
em outras linguagens de programação), o Perl 6 está gravando o carimbo de data / hora atual$/
e pressiona a linha recebida (na qual ele também armazena$!
) e a diferença entre o horário atual e o carimbo de data / hora$/
. Devido à ordem dos parâmetros,now
não é calculado até que uma linha seja recebida.A
while
condição verifica se a linha não está vazia (no Perl 6,"0"
é um valor verdadeiro, diferente do Perl 5).Depois de obter todos os registros de data e hora, apenas forneço aqueles para
map
retorno de chamada, que dorme um pouco e diz o que foi dito.fonte
Groovy, 202 bytes
Radical.
Versão não destruída:
fonte
JavaScript (ES6) 102
Reunindo os esforços de Mwr247 e Dom Hastings (CW)
fonte
MATLAB,
10799E não destruído:
Isso não será 100% preciso no tempo, pois não leva em consideração o tempo gasto para exibir cada sequência, mas isso deve ser bastante rápido, portanto, em termos de tempo, deve estar bem próximo.
Após uma rápida revisão, salvei alguns bytes removendo a matriz de células profundas de camada dupla. Acontece que tudo que eu precisava era de uma
;
separação correta ao embalar.fonte
Java, usando a versão 1.04 desta biblioteca , 385 bytes
fonte
ObjectScript em cache, 123 bytes
Como sempre, isso pressupõe uma tabela de símbolos limpa antes da execução
d r
.Esse problema não pode ser resolvido no ANSI MUMPS, pois o padrão ANSI requer apenas resolução de segundo nível para o tempo intrínseco
$H[OROLOG]
. Felizmente, a Intersystems Caché, atualmente a plataforma líder do setor para MUMPS, fornece a$ZT[IME]S[TAMP]
intrínseca definida pela implementação , que fornece resolução em microssegundos.(A pontuação era anteriormente de 105 bytes, mas havia um erro.)
fonte
C ++ 11,
343338 bytesQueria ver quantos bytes um código para isso em c ++ precisaria. Muito mais do que eu esperava. Talvez eu tenha complicado demais a solução.
Vamos ver se eu posso reduzir isso de alguma forma.
fonte
#include
declaração de tipo paramain
. São 7 bytes - não muito, mas um começo. Você também pode ser capaz de usarauto
, em vez destring
paras
.c
isso não precisamos especificar. Eu tentei inicialmente usarauto s
... mas parece que ele é convertidoconst char *
e nãostd::string
. Gostaria de saber se posso criar um alias parawhile
.while
usar um#define
talvez.Bash,
9190 bytesIsso cria um arquivo temporário
t
. Ele substituirá um arquivo existente com o mesmo nome.A ideia em si é bem curta, mas lidar com caracteres especiais na entrada adiciona cerca de 15 bytes ...
fonte
VBA,
233bytesTenho certeza que isso pode ser muito praticado. eles não especificaram quantas entradas, então eu codifiquei meus comprimentos de array porque é mais curto
Redim preserve
.A entrada é via pop-up, a saída é
debug.print
porquemsgbox
produz um código MODAL e pára.Não sei como testar se isso é preciso para os 0,01s. Talvez alguém possa testar, mas eu estou dando ao comando wait o número de uma maneira que DEVE usar os milissegundos, mas o VBA não é conhecido por fazer o que deveria.
O
If goto
pode ser capaz de ser substituído por um poço de golfeDo Loop While
.fonte
SmileBASIC, 122 bytes
Eu acho que isso poderia ser feito um pouco mais curto.
fonte
C UNIX, 272 bytes
Detalhado
fonte