パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

毒沼ノ試練

2017-10-20 | コンピュータ
code questで遊ぶ



この試練だけが解けない。
手で解いてHP49まではいけるが50に届かない。

pythonでランダムだと時間がかかりすぎる。

そこで序盤を数手教えこませてみたり。
ここは通らないだろうというところに死神をおいたりしてみる。
あとgoalから少し逆算させて高速化を図っている。

HP49までは解けるようになるが届かない。

定石に間違いがあるらしい。

残念ながら下のプログラムでは解けないと思う。

しりとりのプログラムもはじめて作ってみました。
# -*- coding: utf-8 -*-
import random

strings =["イアラ","ウェイト","オメガロ","ガルヒ","ガングリオンズ","クリオ","ジェノバ","スノウガ","ズビズバ","スペシウム","タグアズ","ドドンパ","トルネ","ネメシス","バイナリル","ハザード","パリピファイア","バルース","ヒラケゴマ","フェイク","プリズマ","ホルーガ","マッハ","マホマホ","ムート","ラリホフ","ランス","ループ","ロールウェイブ","ワロス"]

print (strings[0])

print (strings[0][2])

#ググる python 文字列 長さ
print (len(strings[4]))

#ググる python 文字列 比較
if (strings[0][2]==strings[25][0]):
  print ('match')


def match(s1,s2):
  if s1[len(s1)-1]==s2[0]:
    return True
  return False

if match(strings[0],strings[25]):
  print  ('match')

#15分経過

#ググる python 配列 初期化
flg = [True for i in range(len(strings))]
n=0
#ググる python 乱数
s1=random.randint(0,len(strings)-1)
flg[s1]=False
print (strings[s1])
while n<1000:
  s2=random.randint(0,len(strings)-1)
  if flg[s2] and match(strings[s1],strings[s2]):
    s1=s2
    flg[s1]=False
    print (strings[s1])    
  n=n+1

#30分経過
#ググる python def 戻り値 複数
def siritori():
  flg = [True for i in range(len(strings))]
  n=0
  s1=random.randint(0,len(strings)-1)
  flg[s1]=False
  retword = strings[s1]+" "
  count=1
  while n<1000:
    s2=random.randint(0,len(strings)-1)
    if flg[s2] and match(strings[s1],strings[s2]):
      s1=s2
      flg[s1]=False
      retword = retword + strings[s1]+ " "
      count=count+1    
    n=n+1
  return count,retword 

c=0
while c<20:
  c,w=siritori()

print (c)
print (w)



# -*- coding: utf-8 -*-
import random

map=[[-1,1,1,-1,-1,1,1,-1,-1,1],[1,"S",1,"L",-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,1,-1,1,-1,1,1],[1,"L",-1,-1,1,-1,1,-1,1,-1],[-1,1,1,-1,-1,-1,-1,"L",1,-1],[1,-1,1,-1,-1,1,-1,1,-1,1],[-1,"L",-1,-1,-1,1,-1,-1,-1,1],[-1,1,-1,1,1,-1,1,-1,-1,-1],[-1,1,-1,-1,-1,1,1,-1,"G",1],[-1,-1,1,1,-1,-1,-1,1,-1,-1]]

print (map[8][8])
#追加L
#map[2][1]="L"
#map[0][3]="L"

#map[7][8]="L"


#map[0][9]="L"
#map[0][8]="L"
#map[1][9]="L"
#map[1][8]="L"

#map[8][0]="L"
#map[9][0]="L"

#map[9][6]="L"
#map[9][7]="L"
#map[9][8]="L"
#map[9][9]="L"

#ググる python 多重配列
flg = [[True for i in range(10)] for j in range(10)]
mflg=0

