Last active
June 9, 2024 12:03
-
-
Save krishvishal/e51748b21a22552ad6d09483fd956682 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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