Petualangan Golfer
Ini tantangan pertama! Akan ada lebih banyak tantangan nanti yang akan membutuhkan data dari tantangan sebelumnya :)
Bab 1: Vas
Mari kita bayangkan sebentar .. Anda adalah Dewa yang kuat, kekuatan Anda tidak terbatas tetapi membutuhkan satu hal: Jiwa. Setiap jiwa di sini diwakili oleh satu byte, setiap byte yang Anda gunakan tidak mengorbankan jiwa. Jadi tujuannya jelas untuk menyelamatkan jumlah terbesar orang sambil mengorbankan jumlah jiwa paling sedikit.
Tantangan pertama Anda adalah menyelamatkan sebuah desa kecil, iblis tidak mau menghancurkan seluruh desa jika Anda menyelesaikan tantangannya.
Tantangan :
Anda memiliki vas vertikal yang dapat berisi tepat 10 hal (termasuk udara). Jika Anda memasukkan sesuatu ke dalam vas itu, gravitasi akan membuat benda itu jatuh ke dasar. Jika vas sudah penuh (dan selalu penuh jika Anda menganggapnya "penuh udara"), input akan menggantikan elemen di bagian atas vas.
Ini adalah seperangkat hal yang diizinkan:
- Udara
0 / - Sebuah batu
1 / - - Daun
2 / ~ - Sebuah bom
3 / x
Jika ada batu atau daun di atas "Bom", itu akan meledak dan menghancurkan benda di atasnya.
Input adalah daftar hal-hal yang akan Anda masukkan ke dalam vas setiap belokan.
Contoh: 11231: Anda akan meletakkan 2 batu, lalu daun, lalu bom dan akhirnya batu terakhir.
Saat vasnya statis, Anda bisa mulai menghitung dengan aturan berikut:
- Rock menambahkan 1 unit ke akumulator
- Leaf mengalikan akumulator dengan 2
- Bom mengurangi akumulator dengan 1
- Udara tidak melakukan apa-apa
(Anda harus mulai menghitung dari atas vas)
Berikut ini simulasi yang kami dapat menggunakan "11231" sebagai input:
|-| |-| |~| |x| |-| | | | | | | | | | | | |
| | |-| |-| |~| |x| |-| | | | | | | | | | |
| | | | |-| |-| |~| |x| |-| | | | | | | | |
| | | | | | |-| |-| |~| |x| |-| | | | | | |
| | | | | | | | |-| |-| |~| |x| |-| | | | |
| | | | | | | | | | |-| |-| |~| |x| |-| | |
| | | | | | | | | | | | |-| |-| |~| |x| | |
| | | | | | | | | | | | | | |-| |-| |~| |~|
| | | | | | | | | | | | | | | | |-| |-| |-|
| | | | | | | | | | | | | | | | | | |-| |-|
Dan hasilnya akan 2 (dihitung sebagai ((0 x 2) + 1) + 1) Tidak perlu mencetak semua status vas!
Program dasar (Python3)
Anda dapat menjalankannya untuk memahami cara kerjanya.
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 golf (Python3, tanpa Layar Vas): 360 byte = 360 poin
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)
Jika Anda ingin menguji apakah program Anda berfungsi dengan benar, Anda dapat menguji input ini: 12122111131
Jawaban yang benar adalah 43 :) (Terima kasih Emigna)
Sekarang untuk poin:
- (x) menunjukkan di mana: x adalah jumlah byte yang diperlukan untuk menulis program Anda. Jika Anda menjawab setelah tantangan berikutnya diposting, poin untuk tantangan ini tidak akan ditambahkan ke jumlah total poin Anda.
Tujuannya adalah untuk menjaga jumlah minimum poin selama seluruh tantangan :) Jika Anda melewatkan salah satu bagian dari tantangan, Anda akan memiliki (wx + 1) poin secara default untuk bagian yang dilewati (di mana wx adalah skor terburuk untuk tantangan itu).
Data yang akan dibutuhkan untuk tantangan berikutnya:
Output saat input = 10100000200310310113030200221013111213110130332101
Juara Saat Ini: Emigna
Semoga beruntung semuanya !
333membuat vas [0, 0, 0, 0, 0, 0, 0, 3, 3, 3]dalam algoritme golf Anda dan karenanya skor -3, tetapi bukankah seharusnya demikian [0, 0, 0, 0, 0, 0, 0, 0, 0, 3]dan kemudian skor -1sesuai dengan spesifikasi Anda?