From 03ef7e21fd5adc8bd41c304ea07151348a687397 Mon Sep 17 00:00:00 2001 From: Kritika Singh Date: Fri, 25 Oct 2024 05:19:34 +0530 Subject: [PATCH 1/3] Added Sudoku Generator --- sudoku_gen.py | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 sudoku_gen.py diff --git a/sudoku_gen.py b/sudoku_gen.py new file mode 100644 index 0000000..88c7765 --- /dev/null +++ b/sudoku_gen.py @@ -0,0 +1,143 @@ +import pygame +import random +import time +from colorama import Fore, Style, init + +init(autoreset=True) + +WINDOW_SIZE = 600 +GRID_SIZE = 9 +CELL_SIZE = WINDOW_SIZE // GRID_SIZE +FPS = 30 + +WHITE = (255, 255, 255) +BLACK = (0, 0, 0) +GRAY = (200, 200, 200) +LIGHT_BLUE = (173, 216, 230) +DARK_BLUE = (0, 0, 139) +RED = (255, 0, 0) + +pygame.init() + +# Create a window for the game +window = pygame.display.set_mode((WINDOW_SIZE, WINDOW_SIZE)) +pygame.display.set_caption("Sudoku Generator") +font = pygame.font.SysFont(None, 40) + +def print_grid(grid): + """Print Sudoku grid with colored output using colorama.""" + print(Fore.CYAN + "Sudoku Grid:") + for row in grid: + print(" ".join(Fore.GREEN + str(num) if num != 0 else Fore.RED + '.' for num in row)) + print(Style.RESET_ALL) + +def draw_grid(grid): + """Draw the Sudoku grid.""" + window.fill(WHITE) + + for row in range(GRID_SIZE): + for col in range(GRID_SIZE): + num = grid[row][col] + x, y = col * CELL_SIZE, row * CELL_SIZE + if num != 0: + text = font.render(str(num), True, BLACK) + window.blit(text, (x + 20, y + 10)) + + for i in range(GRID_SIZE + 1): + thickness = 5 if i % 3 == 0 else 1 + pygame.draw.line(window, BLACK, (i * CELL_SIZE, 0), (i * CELL_SIZE, WINDOW_SIZE), thickness) + pygame.draw.line(window, BLACK, (0, i * CELL_SIZE), (WINDOW_SIZE, i * CELL_SIZE), thickness) + + pygame.display.update() + +def is_valid(grid, row, col, num): + """Check if placing a number is valid.""" + for i in range(GRID_SIZE): + if grid[row][i] == num or grid[i][col] == num: + return False + + start_row, start_col = (row // 3) * 3, (col // 3) * 3 + for i in range(3): + for j in range(3): + if grid[start_row + i][start_col + j] == num: + return False + + return True + +def solve(grid, start_time=None, time_limit=5): + """Solve the Sudoku grid using backtracking with a time limit.""" + if start_time is None: + start_time = time.time() + + if time.time() - start_time > time_limit: + return False + + for row in range(GRID_SIZE): + for col in range(GRID_SIZE): + if grid[row][col] == 0: + for num in range(1, 10): + if is_valid(grid, row, col, num): + grid[row][col] = num + if solve(grid, start_time, time_limit): + return True + grid[row][col] = 0 + return False + return True + +def fill_grid(grid): + """Fill the Sudoku grid with a valid solution.""" + for _ in range(20): + row, col = random.randint(0, 8), random.randint(0, 8) + num = random.randint(1, 9) + if is_valid(grid, row, col, num): + grid[row][col] = num + solve(grid) + +def remove_numbers(grid, difficulty): + """Remove numbers from the grid based on difficulty.""" + cells_to_remove = 0 + if difficulty == 'easy': + cells_to_remove = 40 + elif difficulty == 'medium': + cells_to_remove = 50 + elif difficulty == 'hard': + cells_to_remove = 60 + + while cells_to_remove > 0: + row, col = random.randint(0, 8), random.randint(0, 8) + if grid[row][col] != 0: + grid[row][col] = 0 + cells_to_remove -= 1 + +def generate_sudoku(difficulty='medium'): + """Generate a Sudoku puzzle.""" + grid = [[0] * GRID_SIZE for _ in range(GRID_SIZE)] + fill_grid(grid) + remove_numbers(grid, difficulty) + return grid + +def main(): + difficulty = input(Fore.YELLOW + "Choose difficulty (easy, medium, hard): ").lower() + + if difficulty not in ['easy', 'medium', 'hard']: + print(Fore.RED + "Invalid difficulty! Defaulting to 'medium'.") + difficulty = 'medium' + + sudoku_grid = generate_sudoku(difficulty) + print_grid(sudoku_grid) + + running = True + clock = pygame.time.Clock() + + while running: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + + draw_grid(sudoku_grid) + clock.tick(FPS) + + pygame.quit() + +if __name__ == "__main__": + main() From 229d51c919e45caa9c30e505ac074953287e9b96 Mon Sep 17 00:00:00 2001 From: Kritika Singh Date: Fri, 25 Oct 2024 05:22:16 +0530 Subject: [PATCH 2/3] Added Sudoku Generator --- Bengaluru_map.html | 93 +++++++++++++++++++++++++++++++++++++++ Delhi_map.html | 93 +++++++++++++++++++++++++++++++++++++++ Jaipur_map.html | 93 +++++++++++++++++++++++++++++++++++++++ Kanpur_map.html | 93 +++++++++++++++++++++++++++++++++++++++ Mumbai_map.html | 93 +++++++++++++++++++++++++++++++++++++++ highscore.json | 1 + leaderboard.json | 1 + moods.json | 26 +++++++++++ profile.json | 1 + satellite_image.jpg | Bin 0 -> 47041 bytes satellite_image.png | Bin 0 -> 334 bytes user567_skin_health.json | 12 +++++ 12 files changed, 506 insertions(+) create mode 100644 Bengaluru_map.html create mode 100644 Delhi_map.html create mode 100644 Jaipur_map.html create mode 100644 Kanpur_map.html create mode 100644 Mumbai_map.html create mode 100644 highscore.json create mode 100644 leaderboard.json create mode 100644 moods.json create mode 100644 profile.json create mode 100644 satellite_image.jpg create mode 100644 satellite_image.png create mode 100644 user567_skin_health.json diff --git a/Bengaluru_map.html b/Bengaluru_map.html new file mode 100644 index 0000000..886d9a9 --- /dev/null +++ b/Bengaluru_map.html @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/Delhi_map.html b/Delhi_map.html new file mode 100644 index 0000000..bfb7b30 --- /dev/null +++ b/Delhi_map.html @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/Jaipur_map.html b/Jaipur_map.html new file mode 100644 index 0000000..96d46d8 --- /dev/null +++ b/Jaipur_map.html @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/Kanpur_map.html b/Kanpur_map.html new file mode 100644 index 0000000..693ad58 --- /dev/null +++ b/Kanpur_map.html @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/Mumbai_map.html b/Mumbai_map.html new file mode 100644 index 0000000..3f9efbf --- /dev/null +++ b/Mumbai_map.html @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/highscore.json b/highscore.json new file mode 100644 index 0000000..4288cf1 --- /dev/null +++ b/highscore.json @@ -0,0 +1 @@ +{"high_score": 4} \ No newline at end of file diff --git a/leaderboard.json b/leaderboard.json new file mode 100644 index 0000000..90a0f14 --- /dev/null +++ b/leaderboard.json @@ -0,0 +1 @@ +{"krits": {"score": 3, "high_score": 3}, "kritika": {"score": 2, "high_score": 2}, "Kritika": {"score": 2, "high_score": 2}, "Krits": {"score": 1, "high_score": 1}, "K": {"score": 3, "high_score": 3}, "K2": {"score": 1, "high_score": 1}, "k": {"score": 2, "high_score": 2}} \ No newline at end of file diff --git a/moods.json b/moods.json new file mode 100644 index 0000000..8184811 --- /dev/null +++ b/moods.json @@ -0,0 +1,26 @@ +[ + { + "mood": "happy", + "notes": "nothing. Grateful for: home. Completed positive habit" + }, + { + "mood": "calm", + "notes": "no. Grateful for: education. Didn't completed the positive habit" + }, + { + "mood": "calm", + "notes": "no. Grateful for: i learned something new. Completed positive habit" + }, + { + "mood": "stresses", + "notes": "I've a exam today. Grateful for: for food. Completed positive habit" + }, + { + "mood": "stressed", + "notes": "I've a exam today. Grateful for: for food . Completed positive habit" + }, + { + "mood": "Happy", + "notes": "no. Grateful for: food. Didn't completed the positive habit" + } +] \ No newline at end of file diff --git a/profile.json b/profile.json new file mode 100644 index 0000000..45f1c32 --- /dev/null +++ b/profile.json @@ -0,0 +1 @@ +{"Kritika": {"preferred_genre": "Romance", "reading_list": [{"title": "The Monogram Murders", "authors": ["Sophie Hannah", "Agatha Christie"], "cover_image": "http://books.google.com/books/content?id=8uYxnwEACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api"}, {"title": "Cartoonists, Works, and Characters in the United States Through 2005", "authors": ["John Lent"], "cover_image": "http://books.google.com/books/content?id=zN5UAAAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api"}], "reviews": {"The Mysterious Affair at Styles by Agatha Christie, Fiction, Mystery & Detective": {"rating": "4", "review": "It's good"}, "Cartoonists, Works, and Characters in the United States Through 2005": {"rating": "4", "review": "It's good"}}}} \ No newline at end of file diff --git a/satellite_image.jpg b/satellite_image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19a23698342082098013cb63e034cdee828ebf07 GIT binary patch literal 47041 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 R^D3ZK0983Xgrc`U|JnW?$dmv8 literal 0 HcmV?d00001 diff --git a/satellite_image.png b/satellite_image.png new file mode 100644 index 0000000000000000000000000000000000000000..b7be4cf737295a0b04ec6ecedc54a02924aab8e5 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$2RR)5S5QBJS-$Ly+8|1z-K& gW^*h6GDk3|U}m&oV01is*%}lGp00i_>zopr0K@4M9RL6T literal 0 HcmV?d00001 diff --git a/user567_skin_health.json b/user567_skin_health.json new file mode 100644 index 0000000..244217d --- /dev/null +++ b/user567_skin_health.json @@ -0,0 +1,12 @@ +{ + "total_exposure": 41.07, + "days": 6, + "28.1639,77.2090": { + "total_exposure": 7.27, + "days": 1 + }, + "40.7128,-74.0060": { + "total_exposure": 2.88, + "days": 1 + } +} \ No newline at end of file From f044446bd7d288a787af5cfe5f9f9de7f69f3e00 Mon Sep 17 00:00:00 2001 From: Kritika Singh Date: Fri, 25 Oct 2024 07:47:01 +0530 Subject: [PATCH 3/3] Add sudoku_genre.py --- sudoku_genr.py | 143 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 sudoku_genr.py diff --git a/sudoku_genr.py b/sudoku_genr.py new file mode 100644 index 0000000..88c7765 --- /dev/null +++ b/sudoku_genr.py @@ -0,0 +1,143 @@ +import pygame +import random +import time +from colorama import Fore, Style, init + +init(autoreset=True) + +WINDOW_SIZE = 600 +GRID_SIZE = 9 +CELL_SIZE = WINDOW_SIZE // GRID_SIZE +FPS = 30 + +WHITE = (255, 255, 255) +BLACK = (0, 0, 0) +GRAY = (200, 200, 200) +LIGHT_BLUE = (173, 216, 230) +DARK_BLUE = (0, 0, 139) +RED = (255, 0, 0) + +pygame.init() + +# Create a window for the game +window = pygame.display.set_mode((WINDOW_SIZE, WINDOW_SIZE)) +pygame.display.set_caption("Sudoku Generator") +font = pygame.font.SysFont(None, 40) + +def print_grid(grid): + """Print Sudoku grid with colored output using colorama.""" + print(Fore.CYAN + "Sudoku Grid:") + for row in grid: + print(" ".join(Fore.GREEN + str(num) if num != 0 else Fore.RED + '.' for num in row)) + print(Style.RESET_ALL) + +def draw_grid(grid): + """Draw the Sudoku grid.""" + window.fill(WHITE) + + for row in range(GRID_SIZE): + for col in range(GRID_SIZE): + num = grid[row][col] + x, y = col * CELL_SIZE, row * CELL_SIZE + if num != 0: + text = font.render(str(num), True, BLACK) + window.blit(text, (x + 20, y + 10)) + + for i in range(GRID_SIZE + 1): + thickness = 5 if i % 3 == 0 else 1 + pygame.draw.line(window, BLACK, (i * CELL_SIZE, 0), (i * CELL_SIZE, WINDOW_SIZE), thickness) + pygame.draw.line(window, BLACK, (0, i * CELL_SIZE), (WINDOW_SIZE, i * CELL_SIZE), thickness) + + pygame.display.update() + +def is_valid(grid, row, col, num): + """Check if placing a number is valid.""" + for i in range(GRID_SIZE): + if grid[row][i] == num or grid[i][col] == num: + return False + + start_row, start_col = (row // 3) * 3, (col // 3) * 3 + for i in range(3): + for j in range(3): + if grid[start_row + i][start_col + j] == num: + return False + + return True + +def solve(grid, start_time=None, time_limit=5): + """Solve the Sudoku grid using backtracking with a time limit.""" + if start_time is None: + start_time = time.time() + + if time.time() - start_time > time_limit: + return False + + for row in range(GRID_SIZE): + for col in range(GRID_SIZE): + if grid[row][col] == 0: + for num in range(1, 10): + if is_valid(grid, row, col, num): + grid[row][col] = num + if solve(grid, start_time, time_limit): + return True + grid[row][col] = 0 + return False + return True + +def fill_grid(grid): + """Fill the Sudoku grid with a valid solution.""" + for _ in range(20): + row, col = random.randint(0, 8), random.randint(0, 8) + num = random.randint(1, 9) + if is_valid(grid, row, col, num): + grid[row][col] = num + solve(grid) + +def remove_numbers(grid, difficulty): + """Remove numbers from the grid based on difficulty.""" + cells_to_remove = 0 + if difficulty == 'easy': + cells_to_remove = 40 + elif difficulty == 'medium': + cells_to_remove = 50 + elif difficulty == 'hard': + cells_to_remove = 60 + + while cells_to_remove > 0: + row, col = random.randint(0, 8), random.randint(0, 8) + if grid[row][col] != 0: + grid[row][col] = 0 + cells_to_remove -= 1 + +def generate_sudoku(difficulty='medium'): + """Generate a Sudoku puzzle.""" + grid = [[0] * GRID_SIZE for _ in range(GRID_SIZE)] + fill_grid(grid) + remove_numbers(grid, difficulty) + return grid + +def main(): + difficulty = input(Fore.YELLOW + "Choose difficulty (easy, medium, hard): ").lower() + + if difficulty not in ['easy', 'medium', 'hard']: + print(Fore.RED + "Invalid difficulty! Defaulting to 'medium'.") + difficulty = 'medium' + + sudoku_grid = generate_sudoku(difficulty) + print_grid(sudoku_grid) + + running = True + clock = pygame.time.Clock() + + while running: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + + draw_grid(sudoku_grid) + clock.tick(FPS) + + pygame.quit() + +if __name__ == "__main__": + main()