Difference between revisions of "W3911 Sudoku Server"

From Coder Merlin
Line 72: Line 72:


// Structure definitions
// Structure definitions
struct Position: Codable {
    let boxIndex: Int
    let cellIndex: Int
}
struct Cell: Codable {
struct Cell: Codable {
    let position: Position
     let value: Int?
     let value: Int?
}
}
Line 78: Line 84:
     let cells: [Cell]
     let cells: [Cell]
    
    
     init() {
     init(boxIndex: Int) {
         var cells = [Cell]()
         var cells = [Cell]()
         for cellIndex in 0 ..< 9 {
         for cellIndex in 0 ..< 9 {
             cells.append(Cell(value: cellIndex))
             cells.append(Cell(position: Position(boxIndex: boxIndex, cellIndex: cellIndex), value: cellIndex))
         }
         }
         self.cells = cells
         self.cells = cells
Line 92: Line 98:
     init() {
     init() {
         var board = [Box]()
         var board = [Box]()
         for _ in 0 ..< 9 {
         for boxIndex in 0 ..< 9 {
             board.append(Box())
             board.append(Box(boxIndex: boxIndex))
         }
         }
         self.board = board
         self.board = board

Revision as of 09:23, 7 October 2021

Within these castle walls be forged Mavens of Computer Science ...
— Merlin, The Coder

Background A Sudoku board is made up of nine boxes. Boxes (container for nine cells) are listed from top-to-bottom, left-to-right indexed from zero. Cells are listed from top-to-bottom, left-to-right, indexed from zero. All valid payloads and responses must use well-formed JSON. “cells” is returned as follows: “cells”: [[<nine values from top-left>], [<nine values from top-middle>], …]

End Points


POST /games?difficulty=<difficulty>
Creates a new game and associated board
   Parameters: 
   difficulty: easy | medium | hard | hell
   Body: none
   Status code: 201 Created
   Response: ID (integer) of newly created game
   {"id":<id>}
   
{"id": 728134}
   Errors:
   
{{{errors}}}



GET /games/<id>/cells
Returns the current cells for the specified game
   Parameters: 
   none
   Body: none
   Status code: 200 OK
   Response: Cells
   {"id":<id>}
   
{"id": 728134}
   Errors:
   
{{{errors}}}



PUT /games/<id>/cells/<boxIndex>/<cellIndex>
Place specified value at in game at boxIndex, cellIndex
   Parameters: 
   none
   Body: value (null for removing value)
   Status code: 200 OK
   Response: {"board":[
     {"cells":[{"value":<value>},{"value":<value>},...,{"value":<value>}]},
     ...
     {"cells":[{"value":<value>},{"value":<value>},...,{"value":<value>}]}
  ]}
   
{"board":[ {"cells":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8}]}, {"cells":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8}]}, {"cells":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8}]}, {"cells":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8}]}, {"cells":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8}]}, {"cells":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8}]}, {"cells":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8}]}, {"cells":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8}]}, {"cells":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8}]} ]}
   Errors:
   
{{{errors}}}


JSON Encoding[edit]

CoderMerlin™ Code Explorer: W0000 (1) 🟢

JSON Decoding[edit]

CoderMerlin™ Code Explorer: W0000 (2) 🟢

Issue Request from Client to Server[edit]

CoderMerlin™ Code Explorer: W0000 (3) 🟢