ゴルファーの冒険
これが最初の挑戦です!以前のチャレンジからのデータを必要とするより多くのチャレンジが後であります:)
第1章:花瓶
ちょっと想像してみてください。あなたは強力な神であり、あなたの力は無限ですが、一つのことを必要としています:魂。ここでは、各魂はバイトで表されます。使用する各バイトは魂を犠牲にします。したがって、目標は明らかに、最小量の魂を犠牲にしながら、最大量の人々を救うことです。
あなたの最初の挑戦は小さな村を救うことです。悪魔は彼の挑戦を解決したら村全体を破壊しないことをいとわないでしょう。
チャレンジ :
ちょうど10個の物(空気を含む)を含むことができる垂直花瓶があります。その花瓶に物を入れると、重力がその物を底に落とします。花瓶がすでにいっぱいになっている場合(および「空気で満たされている」とみなすと常に花瓶がいっぱいになります)、花瓶の上部にある要素が入力に置き換えられます。
許可されているもののセットは次のとおりです。
- 空気
0 / - 岩石
1 / - - 葉
2 / ~ - 爆弾
3 / x
「A Bomb」の上に岩や葉がある場合、それは爆発して、その上のものを破壊します。
入力は、毎回花瓶に入れるもののリストです。
例: 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です :)(エミグナに感謝)
次にポイントについて:
- (x)ポイントここで、xはプログラムの作成に必要なバイト数です。次のチャレンジが投稿された後に回答すると、このチャレンジのポイントは合計ポイントに加算されません。
目標は、チャレンジ全体を通して最小限のポイントを維持することです:)チャレンジの一部の1つをスキップすると、スキップされた部分にデフォルトで(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になります、仕様応じ必要がありますか?