ผจญภัยนักกอล์ฟ
นี่คือความท้าทายแรก! จะมีความท้าทายเพิ่มเติมในภายหลังที่จะต้องใช้ข้อมูลจากการท้าทายครั้งก่อน :)
บทที่ 1: แจกัน
ลองจินตนาการสักครู่ .. คุณเป็นพระเจ้าที่ทรงพลังพลังของคุณนั้นไร้ขีด จำกัด แต่ต้องการสิ่งหนึ่ง: วิญญาณ แต่ละดวงจะถูกแทนด้วยไบต์ที่นี่แต่ละไบต์ที่คุณใช้จะเสียสละวิญญาณ ดังนั้นเป้าหมายคือเห็นได้ชัดว่าช่วยผู้คนจำนวนมากที่สุดพร้อมกับเสียสละจำนวนวิญญาณน้อยที่สุด
ความท้าทายแรกของคุณคือการช่วยหมู่บ้านเล็ก ๆ น้อย ๆ ปีศาจก็เต็มใจที่จะไม่ทำลายหมู่บ้านทั้งหมู่บ้านหากคุณแก้ปัญหาความท้าทายของเขา
ความท้าทาย:
คุณมีแจกันแนวตั้งซึ่งมีได้ทั้งหมด 10 อย่าง (รวมอยู่ในอากาศ) หากคุณใส่สิ่งของลงในแจกันนั้นแรงโน้มถ่วงจะทำให้สิ่งนั้นตกลงไปด้านล่าง หากแจกันเต็มแล้ว (และเต็มถ้าคุณคิดว่าเป็น "เต็มอากาศ") อินพุตจะแทนที่องค์ประกอบที่ด้านบนของแจกัน
นี่คือชุดของสิ่งต่าง ๆ ที่ได้รับอนุญาต:
- อากาศ
0 / - ร็อค
1 / - - ใบไม้
2 / ~ - ระเบิด
3 / x
หากมีหินหรือใบไม้อยู่ด้านบนของ "ระเบิด" มันจะระเบิดและทำลายสิ่งที่อยู่ด้านบนของมัน
การป้อนข้อมูลคือรายการของสิ่งที่คุณจะใส่ในแจกันทุกเทิร์น
ตัวอย่าง: 11231: คุณจะใส่หิน 2 ก้อนจากนั้นใบไม้จากนั้นระเบิดและในที่สุดก็เป็นหินก้อนสุดท้าย
เมื่อแจกันคงที่คุณสามารถเริ่มนับด้วยกฎต่อไปนี้:
- Rock เพิ่ม 1 ยูนิตไปยังตัวสะสม
- ใบไม้คูณตัวสะสมด้วย 2
- ระเบิดจะลดการสะสม 1
- อากาศไม่ทำอะไรเลย
(คุณต้องเริ่มนับจากส่วนบนของแจกัน)
นี่คือการจำลองที่เราใช้ "11231" เป็นอินพุต:
|-| |-| |~| |x| |-| | | | | | | | | | | | |
| | |-| |-| |~| |x| |-| | | | | | | | | | |
| | | | |-| |-| |~| |x| |-| | | | | | | | |
| | | | | | |-| |-| |~| |x| |-| | | | | | |
| | | | | | | | |-| |-| |~| |x| |-| | | | |
| | | | | | | | | | |-| |-| |~| |x| |-| | |
| | | | | | | | | | | | |-| |-| |~| |x| | |
| | | | | | | | | | | | | | |-| |-| |~| |~|
| | | | | | | | | | | | | | | | |-| |-| |-|
| | | | | | | | | | | | | | | | | | |-| |-|
และผลลัพธ์จะเป็น 2 (คำนวณเป็น((0 x 2) + 1) + 1) ไม่จำเป็นต้องพิมพ์สถานะทั้งหมดของแจกัน!
โปรแกรมพื้นฐาน (Python3)
คุณสามารถรันมันเพื่อทำความเข้าใจว่ามันทำงานอย่างไร
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)
รุ่นที่ตีกอล์ฟ (Python3, ไม่มีการแสดงแจกัน): 360 ไบต์ = 360 คะแนน
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)
หากคุณต้องการทดสอบว่าโปรแกรมของคุณทำงานอย่างถูกต้องหรือไม่คุณสามารถทดสอบอินพุตนี้: 12122111131
คำตอบที่ถูกต้องคือ 43 :) (ขอบคุณ Emigna)
ตอนนี้สำหรับคะแนน:
- (x) จุดที่: x คือจำนวนไบต์ที่จำเป็นในการเขียนโปรแกรมของคุณ หากคุณตอบหลังจากที่มีการโพสต์ความท้าทายครั้งต่อไปคะแนนสำหรับความท้าทายนี้จะไม่ถูกเพิ่มเข้าไปในจำนวนคะแนนรวมของคุณ
เป้าหมายคือการเก็บคะแนนขั้นต่ำในระหว่างการท้าทายทั้งหมด :) หากคุณข้ามส่วนใดส่วนหนึ่งของการแข่งขันคุณจะมี (wx + 1) คะแนนโดยค่าเริ่มต้นสำหรับส่วนที่ถูกข้าม (โดยที่ wx คือคะแนนที่แย่ที่สุด สำหรับความท้าทายนั้น)
ข้อมูลที่จำเป็นสำหรับการท้าทายครั้งต่อไป:
เอาต์พุตเมื่ออินพุต = 10100000200310310113030200221013111213110130332101
แชมป์ปัจจุบัน: Emigna
โชคดีนะทุกคน !
333สร้างแจกัน[0, 0, 0, 0, 0, 0, 0, 3, 3, 3]ในอัลกอริทึม golfed ของคุณและด้วยคะแนน-3แต่ไม่ควร[0, 0, 0, 0, 0, 0, 0, 0, 0, 3]และจากนั้นคะแนน-1ตามสเปคของคุณ?