def usyamove():
  global mflg

  ux=1
  uy=1
  uhp=36

  for x in range(10):
    for y in range(10):
      flg[y][x]=True
      if map[y][x]=="L" or map[y][x]=="S":
        flg[y][x]=False
  n=0
  mflg=0
  #強制Walk
  uhp,ux,uy=walk(uhp,ux+1,uy)
  uhp,ux,uy=walk(uhp,ux,uy-1)
  uhp,ux,uy=walk(uhp,ux-1,uy)
  uhp,ux,uy=walk(uhp,ux-1,uy)
  uhp,ux,uy=walk(uhp,ux,uy+1)
  uhp,ux,uy=walk(uhp,ux,uy+1)
  uhp,ux,uy=walk(uhp,ux,uy+1)
  uhp,ux,uy=walk(uhp,ux,uy+1)
  uhp,ux,uy=walk(uhp,ux+1,uy)
  uhp,ux,uy=walk(uhp,ux+1,uy)
  uhp,ux,uy=walk(uhp,ux,uy+1)
  uhp,ux,uy=walk(uhp,ux,uy+1)
  uhp,ux,uy=walk(uhp,ux,uy+1)
  uhp,ux,uy=walk(uhp,ux-1,uy)
  uhp,ux,uy=walk(uhp,ux,uy+1)
  uhp,ux,uy=walk(uhp,ux,uy+1)
  uhp,ux,uy=walk(uhp,ux+1,uy)
  uhp,ux,uy=walk(uhp,ux+1,uy)
  uhp,ux,uy=walk(uhp,ux,uy-1)
  uhp,ux,uy=walk(uhp,ux,uy-1)
  uhp,ux,uy=walk(uhp,ux+1,uy)
  #43
  uhp,ux,uy=walk(uhp,ux,uy+1)
  uhp,ux,uy=walk(uhp,ux+1,uy)
  uhp,ux,uy=walk(uhp,ux+1,uy)
  uhp,ux,uy=walk(uhp,ux,uy-1)
  uhp,ux,uy=walk(uhp,ux-1,uy)
  uhp,ux,uy=walk(uhp,ux,uy-1)
  uhp,ux,uy=walk(uhp,ux,uy-1)
  #46


  while n<2000:
    if round(ux,uy) or mflg>3:
      return 0,False
    w=random.randint(0,3)
    if w==0:
      if walkck(ux+1,uy):
        uhp,ux,uy=walk(uhp,ux+1,uy)
    if w==1:
      if walkck(ux-1,uy):
        uhp,ux,uy=walk(uhp,ux-1,uy)
    if w==2:
      if walkck(ux,uy+1):
        uhp,ux,uy=walk(uhp,ux,uy+1)
    if w==3:
      if walkck(ux,uy-1):
        uhp,ux,uy=walk(uhp,ux,uy-1)
    #goal shift 
    #if ux==8 and uy==8:
    if ux==9 and uy==5:
      n=2000
    n=n+1
    if uhp<43:
      return 43,False

  g=False
  #if ux>=8 and uy>=8:
  if ux==9 and uy==5:
    g=True
  #return uhp,g
  return uhp+1,g

def round(x,y):
  if walkck(x+1,y):
    return False
  if walkck(x-1,y):
    return False
  if walkck(x,y+1):
    return False
  if walkck(x,y-1):
    return False
  return True  

def walkck(x,y):
  if x<0 or x>9 or y<0 or y>9:
    return False
  return flg[y][x]

def walk(hp,x,y):
  global mflg
  flg[y][x]=False
  if map[y][x]==-1:
    hp=hp-1
    mflg=mflg+1
  if map[y][x]==1:
    hp=hp+1
    mflg=0
  return hp,x,y

def mapw():
  for y in range(10):
    s=""
    for x in range(10):
      if flg[y][x]==False and map[y][x]!="L":
        s=s+" "
      else:
        s=s+"1"
    print(s)

hp=0
goal=False
while hp<50:
  hp,goal=usyamove()
  if goal and hp>48:
    print (hp)
    mapw()

print (hp)


----------------------------------------------------
翌日
車の異音で起こされる。
すぐ近くの空き地のような空間でおそらくUターンでもしようとしたのかトラックが立ち往生

ここ台風の迫る中、連日の雨でぬかるんでいたらしい。

3時間ぐらいなんか沼の試練と戦っていた。

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。