sudoku_builder 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +48 -0
- data/.idea/.name +1 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/encodings.xml +4 -0
- data/.idea/misc.xml +4 -0
- data/.idea/modules.xml +8 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/sudoku.iml +18 -0
- data/.idea/vcs.xml +6 -0
- data/.idea/workspace.xml +402 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +17 -0
- data/LICENSE +22 -0
- data/README.md +65 -0
- data/Rakefile +1 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/sudoku_builder/builder.rb +89 -0
- data/lib/sudoku_builder/solver.rb +54 -0
- data/lib/sudoku_builder/sudoku.rb +30 -0
- data/lib/sudoku_builder/version.rb +3 -0
- data/lib/sudoku_builder.rb +17 -0
- data/sudoku_builder.gemspec +22 -0
- metadata +96 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: c79901254ba69dc330d00c53542cd3befd8fbef5
|
|
4
|
+
data.tar.gz: 97d94b440c15217c46205cb8e7a8aa24a3bfe404
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: a691aa4778feea823ee36b77ed07d8744156e67c4993351e22567b7718f8d9b78be953eabbabbb6f7133ee9fd3059b0f46e50a7b92fa874473065774de742a5d
|
|
7
|
+
data.tar.gz: a158488e1e42782b5f66354188e5b7d6f40d69f763c70c80b8e9b034737f04ce90d9a04258412bd351d84fea70626180798d48213cdd9913834d09418e5c0cc9
|
data/.gitignore
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<<<<<<< HEAD
|
|
2
|
+
/.bundle/
|
|
3
|
+
/.yardoc
|
|
4
|
+
/Gemfile.lock
|
|
5
|
+
/_yardoc/
|
|
6
|
+
/coverage/
|
|
7
|
+
/doc/
|
|
8
|
+
/pkg/
|
|
9
|
+
/spec/reports/
|
|
10
|
+
/tmp/
|
|
11
|
+
=======
|
|
12
|
+
*.gem
|
|
13
|
+
*.rbc
|
|
14
|
+
/.config
|
|
15
|
+
/coverage/
|
|
16
|
+
/InstalledFiles
|
|
17
|
+
/pkg/
|
|
18
|
+
/spec/reports/
|
|
19
|
+
/test/tmp/
|
|
20
|
+
/test/version_tmp/
|
|
21
|
+
/tmp/
|
|
22
|
+
|
|
23
|
+
## Specific to RubyMotion:
|
|
24
|
+
.dat*
|
|
25
|
+
.repl_history
|
|
26
|
+
build/
|
|
27
|
+
|
|
28
|
+
## Documentation cache and generated files:
|
|
29
|
+
/.yardoc/
|
|
30
|
+
/_yardoc/
|
|
31
|
+
/doc/
|
|
32
|
+
/rdoc/
|
|
33
|
+
|
|
34
|
+
## Environment normalisation:
|
|
35
|
+
/.bundle/
|
|
36
|
+
/vendor/bundle
|
|
37
|
+
/lib/bundler/man/
|
|
38
|
+
|
|
39
|
+
# for a library or gem, you might want to ignore these files since the code is
|
|
40
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
41
|
+
# Gemfile.lock
|
|
42
|
+
# .ruby-version
|
|
43
|
+
# .ruby-gemset
|
|
44
|
+
|
|
45
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
|
46
|
+
.rvmrc
|
|
47
|
+
>>>>>>> 672b09b6331859edf9d3a2a39930340418f78e37
|
|
48
|
+
|
data/.idea/.name
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
sudoku
|
data/.idea/.rakeTasks
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Settings><!--This file was automatically generated by Ruby plugin.
|
|
3
|
+
You are allowed to:
|
|
4
|
+
1. Remove rake task
|
|
5
|
+
2. Add existing rake tasks
|
|
6
|
+
To add existing rake tasks automatically delete this file and reload the project.
|
|
7
|
+
--><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build sudoku-0.1.0.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Build and install sudoku-0.1.0.gem into system gems" fullCmd="install" taksId="install" /><RakeTask description="Create tag v0.1.0 and build and push sudoku-0.1.0.gem to Rubygems" fullCmd="release" taksId="release" /><RakeGroup description="" fullCmd="" taksId="release"><RakeTask description="" fullCmd="release:guard_clean" taksId="guard_clean" /><RakeTask description="" fullCmd="release:rubygem_push" taksId="rubygem_push" /><RakeTask description="" fullCmd="release:source_control_push" taksId="source_control_push" /></RakeGroup></RakeGroup></Settings>
|
data/.idea/encodings.xml
ADDED
data/.idea/misc.xml
ADDED
data/.idea/modules.xml
ADDED
data/.idea/sudoku.iml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<module type="RUBY_MODULE" version="4">
|
|
3
|
+
<component name="FacetManager">
|
|
4
|
+
<facet type="gem" name="Ruby Gem">
|
|
5
|
+
<configuration>
|
|
6
|
+
<option name="GEM_APP_ROOT_PATH" value="$MODULE_DIR$" />
|
|
7
|
+
<option name="GEM_APP_TEST_PATH" value="" />
|
|
8
|
+
<option name="GEM_APP_LIB_PATH" value="$MODULE_DIR$/lib" />
|
|
9
|
+
</configuration>
|
|
10
|
+
</facet>
|
|
11
|
+
</component>
|
|
12
|
+
<component name="NewModuleRootManager">
|
|
13
|
+
<content url="file://$MODULE_DIR$" />
|
|
14
|
+
<orderEntry type="inheritedJdk" />
|
|
15
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
|
16
|
+
<orderEntry type="library" scope="PROVIDED" name="rake (v10.4.2, rbenv: 2.2.1) [gem]" level="application" />
|
|
17
|
+
</component>
|
|
18
|
+
</module>
|
data/.idea/vcs.xml
ADDED
data/.idea/workspace.xml
ADDED
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="ChangeListManager">
|
|
4
|
+
<list default="true" id="4ba0e926-77d1-4436-9c09-2db6ca58a641" name="Default" comment="">
|
|
5
|
+
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
|
6
|
+
</list>
|
|
7
|
+
<ignored path="sudoku.iws" />
|
|
8
|
+
<ignored path=".idea/workspace.xml" />
|
|
9
|
+
<ignored path=".idea/dataSources.local.xml" />
|
|
10
|
+
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
|
11
|
+
<option name="TRACKING_ENABLED" value="true" />
|
|
12
|
+
<option name="SHOW_DIALOG" value="false" />
|
|
13
|
+
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
|
14
|
+
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
|
15
|
+
<option name="LAST_RESOLUTION" value="IGNORE" />
|
|
16
|
+
</component>
|
|
17
|
+
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
|
|
18
|
+
<component name="CreatePatchCommitExecutor">
|
|
19
|
+
<option name="PATCH_PATH" value="" />
|
|
20
|
+
</component>
|
|
21
|
+
<component name="DaemonCodeAnalyzer">
|
|
22
|
+
<disable_hints />
|
|
23
|
+
</component>
|
|
24
|
+
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
|
|
25
|
+
<component name="FavoritesManager">
|
|
26
|
+
<favorites_list name="sudoku" />
|
|
27
|
+
</component>
|
|
28
|
+
<component name="FileEditorManager">
|
|
29
|
+
<leaf />
|
|
30
|
+
</component>
|
|
31
|
+
<component name="Git.Settings">
|
|
32
|
+
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
|
33
|
+
</component>
|
|
34
|
+
<component name="IdeDocumentHistory">
|
|
35
|
+
<option name="CHANGED_PATHS">
|
|
36
|
+
<list>
|
|
37
|
+
<option value="$PROJECT_DIR$/lib/sudoku/object.rb" />
|
|
38
|
+
<option value="$PROJECT_DIR$/lib/sudoku.rb" />
|
|
39
|
+
<option value="$PROJECT_DIR$/lib/sudoku/solver.rb" />
|
|
40
|
+
<option value="$PROJECT_DIR$/lib/sudoku/sudoku.rb" />
|
|
41
|
+
<option value="$PROJECT_DIR$/lib/sudoku/builder.rb" />
|
|
42
|
+
<option value="$PROJECT_DIR$/lib/sudoku/test_run.rb" />
|
|
43
|
+
<option value="$PROJECT_DIR$/spec/sudoku_spec.rb" />
|
|
44
|
+
<option value="$PROJECT_DIR$/.gitignore" />
|
|
45
|
+
<option value="$PROJECT_DIR$/sudoku.gemspec" />
|
|
46
|
+
<option value="$PROJECT_DIR$/sudoku_builder.gemspec" />
|
|
47
|
+
<option value="$PROJECT_DIR$/lib/sudoku_builder.rb" />
|
|
48
|
+
</list>
|
|
49
|
+
</option>
|
|
50
|
+
</component>
|
|
51
|
+
<component name="JsGulpfileManager">
|
|
52
|
+
<detection-done>true</detection-done>
|
|
53
|
+
</component>
|
|
54
|
+
<component name="ProjectFrameBounds">
|
|
55
|
+
<option name="y" value="23" />
|
|
56
|
+
<option name="width" value="1280" />
|
|
57
|
+
<option name="height" value="773" />
|
|
58
|
+
</component>
|
|
59
|
+
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
|
60
|
+
<OptionsSetting value="true" id="Add" />
|
|
61
|
+
<OptionsSetting value="true" id="Remove" />
|
|
62
|
+
<OptionsSetting value="true" id="Checkout" />
|
|
63
|
+
<OptionsSetting value="true" id="Update" />
|
|
64
|
+
<OptionsSetting value="true" id="Status" />
|
|
65
|
+
<OptionsSetting value="true" id="Edit" />
|
|
66
|
+
<ConfirmationsSetting value="2" id="Add" />
|
|
67
|
+
<ConfirmationsSetting value="0" id="Remove" />
|
|
68
|
+
</component>
|
|
69
|
+
<component name="ProjectView">
|
|
70
|
+
<navigator currentView="ProjectPane" proportions="" version="1">
|
|
71
|
+
<flattenPackages />
|
|
72
|
+
<showMembers />
|
|
73
|
+
<showModules />
|
|
74
|
+
<showLibraryContents />
|
|
75
|
+
<hideEmptyPackages />
|
|
76
|
+
<abbreviatePackageNames />
|
|
77
|
+
<autoscrollToSource />
|
|
78
|
+
<autoscrollFromSource />
|
|
79
|
+
<sortByType />
|
|
80
|
+
</navigator>
|
|
81
|
+
<panes>
|
|
82
|
+
<pane id="ProjectPane">
|
|
83
|
+
<subPane>
|
|
84
|
+
<PATH>
|
|
85
|
+
<PATH_ELEMENT>
|
|
86
|
+
<option name="myItemId" value="sudoku" />
|
|
87
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
88
|
+
</PATH_ELEMENT>
|
|
89
|
+
</PATH>
|
|
90
|
+
<PATH>
|
|
91
|
+
<PATH_ELEMENT>
|
|
92
|
+
<option name="myItemId" value="sudoku" />
|
|
93
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
94
|
+
</PATH_ELEMENT>
|
|
95
|
+
<PATH_ELEMENT>
|
|
96
|
+
<option name="myItemId" value="sudoku" />
|
|
97
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
98
|
+
</PATH_ELEMENT>
|
|
99
|
+
</PATH>
|
|
100
|
+
<PATH>
|
|
101
|
+
<PATH_ELEMENT>
|
|
102
|
+
<option name="myItemId" value="sudoku" />
|
|
103
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
104
|
+
</PATH_ELEMENT>
|
|
105
|
+
<PATH_ELEMENT>
|
|
106
|
+
<option name="myItemId" value="sudoku" />
|
|
107
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
108
|
+
</PATH_ELEMENT>
|
|
109
|
+
<PATH_ELEMENT>
|
|
110
|
+
<option name="myItemId" value="lib" />
|
|
111
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
112
|
+
</PATH_ELEMENT>
|
|
113
|
+
</PATH>
|
|
114
|
+
<PATH>
|
|
115
|
+
<PATH_ELEMENT>
|
|
116
|
+
<option name="myItemId" value="sudoku" />
|
|
117
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
118
|
+
</PATH_ELEMENT>
|
|
119
|
+
<PATH_ELEMENT>
|
|
120
|
+
<option name="myItemId" value="sudoku" />
|
|
121
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
122
|
+
</PATH_ELEMENT>
|
|
123
|
+
<PATH_ELEMENT>
|
|
124
|
+
<option name="myItemId" value="lib" />
|
|
125
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
126
|
+
</PATH_ELEMENT>
|
|
127
|
+
<PATH_ELEMENT>
|
|
128
|
+
<option name="myItemId" value="sudoku_builder" />
|
|
129
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
130
|
+
</PATH_ELEMENT>
|
|
131
|
+
</PATH>
|
|
132
|
+
</subPane>
|
|
133
|
+
</pane>
|
|
134
|
+
<pane id="Scope" />
|
|
135
|
+
</panes>
|
|
136
|
+
</component>
|
|
137
|
+
<component name="PropertiesComponent">
|
|
138
|
+
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
|
139
|
+
<property name="WebServerToolWindowFactoryState" value="false" />
|
|
140
|
+
</component>
|
|
141
|
+
<component name="RunManager">
|
|
142
|
+
<configuration default="true" type="RSpecRunConfigurationType" factoryName="RSpec">
|
|
143
|
+
<predefined_log_file id="RUBY_RSPEC" enabled="true" />
|
|
144
|
+
<module name="" />
|
|
145
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
|
146
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="" />
|
|
147
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
|
|
148
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
|
|
149
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
|
|
150
|
+
<envs />
|
|
151
|
+
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
|
|
152
|
+
<EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
|
|
153
|
+
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
|
154
|
+
<COVERAGE_PATTERN ENABLED="true">
|
|
155
|
+
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
|
156
|
+
</COVERAGE_PATTERN>
|
|
157
|
+
</EXTENSION>
|
|
158
|
+
<EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
|
|
159
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
|
|
160
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="" />
|
|
161
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
|
|
162
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
|
|
163
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="" />
|
|
164
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
|
|
165
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
|
|
166
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
|
|
167
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
|
|
168
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
|
|
169
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
|
|
170
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPRING" VALUE="false" />
|
|
171
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
|
|
172
|
+
<method />
|
|
173
|
+
</configuration>
|
|
174
|
+
<configuration default="true" type="RubyRunConfigurationType" factoryName="Ruby">
|
|
175
|
+
<module name="" />
|
|
176
|
+
<RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
|
177
|
+
<RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="" />
|
|
178
|
+
<RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
|
|
179
|
+
<RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
|
|
180
|
+
<RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
|
|
181
|
+
<envs />
|
|
182
|
+
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
|
|
183
|
+
<EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
|
|
184
|
+
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
|
185
|
+
<COVERAGE_PATTERN ENABLED="true">
|
|
186
|
+
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
|
187
|
+
</COVERAGE_PATTERN>
|
|
188
|
+
</EXTENSION>
|
|
189
|
+
<EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
|
|
190
|
+
<RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="" />
|
|
191
|
+
<RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
|
|
192
|
+
<method />
|
|
193
|
+
</configuration>
|
|
194
|
+
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
|
|
195
|
+
<method />
|
|
196
|
+
</configuration>
|
|
197
|
+
<configuration default="true" type="TestUnitRunConfigurationType" factoryName="Test::Unit/Shoulda/Minitest">
|
|
198
|
+
<predefined_log_file id="RUBY_TESTUNIT" enabled="true" />
|
|
199
|
+
<module name="" />
|
|
200
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
|
201
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="" />
|
|
202
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
|
|
203
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
|
|
204
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
|
|
205
|
+
<envs />
|
|
206
|
+
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
|
|
207
|
+
<EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
|
|
208
|
+
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
|
209
|
+
<COVERAGE_PATTERN ENABLED="true">
|
|
210
|
+
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
|
211
|
+
</COVERAGE_PATTERN>
|
|
212
|
+
</EXTENSION>
|
|
213
|
+
<EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
|
|
214
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
|
|
215
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="" />
|
|
216
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="" />
|
|
217
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_METHOD_NAME" VALUE="" />
|
|
218
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
|
|
219
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
|
|
220
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
|
|
221
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="SPRING" VALUE="false" />
|
|
222
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_OPTIONS" VALUE="" />
|
|
223
|
+
<method />
|
|
224
|
+
</configuration>
|
|
225
|
+
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
|
|
226
|
+
<method />
|
|
227
|
+
</configuration>
|
|
228
|
+
<list size="0" />
|
|
229
|
+
</component>
|
|
230
|
+
<component name="ShelveChangesManager" show_recycled="false" />
|
|
231
|
+
<component name="TaskManager">
|
|
232
|
+
<task active="true" id="Default" summary="Default task">
|
|
233
|
+
<changelist id="4ba0e926-77d1-4436-9c09-2db6ca58a641" name="Default" comment="" />
|
|
234
|
+
<created>1433375567963</created>
|
|
235
|
+
<option name="number" value="Default" />
|
|
236
|
+
<updated>1433375567963</updated>
|
|
237
|
+
</task>
|
|
238
|
+
<servers />
|
|
239
|
+
</component>
|
|
240
|
+
<component name="ToolWindowManager">
|
|
241
|
+
<frame x="0" y="23" width="1280" height="773" extended-state="0" />
|
|
242
|
+
<editor active="false" />
|
|
243
|
+
<layout>
|
|
244
|
+
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
|
245
|
+
<window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.5984733" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
|
246
|
+
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
|
247
|
+
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32977098" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
|
248
|
+
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
|
249
|
+
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.63053435" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
|
|
250
|
+
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
|
|
251
|
+
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
|
252
|
+
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
|
253
|
+
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
|
254
|
+
<window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
|
255
|
+
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24959612" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
|
|
256
|
+
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32977098" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
|
257
|
+
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
|
258
|
+
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
|
259
|
+
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
|
260
|
+
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
|
261
|
+
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
|
262
|
+
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
|
263
|
+
</layout>
|
|
264
|
+
</component>
|
|
265
|
+
<component name="Vcs.Log.UiProperties">
|
|
266
|
+
<option name="RECENTLY_FILTERED_USER_GROUPS">
|
|
267
|
+
<collection />
|
|
268
|
+
</option>
|
|
269
|
+
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
|
|
270
|
+
<collection />
|
|
271
|
+
</option>
|
|
272
|
+
</component>
|
|
273
|
+
<component name="VcsContentAnnotationSettings">
|
|
274
|
+
<option name="myLimit" value="2678400000" />
|
|
275
|
+
</component>
|
|
276
|
+
<component name="VcsManagerConfiguration">
|
|
277
|
+
<option name="myTodoPanelSettings">
|
|
278
|
+
<TodoPanelSettings />
|
|
279
|
+
</option>
|
|
280
|
+
</component>
|
|
281
|
+
<component name="XDebuggerManager">
|
|
282
|
+
<breakpoint-manager />
|
|
283
|
+
<watches-manager />
|
|
284
|
+
</component>
|
|
285
|
+
<component name="editorHistoryManager">
|
|
286
|
+
<entry file="file://$PROJECT_DIR$/spec/sudoku_spec.rb">
|
|
287
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
288
|
+
<state vertical-scroll-proportion="0.0" vertical-offset="615" max-vertical-offset="1200">
|
|
289
|
+
<caret line="71" column="5" selection-start-line="71" selection-start-column="5" selection-end-line="71" selection-end-column="5" />
|
|
290
|
+
<folding />
|
|
291
|
+
</state>
|
|
292
|
+
</provider>
|
|
293
|
+
</entry>
|
|
294
|
+
<entry file="file://$PROJECT_DIR$/.rspec">
|
|
295
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
296
|
+
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="410">
|
|
297
|
+
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
298
|
+
<folding />
|
|
299
|
+
</state>
|
|
300
|
+
</provider>
|
|
301
|
+
</entry>
|
|
302
|
+
<entry file="file://$PROJECT_DIR$/Gemfile">
|
|
303
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
304
|
+
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="410">
|
|
305
|
+
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
306
|
+
<folding />
|
|
307
|
+
</state>
|
|
308
|
+
</provider>
|
|
309
|
+
</entry>
|
|
310
|
+
<entry file="file://$PROJECT_DIR$/.gitignore">
|
|
311
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
312
|
+
<state vertical-scroll-proportion="-28.2" vertical-offset="0" max-vertical-offset="810">
|
|
313
|
+
<caret line="47" column="0" selection-start-line="47" selection-start-column="0" selection-end-line="47" selection-end-column="0" />
|
|
314
|
+
<folding />
|
|
315
|
+
</state>
|
|
316
|
+
</provider>
|
|
317
|
+
</entry>
|
|
318
|
+
<entry file="file://$PROJECT_DIR$/.travis.yml">
|
|
319
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
320
|
+
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="410">
|
|
321
|
+
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
322
|
+
<folding />
|
|
323
|
+
</state>
|
|
324
|
+
</provider>
|
|
325
|
+
</entry>
|
|
326
|
+
<entry file="file://$PROJECT_DIR$/bin/setup">
|
|
327
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
328
|
+
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="630">
|
|
329
|
+
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
330
|
+
<folding />
|
|
331
|
+
</state>
|
|
332
|
+
</provider>
|
|
333
|
+
</entry>
|
|
334
|
+
<entry file="file://$PROJECT_DIR$/bin/console">
|
|
335
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
336
|
+
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="410">
|
|
337
|
+
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
338
|
+
<folding />
|
|
339
|
+
</state>
|
|
340
|
+
</provider>
|
|
341
|
+
</entry>
|
|
342
|
+
<entry file="file://$PROJECT_DIR$/sudoku_builder.gemspec">
|
|
343
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
344
|
+
<state vertical-scroll-proportion="0.52380955" vertical-offset="0" max-vertical-offset="630">
|
|
345
|
+
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
|
346
|
+
<folding />
|
|
347
|
+
</state>
|
|
348
|
+
</provider>
|
|
349
|
+
</entry>
|
|
350
|
+
<entry file="file://$PROJECT_DIR$/README.md">
|
|
351
|
+
<provider selected="true" editor-type-id="MarkdownPreviewEditor">
|
|
352
|
+
<state />
|
|
353
|
+
</provider>
|
|
354
|
+
<provider editor-type-id="text-editor">
|
|
355
|
+
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="675">
|
|
356
|
+
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
357
|
+
<folding />
|
|
358
|
+
</state>
|
|
359
|
+
</provider>
|
|
360
|
+
</entry>
|
|
361
|
+
<entry file="file://$PROJECT_DIR$/lib/sudoku_builder/version.rb">
|
|
362
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
363
|
+
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="630">
|
|
364
|
+
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
365
|
+
<folding />
|
|
366
|
+
</state>
|
|
367
|
+
</provider>
|
|
368
|
+
</entry>
|
|
369
|
+
<entry file="file://$PROJECT_DIR$/lib/sudoku_builder/sudoku.rb">
|
|
370
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
371
|
+
<state vertical-scroll-proportion="0.5714286" vertical-offset="0" max-vertical-offset="630">
|
|
372
|
+
<caret line="24" column="0" selection-start-line="24" selection-start-column="0" selection-end-line="24" selection-end-column="0" />
|
|
373
|
+
<folding />
|
|
374
|
+
</state>
|
|
375
|
+
</provider>
|
|
376
|
+
</entry>
|
|
377
|
+
<entry file="file://$PROJECT_DIR$/lib/sudoku_builder/solver.rb">
|
|
378
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
379
|
+
<state vertical-scroll-proportion="0.33333334" vertical-offset="0" max-vertical-offset="900">
|
|
380
|
+
<caret line="14" column="19" selection-start-line="14" selection-start-column="19" selection-end-line="14" selection-end-column="19" />
|
|
381
|
+
<folding />
|
|
382
|
+
</state>
|
|
383
|
+
</provider>
|
|
384
|
+
</entry>
|
|
385
|
+
<entry file="file://$PROJECT_DIR$/lib/sudoku_builder/builder.rb">
|
|
386
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
387
|
+
<state vertical-scroll-proportion="0.1904762" vertical-offset="0" max-vertical-offset="1410">
|
|
388
|
+
<caret line="8" column="13" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
|
|
389
|
+
<folding />
|
|
390
|
+
</state>
|
|
391
|
+
</provider>
|
|
392
|
+
</entry>
|
|
393
|
+
<entry file="file://$PROJECT_DIR$/lib/sudoku_builder.rb">
|
|
394
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
395
|
+
<state vertical-scroll-proportion="0.1904762" vertical-offset="0" max-vertical-offset="630">
|
|
396
|
+
<caret line="8" column="16" selection-start-line="8" selection-start-column="16" selection-end-line="8" selection-end-column="16" />
|
|
397
|
+
<folding />
|
|
398
|
+
</state>
|
|
399
|
+
</provider>
|
|
400
|
+
</entry>
|
|
401
|
+
</component>
|
|
402
|
+
</project>
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2015 Colin Walker
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
data/README.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Sudoku
|
|
2
|
+
|
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/sudoku`. To experiment with that code, run `bin/console` for an interactive prompt.
|
|
4
|
+
|
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
Add this line to your application's Gemfile:
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
gem 'sudoku'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
And then execute:
|
|
16
|
+
|
|
17
|
+
$ bundle
|
|
18
|
+
|
|
19
|
+
Or install it yourself as:
|
|
20
|
+
|
|
21
|
+
$ gem install sudoku
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
To create a new puzzle:
|
|
26
|
+
|
|
27
|
+
`Sudoku.new`
|
|
28
|
+
|
|
29
|
+
This will return a `Sudoku::Builder` object that looks like this:
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
#<Sudoku::Builder:0x007fdc729373e8 @sud={0=>[6], 1=>[8], 2=>[9], 3=>[5], 4=>[7], 5=>[2], 6=>[3], ...
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
On the builder object you can call a handful of different methods:
|
|
36
|
+
|
|
37
|
+
- `valid?` checks if the sudoku is valid.
|
|
38
|
+
- `to_hash` turns it into a regular hash.
|
|
39
|
+
- `poke(number, poke_with)` pokes holes in the puzzle. (to create a solvable sudoku)
|
|
40
|
+
- `medium`, `easy` and `hard` poke a set number of holes in the puzzle.
|
|
41
|
+
- `pretty_print` makes it print out nice on the command line.
|
|
42
|
+
|
|
43
|
+
To solve an existing puzzle, call:
|
|
44
|
+
|
|
45
|
+
`Sudoku::Solver.new(my_puzzle)`
|
|
46
|
+
|
|
47
|
+
my_puzzle must be equal to a hash with keys from 0 to 80 and values equal to an integer for already given squares, and an array for empty squares. ie:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
{0=>6, 1=>8, 2=>[], 3=>[], 4=>[], 5=>[], 6=>[3] ...
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Development
|
|
54
|
+
|
|
55
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
56
|
+
|
|
57
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
|
58
|
+
|
|
59
|
+
## Contributing
|
|
60
|
+
|
|
61
|
+
1. Fork it ( https://github.com/[my-github-username]/sudoku/fork )
|
|
62
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
63
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
64
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
65
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/console
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require "bundler/setup"
|
|
4
|
+
require "sudoku_builder"
|
|
5
|
+
|
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
|
8
|
+
|
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
10
|
+
# require "pry"
|
|
11
|
+
# Pry.start
|
|
12
|
+
|
|
13
|
+
require "irb"
|
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'sudoku'))
|
|
2
|
+
|
|
3
|
+
module SudokuBuilder
|
|
4
|
+
class Builder < SudokuBuilder
|
|
5
|
+
def initialize(sudoku)
|
|
6
|
+
@sud = sudoku
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def parse
|
|
10
|
+
@sud.each do |k,v|
|
|
11
|
+
if v.class == Array && v[0] == nil
|
|
12
|
+
@sud[k] = []
|
|
13
|
+
elsif v.class == Array && v[0] != nil
|
|
14
|
+
@sud[k] = v[0]
|
|
15
|
+
else
|
|
16
|
+
@sud[k] = v
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
@sud
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def to_hash
|
|
23
|
+
@sud.each do |k,v|
|
|
24
|
+
@sud[k] = v[0] if v.class == Array
|
|
25
|
+
end
|
|
26
|
+
@sud
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# pokes holes in a built sudoku to make it solvable.
|
|
30
|
+
# arranged by level of difficulty.
|
|
31
|
+
def poke(number, poke_with = [])
|
|
32
|
+
@sud.to_hash
|
|
33
|
+
poke = []
|
|
34
|
+
until poke.count == number # number is related to difficulty.
|
|
35
|
+
poke << rand(0..80) # 0 - 80 refers to the index of the sudoku cells.
|
|
36
|
+
poke = poke.uniq
|
|
37
|
+
end
|
|
38
|
+
poke.each do |p| # pokes random holes.
|
|
39
|
+
@sud[p] = poke_with
|
|
40
|
+
end
|
|
41
|
+
Builder.new(@sud)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# checks if a sudoku is valid.
|
|
45
|
+
def valid?
|
|
46
|
+
valid = []
|
|
47
|
+
@sud.each do |k,v|
|
|
48
|
+
c = [] ; r = [] ; g = []
|
|
49
|
+
build_crg(k,c,r,g,@sud)
|
|
50
|
+
if check?(v[0], c,r,g) # runs the check method used before on every value.
|
|
51
|
+
valid << false
|
|
52
|
+
else
|
|
53
|
+
valid << true
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
!valid.include?(false)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def medium(poke_with = [])
|
|
60
|
+
self.poke(45, poke_with)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def easy(poke_with = [])
|
|
64
|
+
self.poke(55, poke_with)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def hard(poke_with = [])
|
|
68
|
+
self.poke(65, poke_with)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def pretty_print
|
|
72
|
+
b = self.to_hash
|
|
73
|
+
puts "+-----------------------------+"
|
|
74
|
+
puts "| #{b[0]} #{b[1]} #{b[2]} | #{b[3]} #{b[4]} #{b[5]} | #{b[6]} #{b[7]} #{b[8]} |"
|
|
75
|
+
puts "| #{b[9]} #{b[10]} #{b[11]} | #{b[12]} #{b[13]} #{b[14]} | #{b[15]} #{b[16]} #{b[17]} |"
|
|
76
|
+
puts "| #{b[18]} #{b[19]} #{b[20]} | #{b[21]} #{b[22]} #{b[23]} | #{b[24]} #{b[25]} #{b[26]} |"
|
|
77
|
+
puts "+-----------------------------+"
|
|
78
|
+
puts "| #{b[27]} #{b[28]} #{b[29]} | #{b[30]} #{b[31]} #{b[32]} | #{b[33]} #{b[34]} #{b[35]} |"
|
|
79
|
+
puts "| #{b[36]} #{b[37]} #{b[38]} | #{b[39]} #{b[40]} #{b[41]} | #{b[42]} #{b[43]} #{b[44]} |"
|
|
80
|
+
puts "| #{b[45]} #{b[46]} #{b[47]} | #{b[48]} #{b[49]} #{b[50]} | #{b[51]} #{b[52]} #{b[53]} |"
|
|
81
|
+
puts "+-----------------------------+"
|
|
82
|
+
puts "| #{b[54]} #{b[55]} #{b[56]} | #{b[57]} #{b[58]} #{b[59]} | #{b[60]} #{b[61]} #{b[62]} |"
|
|
83
|
+
puts "| #{b[63]} #{b[64]} #{b[65]} | #{b[66]} #{b[67]} #{b[68]} | #{b[69]} #{b[70]} #{b[71]} |"
|
|
84
|
+
puts "| #{b[72]} #{b[73]} #{b[74]} | #{b[75]} #{b[76]} #{b[77]} | #{b[78]} #{b[79]} #{b[80]} |"
|
|
85
|
+
puts "+-----------------------------+"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'sudoku'))
|
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'builder'))
|
|
3
|
+
|
|
4
|
+
module SudokuBuilder
|
|
5
|
+
class Solver < SudokuBuilder
|
|
6
|
+
|
|
7
|
+
def initialize(sudoku)
|
|
8
|
+
@sud = sudoku
|
|
9
|
+
@pristine = sudoku
|
|
10
|
+
@used = @sud.dup
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# solve any given sudoku. If the sudoku is empty, it will build a complete one.
|
|
14
|
+
def solve
|
|
15
|
+
t = 0 ; o = 0
|
|
16
|
+
key = 0 # main key variable.
|
|
17
|
+
loop do
|
|
18
|
+
if @sud[key].class == Array # skips pre-filled numbers.
|
|
19
|
+
c = [] ; r = [] ; g = [] # build values for current grid, row, column.
|
|
20
|
+
build_crg(key,c,r,g,@sud) # updates the relevant variables for check.
|
|
21
|
+
@sud[key] = [] # makes a fresh possibilities array.
|
|
22
|
+
for i in 1..9
|
|
23
|
+
if check?(i, c,r,g) &&
|
|
24
|
+
!@used[key].include?(i) # checks for possible numbers.
|
|
25
|
+
@sud[key] << i
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
if @sud[key].count == 0 # backtrack if no possibilities.
|
|
29
|
+
key -= 1
|
|
30
|
+
else
|
|
31
|
+
use = @sud[key].sample # pick a random possibility.
|
|
32
|
+
@sud[key] = [use] # uses the possibility.
|
|
33
|
+
@used[key] << use # also puts it into the used array.
|
|
34
|
+
key += 1
|
|
35
|
+
end
|
|
36
|
+
if key == 0 || t > 104 # resets everything if we've reached a high amount
|
|
37
|
+
@sud.each { |k,v| @sud[k] = [] } # of run throughs, or the key has wound down to 0.
|
|
38
|
+
@used = @sud.dup
|
|
39
|
+
key = 0 ; t = 0
|
|
40
|
+
end
|
|
41
|
+
else
|
|
42
|
+
key += 1
|
|
43
|
+
end
|
|
44
|
+
break if key == 81 # break if we've reached the last value.
|
|
45
|
+
t += 1 ; o += 1 # add the reporting variables
|
|
46
|
+
break if o > 1000000 # there is the possibility to be given an
|
|
47
|
+
# unsolvable puzzle, this breaks if the number
|
|
48
|
+
# of run throughs is really really high.
|
|
49
|
+
end
|
|
50
|
+
Builder.new(@sud)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module SudokuBuilder
|
|
2
|
+
class Sudoku
|
|
3
|
+
|
|
4
|
+
# this method builds the 'c,r,g' arguments which are used as local variables within
|
|
5
|
+
# the main solve method to easily check whether a value is part of a row, column or
|
|
6
|
+
# grid. This is done by getting the keys of each item with matching row coordinates,
|
|
7
|
+
# column coordinates and grid coordinates, and adding all the values of each key to
|
|
8
|
+
# the c,r,g.
|
|
9
|
+
def build_crg(key,c,r,g,sud)
|
|
10
|
+
coord = {
|
|
11
|
+
0=> [0,0,1], 1=> [1,0,1], 2=> [2,0,1], 3=> [3,0,4], 4=> [4,0,4], 5=> [5,0,4], 6=> [6,0,7], 7=> [7,0,7], 8=> [8,0,7],
|
|
12
|
+
9=> [0,1,1], 10=>[1,1,1], 11=>[2,1,1], 12=>[3,1,4], 13=>[4,1,4], 14=>[5,1,4], 15=>[6,1,7], 16=>[7,1,7], 17=>[8,1,7],
|
|
13
|
+
18=>[0,2,1], 19=>[1,2,1], 20=>[2,2,1], 21=>[3,2,4], 22=>[4,2,4], 23=>[5,2,4], 24=>[6,2,7], 25=>[7,2,7], 26=>[8,2,7],
|
|
14
|
+
27=>[0,3,2], 28=>[1,3,2], 29=>[2,3,2], 30=>[3,3,5], 31=>[4,3,5], 32=>[5,3,5], 33=>[6,3,8], 34=>[7,3,8], 35=>[8,3,8],
|
|
15
|
+
36=>[0,4,2], 37=>[1,4,2], 38=>[2,4,2], 39=>[3,4,5], 40=>[4,4,5], 41=>[5,4,5], 42=>[6,4,8], 43=>[7,4,8], 44=>[8,4,8],
|
|
16
|
+
45=>[0,5,2], 46=>[1,5,2], 47=>[2,5,2], 48=>[3,5,5], 49=>[4,5,5], 50=>[5,5,5], 51=>[6,5,8], 52=>[7,5,8], 53=>[8,5,8],
|
|
17
|
+
54=>[0,6,3], 55=>[1,6,3], 56=>[2,6,3], 57=>[3,6,6], 58=>[4,6,6], 59=>[5,6,6], 60=>[6,6,9], 61=>[7,6,9], 62=>[8,6,9],
|
|
18
|
+
63=>[0,7,3], 64=>[1,7,3], 65=>[2,7,3], 66=>[3,7,6], 67=>[4,7,6], 68=>[5,7,6], 69=>[6,7,9], 70=>[7,7,9], 71=>[8,7,9],
|
|
19
|
+
72=>[0,8,3], 73=>[1,8,3], 74=>[2,8,3], 75=>[3,8,6], 76=>[4,8,6], 77=>[5,8,6], 78=>[6,8,9], 79=>[7,8,9], 80=>[8,8,9]
|
|
20
|
+
}
|
|
21
|
+
coord.select { |k,v| v[0] == coord[key][0] }.keys.each { |k| c << sud[k] }
|
|
22
|
+
coord.select { |k,v| v[1] == coord[key][1] }.keys.each { |k| r << sud[k] }
|
|
23
|
+
coord.select { |k,v| v[2] == coord[key][2] }.keys.each { |k| g << sud[k] }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def check?(val,c,r,g)
|
|
27
|
+
!c.flatten.include?(val) && !r.flatten.include?(val) && !g.flatten.include?(val)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'sudoku_builder/sudoku'))
|
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'sudoku_builder/builder'))
|
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'sudoku_builder/solver' ))
|
|
4
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'sudoku_builder/version'))
|
|
5
|
+
|
|
6
|
+
module SudokuBuilder
|
|
7
|
+
extend self
|
|
8
|
+
def new
|
|
9
|
+
sudoku = { }
|
|
10
|
+
q = 0
|
|
11
|
+
81.times do
|
|
12
|
+
sudoku[q] = []
|
|
13
|
+
q += 1
|
|
14
|
+
end
|
|
15
|
+
Solver.new(sudoku).solve
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'sudoku_builder/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "sudoku_builder"
|
|
8
|
+
spec.version = SudokuBuilder::VERSION
|
|
9
|
+
spec.authors = ["Colin Walker"]
|
|
10
|
+
spec.email = ["cjwalker@sfu.ca"]
|
|
11
|
+
|
|
12
|
+
spec.summary = "Create a sudoku puzzle, and solve others with ease!"
|
|
13
|
+
spec.homepage = "https://github.com/ColDog/sudoku-gem"
|
|
14
|
+
|
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
16
|
+
spec.bindir = "exe"
|
|
17
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
18
|
+
spec.require_paths = ["lib"]
|
|
19
|
+
|
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.9"
|
|
21
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
|
22
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: sudoku_builder
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Colin Walker
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2015-06-04 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: bundler
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.9'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.9'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rake
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '10.0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '10.0'
|
|
41
|
+
description:
|
|
42
|
+
email:
|
|
43
|
+
- cjwalker@sfu.ca
|
|
44
|
+
executables: []
|
|
45
|
+
extensions: []
|
|
46
|
+
extra_rdoc_files: []
|
|
47
|
+
files:
|
|
48
|
+
- ".gitignore"
|
|
49
|
+
- ".idea/.name"
|
|
50
|
+
- ".idea/.rakeTasks"
|
|
51
|
+
- ".idea/encodings.xml"
|
|
52
|
+
- ".idea/misc.xml"
|
|
53
|
+
- ".idea/modules.xml"
|
|
54
|
+
- ".idea/scopes/scope_settings.xml"
|
|
55
|
+
- ".idea/sudoku.iml"
|
|
56
|
+
- ".idea/vcs.xml"
|
|
57
|
+
- ".idea/workspace.xml"
|
|
58
|
+
- ".rspec"
|
|
59
|
+
- ".travis.yml"
|
|
60
|
+
- Gemfile
|
|
61
|
+
- Gemfile.lock
|
|
62
|
+
- LICENSE
|
|
63
|
+
- README.md
|
|
64
|
+
- Rakefile
|
|
65
|
+
- bin/console
|
|
66
|
+
- bin/setup
|
|
67
|
+
- lib/sudoku_builder.rb
|
|
68
|
+
- lib/sudoku_builder/builder.rb
|
|
69
|
+
- lib/sudoku_builder/solver.rb
|
|
70
|
+
- lib/sudoku_builder/sudoku.rb
|
|
71
|
+
- lib/sudoku_builder/version.rb
|
|
72
|
+
- sudoku_builder.gemspec
|
|
73
|
+
homepage: https://github.com/ColDog/sudoku-gem
|
|
74
|
+
licenses: []
|
|
75
|
+
metadata: {}
|
|
76
|
+
post_install_message:
|
|
77
|
+
rdoc_options: []
|
|
78
|
+
require_paths:
|
|
79
|
+
- lib
|
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
|
+
requirements:
|
|
82
|
+
- - ">="
|
|
83
|
+
- !ruby/object:Gem::Version
|
|
84
|
+
version: '0'
|
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
requirements: []
|
|
91
|
+
rubyforge_project:
|
|
92
|
+
rubygems_version: 2.4.6
|
|
93
|
+
signing_key:
|
|
94
|
+
specification_version: 4
|
|
95
|
+
summary: Create a sudoku puzzle, and solve others with ease!
|
|
96
|
+
test_files: []
|