Je suis intéressé par le défi de programmation présenté par le jeu Bejeweled. Cela ressemble à un jeu simple mais par programmation c'est plus complexe que ça en a l'air.Base de données Bejeweled Puzzle - Comment fonctionne cette solution?
Dans ma recherche de conseils sur la façon dont le conseil est évalué, je suis tombé sur this QUIZ mis par les gens de Simple-Talk. Ils ont posté la réponse gagnante, mais je suis goudronné et plumes si je peux vraiment comprendre comment la solution fonctionne. Je peux voir que cela a quelque chose à voir avec les matrices et le regroupement des valeurs des cellules avec leurs lignes et colonnes, mais c'est aussi loin que je l'ai fait jusqu'ici. Quelqu'un peut-il le décomposer un peu plus loin pour moi?
SOLUTION PUBLIÉE (les détails du questionnaire sont à la liaison ci-dessus):
--====== Table matches needs to be loaded only once
CREATE TABLE matches(offsetRow1 INT, offsetCol1 INT, offsetRow2 INT, ofsetCol2 INT, directions VARCHAR(20))
-- for horizontal
INSERT INTO matches VALUES(-1, -1, -1, -2, 'up')
INSERT INTO matches VALUES(-1, -1, -1, 1, 'up')
INSERT INTO matches VALUES(-1, 1, -1, 2, 'up')
INSERT INTO matches VALUES(1, -1, 1, -2, 'down')
INSERT INTO matches VALUES(1, -1, 1, 1, 'down')
INSERT INTO matches VALUES(1, 1, 1, 2, 'down')
INSERT INTO matches VALUES(0, -2, 0, -3, 'left')
INSERT INTO matches VALUES(0, 2, 0, 3, 'right')
-- for verical
INSERT INTO matches VALUES(-2, -1, -1, -1, 'left')
INSERT INTO matches VALUES(-1, -1, 1, -1, 'left')
INSERT INTO matches VALUES(1, -1, 2, -1, 'left')
INSERT INTO matches VALUES(-2, 1, -1, 1, 'right')
INSERT INTO matches VALUES(-1, 1, 1, 1, 'right')
INSERT INTO matches VALUES(1, 1, 2, 1, 'right')
INSERT INTO matches VALUES(-2, 0, -3, 0, 'up')
INSERT INTO matches VALUES(2, 0, 3, 0, 'down')
--==================================================
;WITH CTE
AS
(
SELECT
[Row] = CAST([#] AS INT),
[Col] = CAST([Col] AS INT),
[Value]
FROM bejeweled
UNPIVOT ([Value] FOR [Col] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9])) unpvt
)
SELECT DISTINCT T.Row, T.Col, T.Value, directions
FROM CTE T
JOIN CTE T1
ON T.Value = T1.Value
JOIN CTE T2
ON T.Value = T2.Value
JOIN matches
ON (T1.Row - T.Row) = offsetRow1
AND (T1.Col - T.Col) = offsetCol1
AND (T2.Row - T.Row) = offsetRow2
AND (T2.Col - T.Col) = ofsetCol2
ORDER BY T.Row, T.Col
Merci pour votre aide! Pouvez-vous entrer dans un peu plus de détails sur la façon dont le gagnant est venu avec les compensations? –