Add initial classes and a couple of tests for Board
This commit is contained in:
		
						commit
						895a9dd01b
					
				
					 15 changed files with 160 additions and 0 deletions
				
			
		
							
								
								
									
										9
									
								
								.editorconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.editorconfig
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| root = true | ||||
| 
 | ||||
| [*.cr] | ||||
| charset = utf-8 | ||||
| end_of_line = lf | ||||
| insert_final_newline = true | ||||
| indent_style = space | ||||
| indent_size = 2 | ||||
| trim_trailing_whitespace = true | ||||
							
								
								
									
										5
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| /docs/ | ||||
| /lib/ | ||||
| /bin/ | ||||
| /.shards/ | ||||
| *.dwarf | ||||
							
								
								
									
										6
									
								
								.travis.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.travis.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| language: crystal | ||||
| 
 | ||||
| # Uncomment the following if you'd like Travis to run specs and check code formatting | ||||
| # script: | ||||
| #   - crystal spec | ||||
| #   - crystal tool format --check | ||||
							
								
								
									
										21
									
								
								LICENSE
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								LICENSE
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| The MIT License (MIT) | ||||
| 
 | ||||
| Copyright (c) 2019 Alberto Venturini | ||||
| 
 | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
| 
 | ||||
| The above copyright notice and this permission notice shall be included in | ||||
| all copies or substantial portions of the Software. | ||||
| 
 | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
| THE SOFTWARE. | ||||
							
								
								
									
										27
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| # sudoku | ||||
| 
 | ||||
| TODO: Write a description here | ||||
| 
 | ||||
| ## Installation | ||||
| 
 | ||||
| TODO: Write installation instructions here | ||||
| 
 | ||||
| ## Usage | ||||
| 
 | ||||
| TODO: Write usage instructions here | ||||
| 
 | ||||
| ## Development | ||||
| 
 | ||||
| TODO: Write development instructions here | ||||
| 
 | ||||
| ## Contributing | ||||
| 
 | ||||
| 1. Fork it (<https://github.com/your-github-user/sudoku/fork>) | ||||
| 2. Create your feature branch (`git checkout -b my-new-feature`) | ||||
| 3. Commit your changes (`git commit -am 'Add some feature'`) | ||||
| 4. Push to the branch (`git push origin my-new-feature`) | ||||
| 5. Create a new Pull Request | ||||
| 
 | ||||
| ## Contributors | ||||
| 
 | ||||
| - [Alberto Venturini](https://github.com/your-github-user) - creator and maintainer | ||||
							
								
								
									
										13
									
								
								shard.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								shard.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| name: crystal-sudoku | ||||
| version: 0.1.0 | ||||
| 
 | ||||
| authors: | ||||
|   - Alberto Venturini <aventurini@gmail.com> | ||||
| 
 | ||||
| targets: | ||||
|   sudoku: | ||||
|     main: src/sudoku.cr | ||||
| 
 | ||||
| crystal: 0.31.1 | ||||
| 
 | ||||
| license: MIT | ||||
							
								
								
									
										16
									
								
								spec/board_spec.cr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								spec/board_spec.cr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| require "./spec_helper" | ||||
| 
 | ||||
| describe Sudoku::Board do | ||||
| 
 | ||||
|   it "initialized grid with nil values" do | ||||
|     board = Sudoku::Board.new(8, 8) | ||||
|     board.get(0, 0).should eq nil | ||||
|   end | ||||
| 
 | ||||
|   it "puts numbers correctly" do | ||||
|     board = Sudoku::Board.new(8, 8) | ||||
|     board.put(1, 0, 0) | ||||
|     board.get(0, 0).should eq 1 | ||||
|   end | ||||
| 
 | ||||
| end | ||||
							
								
								
									
										2
									
								
								spec/spec_helper.cr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								spec/spec_helper.cr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| require "spec" | ||||
| require "../src/sudoku.cr" | ||||
							
								
								
									
										5
									
								
								spec/sudoku_spec.cr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								spec/sudoku_spec.cr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| require "./spec_helper" | ||||
| 
 | ||||
| describe Sudoku do | ||||
| 
 | ||||
| end | ||||
							
								
								
									
										29
									
								
								src/board.cr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/board.cr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| 
 | ||||
| module Sudoku | ||||
| 
 | ||||
|   class Board | ||||
| 
 | ||||
|     alias Value = Nil | Int8 | ||||
| 
 | ||||
|     enum State | ||||
|       Valid | ||||
|       Invalid | ||||
|     end | ||||
| 
 | ||||
|     getter grid | ||||
| 
 | ||||
|     def initialize(@width : Int8, @height : Int8) | ||||
|       @grid = Array(Value).new(@width * @height, nil) | ||||
|     end | ||||
| 
 | ||||
|     def put(value : Value, x, y) | ||||
|       @grid[y * @width + x] = value | ||||
|     end | ||||
| 
 | ||||
|     def get(x, y) | ||||
|       @grid[y * @width + x] | ||||
|     end | ||||
|        | ||||
|   end | ||||
| 
 | ||||
| end | ||||
							
								
								
									
										7
									
								
								src/parser.cr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/parser.cr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| module Sudoku | ||||
|   # Parse a sudoku board from a string. Return a board. | ||||
|   class Parser | ||||
|     def self.parse(board_str) | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										7
									
								
								src/position.cr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/position.cr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| module Sudoku | ||||
| 
 | ||||
|   struct Position | ||||
|      | ||||
|   end | ||||
| 
 | ||||
| end | ||||
							
								
								
									
										6
									
								
								src/solver.cr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/solver.cr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| module Sudoku | ||||
|   class Solver | ||||
|     def self.solve(board) | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										7
									
								
								src/sudoku.cr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/sudoku.cr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| # TODO: Write documentation for `Sudoku` | ||||
| 
 | ||||
| require "./*" | ||||
| 
 | ||||
| module Sudoku | ||||
|   VERSION = "0.1.0" | ||||
| end | ||||
							
								
								
									
										
											BIN
										
									
								
								sudoku
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sudoku
									
										
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue