diff --git a/hashcode2022_V_group.py b/hashcode2022_V_group.py index a603612..a171e29 100644 --- a/hashcode2022_V_group.py +++ b/hashcode2022_V_group.py @@ -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 drive.mount('/content/drive') @@ -6,8 +14,9 @@ from math import sqrt import matplotlib.pyplot as plt import numpy as np 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_Path = File_Directory+File_Name @@ -42,7 +51,7 @@ def 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) return d @@ -83,22 +92,14 @@ class People: plt.plot(x, y, 'o') plt.show() + + + + + class Santa: - # (x, y) - # 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 - """ class 2D: - x - y - - - - - - position:2D - position.x += speed*t - """ - position = (0.0,0.0) - speed = (0.0,0.0) + position = [0.0,0.0] + speed = [0.0,0.0] weightOfCarrots:int = 0 weightOfGift:int = 0 def __init__(self): @@ -128,6 +129,7 @@ class Santa: return 0 + # DONE 此速度限制speedLimit为限制表不是当前限制,我们下一步要定义nowspeedLimit def isAllowedBySpeedLimit(self, s): return s <= self.nowSpeedLimit() @@ -163,21 +165,361 @@ class Santa: assert self.weightOfGift >= 0 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() +s.oneWay(pp.info[2]) + pp.visualization() -s.LoadCarrots(15) - -s.getWeight() - -s.isAllowedBySpeedLimit(2) - -s.deliveryDistanceLimit - -s.AccDown(2) +s.LoadGift(10) +pp.info[2].getPosition() \ No newline at end of file