Golfçü Macerası
Bu ilk meydan okuma! Daha sonra, bir önceki zorluktan veri gerektirecek daha fazla zorluk olacak :)
Bölüm 1: Vazo
Bir dakika düşünelim .. Siz güçlü bir Tanrı'sınız, güçleriniz sınırsızdır, ancak bir şey gerektirir: Ruhlar. Her ruh burada bir bayt ile temsil edilir, kullandığınız her bayt bir ruhu feda eder. Dolayısıyla amaç, en az miktarda ruhu feda ederken en fazla insanı kurtarmaktır.
İlk zorluğunuz küçük bir köyü kurtarmak, şeytan onun meydan okumasını çözerseniz tüm köyü yok etmemek istiyor.
Meydan okuma :
Tam olarak 10 şey içerebilen dikey bir vazo var (Hava dahil). Eğer o vazoya bir şey koyarsanız, yerçekimi o şeyi dibe düşürür. Vazo zaten doluysa (ve "havayla dolu" olarak kabul ederseniz her zaman doluysa), giriş vazonun üstündeki öğenin yerini alacaktır.
İzin verilen şeyler kümesi:
- Hava
0 / - Bir kaya
1 / - - Bir yaprak
2 / ~ - Bir bomba
3 / x
"Bomba" nın üstünde bir kaya ya da yaprak varsa, patlayacak ve tepesindeki şeyi yok edecektir.
Girdi, her turda vazoya koyacağınız şeylerin listesidir.
Örnek: 11231: 2 taş, sonra bir yaprak, sonra bir bomba ve son olarak son bir kaya koyacaksınız.
Vazo statik olduğunda, aşağıdaki kuralla saymaya başlayabilirsiniz:
- Rock akümülatöre 1 birim ekler
- Yaprak akümülatörü 2 ile çarpar
- Akümülatör bomba azaltmak 1
- Hava hiçbir şey yapmaz
(Sayımın vazonun üstünden başlamanız gerekir)
İşte girdi olarak "11231" kullanarak elde ettiğimiz simülasyon:
|-| |-| |~| |x| |-| | | | | | | | | | | | |
| | |-| |-| |~| |x| |-| | | | | | | | | | |
| | | | |-| |-| |~| |x| |-| | | | | | | | |
| | | | | | |-| |-| |~| |x| |-| | | | | | |
| | | | | | | | |-| |-| |~| |x| |-| | | | |
| | | | | | | | | | |-| |-| |~| |x| |-| | |
| | | | | | | | | | | | |-| |-| |~| |x| | |
| | | | | | | | | | | | | | |-| |-| |~| |~|
| | | | | | | | | | | | | | | | |-| |-| |-|
| | | | | | | | | | | | | | | | | | |-| |-|
Ve çıktı 2 (olarak hesaplanır ((0 x 2) + 1) + 1) Vazo tüm durumlarını yazdırmaya gerek yok!
Temel program (Python3)
Nasıl çalıştığını anlamak için yürütebilirsiniz.
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)
Golf edilmiş sürüm (Python3, Vazo Göstergesi yok): 360 bayt = 360 puan
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)
Programınızın doğru çalışıp çalışmadığını test etmek isterseniz, bu girişi test edebilirsiniz: 12122111131
Doğru cevap 43 :) (Teşekkürler Emigna)
Şimdi puan için:
- (x) şu noktalara işaret eder: x, programınızı yazmak için gereken bayt miktarıdır. Bir sonraki meydan okuma gönderildikten sonra cevaplarsanız, bu meydan okuma için puanlar toplam puanınıza eklenmez.
Amaç, tüm meydan okuma boyunca minimum puan tutmaktır :) Meydan okuma kısmından birini atlarsanız, atlanan kısım için varsayılan olarak (wx + 1) puanınız olur (burada wx en kötü puandır) bu meydan okuma için).
Bir sonraki zorluk için gerekli veriler:
Giriş = 10100000200310310113030200221013111213110130332101
Güncel Şampiyon: Emigna
Herkese iyi şanslar !
333bir vazo [0, 0, 0, 0, 0, 0, 0, 3, 3, 3]oluşturur ve bu nedenle bir puan verir -3, ancak şartnamenize göre [0, 0, 0, 0, 0, 0, 0, 0, 0, 3]bir puan olmamalı ve sonra bir puan olmamalıdır -1?