Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML #!/usr/bin/python import random class Game (object): def __init__ (self, number= 6 ): if number > 10 : exit() self .number = number self .secret = self . make_secret ( self .number) self .main() def is_right_secret (self, secret): """check all digits are different""" dct = {} for digit in secret: try : if dct[digit]: return False except KeyError: dct[digit] = True return True def make_secret (self, number): """generate number-counted secret""" while True: result = "" for i in range (number): result += "%d" % random .randint( 0 , 9 ) if self . is_right_secret (result): return result
Copy Source | Copy HTML
- def count_bulls_cows (self, number, secret):
- "" "count bulls and cows in number / secret" ""
- cows, bulls = 0 , 0
- dct = {}
- for i in range ( len (secret)):
- if secret [i] == number [i]:
- bulls + = 1
- else :
- dct [secret [i]] = True
- try :
- if dct [number [i]]:
- cows + = 1
- except KeyError:
- pass
- return bulls, cows
Copy Source | Copy HTML
- MESS_NUMBER_DIGITS = "number_digits" #start message
- MESS_GUESS = "guess!"
- MESS_COWS = "cows:" #If the matching digits on different positions, they are "cows"
- MESS_BULLS = "bulls:" #If the matching digits are on their right positions, they are "bulls"
- MESS_BULLS_COWS_SPLIT = "|" #Splitter between cows and bulls message
- MAX_TURN_NUMBER = 1000
Copy Source | Copy HTML
- def main (self):
- for player in self .players:
- player.connect ()
- player.send ( "% s% d" % (MESS_NUMBER_DIGITS, self .number))
- print ( "% s% d" % (MESS_NUMBER_DIGITS, self .number))
- starttime = time . time ()
- while true:
- if player.turns> MAX_TURN_NUMBER:
- print ">>>> Player '% s' turns timeout" % player.name
- player.disconnect ()
- break
- answer = player.recieve ()
- print ">>>> Answer is% s" % answer
- if len ( self .secret)! = len (answer):
- self .stop_game ( "wrong number" )
- bulls, cows = self .count_bulls_cows (answer, self .secret)
- if bulls == self .number:
- player.time = time . time () - starttime
- player.send ( "% s" % MESS_GUESS)
- player.disconnect ()
- print ">>>> Player disconected"
- break
- else :
- player.turns + = 1
- player.send ( "% s% d% s% s% d" % (MESS_BULLS, bulls, \
- MESS_BULLS_COWS_SPLIT, MESS_COWS, cows))
- print ( ">>>>% s% d% s% s% d" % (MESS_BULLS, bulls, \
- MESS_BULLS_COWS_SPLIT, MESS_COWS, cows))
- winner = self .players [ 0 ]
- for player in self .players:
- if player.turns <winner.turns:
- winner = player
- print ">>>> Winner name:% s" % winner.name
Copy Source | Copy HTML
- class Player (object):
- def __init__ (self, name, progname):
- self .name = name
- self .turns = 0
- self .time = - 1
- self .progname = progname
- def connect (self):
- self .__ proc = subprocess .Popen ( self .progname, stdin = subprocess .PIPE, \
- stdout = subprocess .PIPE)
- def send (self, sendstring):
- self .__ proc.stdin.write (sendstring + '\ n' )
- def recieve (self)
- return self .__ proc.stdout. readline () .strip ( '\ n' )
- def disconnect (self)
- self .__ proc.terminate ()
Copy Source | Copy HTML
- def __init__ (self, number, players_progs):
- if number> 10 :
- exit ()
- self .number = number
- self .secret = self .make_secret ( self .number)
- self .players = []
- for playername in players_progs:
- self .players.append (Player (playername, players_progs [playername]))
- self .main ()
Copy Source | Copy HTML
- #! / usr / bin / python
- import random
- import sys
- MESS_NUMBER_DIGITS = "number_digits" #start message
- MESS_GUESS = "guess!"
- MESS_COWS = "cows:" #If the matching digits on different positions, they are "cows"
- MESS_BULLS = "bulls:" #If the matching digits are on their right positions, they are "bulls"
- MESS_BULLS_COWS_SPLIT = "|" #Splitter between cows and bulls message
- class MooPlayer (object):
- ## technical functions
- def send (self, st):
- sys .stdout.write ( "% s \ n" % st)
- sys .stdout.flush ()
- def recieve (self):
- return sys .stdin. readline () .strip ( "\ n" )
- def number_split (self, st):
- num = st.split ( '' )
- if num [ 0 ] == MESS_NUMBER_DIGITS:
- return int (num [ 1 ])
- else :
- exit ()
- def answer_split (self, st):
- try :
- bullst, cowst = st.split (MESS_BULLS_COWS_SPLIT)
- except ValueError:
- exit ()
- bulls, cows = bullst.split ( '' ), cowst.split ( '' )
- if bulls [ 0 ] == MESS_BULLS and cows [ 0 ] == MESS_COWS:
- return bulls [ 1 ], cows [ 1 ]
- else :
- exit ()
- def main (self):
- self .number = self . number_split ( self . recieve ())
- while true:
- try :
- self .oldguess = guess
- guess = self . guess (cows = cows, bulls = bulls, firstrun = False)
- except NameError:
- guess = self . guess (firstrun = true)
- self . send ( guess )
- answer = self . recieve ()
- if answer == MESS_GUESS:
- exit ()
- else :
- bulls, cows = self . answer_split (answer)
- ## some functions
- def is_right_secret (self, secret):
- "" "check all digits are different" ""
- dct = {}
- for digit in secret:
- try :
- if dct [digit]:
- return false
- except KeyError:
- dct [digit] = True
- return true
- def generate_number (self, number):
- "" "generate number-counted secret" ""
- while true:
- result = ""
- for i in range (number):
- result + = "% d" % random .randint ( 0 , 9 )
- if self . is_right_secret (result):
- return result
- ############ Main guess function ###########
- def guess (self, firstrun, bulls = 0 , cows = 0 ):
- "This is the main api function. It means that it is the first time run. <br/> bulls / cows number. <br/> also you have: <br/> self.number - number of digits <br/> self.oldguess - old guess try <br/> "" "
- return self . generate_number ( self .number)
- if __name__ == "__main__" :
- mooplayer = mooplayer ()
- mooplayer. main ()
>>number_digits 4
5032
>>bulls: 0|cows: 0
4123
>>bulls: 0|cows: 0
2890
>>bulls: 0|cows: 0
2691
>>guess!
Copy Source | Copy HTML
- if __name__ == "__main__" :
- game = Game ( 2 , { 'Player1' : "api / mooapi.py" , 'Player2' : "api / mooapi.py" , 'HabraMan' : "api / mooapi.py" })
>>>> bulls: 0|cows: 1
>>>> Answer is 67
>>>> bulls:1 cows:0
>>>> bulls: 1|cows: 0
>>>> Answer is 87
>>>> bulls:0 cows:0
>>>> bulls: 0|cows: 0
>>>> Answer is 49
>>>> bulls:0 cows:0
>>>> bulls: 0|cows: 0
>>>> Answer is 54
>>>> bulls:0 cows:0
>>>> bulls: 0|cows: 0
>>>> Answer is 82
>>>> bulls:1 cows:0
>>>> bulls: 1|cows: 0
>>>> Answer is 21
>>>> bulls:0 cows:0
>>>> bulls: 0|cows: 0
>>>> Answer is 62
>>>> bulls:2 cows:0
>>>> Player disconected
>>>> Winner name: HabraMan
Source: https://habr.com/ru/post/74727/
All Articles