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