高尔夫冒险
这是第一个挑战!以后会有更多挑战,需要上一个挑战的数据:)
第一章:花瓶
让我们想象一下。.您是一位强大的上帝,您的力量是无限的,但需要一件事情:灵魂。每个灵魂在这里都用一个字节表示,您使用的每个字节确实会牺牲一个灵魂。因此,目标显然是拯救最多的人,同时牺牲最少的灵魂。
您的第一个挑战是拯救一个小村庄,如果您解决了他的挑战,魔鬼愿意不破坏整个村庄。
挑战:
您有一个垂直花瓶,可以容纳10个东西(包括空气)。如果在花瓶里放东西,重力会使那东西掉到底部。如果花瓶已经装满了(如果您认为它“充满了空气”,则它总是装满的),输入将替换花瓶顶部的元素。
这是一组允许的东西:
- 空气
0 / - 一块岩石
1 / - - 一片树叶
2 / ~ - 一颗炸弹
3 / x
如果“炸弹”上有一块岩石或一片叶子,它会爆炸并摧毁上面的东西。
输入的内容是您每转将要放入花瓶中的物品的列表。
示例: 11231:您将放置2块岩石,然后是一片叶子,然后是炸弹,最后是最后一块岩石。
当花瓶静止时,您可以按照以下规则开始计数:
- Rock向累加器增加1个单位
- Leaf将累加器乘以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时的输出
现任冠军:艾米娜
祝大家好运 !
333构造一个花瓶[0, 0, 0, 0, 0, 0, 0, 3, 3, 3],因此得分为-3,但不是应该如此[0, 0, 0, 0, 0, 0, 0, 0, 0, 3],然后-1根据您的要求得分为?