from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) author = 'Mingxian Jin' doc = """ Your app description """ C = [1000] D = [1000] E = [1000] A = [0] B = [0] F = [0] import random class Constants(BaseConstants): name_in_url = 'cutcake_leftmost_4' players_per_group = 4 num_rounds = 7 class Subsession(BaseSubsession): def creating_session(self): if self.round_number == 1: self.group_randomly() else: self.group_like_round(1) class Group(BaseGroup): def check_overlapping_1(self): e = 0 f = [] for value in A: e += value if e != 1: for i in self.get_players(): if i.dropout == 1: f.append(i.id_in_group) g = random.sample(f,1) for i in self.get_players(): if [i.id_in_group] == g : i.dropout = 1 else: i.dropout = 0 def check_overlapping_2(self): e = 0 f = [] for value in B: e += value if e != 1: for i in self.get_players(): if i.seconddropout == 1: f.append(i.id_in_group) g = random.sample(f, 1) for i in self.get_players(): if [i.id_in_group] == g: i.seconddropout = 1 else: i.seconddropout = 0 def check_overlapping_3(self): e = 0 f = [] for value in F: e += value if e != 1: for i in self.get_players(): if i.thirddropout == 1: f.append(i.id_in_group) g = random.sample(f, 1) for i in self.get_players(): if [i.id_in_group] == g: i.thirddropout = 1 else: i.thirddropout = 0 class Player(BasePlayer): cut_value = models.IntegerField(initial=0) dropout = models.IntegerField() leftmostvalue_1 = models.IntegerField() firstcut = models.IntegerField() secondcut_value = models.IntegerField(initial = 2000) seconddropout = models.IntegerField(initial = 0) secondcut = models.IntegerField() leftmostvalue_2 = models.IntegerField() thirdcut_value = models.IntegerField(initial=2000) thirddropout = models.IntegerField(initial= 0) thirdcut = models.IntegerField() leftmostvalue_3 = models.IntegerField() whatsleft = models.IntegerField() payoff_help = models.CurrencyField(initial= 0) envy = models.BooleanField() planned_leftpiece_1 = models.IntegerField() truth_telling_1st_stage = models.BooleanField() planned_leftpiece_2 = models.IntegerField() truth_telling_2nd_stage = models.BooleanField() planned_leftpiece_3 = models.IntegerField() truth_telling_3rd_stage = models.BooleanField() def find_min(self): if self.id_in_group == 1: C.insert(1,self.cut_value) elif self.id_in_group == 2: C.insert(2,self.cut_value) elif self.id_in_group == 3: C.insert(3, self.cut_value) elif self.id_in_group == 4: C.insert(4, self.cut_value) def dim_find_min(self): if self.id_in_group == 1: C.pop(4) elif self.id_in_group == 2: C.pop(3) elif self.id_in_group == 3: C.pop(2) elif self.id_in_group == 4: C.pop(1) def find_leftmost(self): if self.cut_value == min(C): self.dropout = 1 else: self.dropout = 0 def check_dropout(self): if self.id_in_group == 1: A.insert(1,self.dropout) elif self.id_in_group == 2: A.insert(2, self.dropout) elif self.id_in_group == 3: A.insert(3, self.dropout) elif self.id_in_group == 4: A.insert(4, self.dropout) def dim_check_dropout(self): if self.id_in_group == 1: A.pop(4) elif self.id_in_group == 2: A.pop(3) elif self.id_in_group == 3: A.pop(2) elif self.id_in_group == 4: A.pop(1) def find_firstcut(self): self.firstcut = min(C) def find_leftmostvalue_1(self): if self.id_in_group == 1: if self.firstcut <= 60: self.leftmostvalue_1 = 0 elif self.firstcut <= 80: self.leftmostvalue_1 = self.firstcut - 60 elif self.firstcut <= 140: self.leftmostvalue_1 = 20 elif self.firstcut <= 170: self.leftmostvalue_1 = self.firstcut - 140 + 20 elif self.firstcut <= 240: self.leftmostvalue_1 = 50 elif self.firstcut <= 270: self.leftmostvalue_1 = self.firstcut - 240 + 50 elif self.firstcut <= 370: self.leftmostvalue_1 = 80 elif self.firstcut <= 390: self.leftmostvalue_1 = self.firstcut - 370 + 80 elif self.firstcut <= 490: self.leftmostvalue_1 = 100 elif self.firstcut <= 510: self.leftmostvalue_1 = self.firstcut - 490 + 100 else: self.leftmostvalue_1 = 120 if self.id_in_group == 2: if self.firstcut <= 60: self.leftmostvalue_1 = 0 elif self.firstcut <= 90: self.leftmostvalue_1 = self.firstcut - 60 elif self.firstcut <= 180: self.leftmostvalue_1 = 30 elif self.firstcut <= 210: self.leftmostvalue_1 = self.firstcut - 180 + 30 elif self.firstcut <= 300: self.leftmostvalue_1 = 60 elif self.firstcut <= 330: self.leftmostvalue_1 = self.firstcut - 300 + 60 elif self.firstcut <= 420: self.leftmostvalue_1 = 90 elif self.firstcut <= 450: self.leftmostvalue_1 = self.firstcut - 420 + 90 else: self.leftmostvalue_1 = 120 if self.id_in_group == 3: if self.firstcut <= 90: self.leftmostvalue_1 = 0 elif self.firstcut <= 120: self.leftmostvalue_1 = self.firstcut - 90 elif self.firstcut <= 210: self.leftmostvalue_1 = 30 elif self.firstcut <= 240: self.leftmostvalue_1 = self.firstcut - 210 + 30 elif self.firstcut <= 330: self.leftmostvalue_1 = 60 elif self.firstcut <= 360: self.leftmostvalue_1 = self.firstcut - 330 + 60 elif self.firstcut <= 450: self.leftmostvalue_1 = 90 elif self.firstcut <= 480: self.leftmostvalue_1 = self.firstcut - 450 + 90 else: self.leftmostvalue_1 = 120 if self.id_in_group == 4: if self.firstcut <= 150: self.leftmostvalue_1 = 0 elif self.firstcut <= 180: self.leftmostvalue_1 = self.firstcut - 150 elif self.firstcut <= 270: self.leftmostvalue_1 = 30 elif self.firstcut <= 300: self.leftmostvalue_1 = self.firstcut - 270 + 30 elif self.firstcut <= 390: self.leftmostvalue_1 = 60 elif self.firstcut <= 420: self.leftmostvalue_1 = self.firstcut - 390 + 60 elif self.firstcut <= 510: self.leftmostvalue_1 = 90 elif self.firstcut <= 540: self.leftmostvalue_1 = self.firstcut - 510 + 90 else: self.leftmostvalue_1 = 120 def find_min_2(self): if self.id_in_group == 1: D.insert(1, self.secondcut_value) elif self.id_in_group == 2: D.insert(2, self.secondcut_value) elif self.id_in_group == 3: D.insert(3, self.secondcut_value) elif self.id_in_group == 4: D.insert(4, self.secondcut_value) def dim_find_min_2(self): if self.id_in_group == 1: D.pop(4) elif self.id_in_group == 2: D.pop(3) elif self.id_in_group == 3: D.pop(2) elif self.id_in_group == 4: D.pop(1) def find_leftmost_2(self): if self.secondcut_value == min(D): self.seconddropout = 1 else: self.seconddropout = 0 def check_seconddropout(self): if self.id_in_group == 1: B.insert(1, self.seconddropout) elif self.id_in_group == 2: B.insert(2, self.seconddropout) elif self.id_in_group == 3: B.insert(3, self.seconddropout) elif self.id_in_group == 4: B.insert(4, self.seconddropout) def dim_check_seconddropout(self): if self.id_in_group == 1: B.pop(4) elif self.id_in_group == 2: B.pop(3) elif self.id_in_group == 3: B.pop(2) elif self.id_in_group == 3: B.pop(1) def find_secondcut(self): self.secondcut = min(D) def find_leftmostvalue_2(self): if self.id_in_group == 1: if self.secondcut <= 60: self.leftmostvalue_2 = 0 elif self.secondcut <= 80: self.leftmostvalue_2 = max(self.secondcut - 60 - self.leftmostvalue_1,0) elif self.secondcut <= 140: self.leftmostvalue_2 = max(20 - self.leftmostvalue_1,0) elif self.secondcut <= 170: self.leftmostvalue_2 = max(self.secondcut - 140 + 20 - self.leftmostvalue_1,0) elif self.secondcut <= 240: self.leftmostvalue_2 = max(50 - self.leftmostvalue_1,0) elif self.secondcut <= 270: self.leftmostvalue_2 = max(self.secondcut - 240 + 50 - self.leftmostvalue_1,0) elif self.secondcut <= 370: self.leftmostvalue_2 = max(80 - self.leftmostvalue_1, 0) elif self.secondcut <= 390: self.leftmostvalue_2 = max(self.secondcut - 370 + 80 - self.leftmostvalue_1, 0) elif self.secondcut <= 490: self.leftmostvalue_2 = max(100 - self.leftmostvalue_1, 0) elif self.secondcut <= 510: self.leftmostvalue_2 = max(self.secondcut - 490 + 100 - self.leftmostvalue_1, 0) else: self.leftmostvalue_2 = 120 - self.leftmostvalue_1 if self.id_in_group == 2: if self.secondcut <= 60: self.leftmostvalue_2 = 0 elif self.secondcut <= 90: self.leftmostvalue_2 = max(self.secondcut - 60 - self.leftmostvalue_1,0) elif self.secondcut <= 180: self.leftmostvalue_2 = max(30 - self.leftmostvalue_1,0) elif self.secondcut <= 210: self.leftmostvalue_2 = max(self.secondcut - 180 + 30 - self.leftmostvalue_1,0) elif self.secondcut <= 300: self.leftmostvalue_2 = max(60 - self.leftmostvalue_1,0) elif self.secondcut <= 330: self.leftmostvalue_2 = max(self.secondcut - 300 + 60 - self.leftmostvalue_1,0) elif self.secondcut <= 420: self.leftmostvalue_2 = max(90 - self.leftmostvalue_1, 0) elif self.secondcut <= 450: self.leftmostvalue_2 = max(self.secondcut - 420 + 90 - self.leftmostvalue_1, 0) else: self.leftmostvalue_2 = 120 - self.leftmostvalue_1 if self.id_in_group == 3: if self.secondcut <= 90: self.leftmostvalue_2 = 0 elif self.secondcut <= 120: self.leftmostvalue_2 = max(self.secondcut - 90 - self.leftmostvalue_1, 0) elif self.secondcut <= 210: self.leftmostvalue_2 = max(30 - self.leftmostvalue_1, 0) elif self.secondcut <= 240: self.leftmostvalue_2 = max(self.secondcut - 210 + 30 - self.leftmostvalue_1, 0) elif self.secondcut <= 330: self.leftmostvalue_2 = max(60 - self.leftmostvalue_1, 0) elif self.secondcut <= 360: self.leftmostvalue_2 = max(self.secondcut - 330 + 60 - self.leftmostvalue_1, 0) elif self.secondcut <= 450: self.leftmostvalue_2 = max(90 - self.leftmostvalue_1, 0) elif self.secondcut <= 480: self.leftmostvalue_2 = max(self.secondcut - 450 + 90 - self.leftmostvalue_1, 0) else: self.leftmostvalue_2 = 120 - self.leftmostvalue_1 if self.id_in_group == 4: if self.secondcut <= 150: self.leftmostvalue_2 = 0 elif self.secondcut <= 180: self.leftmostvalue_2 = max(self.secondcut - 150 - self.leftmostvalue_1, 0) elif self.secondcut <= 270: self.leftmostvalue_2 = max(30 - self.leftmostvalue_1, 0) elif self.secondcut <= 300: self.leftmostvalue_2 = max(self.secondcut - 270 + 30 - self.leftmostvalue_1, 0) elif self.secondcut <= 390: self.leftmostvalue_2 = max(60 - self.leftmostvalue_1, 0) elif self.secondcut <= 420: self.leftmostvalue_2 = max(self.secondcut - 390 + 60 - self.leftmostvalue_1, 0) elif self.secondcut <= 510: self.leftmostvalue_2 = max(90 - self.leftmostvalue_1, 0) elif self.secondcut <= 540: self.leftmostvalue_2 = max(self.secondcut - 510 + 90 - self.leftmostvalue_1, 0) else: self.leftmostvalue_2 = 120 - self.leftmostvalue_1 def find_min_3(self): if self.id_in_group == 1: E.insert(1, self.thirdcut_value) elif self.id_in_group == 2: E.insert(2, self.thirdcut_value) elif self.id_in_group == 3: E.insert(3, self.thirdcut_value) elif self.id_in_group == 4: E.insert(4, self.thirdcut_value) def dim_find_min_3(self): if self.id_in_group == 1: E.pop(4) elif self.id_in_group == 2: E.pop(3) elif self.id_in_group == 3: E.pop(2) elif self.id_in_group == 4: E.pop(1) def find_leftmost_3(self): if self.thirdcut_value == min(E): self.thirddropout = 1 else: self.thirddropout = 0 def check_thirddropout(self): if self.id_in_group == 1: F.insert(1, self.thirddropout) elif self.id_in_group == 2: F.insert(2, self.thirddropout) elif self.id_in_group == 3: F.insert(3, self.thirddropout) elif self.id_in_group == 4: F.insert(4, self.thirddropout) def dim_check_thirddropout(self): if self.id_in_group == 1: F.pop(4) elif self.id_in_group == 2: F.pop(3) elif self.id_in_group == 3: F.pop(2) elif self.id_in_group == 3: F.pop(1) def find_thirdcut(self): self.thirdcut = min(E) def find_leftmostvalue_3(self): if self.id_in_group == 1: if self.thirdcut <= 60: self.leftmostvalue_3 = 0 elif self.thirdcut <= 80: self.leftmostvalue_3 = max(self.thirdcut - 60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 140: self.leftmostvalue_3 = max(20 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 170: self.leftmostvalue_3 = max(self.thirdcut - 140 + 20 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 240: self.leftmostvalue_3 = max(50 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 270: self.leftmostvalue_3 = max(self.thirdcut - 240 + 50 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 370: self.leftmostvalue_3 = max(80 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 390: self.leftmostvalue_3 = max(self.thirdcut - 370 + 80 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 490: self.leftmostvalue_3 = max(100 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 510: self.leftmostvalue_3 = max(self.thirdcut - 490 + 100 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) else: self.leftmostvalue_3 = 120 - self.leftmostvalue_1 - self.leftmostvalue_2 if self.id_in_group == 2: if self.thirdcut <= 60: self.leftmostvalue_3 = 0 elif self.thirdcut <= 90: self.leftmostvalue_3 = max(self.thirdcut - 60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 180: self.leftmostvalue_3 = max(30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 210: self.leftmostvalue_3 = max(self.thirdcut - 180 + 30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 300: self.leftmostvalue_3 = max(60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 330: self.leftmostvalue_3= max(self.thirdcut - 300 + 60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 420: self.leftmostvalue_3 = max(90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 450: self.leftmostvalue_3 = max(self.thirdcut - 420 + 90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) else: self.leftmostvalue_3 = 120 - self.leftmostvalue_1 - self.leftmostvalue_2 if self.id_in_group == 3: if self.thirdcut <= 90: self.leftmostvalue_3 = 0 elif self.thirdcut <= 120: self.leftmostvalue_3 = max(self.thirdcut - 90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 210: self.leftmostvalue_3 = max(30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 240: self.leftmostvalue_3 = max(self.thirdcut - 210 + 30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 330: self.leftmostvalue_3 = max(60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 360: self.leftmostvalue_3 = max(self.thirdcut - 330 + 60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 450: self.leftmostvalue_3 = max(90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 480: self.leftmostvalue_3 = max(self.thirdcut - 450 + 90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) else: self.leftmostvalue_3 = 120 - self.leftmostvalue_1 -self.leftmostvalue_2 if self.id_in_group == 4: if self.thirdcut <= 150: self.leftmostvalue_3 = 0 elif self.thirdcut <= 180: self.leftmostvalue_3 = max(self.thirdcut - 150 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 270: self.leftmostvalue_3 = max(30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 300: self.leftmostvalue_3 = max(self.thirdcut - 270 + 30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 390: self.leftmostvalue_3 = max(60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 420: self.leftmostvalue_3 = max(self.thirdcut - 390 + 60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 510: self.leftmostvalue_3 = max(90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut <= 540: self.leftmostvalue_3 = max(self.thirdcut - 510 + 90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) else: self.leftmostvalue_3 = 120 - self.leftmostvalue_1 - self.leftmostvalue_2 def get_whatsleft(self): self.whatsleft = 120 - self.leftmostvalue_1 - self.leftmostvalue_2 - self.leftmostvalue_3 def get_payoff(self): if self.dropout == 1: self.payoff = c(self.leftmostvalue_1) elif self.seconddropout == 1: self.payoff = c(self.leftmostvalue_2) elif self.thirddropout == 1: self.payoff = c(self.leftmostvalue_3) else: self.payoff = c(self.whatsleft) def set_envy(self): if self.dropout == 1: if self.leftmostvalue_1 >= self.leftmostvalue_2 and self.leftmostvalue_1 >= self.leftmostvalue_3 and self.leftmostvalue_1 >= self.whatsleft: self.envy = False else: self.envy = True elif self.seconddropout == 1: if self.leftmostvalue_2 >= self.leftmostvalue_1 and self.leftmostvalue_2 >= self.leftmostvalue_3 and self.leftmostvalue_2 >= self.whatsleft: self.envy = False else: self.envy = True elif self.thirddropout == 1: if self.leftmostvalue_3 >= self.leftmostvalue_1 and self.leftmostvalue_3 >= self.leftmostvalue_2 and self.leftmostvalue_3 >= self.whatsleft: self.envy = False else: self.envy = True else: if self.whatsleft >= self.leftmostvalue_1 and self.whatsleft >= self.leftmostvalue_2 and self.whatsleft >= self.leftmostvalue_3: self.envy = False else: self.envy = True def score_calculation(self): self.payoff_help = self.in_round(1).payoff + self.in_round(2).payoff + self.in_round( 3).payoff + self.in_round(4).payoff + self.in_round(5).payoff + self.in_round(6).payoff + self.in_round(7).payoff def set_planned_leftpiece_1(self): if self.id_in_group == 1: if self.cut_value <= 60: self.planned_leftpiece_1 = 0 elif self.cut_value <= 80: self.planned_leftpiece_1 = self.cut_value - 60 elif self.cut_value <= 140: self.planned_leftpiece_1 = 20 elif self.cut_value <= 170: self.planned_leftpiece_1 = self.cut_value - 140 + 20 elif self.cut_value <= 240: self.planned_leftpiece_1 = 50 elif self.cut_value <= 270: self.planned_leftpiece_1 = self.cut_value - 240 + 50 elif self.cut_value <= 370: self.planned_leftpiece_1 = 80 elif self.cut_value <= 390: self.planned_leftpiece_1 = self.cut_value - 370 + 80 elif self.cut_value <= 490: self.planned_leftpiece_1 = 100 elif self.cut_value <= 510: self.planned_leftpiece_1 = self.cut_value - 490 + 100 else: self.planned_leftpiece_1 = 120 if self.id_in_group == 2: if self.cut_value <= 60: self.planned_leftpiece_1 = 0 elif self.cut_value <= 90: self.planned_leftpiece_1 = self.cut_value - 60 elif self.cut_value <= 180: self.planned_leftpiece_1 = 30 elif self.cut_value <= 210: self.planned_leftpiece_1 = self.cut_value - 180 + 30 elif self.cut_value <= 300: self.planned_leftpiece_1 = 60 elif self.cut_value <= 330: self.planned_leftpiece_1 = self.cut_value - 300 + 60 elif self.cut_value <= 420: self.planned_leftpiece_1 = 90 elif self.cut_value <= 450: self.planned_leftpiece_1 = self.cut_value - 420 + 90 else: self.planned_leftpiece_1 = 120 if self.id_in_group == 3: if self.cut_value <= 90: self.planned_leftpiece_1 = 0 elif self.cut_value <= 120: self.planned_leftpiece_1 = self.cut_value - 90 elif self.cut_value <= 210: self.planned_leftpiece_1 = 30 elif self.cut_value <= 240: self.planned_leftpiece_1 = self.cut_value - 210 + 30 elif self.cut_value <= 330: self.planned_leftpiece_1 = 60 elif self.cut_value <= 360: self.planned_leftpiece_1 = self.cut_value - 330 + 60 elif self.cut_value <= 450: self.planned_leftpiece_1 = 90 elif self.cut_value <= 480: self.planned_leftpiece_1 = self.cut_value - 450 + 90 else: self.planned_leftpiece_1 = 120 if self.id_in_group == 4: if self.cut_value <= 150: self.planned_leftpiece_1 = 0 elif self.cut_value <= 180: self.planned_leftpiece_1 = self.cut_value - 150 elif self.cut_value <= 270: self.planned_leftpiece_1 = 30 elif self.cut_value <= 300: self.planned_leftpiece_1 = self.cut_value - 270 + 30 elif self.cut_value <= 390: self.planned_leftpiece_1 = 60 elif self.cut_value <= 420: self.planned_leftpiece_1 = self.cut_value - 390 + 60 elif self.cut_value <= 510: self.planned_leftpiece_1 = 90 elif self.cut_value <= 540: self.planned_leftpiece_1 = self.cut_value - 510 + 90 else: self.planned_leftpiece_1 = 120 def set_truthtelling_1st_stage(self): if self.planned_leftpiece_1 >= 25 and self.planned_leftpiece_1 <= 35: self.truth_telling_1st_stage = True else: self.truth_telling_1st_stage = False def set_planned_leftpiece_2(self): if self.id_in_group == 1 and self.dropout == 0: if self.secondcut_value <= 60: self.planned_leftpiece_2 = 0 elif self.secondcut_value <= 80: self.planned_leftpiece_2 = max(self.secondcut_value - 60 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 140: self.planned_leftpiece_2 = max(20 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 170: self.planned_leftpiece_2 = max(self.secondcut_value - 140 + 20 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 240: self.planned_leftpiece_2 = max(50 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 270: self.planned_leftpiece_2 = max(self.secondcut_value - 240 + 50 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 370: self.planned_leftpiece_2 = max(80 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 390: self.planned_leftpiece_2 = max(self.secondcut_value - 370 + 80 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 490: self.planned_leftpiece_2 = max(100 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 510: self.planned_leftpiece_2 = max(self.secondcut_value - 490 + 100 - self.leftmostvalue_1, 0) else: self.planned_leftpiece_2 = 120 - self.leftmostvalue_1 if self.id_in_group == 2 and self.dropout == 0: if self.secondcut_value <= 60: self.planned_leftpiece_2 = 0 elif self.secondcut_value <= 90: self.planned_leftpiece_2 = max(self.secondcut_value - 60 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 180: self.planned_leftpiece_2 = max(30 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 210: self.planned_leftpiece_2 = max(self.secondcut_value - 180 + 30 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 300: self.planned_leftpiece_2 = max(60 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 330: self.planned_leftpiece_2 = max(self.secondcut_value - 300 + 60 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 420: self.planned_leftpiece_2 = max(90 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 450: self.planned_leftpiece_2 = max(self.secondcut_value - 420 + 90 - self.leftmostvalue_1, 0) else: self.planned_leftpiece_2 = 120 - self.leftmostvalue_1 if self.id_in_group == 3 and self.dropout == 0: if self.secondcut_value <= 90: self.planned_leftpiece_2 = 0 elif self.secondcut_value <= 120: self.planned_leftpiece_2 = max(self.secondcut_value - 90 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 210: self.planned_leftpiece_2 = max(30 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 240: self.planned_leftpiece_2 = max(self.secondcut_value - 210 + 30 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 330: self.planned_leftpiece_2 = max(60 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 360: self.planned_leftpiece_2 = max(self.secondcut_value - 330 + 60 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 450: self.planned_leftpiece_2 = max(90 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 480: self.planned_leftpiece_2 = max(self.secondcut_value - 450 + 90 - self.leftmostvalue_1, 0) else: self.planned_leftpiece_2 = 120 - self.leftmostvalue_1 if self.id_in_group == 4 and self.dropout == 0: if self.secondcut_value <= 150: self.planned_leftpiece_2 = 0 elif self.secondcut_value <= 180: self.planned_leftpiece_2 = max(self.secondcut_value - 150 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 270: self.planned_leftpiece_2 = max(30 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 300: self.planned_leftpiece_2 = max(self.secondcut_value - 270 + 30 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 390: self.planned_leftpiece_2 = max(60 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 420: self.planned_leftpiece_2 = max(self.secondcut_value - 390 + 60 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 510: self.planned_leftpiece_2 = max(90 - self.leftmostvalue_1, 0) elif self.secondcut_value <= 540: self.planned_leftpiece_2 = max(self.secondcut_value - 510 + 90 - self.leftmostvalue_1, 0) else: self.planned_leftpiece_2 = 120 - self.leftmostvalue_1 def set_truthtelling_2nd_stage(self): if self.dropout == 0 and self.planned_leftpiece_2 >= int((120 - self.leftmostvalue_1)/3) - 5 and self.planned_leftpiece_2 <= int((120 - self.leftmostvalue_1)/3) + 5: self.truth_telling_2nd_stage = True elif self.dropout == 0 and self.planned_leftpiece_2 < int((120 - self.leftmostvalue_1)/3) - 5 or self.dropout == 0 and self.planned_leftpiece_2 > int((120 - self.leftmostvalue_1)/3) + 5: self.truth_telling_2nd_stage = False def set_planned_leftpiece_3(self): if self.dropout == 0 and self.seconddropout == 0 and self.id_in_group == 1: if self.thirdcut_value <= 60: self.planned_leftpiece_3 = 0 elif self.thirdcut_value <= 80: self.planned_leftpiece_3 = max(self.thirdcut_value - 60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 140: self.planned_leftpiece_3 = max(20 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 170: self.planned_leftpiece_3 = max(self.thirdcut_value - 140 + 20 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 240: self.planned_leftpiece_3 = max(50 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 270: self.planned_leftpiece_3 = max(self.thirdcut_value - 240 + 50 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 370: self.planned_leftpiece_3 = max(80 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 390: self.planned_leftpiece_3 = max(self.thirdcut_value - 370 + 80 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 490: self.planned_leftpiece_3 = max(100 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 510: self.planned_leftpiece_3 = max(self.thirdcut_value - 490 + 100 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) else: self.planned_leftpiece_3 = 120 - self.leftmostvalue_1 - self.leftmostvalue_2 if self.dropout == 0 and self.seconddropout == 0 and self.id_in_group == 2: if self.thirdcut_value <= 60: self.planned_leftpiece_3 = 0 elif self.thirdcut_value <= 90: self.planned_leftpiece_3 = max(self.thirdcut_value - 60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 180: self.planned_leftpiece_3 = max(30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 210: self.planned_leftpiece_3 = max(self.thirdcut_value - 180 + 30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 300: self.planned_leftpiece_3 = max(60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 330: self.planned_leftpiece_3 = max(self.thirdcut_value - 300 + 60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 420: self.planned_leftpiece_3 = max(90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 450: self.planned_leftpiece_3 = max(self.thirdcut_value - 420 + 90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) else: self.planned_leftpiece_3 = 120 - self.leftmostvalue_1 - self.leftmostvalue_2 if self.dropout == 0 and self.seconddropout == 0 and self.id_in_group == 3: if self.thirdcut_value <= 90: self.planned_leftpiece_3 = 0 elif self.thirdcut_value <= 120: self.planned_leftpiece_3 = max(self.thirdcut_value - 90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 210: self.planned_leftpiece_3 = max(30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 240: self.planned_leftpiece_3 = max(self.thirdcut_value - 210 + 30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 330: self.planned_leftpiece_3 = max(60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 360: self.planned_leftpiece_3 = max(self.thirdcut_value - 330 + 60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 450: self.planned_leftpiece_3 = max(90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 480: self.planned_leftpiece_3 = max(self.thirdcut_value - 450 + 90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) else: self.planned_leftpiece_3 = 120 - self.leftmostvalue_1 - self.leftmostvalue_2 if self.dropout == 0 and self.seconddropout == 0 and self.id_in_group == 4: if self.thirdcut_value <= 150: self.planned_leftpiece_3 = 0 elif self.thirdcut_value <= 180: self.planned_leftpiece_3 = max(self.thirdcut_value - 150 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 270: self.planned_leftpiece_3 = max(30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 300: self.planned_leftpiece_3 = max(self.thirdcut_value - 270 + 30 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 390: self.planned_leftpiece_3 = max(60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 420: self.planned_leftpiece_3 = max(self.thirdcut_value - 390 + 60 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 510: self.planned_leftpiece_3 = max(90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) elif self.thirdcut_value <= 540: self.planned_leftpiece_3 = max(self.thirdcut_value - 510 + 90 - self.leftmostvalue_1 - self.leftmostvalue_2, 0) else: self.planned_leftpiece_3 = 120 - self.leftmostvalue_1 - self.leftmostvalue_2 def set_truthtelling_3rd_stage(self): if self.dropout == 0 and self.seconddropout == 0 and self.planned_leftpiece_3 >= int((120 - self.leftmostvalue_1 - self.leftmostvalue_2)/2) -5 and self.planned_leftpiece_3 <= int((120 - self.leftmostvalue_1 - self.leftmostvalue_2)/2) + 5: self.truth_telling_3rd_stage = True elif self.dropout == 0 and self.seconddropout == 0 and self.planned_leftpiece_3 < int((120 - self.leftmostvalue_1 - self.leftmostvalue_2)/2) -5 or self.dropout == 0 and self.seconddropout == 0 and self.planned_leftpiece_3 > int((120 - self.leftmostvalue_1 - self.leftmostvalue_2)/2) + 5: self.truth_telling_3rd_stage = False