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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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 resultCopy 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