Skip to content

Instantly share code, notes, and snippets.

@krishvishal
Last active June 9, 2024 12:03
Show Gist options
  • Save krishvishal/e51748b21a22552ad6d09483fd956682 to your computer and use it in GitHub Desktop.
Save krishvishal/e51748b21a22552ad6d09483fd956682 to your computer and use it in GitHub Desktop.
import socketserver
import urllib.parse
import http.server
PORT = 4000
data_base = {}
"""
Before your interview, write a program that runs a server that is accessible on
http://localhost:4000/. When your server receives a request on http://localhost:4000/set?somekey=somevalue
it should store the passed key and value in memory. When it receives a request on http://localhost:4000/get?key=somekey it should return the value stored at somekey.
"""
class RequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
parsed_path = urllib.parse.urlparse(self.path)
params = urllib.parse.parse_qs(parsed_path.query)
if parsed_path.path == '/set':
self.handle_set(params)
elif parsed_path.path == '/get':
self.handle_get(params)
else:
self.send_response(404)
self.end_headers()
self.wfile.write(b'Not Found')
def handle_set(self, params):
if params:
for key, values in params.items():
if len(values) == 1:
value = values[0]
data_base[key] = value
self.send_response(200)
self.end_headers()
self.wfile.write(f'Set {key}={value}'.encode())
else:
self.send_response(400)
self.end_headers()
self.wfile.write(b'Bad Request: Missing or invalid parameters')
def handle_get(self, params):
if 'key' in params and len(params['key']) == 1:
key = params['key'][0]
if key in data_base:
self.send_response(200)
self.end_headers()
self.wfile.write(data_base[key].encode())
else:
self.send_response(404)
self.end_headers()
error_string = 'Not Found: Key: "{0}" does not exist in the database'.format(key)
self.wfile.write(error_string.encode('utf-8'))
else:
self.send_response(400)
self.end_headers()
self.wfile.write(b'Bad Request: invalid key')
with socketserver.TCPServer(("", PORT), RequestHandler) as httpd:
print(f"Serving at http://localhost:{PORT}/")
httpd.serve_forever()
class TicTacToe:
def __init__(self):
self.board = [[0]*3 for _ in range(3)]
self.curr_player = -1
def show_board(self):
row_pattern = "\n---+---+---\n"
print("\n")
for row in self.board:
output_row = ''.join([str(x) if x != 0 else ' ' for x in row])
print(f" {output_row.replace('0', ' | ')} ")
print(row_pattern)
print("\n")
def check_winner(self, player):
for row in self.board:
if all(x == player for x in row):
return True
for col in range(3):
if all(self.board[row][col] == player for row in range(3)):
return True
if all(self.board[i][i] == player for i in range(3)):
return True
if all(self.board[i][2-i] == player for i in range(3)):
return True
return False
def move(self, row, col):
if self.board[row][col] == 0:
self.board[row][col] = self.curr_player
if self.check_winner(self.curr_player):
self.show_board()
print(f"Player {self.curr_player} wins!")
return True
elif 0 not in [cell for row in self.board for cell in row]:
self.show_board()
print("It's a tie!")
return True
self.curr_player = -self.curr_player
else:
print("Invalid move. Try again.")
return False
def start_game(self):
while True:
self.show_board()
row = int(input(f"Player {self.curr_player}, enter row (0-2): "))
col = int(input(f"Player {self.curr_player}, enter column (0-2): "))
if self.move(row, col):
break
if __name__ == "__main__":
game = TicTacToe()
game.start_game()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment