Przygoda Golferów
To pierwsze wyzwanie! Później będzie więcej wyzwań, które będą wymagały danych z poprzedniego wyzwania :)
Rozdział 1: Wazon
Wyobraźmy sobie chwilę .. Jesteś potężnym Bogiem, twoje moce są nieograniczone, ale wymagają jednej rzeczy: Duszy. Każda dusza jest tutaj reprezentowana przez bajt, każdy używany bajt poświęca duszę. Zatem celem jest oczywiście uratowanie jak największej liczby ludzi przy jednoczesnym poświęceniu jak najmniejszej liczby dusz.
Twoim pierwszym wyzwaniem jest uratowanie małej wioski, diabeł chce nie zniszczyć całej wioski, jeśli rozwiążesz jego wyzwanie.
Wyzwanie :
Masz pionowy wazon, który może zawierać dokładnie 10 rzeczy (w tym powietrze). Jeśli umieścisz coś w wazonie, grawitacja sprawi, że spadnie on na dno. Jeśli wazon jest już pełny (i zawsze jest pełny, jeśli uważasz go za „pełen powietrza”), dane wejściowe zastąpią element na górze wazy.
Oto zestaw dozwolonych rzeczy:
- Powietrze
0 / - Skała
1 / - - Liść
2 / ~ - Bomba
3 / x
Jeśli na szczycie „Bomby” znajduje się kamień lub liść, eksploduje i zniszczy przedmiot na nim.
Dane wejściowe to lista rzeczy, które umieszczasz w wazonie za każdym razem.
Przykład: 11231 : Umieścisz 2 skały, potem liść, potem bombę i wreszcie ostatnią skałę.
Gdy wazon jest statyczny, możesz zacząć liczyć zgodnie z następującą zasadą:
- Rock dodaje 1 jednostkę do akumulatora
- Liść mnoży akumulator przez 2
- Bomba obniża akumulator o 1
- Powietrze nic nie robi
(Musisz zacząć liczyć od góry wazy)
Oto symulację, którą otrzymujemy, używając „11231” jako danych wejściowych:
|-| |-| |~| |x| |-| | | | | | | | | | | | |
| | |-| |-| |~| |x| |-| | | | | | | | | | |
| | | | |-| |-| |~| |x| |-| | | | | | | | |
| | | | | | |-| |-| |~| |x| |-| | | | | | |
| | | | | | | | |-| |-| |~| |x| |-| | | | |
| | | | | | | | | | |-| |-| |~| |x| |-| | |
| | | | | | | | | | | | |-| |-| |~| |x| | |
| | | | | | | | | | | | | | |-| |-| |~| |~|
| | | | | | | | | | | | | | | | |-| |-| |-|
| | | | | | | | | | | | | | | | | | |-| |-|
Wyjście wyniesie 2 (obliczone jako ((0 x 2) + 1) + 1) Nie trzeba drukować wszystkich stanów wazonu!
Program podstawowy (Python3)
Możesz go wykonać, aby zrozumieć, jak to działa.
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)
Wersja golfowa (Python3, bez wyświetlacza wazowego): 360 bajtów = 360 punktów
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)
Jeśli chcesz sprawdzić, czy Twój program działa poprawnie, możesz przetestować to wejście: 12122111131
Prawidłowa odpowiedź to 43 :) (Dzięki Emigna)
Teraz punkty:
- (x) punkty, w których: x jest liczbą bajtów potrzebną do napisania programu. Jeśli odpowiesz po opublikowaniu następnego wyzwania, punkty za to wyzwanie nie zostaną dodane do całkowitej liczby punktów.
Celem jest zachowanie minimalnej liczby punktów podczas całego wyzwania :) Jeśli pominiesz jedną z części wyzwania, domyślnie otrzymasz (wx + 1) punkty za pominiętą część (gdzie wx to najgorszy wynik dla tego wyzwania).
Dane, które będą wymagane do następnego wyzwania:
Wyjście, gdy wejście = 10100000200310310113030200221013111213110130332101
Obecny mistrz: Emigna
Powodzenia wszystkim !
333konstruują wazon [0, 0, 0, 0, 0, 0, 0, 3, 3, 3]w algorytmie golfowym, a więc wynik -3, ale czy nie powinien to być [0, 0, 0, 0, 0, 0, 0, 0, 0, 3]wynik -1zgodny ze specyfikacją?