La aventura del golfista
Este es el primer reto ! Habrá más desafíos más adelante que requerirán datos del desafío anterior :)
Capítulo 1: El florero
Imaginemos un minuto ... Eres un Dios poderoso, tus poderes son ilimitados pero requieren una cosa: Almas. Cada alma está aquí representada por un byte, cada byte que usas sacrifica un alma. Entonces, el objetivo es obviamente salvar a la mayor cantidad de personas mientras se sacrifica la menor cantidad de almas.
Su primer desafío es salvar un pequeño pueblo, el diablo está dispuesto a no destruir todo el pueblo si resuelve su desafío.
El reto :
Tienes un jarrón vertical que puede contener exactamente 10 cosas (aire incluido). Si pones una cosa en ese jarrón, la gravedad hará que esa cosa caiga al fondo. Si el jarrón ya está lleno (y siempre está lleno si lo considera "lleno de aire"), la entrada reemplazará el elemento en la parte superior del jarrón.
Aquí está el conjunto de cosas permitidas:
- Aire
0 /
- Una roca
1 / -
- Una hoja
2 / ~
- Una bomba
3 / x
Si hay una roca o una hoja encima de "A Bomb", explotará y destruirá la cosa que está encima.
La entrada es la lista de las cosas que pondrás en el florero cada turno.
Ejemplo: 11231 : Pondrás 2 rocas, luego una hoja, luego una bomba y finalmente una última roca.
Cuando el florero es estático, puede comenzar a contar con la siguiente regla:
- Rock agrega 1 unidad al acumulador
- Leaf multiplica el acumulador por 2
- Bomba disminuye el acumulador en 1
- El aire no hace nada
(Debe comenzar a contar desde la parte superior del florero)
Aquí está la simulación que obtenemos usando "11231" como entrada:
|-| |-| |~| |x| |-| | | | | | | | | | | | |
| | |-| |-| |~| |x| |-| | | | | | | | | | |
| | | | |-| |-| |~| |x| |-| | | | | | | | |
| | | | | | |-| |-| |~| |x| |-| | | | | | |
| | | | | | | | |-| |-| |~| |x| |-| | | | |
| | | | | | | | | | |-| |-| |~| |x| |-| | |
| | | | | | | | | | | | |-| |-| |~| |x| | |
| | | | | | | | | | | | | | |-| |-| |~| |~|
| | | | | | | | | | | | | | | | |-| |-| |-|
| | | | | | | | | | | | | | | | | | |-| |-|
Y el resultado será 2 (calculado como ((0 x 2) + 1) + 1
) ¡No es necesario imprimir todos los estados del florero!
El programa base (Python3)
Puede ejecutarlo para comprender cómo funciona.
def printVase(vase):
for i in vase:
if i == 1:
print("|-|")
elif i == 2:
print("|~|")
elif i == 3:
print("|x|")
else:
print("| |")
def updateVase(vase):
changed = False
for i in range(len(vase), -1, -1):
if i < len(vase) - 1:
if vase[i+1] == 3 and vase[i] in [1,2]:
vase[i], vase[i+1] = 0, 0
changed = True
if not vase[i+1] and vase[i] in [1, 2, 3]:
vase[i], vase[i+1] = vase[i+1], vase[i]
changed = True
return changed
userInput = input("Vase : ")
vase = [0 for i in range(0, 10)]
oldVase = vase
while updateVase(vase) or userInput != "":
if userInput != "":
vase[0] = int(userInput[0])
userInput = userInput[1::]
printVase(vase)
input()
accumulator = 0
for i in vase:
if i == 1:
accumulator += 1
if i == 2:
accumulator *= 2
if i == 3:
accumulator -= 1
print(accumulator)
Versión de golf (Python3, sin pantalla de florero): 360 bytes = 360 puntos
def u(v):
c=0
for i in range(len(v),-1,-1):
if i<len(v)-1:
if v[i+1]==3 and v[i]in[1,2]:v[i],v[i+1],c=0,0,1
if not v[i+1]and v[i]in[1,2,3]:v[i],v[i+1],c=v[i+1],v[i],1
return c
l,v=input(),[0 for i in range(0, 10)]
while u(v)or l!="":
if l!="":v[0],l=int(l[0]),l[1::]
a=0
for i in v:
if i==1:a+=1
if i==2:a*=2
if i==3:a-=1
print(a)
Si desea probar si su programa funciona correctamente, puede probar esta entrada: 12122111131
La respuesta correcta es 43 :) (Gracias Emigna)
Ahora para los puntos:
- (x) puntos donde: x es la cantidad de bytes necesarios para escribir su programa. Si responde después de que se publique el próximo desafío, los puntos para este desafío no se agregarán a su cantidad total de puntos.
El objetivo es mantener una cantidad mínima de puntos durante todo el desafío :) Si omite una parte de la parte del desafío, tendrá (wx + 1) puntos por defecto para la parte omitida (donde wx es la peor puntuación) para ese desafío).
Datos que serán necesarios para el próximo desafío:
Salida cuando entrada = 10100000200310310113030200221013111213110130332101
Campeón actual: Emigna
Buena suerte a todos !
333
construye un jarrón [0, 0, 0, 0, 0, 0, 0, 3, 3, 3]
en su algoritmo de golf y, por lo tanto, una puntuación de -3
, pero ¿no debería ser [0, 0, 0, 0, 0, 0, 0, 0, 0, 3]
y luego una puntuación de -1
acuerdo con su especificación?