download from colab
This commit is contained in:
parent
f33ce16d9c
commit
f85f6da78b
@ -1,3 +1,11 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""HashCode2022_张杰.ipynb
|
||||||
|
|
||||||
|
Automatically generated by Colaboratory.
|
||||||
|
|
||||||
|
Original file is located at
|
||||||
|
https://colab.research.google.com/drive/1PiwWB2bonQgoAGp6woFuJhFi2qq0_aj7
|
||||||
|
"""
|
||||||
|
|
||||||
from google.colab import drive
|
from google.colab import drive
|
||||||
drive.mount('/content/drive')
|
drive.mount('/content/drive')
|
||||||
@ -6,8 +14,9 @@ from math import sqrt
|
|||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import os
|
import os
|
||||||
|
import math
|
||||||
|
|
||||||
File_Directory = 'drive/MyDrive/Ecole/PolyHash2022/DataSet/'
|
File_Directory = 'drive/MyDrive/polyhash/DataSet/'
|
||||||
File_Name = 'a_an_example.in.txt'
|
File_Name = 'a_an_example.in.txt'
|
||||||
File_Path = File_Directory+File_Name
|
File_Path = File_Directory+File_Name
|
||||||
|
|
||||||
@ -42,7 +51,7 @@ def convertToFloat(DataSet):
|
|||||||
DataSet = convertToFloat(DataSet)
|
DataSet = convertToFloat(DataSet)
|
||||||
|
|
||||||
|
|
||||||
def caculateDistance(a: tuple, b: tuple):
|
def caculateDistance(a: list, b: tuple):
|
||||||
d = sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2)
|
d = sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2)
|
||||||
return d
|
return d
|
||||||
|
|
||||||
@ -83,22 +92,14 @@ class People:
|
|||||||
plt.plot(x, y, 'o')
|
plt.plot(x, y, 'o')
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Santa:
|
class Santa:
|
||||||
# (x, y)
|
position = [0.0,0.0]
|
||||||
# TODO because tuple is unchangeable so we can not use it.Maybe we can use a sub-class Dimensionality(2D) to describe 'position' and 'speed'.Just like
|
speed = [0.0,0.0]
|
||||||
""" class 2D:
|
|
||||||
x
|
|
||||||
y
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
position:2D
|
|
||||||
position.x += speed*t
|
|
||||||
"""
|
|
||||||
position = (0.0,0.0)
|
|
||||||
speed = (0.0,0.0)
|
|
||||||
weightOfCarrots:int = 0
|
weightOfCarrots:int = 0
|
||||||
weightOfGift:int = 0
|
weightOfGift:int = 0
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -128,6 +129,7 @@ class Santa:
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
# DONE 此速度限制speedLimit为限制表不是当前限制,我们下一步要定义nowspeedLimit
|
||||||
def isAllowedBySpeedLimit(self, s):
|
def isAllowedBySpeedLimit(self, s):
|
||||||
return s <= self.nowSpeedLimit()
|
return s <= self.nowSpeedLimit()
|
||||||
|
|
||||||
@ -163,21 +165,361 @@ class Santa:
|
|||||||
assert self.weightOfGift >= 0
|
assert self.weightOfGift >= 0
|
||||||
p.getScore()
|
p.getScore()
|
||||||
|
|
||||||
s = Santa()
|
def Float(self, t:int = 1):
|
||||||
|
self.position[0] += self.speed[0] * t
|
||||||
|
self.position[1] += self.speed[1] * t
|
||||||
|
self.timeLimit -= t
|
||||||
|
|
||||||
s.LoadGift(45)
|
def getSituation(self):
|
||||||
|
print("Now position is:",self.position)
|
||||||
|
print("Now speed is:",self.speed)
|
||||||
|
print("Now timeLimit is:",self.timeLimit)
|
||||||
|
print("Now weightOfGift is:",self.weightOfGift)
|
||||||
|
print("Now weightOfCarrots is:",self.weightOfCarrots)
|
||||||
|
|
||||||
|
def kidoneWay(self,x:int,p:Person):
|
||||||
|
v = self.nowSpeedLimit()
|
||||||
|
if isinstance(x/v,int) and x > 0:
|
||||||
|
t = x/v
|
||||||
|
self.AccUp(v)
|
||||||
|
print("AccUp:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccDown(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.DiliveryGift(p)
|
||||||
|
print("Delivert gift to",p.name)
|
||||||
|
|
||||||
|
t = x/v
|
||||||
|
self.AccDown(v)
|
||||||
|
print("AccDown:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccUp(v)
|
||||||
|
print("AccUp:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
|
||||||
|
elif isinstance(x/v,int) and x < 0:
|
||||||
|
t = abs(x)/v
|
||||||
|
self.AccDown(v)
|
||||||
|
print("AccDown:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccUp(v)
|
||||||
|
print("AccUp:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.DiliveryGift(p)
|
||||||
|
print("Delivert gift to",p.name)
|
||||||
|
|
||||||
|
t = abs(x)/v
|
||||||
|
self.AccUp(v)
|
||||||
|
print("AccUp:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccDown(v)
|
||||||
|
print("AccDown:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
elif x < v and x > 0:
|
||||||
|
v = x
|
||||||
|
self.AccUp(v)
|
||||||
|
print("AccUp:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccDown(v)
|
||||||
|
print("AccDown:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.DiliveryGift(p)
|
||||||
|
print("Delivert gift to",p.name)
|
||||||
|
|
||||||
|
v = x
|
||||||
|
self.AccDown(v)
|
||||||
|
print("AccDown:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccUp(v)
|
||||||
|
print("AccUp:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
elif abs(x) < v and x < 0:
|
||||||
|
v = abs(x)
|
||||||
|
self.AccDown(v)
|
||||||
|
print("AccDown:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccUp(v)
|
||||||
|
print("AccUp:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.DiliveryGift(p)
|
||||||
|
print("Delivert gift to",p.name)
|
||||||
|
|
||||||
|
v = x
|
||||||
|
self.AccUp(v)
|
||||||
|
print("AccUp:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccDown(v)
|
||||||
|
print("AccDown:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
elif x > v and x > 0:
|
||||||
|
t = x//v
|
||||||
|
v1 = v - (x - t*v)
|
||||||
|
self.AccUp(v)
|
||||||
|
print("AccUp:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccDown(v1)
|
||||||
|
print("AccDown:",v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccDown(v - v1)
|
||||||
|
print("AccDown:",v - v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.DiliveryGift(p)
|
||||||
|
print("Delivert gift to",p.name)
|
||||||
|
|
||||||
|
t = x//v
|
||||||
|
v1 = v - (x - t*v)
|
||||||
|
self.AccDown(v)
|
||||||
|
print("AccDown:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccUp(v1)
|
||||||
|
print("AccUp:",v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccUp(v - v1)
|
||||||
|
print("AccUp:",v - v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
elif abs(x) > v and x < 0:
|
||||||
|
t = abs(x)//v
|
||||||
|
v1 = v - (abs(x) - t*v)
|
||||||
|
self.AccDown(v)
|
||||||
|
print("AccDown:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccUp(v1)
|
||||||
|
print("AccUp:",v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccUp(v - v1)
|
||||||
|
print("AccUp:",v - v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.DiliveryGift(p)
|
||||||
|
print("Delivert gift to",p.name)
|
||||||
|
|
||||||
|
t = abs(x)//v
|
||||||
|
v1 = v - (abs(x) - t*v)
|
||||||
|
self.AccUp(v)
|
||||||
|
print("AccUp:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccDown(v1)
|
||||||
|
print("AccDown:",v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccDown(v - v1)
|
||||||
|
print("AccDown:",v - v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
|
||||||
|
def oneWay(self, p:Person):
|
||||||
|
self.LoadCarrots(12)
|
||||||
|
print("LoarCarrots:12")
|
||||||
|
self.LoadGift(p.weightOfGift)
|
||||||
|
print("LoarGift:",p.weightOfGift)
|
||||||
|
v = self.nowSpeedLimit()
|
||||||
|
if isinstance(p.x_position/v,int) and p.x_position > 0:
|
||||||
|
t = p.x_position/v
|
||||||
|
self.AccRight(v)
|
||||||
|
print("AccRight:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccLeft(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.kidoneWay(p.y_position,p)
|
||||||
|
|
||||||
|
t = p.x_position/v
|
||||||
|
self.AccLeft(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccRight(v)
|
||||||
|
print("AccRight:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
|
||||||
|
elif isinstance(p.x_position/v,int) and p.x_position < 0:
|
||||||
|
t = abs(p.x_position)/v
|
||||||
|
self.AccLeft(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccRight(v)
|
||||||
|
print("AccRight:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.kidoneWay(p.y_position,p)
|
||||||
|
|
||||||
|
t = abs(p.x_position)/v
|
||||||
|
self.AccRight(v)
|
||||||
|
print("AccRight:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccLeft(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
elif p.x_position < v and p.x_position > 0:
|
||||||
|
v = p.x_position
|
||||||
|
self.AccRight(v)
|
||||||
|
print("AccRight:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccLeft(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.kidoneWay(p.y_position,p)
|
||||||
|
|
||||||
|
v = p.x_position
|
||||||
|
self.AccLeft(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccRight(v)
|
||||||
|
print("AccRight:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
elif abs(p.x_position) < v and p.x_position < 0:
|
||||||
|
v = abs(p.x_position)
|
||||||
|
self.AccLeft(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccRight(v)
|
||||||
|
print("AccRight:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.kidoneWay(p.y_position,p)
|
||||||
|
|
||||||
|
v = p.x_position
|
||||||
|
self.AccRight(v)
|
||||||
|
print("AccRight:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccLeft(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
elif p.x_position > v and p.x_position > 0:
|
||||||
|
t = p.x_position//v
|
||||||
|
v1 = v - (p.x_position - t*v)
|
||||||
|
self.AccRight(v)
|
||||||
|
print("AccRight:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccLeft(v1)
|
||||||
|
print("AccLeft:",v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccLeft(v - v1)
|
||||||
|
print("AccLeft:",v - v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.kidoneWay(p.y_position,p)
|
||||||
|
|
||||||
|
t = p.x_position//v
|
||||||
|
v1 = v - (p.x_position - t*v)
|
||||||
|
self.AccLeft(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccRight(v1)
|
||||||
|
print("AccRight:",v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccRight(v - v1)
|
||||||
|
print("AccRight:",v - v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
elif abs(p.x_position) > v and p.x_position < 0:
|
||||||
|
t = abs(p.x_position)//v
|
||||||
|
v1 = v - (abs(p.x_position) - t*v)
|
||||||
|
self.AccLeft(v)
|
||||||
|
print("AccLeft:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccRight(v1)
|
||||||
|
print("AccRight:",v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccRight(v - v1)
|
||||||
|
print("AccRight:",v - v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
|
||||||
|
self.kidoneWay(p.y_position,p)
|
||||||
|
|
||||||
|
t = abs(p.x_position)//v
|
||||||
|
v1 = v - (abs(p.x_position) - t*v)
|
||||||
|
self.AccRight(v)
|
||||||
|
print("AccRight:",v)
|
||||||
|
self.Float(t)
|
||||||
|
print("Float:",t)
|
||||||
|
self.AccLeft(v1)
|
||||||
|
print("AccLeft:",v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
self.AccLeft(v - v1)
|
||||||
|
print("AccLeft:",v - v1)
|
||||||
|
self.Float()
|
||||||
|
print("Float:",1)
|
||||||
|
else:
|
||||||
|
self.kidoneWay(p.y_position,p)
|
||||||
|
|
||||||
|
s = Santa()
|
||||||
|
|
||||||
pp = People()
|
pp = People()
|
||||||
|
|
||||||
|
s.oneWay(pp.info[2])
|
||||||
|
|
||||||
pp.visualization()
|
pp.visualization()
|
||||||
|
|
||||||
s.LoadCarrots(15)
|
s.LoadGift(10)
|
||||||
|
|
||||||
s.getWeight()
|
|
||||||
|
|
||||||
s.isAllowedBySpeedLimit(2)
|
|
||||||
|
|
||||||
s.deliveryDistanceLimit
|
|
||||||
|
|
||||||
s.AccDown(2)
|
|
||||||
|
|
||||||
|
pp.info[2].getPosition()
|
Loading…
x
Reference in New Issue
Block a user