Este é o meu primeiro concurso de golfe.
O que você precisa fazer
Construa-me, no menor número de bytes possível, meu sistema de controle remoto CA. Meu quarto está muito frio agora e sinto falta do meu controle remoto.
Agora, eu não quero que você literalmente a construa ou algo assim, apenas jogue o seguinte:
Um incremento lento de temperatura, começando em 40 graus e terminando em exatamente 72. O tempo de incremento deve sempre ser 500 milis por incremento. Pode esperar mais 500ms no final. Eu preferiria parar no entanto. O incremento em si deve subir duas vezes a cada vez, como meu controle remoto.
Você não deve limpar a tela. Você deve ter novas linhas.
O que deveria acontecer
Exemplo de saída (tudo entre parênteses não deve ser gerado).
40
(wait 500 millis)
42
(wait 500 millis)
44
(..repeat until 72..)
72
(stop or wait 500ms)
Lembre-se de que este é meu primeiro golfe, então peço desculpas se isso é muito difícil de jogar. :(
Boa sorte, golfistas!
Respostas:
Utilitários Bash + Linux, 19
seq
gera a saída numérica.pv
limita-o a 2 linhas / s.fonte
-q
suprime vai para STDERR, então não acho que você precise.Minecraft 1.9.0+,
204162 bytes +5836282420 blocos =262240232186182 blytesEsta solução é eficiente e não pode ser vista inteira em uma ou até duas capturas de tela. Usa duas falhas e abusa de outras duas características do jogo
Esta solução utiliza os mesmos princípios que o abaixo, apenas um design mais compacto em 4 blocos.
Abusa do fato de que os blocos de comando em cadeia (blocos verdes) não podem ser alimentados por redstone, apenas por um sinal de um bloco de comando por impulso (laranja).
Abusa o fato de os pistões levarem 0,30 segundos para se estender completamente, e o redstone precisa de apenas 0,10s para registrar um sinal.
Também abusa de uma falha dupla para desativar o timer (TNT): o redstone próximo ao timer (TNT) fica não apenas energizado, mas também acha que o TNT é outro redstone e o aciona.
Além de todos esses abusos, o encurtador de sinal (que fica sob o TNT) é de uso único, depois de ser energizado, muda de forma, permitindo passar o sinal através dele para o "incrementador" (bloco laranja mais alto)
Um pouco de explicação sobre a funcionalidade de suas diferentes partes pode ser vista em soluções mais antigas (mas melhor na que está logo abaixo). Você também pode experimentar offline! (solução simplificada incrementada por 4, funciona apenas em 1.11+) executando este comando em um bloco de comandos .
Solução antiga, Minecraft 1.9.0+, 186 blytes:
Como o TNT normalmente explode após o 3.0s no Minecraft, este deve ser colocado por um comando (
/setblock
) com um fusível especificado. Também usa um design mais compacto para remover o bloco de comando redundante (contendo 42 bytes) e o redstone nas versões mais antigas. Tenho certeza que isso não pode ficar mais baixo ...Solução mais antiga, Minecraft 1.9.0+, 232 blytes:
Ops, eu descobri que essas soluções mais antigas aumentam 4 vezes ...
Usa o recurso de cadeia de bloco de comando 1.9 (coisa de bloco verde) para salvar blocos. Também usa um encurtador de sinal mais compacto do que nas soluções mais antigas
Solução ainda mais antiga, Minecraft 1.7.0+, 240 blytes:
Usa um timer mais compacto (TNT) do que a primeira solução (abaixo).
Solução mais antiga, Minecraft 1.7.0+, 262 blytes:
Isso é muito longo devido à maneira como o Minecraft lida com variáveis:
Para definir uma variável (int):
scoreboard objectives add <variable> dummy
Para definir um valor para uma variável (cada entidade, incluindo jogadores, tem seu próprio valor variável):
scoreboard players set <entity> <variable> <value>
*
pode ser usado<entity>
para selecionar todas as entidades e salvar bytes.somente variáveis definidas podem ser usadas
o valor da variável deve ser definido como um número, não uma variável
Para incrementar var1 por var2:
scoreboard players operation <entity> var1 += <entity> var2
<entity>
deve ser uma entidade única, por exemplo.@p
, não*
As capturas de tela são minhas, com licença dupla sob WTFPL e qual licença a SE decide usar hoje (atualmente
cc by-sa 3.0 with attribution required
) :-)fonte
Vim,
24, 23 bytes / pressionamentos de teclaUm byte economizado graças a @Kritixi Lithos!
Escrito no meu telefone, testado no mobile vim (que aparentemente é uma coisa real).
Aqui está um gif dele em execução:
E aqui está uma explicação de comando por comando:
fonte
s
noms
é opcional, você pode removê-lo para salvar um byte :)JavaScript (ES6), 52 bytes
fonte
f=(i=40)=>setTimeout(i>70||f,500,i+2,console.log(i))
. Infelizmente, ainda os mesmos 52 bytes.50
bytes, pois você não precisa contar comf=
base no meta consenso de que declarações de funções anônimas são permitidas?f=
é necessário porque a função precisa se chamar (como o primeiro parâmetro parasetTimeout
).Geléia ,
1312 bytesExperimente online! O programa Jelly é agrupado em um script Bash para prefixar cada linha de saída por um carimbo de data / hora.
Como funciona
Após a última iteração, o valor final de 72 é impresso implicitamente e o programa é encerrado.
fonte
Perl 6 , 30 bytes
Lamento que pareça um código sem golfe, não vejo uma maneira de reduzi-lo ...
A versão que para logo após o último número seria 37 bytes:
fonte
36
?.say&sleep(.5) for 40,42...72
29 bytes{
colchete após outra expressão sem espaço em branco é interpretado como o início de um subscrito de hash ("matriz associativa"). O Perl 6 é rigoroso assim, porque sua gramática foi projetada deliberadamente para permitir a análise de uma passagem do código-fonte sem (quase) nenhum retorno.Pitão - 12 bytes
Muito simples, usa um loop for de 0 a 17.
fonte
TI-Basic (somente CE ou CSE), 16 bytes
Observe que muitos comandos são tokens de byte único.
fonte
For(
,Pause
,End
, E os dois pontos no início de todos os bytes são linhas únicas.MATL , 14 bytes
Experimente no MATL Online! Pode ser necessário recarregar a página se ela não funcionar inicialmente.
Explicação
Versão antiga (antes da alteração das especificações), limpando a tela
Experimente no MATL Online!
fonte
Dyalog APL , 20 bytes
{
a função anônima⎕DL
demora....5⊣
meio (um segundo) ao invés do valor de⎕←
imprimir (com nova linha)⍵
o argumento}¨
aplicado a cada um38+
trinta e oito mais2×
duas vezes⍳17
os números inteiros de 1 a 17fonte
C compilado com o Clang 3.8.1 no Linux,
625958 bytes2 bytes salvos graças a @ranisalt
59 bytes
62 bytes
fonte
** ... **
na marcação, enquanto o cabeçalho tradicional neste site usa# ...
. Eu editei sua resposta para que você possa ver como isso é feito.s<72
salva outro byte.Arranhão, 5 blocos
(espaço em disco 56.0kb)
(desculpe pela baixa resolução!)
Auto-explicativo, realmente. O valor da variável é exibido em uma caixa no "palco".
fonte
Mathematica, 34 bytes
Programa completo. Não leva nenhuma entrada e saída para STDOUT.
fonte
R, 49 bytes
Solução muito trivial, mas funciona.
fonte
for
loop é exatamente o mesmo comprimento.Perl 6 , 27 bytes
say
retornaTrue
, que é coagido a um numérico1
quando dividido por2
.As travessuras Unicode podem reduzi-lo a 23 caracteres:
Mas são 29 bytes codificados em UTF-8.
fonte
Python 2,
57 5655 bytesEDITAR:
-1 Byte graças ao Mega Man
-1 Byte graças ao Flp.Tkc
fonte
Ruby, 33 bytes
fonte
C #, 95 bytes
É um loop simples, aguarda 500ms extras no final.
fonte
QBIC , 21 bytes
O QBIC inicia um loop FOR, executando de 44 a 72 e incrementando o contador em 4 em cada loop. Em seguida, dorme por 1 segundo. O QBasic não possui um controle mais sofisticado
sleep
, então adicionei um.
para simular doações.5
como argumento.fonte
Kotlin, 47 bytes
Eu acho que não foi dito na declaração do problema que as soluções devem realmente conter um incremento de dois, então o
40+2*i
é legal aqui.Se escrito como uma fonte normal do Kotlin com
main
:(77 bytes)
UPD : No Kotlin 1.3,
args:Array<String>
pode ser removido, por isso é 18 bytes a menos.E no Kotlin Script, todo o programa seria
(47 bytes)
fonte
Ruby 31 bytes
Experimente online!
fonte
Haskell, 67 bytes
Se você quiser usar apenas o ghc, poderá salvar alguns bytes importando
GHC.Conc
e usando emthreadDelay
vez deusleep
.fonte
php, 38 bytes
usa sublinhado como delimitador. Corra com
-nr
.fonte
Clojure, 54 bytes
Terceiro lisp ftw. Apenas itera no intervalo, imprimindo e adormecendo cada iteração. Dorme no final.
Ungolfed:
Uma versão que não dorme no final, 66 bytes
Observe que esses são programas completos, pois as instruções não especificam. Adicione um byte a cada um, se uma função for necessária.
fonte
Raquete 46 bytes
Ungolfed:
Comando para executar:
(f)
fonte
Oitava,
3835 bytesSalvo 3 bytes graças a @LuisMendo, alterando
endfor
paraend
Experimente online!
Eu sou novo no Octave, portanto essa solução ainda pode ser ainda mais prejudicada. Todas as dicas são bem-vindas!
Ungolfed
fonte
Python 2,
5758 bytesEditar
Contado como 57 bytes, mas o TIO diz 58 agora que estou de volta à minha máquina, então essa é minha oferta final. Curiosamente, o TIO parece não respeitar o tempo limite, apenas espera e depois imprime a lista inteira de uma só vez. Funciona no QPython para Android e Python 2 na minha caixa do Ubuntu, o que é bom o suficiente para mim.
Experimente online!
Seria
5859 em Python 3, por isso não bate @ sonrad10 de qualquer maneira.fonte
range(...)
R,
44bytes 42For-loop simples, provavelmente existe uma maneira de jogar golfe. (Além disso, 44 riscado ainda é regular 44 ...)
fonte
F #, 60 bytes
async{for i in 40..2..72 do printfn"%d"i;do!Async.Sleep 500}
Esta é uma expressão assíncrona, para executá-la e transmiti-la para
Async.Start
ouAsync.RunSynchronously
.fonte
Noodel , 10 bytes não- concorrentes
Não é possível competir porque Noodel nasceu depois que o desafio foi criado :(
Tente:)
Como funciona
Não existe uma versão do Noodel que suporte a sintaxe usada nesta resposta. Aqui está uma versão correta:
fonte