パーソナルブログメモリ

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

問題 太陽どしょ

2019-03-24 | python 謎解き
「太陽どしょ」は太陽系のローカル番組です。

今回、ロケ宇宙船を購入し太陽系惑星サイコロ行脚をはじめることにしました。
太陽系の各惑星をサイコロの目にしたがって移動して地球に帰ってくるまでの旅です。

移動方法はその惑星から近い惑星順に1,2,3,4,5,6番目までをサイコロの数字に当てはめ
2が出たらその惑星から2番めに近い惑星に移動するというものです。
(小数点1位の距離が同じ場合は惑星の番号の小さい順)

サイコロの目に関して一切のヤラセ無しで行った結果
毎週一回ずつ振ったのですが2クール(26回)たっても地球に帰ることはできず予算も大幅に越えてしまいました。

planet 惑星の座標(x,y)で太陽座標(10,10)から近い順
dice 番組で実際に出た目
スタート地点は第2惑星(配列の都合で第0惑星から第9惑星とする)

planet=[(13, 7), (6, 4), (13, 17), (18, 11), (8, 18), (3, 15), (1, 8), (13, 1), (19, 17), (1, 0)]
dice=[3, 4, 3, 2, 5, 2, 6, 5, 4, 3, 5, 3, 2, 5, 2, 6, 6, 1, 2, 2, 5, 5, 5, 3, 1, 6]

距離はこの計算式を使ってください。import mathが必要です。
round(math.sqrt((x1-x2)**2+(y1-y2)**2),1)


最初の第2惑星は抜かして、巡った惑星の番号を巡った順番で26個並べてください。
計算の結果、第9惑星と第2惑星が登場せず最後が第7惑星になれば、おそらく正解でしょう。

サンプル解答は↓
import math
import random

planet=[(13, 7), (6, 4), (13, 17), (18, 11), (8, 18), (3, 15), (1, 8), (13, 1), (19, 17), (1, 0)]
dice=[3, 4, 3, 2, 5, 2, 6, 5, 4, 3, 5, 3, 2, 5, 2, 6, 6, 1, 2, 2, 5, 5, 5, 3, 1, 6]

def length(p1,p2):
    x1,y1=p1
    x2,y2=p2
    return round(math.sqrt((x1-x2)**2+(y1-y2)**2),1)

def planetSort(p1,planet,DiceNo):
    l=[]
    for n,p in enumerate(planet):
        l+=[(length(p1,p),n)]
    l.sort()
    return l[DiceNo][1]

def main():
    pos=2
    history=[]
    for dn in dice:
        p=planet[pos]
        pos=planetSort(p,planet,dn)
        history+=[pos]
    print(history)

main()

最新の画像もっと見る

コメントを投稿

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