סקריפט פותר סודוקו | גאונותו של GPT 4
-
לאור האובססיה שלי לסודוקו ......... ביקשתי מ GPT 4 קוד פייתון פותר סודוקו והתוצאה מהירה ומדהימה:
כדי להריץ אותו על המחשב צריך להתקין את הספריה numpy ע"י כתיבה בשורת הפקודה:pip install numpy
אפשר גם להריץ על קומפיילר פייתון אונליין ללא צורך בהתקנה כלל
import numpy as np def is_valid(board, row, col, num): if num in board[row]: return False if num in board[:, col]: return False square_row = (row // 3) * 3 square_col = (col // 3) * 3 if num in board[square_row:square_row + 3, square_col:square_col + 3]: return False return True def solve_sudoku(board): for row in range(9): for col in range(9): if board[row, col] == 0: for num in range(1, 10): if is_valid(board, row, col, num): board[row, col] = num if solve_sudoku(board): return True board[row, col] = 0 return False return True def print_board(board): for row in range(9): if row % 3 == 0 and row != 0: print("- - - - - - - - - - -") for col in range(9): if col % 3 == 0 and col != 0: print("| ", end="") print(board[row, col], end=" ") print() def main(): board = np.array([ [5, 3, 0, 0, 7, 0, 0, 0, 0], [6, 0, 0, 1, 9, 5, 0, 0, 0], [0, 9, 8, 0, 0, 0, 0, 6, 0], [8, 0, 0, 0, 6, 0, 0, 0, 3], [4, 0, 0, 8, 0, 3, 0, 0, 1], [7, 0, 0, 0, 2, 0, 0, 0, 6], [0, 6, 0, 0, 0, 0, 2, 8, 0], [0, 0, 0, 4, 1, 9, 0, 0, 5], [0, 0, 0, 0, 8, 0, 0, 7, 9] ]) print("Unsolved Sudoku:") print_board(board) if solve_sudoku(board): print("\nSolved Sudoku:") print_board(board) else: print("\nThis sudoku cannot be solved.") if __name__ == "__main__": main()
-
-
@פייתוניסט נכון,
הוא לא משתמש ברקורסיה למשל (כמו פה)והוא מסדר את התוצאה בצורת טבלה שזה נחמד.
מצד שני, אפשר לכתוב סקריפט יותר טוב, כמו עם משתנה לגודל הסודוקו ולא שיהיה קבוע על 9
(גם אפשר בלי לייבא ספריות אבל למי אכפת).
מה שחשוב זה שאם הקוד לא מוצא קצת חן בעיניך, אתה מבקש מGPT תיקונים והוא מבצע תוך שניות, מה שאי אפשר לומר על אתר תכנות כזה או אחר.נראה לי יותר קשור לקטגוריה בינה מלאכותית
-
@GIGA כתב בסקריפט פותר סודוקו | גאונותו של GPT 4:
הוא לא משתמש ברקורסיה
הוא דווקא כן משתמש ברקורסיה בפונקציה solve_sudoku אבל למה לא?
@GIGA כתב בסקריפט פותר סודוקו | גאונותו של GPT 4:
מה שחשוב זה שאם הקוד לא מוצא קצת חן בעיניך, אתה מבקש מGPT תיקונים והוא מבצע תוך שניות, מה שאי אפשר לומר על אתר תכנות כזה או אחר.
יש לי אפשרות לשאלה אחת ביום לGPT 4
-
@פייתוניסט כתב בסקריפט פותר סודוקו | גאונותו של GPT 4:
יש לי אפשרות לשאלה אחת ביום לGPT 4
איך קיבלת?
אינני מבין תיכנות אבל זה מה שנתן לי החינמי
.def solve_sudoku(board): if not find_empty_cell(board): return True row, col = find_empty_cell(board) for num in range(1, 10): if is_valid(board, row, col, num): board[row][col] = num if solve_sudoku(board): return True board[row][col] = 0 return False def is_valid(board, row, col, num): # Check row for i in range(9): if board[row][i] == num: return False # Check column for i in range(9): if board[i][col] == num: return False # Check 3x3 box start_row = (row // 3) * 3 start_col = (col // 3) * 3 for i in range(3): for j in range(3): if board[start_row + i][start_col + j] == num: return False return True def find_empty_cell(board): for i in range(9): for j in range(9): if board[i][j] == 0: return i, j return None def print_board(board): for i in range(9): for j in range(9): print(board[i][j], end=' ') print() # Example Sudoku board (0 represents empty cells) board = [ [5, 3, 0, 0, 7, 0, 0, 0, 0], [6, 0, 0, 1, 9, 5, 0, 0, 0], [0, 9, 8, 0, 0, 0, 0, 6, 0], [8, 0, 0, 0, 6, 0, 0, 0, 3], [4, 0, 0, 8, 0, 3, 0, 0, 1], [7, 0, 0, 0, 2, 0, 0, 0, 6], [0, 6, 0, 0, 0, 0, 2, 8, 0], [0, 0, 0, 4, 1, 9, 0, 0, 5], [0, 0, 0, 0, 8, 0, 0, 7, 9] ] if solve_sudoku(board): print("Solution:") print_board(board) else: print("No solution exists.")
וזה נתן לי בארד יש לו 3 טיוטות בכולם הוא נתן מקורות מאתר github לפיתרון שלהלן הוא נתן את הקישור הבא https://github.com/Zelkann/Sudoku-Solver-with-Backtracking-Algorithm
def solve_sudoku(board): """Solve a Sudoku puzzle using backtracking. Args: board: A 9x9 array of integers, where 0 represents an empty cell. Returns: A solved Sudoku puzzle. """ def find_empty_cell(board): for row in range(9): for col in range(9): if board[row][col] == 0: return row, col return None def is_valid(board, row, col, num): # Check if num is valid in the current row. for i in range(9): if board[row][i] == num: return False # Check if num is valid in the current column. for j in range(9): if board[j][col] == num: return False # Check if num is valid in the current 3x3 block. block_row = (row // 3) * 3 block_col = (col // 3) * 3 for i in range(3): for j in range(3): if board[block_row + i][block_col + j] == num: return False return True def solve_recursive(board): # Find the next empty cell. row, col = find_empty_cell(board) if row is None: # The puzzle is solved. return True # Try all possible numbers for the empty cell. for num in range(1, 10): if is_valid(board, row, col, num): board[row][col] = num if solve_recursive(board): return True # The current number did not work, so reset the cell to 0. board[row][col] = 0 return False # Start the recursive solver. solve_recursive(board) return board
-
@פייתוניסט כתב בסקריפט פותר סודוקו | גאונותו של GPT 4:
הוא דווקא כן משתמש ברקורסיה בפונקציה solve_sudoku
נכון! סליחה...
עברתי מלמעלה והיה נראה לי שהוא הרוויח בלולאות הfor המקוננות קצת סיבוכיות, אבל עכשיו אני רואה שיש לשניהם אותה סיבוכיות(N^2).
אז מה הרווח? אולי יותר אינטואיבי?@פייתוניסט כתב בסקריפט פותר סודוקו | גאונותו של GPT 4:
מה שחשוב זה שאם הקוד לא מוצא קצת חן בעיניך, אתה מבקש מGPT תיקונים והוא מבצע תוך שניות, מה שאי אפשר לומר על אתר תכנות כזה או אחר.
יש לי אפשרות לשאלה אחת ביום לGPT 4
בסדר, אולי לא רלוונטי לך, אבל למי שמשלם יש את היתרון הזה. אתה יכול להשתמש בChatGPT כדי לשפר דברים בקוד וזה ממש מצוין.
-