Actualmente en mi trabajo nos mudamos a un nuevo edificio. Se supone que es lo último en tecnología y tiene luces automáticas, persianas enrollables automáticas, y ahora es conocido como el edificio más ecológico de esta ciudad.
Sin embargo, en realidad no funciona tan bien. Las persianas enrollables a veces bajan en días nublados y se levantan cuando el sol comienza a brillar, y las luces a veces causan efectos de discoteca alternando el encendido y apagado cada 5-10 minutos. Además, no tenemos ninguna forma manual de controlar estas persianas enrollables, ni la temperatura, PERO tenemos un control remoto para las luces.
Sin embargo, estos controles remotos vienen sin manual de instrucciones y contienen poco más de 20 botones que hacen todo tipo de cosas excepto lo que parece querer ...
PD: escribí este desafío hace 1,5 meses en el Sandbox. Actualmente, de alguna manera, sabemos cómo funcionan los controles remotos.
Una gran ventaja de este edificio es que es más de 30 grados centígrados afuera, pero en el interior se mantiene la misma temperatura ambiente de 21 en todo momento.
Entonces, esa fue la introducción, y el control remoto de las luces inspiró este desafío.
Desafío:
Digamos que inicialmente tenemos una lámpara apagada:
L
Luego presionamos todo tipo de botones y luego emitimos el estado de la lámpara.
Utilizamos los siguientes números para las diferentes funciones del control remoto de la lámpara. Cuando un símbolo menos está delante de ese número, hacemos lo contrario.
1
= ENCENDIDO;-1
= APAGADO2
= Aumenta la fuerza en un 25%;-2
= Disminuir (atenuar) la fuerza en un 25%.3
= Incrementar el spread en un 50%;-3
= Disminuir el spread en un 50%.4
= Alternar el tipo de luz.
Entonces, todo esto es bastante vago, así que vamos a profundizar un poco más lo que significa cada cosa:
Entonces, -1
(APAGADO) es bastante obvio, y 1
pasará al estado ENCENDIDO inicial (50% para 2
y 50% para 3
):
//
//
L ====
\\
\\
2
y -2
es qué tan lejos viaja la luz ( ==
se agrega por cada 25%):
0% (equal to a light bulb that is OFF)
L
25%
L ==
50%
L ====
75%
L ======
100%
L ========
3
y -3
es qué tan lejos se extiende la luz:
0%:
L ====
50%:
//
//
L ====
\\
\\
100%:
|| //
||//
L ====
||\\
|| \\
(NOTA: Cuando 2
y 3
son ambos al 100%, tendrá este estado:
|| //
|| //
|| //
||//
L ========
||\\
|| \\
|| \\
|| \\
4
es alternar el tipo de luz.
Default:
//
L ==
\\
After toggling (note the single space before '/' instead of two):
/
L --
\
Entrada:
Recibirá una entrada que contiene las posibles pulsaciones de botones. Por ejemplo:
12-34
Salida:
El estado de la lámpara de luz después de presionar todos los botones de la entrada es subsecuencial. Entonces, con la entrada de ejemplo anterior, tenemos la siguiente salida:
L ------
Reglas de desafío:
- La entrada solo contiene
1234-
(y nunca-
antes4
). - Nunca puede ir por debajo del 0% o por encima del 100%. Si un número aumenta o disminuye más allá de estos límites, puede ignorarlo.
- Cuando la lámpara se apaga, puede ignorar cualquier acción y, cuando se vuelve a encender, se restablece al estado de ENCENDIDO inicial (50% para ambos
2
y3
, y predeterminado4
). Por ejemplo:12-1-341
solo imprimirá el estado ON inicial mencionado anteriormente. (SUGERENCIA: puede ignorar todo antes del final1
de la entrada, excluyendo-1
). - Los espacios finales iguales a la longitud de la luz o una nueva línea final no se inhiben. Sin embargo, agregar nuevas líneas innecesarias adicionales no lo es.
- Se le permite tomar la entrada como una lista de enteros en lugar de una sola cadena. Entonces, en lugar de
12-34
, puede tener[1,2,-3,4]
como entrada.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados, programas completos. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba:
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
). Gracias por preguntar.1
se presiona, ¿se restablecen los parámetros?Respuestas:
Python 2, 221 bytes
Esto terminó siendo más largo de lo que esperaba. La primera línea calcula el estado de la lámpara, el resto implementa la impresión.
La entrada se proporciona a través de STDIN en forma de matriz.
Ver los casos de prueba en ideone
fuente
R,
323320 bytesSin golf:
lee una línea de entrada (enteros separados por espacios)
Inicializa las variables a (on-ness), b (brillo), c (ancho), d (tipo de haz).
d
es cero o dos, lo que significa que podemos llamar a if (d) más tarde que a if (d> 1) o similar y guardar un par de bytes.Una forma de escribir de golf y
while(length(z))
donde z es un vector entero.El resto de la primera línea maneja la entrada a través de una
switch
declaración. La segunda línea se imprime.Es posible que algunos de ellos
<-
puedan ser reemplazados=
, pero creo que te comerán vivo con un alcance léxico ...También tenga en cuenta que en R, las barras invertidas deben escaparse.
c*(c>0)
es una forma de escribir de golfmax(c,0)
que salva a un personaje.Si la luz no está encendida, ya que
*
tiene una precedencia menor que:
, elfor(i in a*b:-b)
ciclo solo se repite0:0
.Actualizar; ahorró 3 bytes al reemplazar el bucle en la primera línea con un for (en lugar de while). Tenga en cuenta que
1:sum(1|z)
hay menos caracteres que1:length(z)
oseq_along(z)
.seq(z)
funcionaría en la mayoría de los casos, pero no cuandoz
es de longitud uno. La solución dada no funcionará para la entrada de longitud cero, pero espero que esté fuera del alcance de la competencia.fuente
Kotlin , 445 bytes
Mi primer golf de Kotlin, 38 bytes menos que Java :)
Con espacios en blanco y pruebas:
Curiosamente, en lugar de definir la función normalmente y /
print
oreturn
la cadena creada, fue más corto usar la asignación de función (lafun f() =
de una lambda evaluada. (¿Tiene sentido esa descripción?)Solo desearía que SE tuviera el resaltado de sintaxis Kotlin adecuado
fuente
Java 8,
484483452446440 bytesFinalmente ... Ok, mi propio desafío es un poco más difícil de lo que esperaba ...; P
Esto, sin duda, puede jugarse utilizando un enfoque completamente diferente. Ahora primero determino qué hacer y luego lo imprimo. La impresión es en realidad el más difícil de este desafío, en mi humilde opinión.
-6 bytes gracias a @ceilingcat .
Explicación:
Pruébalo aquí.
fuente
Lote, 552 bytes
Nota:
set v=
contiene un espacio final yset s=
contiene tres. Esto fue realmente incómodo, ya que no puede imprimir fácilmente un número variable de|
s en Batch, por lo que debe usar un marcador de posición y reemplazarlo en la declaración de eco.fuente
05AB1E , 106 bytes
Entrada como una lista de enteros.
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Ahora tenemos la cadena:
Pues:
Vea esta sugerencia mía 05AB1E (secciones ¿Cómo comprimir enteros grandes? Y ¿Cómo comprimir listas enteras? ) Para comprender por qué
•Wθ¨S9ƒTª»þúÙ•6в
es[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]
; yŽ8Ã
es2234
.fuente