Advertisement
vasil_k_k

pawn_wars_sql

Oct 2nd, 2023 (edited)
716
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 1.82 KB | None | 0 0
  1. CREATE TABLE chessboard(
  2.     colour CHAR,
  3.     col_letter CHAR,
  4.     col_number SMALLINT,
  5.     "row_number" SMALLINT
  6. );
  7.  
  8. -- The input data in format:
  9. INSERT INTO chessboard (colour, col_letter, "row_number")
  10. VALUES
  11.     ('w', 'A', 2),
  12.     ('b', 'B', 4);
  13.    
  14. UPDATE chessboard
  15. SET col_number = ABS(64 -  ASCII(col_letter));
  16.  
  17.    
  18. DO $$
  19. DECLARE
  20.     col_number_w SMALLINT := (SELECT col_number FROM chessboard WHERE colour = 'w');
  21.     row_number_w SMALLINT := (SELECT "row_number" FROM chessboard WHERE colour = 'w');
  22.     col_number_b SMALLINT := (SELECT col_number FROM chessboard WHERE colour = 'b');
  23.     row_number_b SMALLINT := (SELECT "row_number" FROM chessboard WHERE colour = 'b');
  24. BEGIN
  25.     WHILE TRUE LOOP
  26.         IF row_number_w = 8 THEN
  27.             RAISE NOTICE 'Game over! White pawn is promoted to a queen at %',
  28.                 CHR(col_number_w + 64) || row_number_w;
  29.             EXIT;
  30.         END IF;
  31.         row_number_w := row_number_w + 1;
  32.  
  33.         IF (col_number_w + 1 = col_number_b OR col_number_w - 1 = col_number_b) AND
  34.            row_number_w = row_number_b THEN
  35.             RAISE NOTICE 'Game over! White win, capture on %',
  36.                 CHR(col_number_b + 64) || row_number_b;
  37.             EXIT;
  38.         END IF;
  39.  
  40.         IF row_number_b = 1 THEN
  41.             RAISE NOTICE 'Game over! Black pawn is promoted to a queen at %',
  42.                 CHR(col_number_b + 64) || row_number_b;
  43.             EXIT;
  44.         END IF;
  45.         row_number_b := row_number_b - 1;
  46.  
  47.         IF (col_number_b + 1 = col_number_w OR col_number_b - 1 = col_number_w) AND
  48.            row_number_b = row_number_w THEN
  49.             RAISE NOTICE 'Game over! Black win, capture on %',
  50.                 CHR(col_number_w + 64) || row_number_w;
  51.             EXIT;
  52.         END IF;
  53.     END LOOP;
  54. END $$;
  55.  
  56. DROP TABLE chessboard;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement