Atualmente, no meu trabalho, nos mudamos para um novo prédio. Deveria ser o estado da arte e ter luzes automáticas, persianas automáticas e agora é conhecido como o edifício mais ecológico da cidade.
No entanto, ele realmente não funciona tão bem. Às vezes, as persianas de enrolar se fecham em dias nublados e nasce quando o sol começa a brilhar, e as luzes às vezes causam efeitos de discoteca alternando a ativação e desativação a cada 5-10 minutos. Além disso, não temos nenhuma maneira manual de controlar essas persianas, nem a temperatura, mas temos um controle remoto para as luzes.
Esses controles remotos, no entanto, vieram sem manual de instruções e contêm pouco mais de 20 botões, fazendo todo tipo de coisa, exceto o que você parece querer.
PS: Eu escrevi esse desafio há 1,5 meses na Sandbox. Atualmente, nós meio que sabemos como os controles remotos funcionam.
Uma grande vantagem desse prédio é 30 graus Celsius fora, mas por dentro ele permanece sempre com a mesma temperatura ambiente 21.
Então essa foi a introdução e o controle remoto das luzes inspirou esse desafio.
Desafio:
Digamos que inicialmente tenhamos uma lâmpada desligada:
L
Em seguida, pressionamos todos os tipos de botões e emitimos o estado da lâmpada posteriormente.
Utilizamos os seguintes números para as diferentes funções do controle remoto da lâmpada. Quando um símbolo de menos está na frente desse número, fazemos o oposto.
1
= ON;-1
= OFF.2
= Aumenta a força em 25%;-2
= Diminuir a força (fraca) em 25%.3
= Aumentar spread em 50%;-3
= Diminuir o spread em 50%.4
= Alternando o tipo de luz.
Então, tudo isso é bastante vago, então vamos aprofundar um pouco o que cada coisa significa:
Portanto, -1
(OFF) é bastante óbvio e 1
irá para o estado ON inicial (50% para 2
e 50% para 3
):
//
//
L ====
\\
\\
2
e -2
é a distância que a luz viaja ( ==
é anexada a cada 25%):
0% (equal to a light bulb that is OFF)
L
25%
L ==
50%
L ====
75%
L ======
100%
L ========
3
e -3
é a que distância a luz se espalha:
0%:
L ====
50%:
//
//
L ====
\\
\\
100%:
|| //
||//
L ====
||\\
|| \\
(OBSERVAÇÃO: quando 2
e 3
ambos estiverem em 100%, você terá este estado:
|| //
|| //
|| //
||//
L ========
||\\
|| \\
|| \\
|| \\
4
é alternar o tipo de luz.
Default:
//
L ==
\\
After toggling (note the single space before '/' instead of two):
/
L --
\
Entrada:
Você receberá uma entrada contendo os possíveis pressionamentos de botão. Por exemplo:
12-34
Resultado:
O estado da lâmpada de luz depois que todos os botões da entrada são pressionados subseqüentemente. Portanto, com a entrada de exemplo acima, temos a seguinte saída:
L ------
Regras do desafio:
- A entrada contém apenas
1234-
(e nunca um-
antes do4
). - Você nunca pode ficar abaixo de 0% ou acima de 100%. Se um número aumentar / diminuir além desses limites, você poderá ignorá-lo.
- Quando a lâmpada está desligada, você pode ignorar qualquer ação e, quando ligada novamente, ela volta ao estado ON inicial (50% para ambos
2
e3
, e o padrão4
). Por exemplo:12-1-341
apenas imprimirá o estado ON inicial mencionado acima. (DICA: você pode ignorar tudo antes da final1
da entrada - excluindo-1
.) - Os espaços à direita iguais ao comprimento da luz ou uma única nova linha à direita são desinibidos. Adicionar novas linhas desnecessárias extras não é, no entanto.
- Você pode receber a entrada como uma lista de números inteiros, em vez de uma única sequência. Então, em vez de
12-34
, você pode ter[1,2,-3,4]
como entrada.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados, programas completos. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste:
12-34
L ------
12-1-341
//
//
L ====
\\
\\
14-3224333-2
|| //
|| //
||//
L ======
||\\
|| \\
|| \\
142-1-314-3-322
L --------
1324-2-3
/
/
L ----
\
\
134
| /
|/
L ----
|\
| \
1-2-2-214-3-3-3
L ----
134
?4
). Obrigado por perguntar.1
pressionada, os parâmetros são redefinidos?Respostas:
Python 2, 221 bytes
Isso acabou sendo mais longo do que eu esperava. A primeira linha calcula o estado da lâmpada, o restante implementa a impressão.
A entrada é fornecida via STDIN no formulário de matriz.
Veja os casos de teste no ideone
fonte
R,
323320 bytesUngolfed:
lê uma linha de entrada (números inteiros separados por espaços)
inicializa as variáveis a (on-ness), b (brilho), c (largura), d (tipo de feixe).
d
é zero ou dois, o que significa que podemos chamar se (d) mais tarde, em vez de se (d> 1) ou semelhante, e salvar alguns bytes.Uma maneira de escrever golfe-y, em
while(length(z))
que z é um vetor inteiro.O restante da primeira linha lida com a entrada por meio de uma
switch
instrução A segunda linha é impressa.É possível que alguns deles
<-
possam ser substituídos por=
, mas acho que você é comido vivo pelo escopo lexical ...Observe também que em R, as barras invertidas precisam ser escapadas.
c*(c>0)
é uma maneira de escrevermax(c,0)
que salva um personagem.Se a luz não estiver acesa, uma vez
*
que a precedência é inferior a:
, ofor(i in a*b:-b)
loop apenas repete0:0
.Atualizar; economizou 3 bytes substituindo o loop na primeira linha por um para (em vez de enquanto). Observe que
1:sum(1|z)
há menos caracteres que1:length(z)
ouseq_along(z)
.seq(z)
funcionaria na maioria dos casos, mas não quandoz
tiver comprimento um. A solução apresentada não funcionará para entrada de comprimento zero, mas espero que esteja fora do escopo da competição.fonte
Kotlin , 445 bytes
Meu primeiro golfe Kotlin, 38 bytes a menos que Java :)
Com espaço em branco e testes:
Curiosamente, em vez de definir a função normalmente e /
print
oureturn
a string criada, era mais curto usar a atribuição de funções (afun f() =
de um lambda avaliado. (Essa descrição faz sentido?)Eu só queria que o SE tivesse destaque apropriado da sintaxe de Kotlin
fonte
Java 8,
484483452446440 bytesFinalmente .. Ok, meu próprio desafio é um pouco mais difícil do que eu esperava ..; P
Sem dúvida, isso pode ser jogado de golfe usando uma abordagem completamente diferente. Agora, primeiro determino o que fazer e, em seguida, imprimo-o. A impressão é realmente o mais difícil desse desafio, imho.
-6 bytes graças a @ceilingcat .
Explicação:
Experimente aqui.
fonte
Lote, 552 bytes
Nota:
set v=
contém um espaço à direita eset s=
três. Isso foi realmente estranho, como você não pode imprimir facilmente um número variável de|
s no Lote, então você precisa usar um espaço reservado e substituí-lo na instrução echo.fonte
05AB1E , 106 bytes
Insira como uma lista de números inteiros.
Experimente online ou verifique todos os casos de teste .
Explicação:
Agora temos a string:
Então vamos:
Consulte esta minha dica 05AB1E (seções Como compactar números inteiros grandes? E Como compactar listas de números inteiros? ) Para entender por que
•Wθ¨S9ƒTª»þúÙ•6в
é[5,3,2,2,2,2,2,2,2,2,4,1,1,0,0,4,1,1,3,0,0,4,1,1,3,3,0,0,4,1,1,3,3,3,0,0]
; eŽ8Ã
é2234
.fonte