L'avventura del golfista
Questa è la prima sfida! In seguito ci saranno più sfide che richiederanno i dati della sfida precedente :)
Capitolo 1: Il vaso
Immaginiamo un minuto .. Sei un Dio potente, i tuoi poteri sono illimitati ma richiedono una cosa: Anime. Ogni anima è qui rappresentata da un byte, ogni byte che usi sacrifica un'anima. Quindi l'obiettivo è ovviamente quello di salvare il maggior numero di persone sacrificando il minor numero di anime.
La tua prima sfida è salvare un piccolo villaggio, il diavolo è disposto a non distruggere l'intero villaggio se risolvi la sua sfida.
La sfida :
Hai un vaso verticale che può contenere esattamente 10 cose (Aria inclusa). Se metti qualcosa in quel vaso, la gravità farà cadere quella cosa sul fondo. Se il vaso è già pieno (ed è sempre pieno se lo consideri "pieno d'aria"), l'ingresso sostituirà l'elemento nella parte superiore del vaso.
Ecco il set di cose consentite:
- Aria
0 / - Una pietra
1 / - - Una foglia
2 / ~ - Una bomba
3 / x
Se c'è una roccia o una foglia sopra "Una bomba", esploderà e distruggerà la cosa sopra di essa.
L'ingresso è l'elenco delle cose che metterai nel vaso ogni turno.
Esempio: 11231: metterai 2 pietre, poi una foglia, poi una bomba e infine un'ultima roccia.
Quando il vaso è statico, puoi iniziare a contare con la seguente regola:
- Rock aggiunge 1 unità all'accumulatore
- Leaf moltiplica l'accumulatore per 2
- La bomba diminuisce l'accumulatore di 1
- L'aria non fa nulla
(Devi iniziare a contare dalla cima del vaso)
Ecco la simulazione che otteniamo usando "11231" come input:
|-| |-| |~| |x| |-| | | | | | | | | | | | |
| | |-| |-| |~| |x| |-| | | | | | | | | | |
| | | | |-| |-| |~| |x| |-| | | | | | | | |
| | | | | | |-| |-| |~| |x| |-| | | | | | |
| | | | | | | | |-| |-| |~| |x| |-| | | | |
| | | | | | | | | | |-| |-| |~| |x| |-| | |
| | | | | | | | | | | | |-| |-| |~| |x| | |
| | | | | | | | | | | | | | |-| |-| |~| |~|
| | | | | | | | | | | | | | | | |-| |-| |-|
| | | | | | | | | | | | | | | | | | |-| |-|
E l'output sarà 2 (calcolato come ((0 x 2) + 1) + 1) Non è necessario stampare tutti gli stati del vaso!
Il programma di base (Python3)
Puoi eseguirlo per capire come funziona.
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)
Versione golfizzata (Python3, senza display Vase): 360 byte = 360 punti
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)
Se si desidera verificare se il programma funziona correttamente, è possibile verificare questo input: 12122111131
La risposta corretta è 43 :) (Grazie Emigna)
Ora per i punti:
- (x) punti in cui: x è la quantità di byte necessari per scrivere il programma. Se rispondi dopo aver pubblicato la prossima sfida, i punti per questa sfida non verranno aggiunti al tuo totale di punti.
L'obiettivo è mantenere un numero minimo di punti durante l'intera sfida :) Se salti una parte della sfida, per impostazione predefinita avrai (wx + 1) punti per la parte saltata (dove wx è il punteggio peggiore per quella sfida).
Dati che saranno richiesti per la prossima sfida:
Uscita quando input = 10100000200310310113030200221013111213110130332101
Campione attuale: Emigna
Buona fortuna a tutti !
333costruisce un vaso [0, 0, 0, 0, 0, 0, 0, 3, 3, 3]nel tuo algoritmo golfizzato e quindi un punteggio di -3, ma non dovrebbe essere [0, 0, 0, 0, 0, 0, 0, 0, 0, 3]e quindi un punteggio -1secondo le tue specifiche?