Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dnamsons/sudoku-gem
https://github.com/dnamsons/sudoku-gem
Last synced: 11 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/dnamsons/sudoku-gem
- Owner: dnamsons
- Created: 2020-09-23T13:07:10.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2020-10-15T15:05:15.000Z (about 4 years ago)
- Last Synced: 2024-04-16T22:31:31.425Z (7 months ago)
- Size: 4.88 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Sudoku
## Uzdevums
1. Izlasīt https://guides.rubygems.org/make-your-own-gem/ un izveidot `sudoku.gemspec` failu, kā arī iestatīt `rspec` šajā direktorijā(vairāk info - http://rspec.info/).
Katrai no uzdevuma ietvaros izveidojamām klasēm jāizveido testa fails, kurā notestē katru publisko klases metodi(Pirms sākt, vajadzētu iepazīties ar testēšanu [šeit](https://semaphoreci.com/community/tutorials/getting-started-with-rspec))
2. Izveidot klasi `Board`, kas satur sekojošas metodes
* `columns` - atgriež sudoku laukuma kolonnu masīvu
* `filled?` - atgriež `true` vai `false`, atkarībā no tā, vai viss laukums ir piepildīts(nav svarīgi, vai tas darīts pareizi)
* `valid?` - Izmantojot pārveidotu `Validator` klasi(par to vairāk `2.`), atgriež `true` vai `false`, atkarībā no tā vai laukums ir pareizi aizpildīts(nav svarīgi, vai tas ir pilnīgi, vai nepilnīgi aizpildīts)
* `subgroups` - atgriež masīvu ar sudoku laukuma apakšgrupām(mazie 3x3 kvadrātiņi)
* `to_s` - atgriež string, kas noformatēts tieši tāpat kā `.sudoku` ievades faili
* Instancei jāļauj piekļūt rindām un kolonnām, kā to varētu darīt ar masīvu -
```rb
board = Board.new(...)
board[0][1]
```
* Divas `Board` instances jāspēj salīdzināt ar `==`
* `insert` - Ļauj norādīt rindas un kolonnas koordinātu, kā arī vērtību, kuru ievietot. Metode atgriež divdimensiju masīvu ar laukuma saturu(kā laukums izskatās pēc ievietošanas). Izmaiņas netiek pieglabātas klases instances datos. Ja lietotājs ievadījis ko citu kā ciparu, atgriezt kļūdas ziņojumu un neizvadīt izmainīto masīvu.
* `insert!` - Ļauj norādīt rindas un kolonnas koordinātu, kā arī vērtību, kuru ievietot. Metode veic izmaiņas ar instances datiem. Ja lietotājs ievadījis ko citu kā ciparu, atgriezt kļūdas ziņojumu un izmaiņas neveikt.
3. Izveidot klasi `Validator`, kas saņem klases `Board` instanci un, izmantojot tai pieejamās metodes, pārbauda, vai sudoku laukums ir pareizs.
4. Izveidot klasi `Parser`, kas saņem `.sudoku` formāta stringu. Klasei jāatgriež gatava `Board` klases instance
5. Palasīt `Struct` [dokumentāciju](https://ruby-doc.org/core-2.5.1/Struct.html).Izveidot jaunu `Struct` ar nosaukumu `CellValue`, kurai ir divi atribūti - `value` un `locked`.
* `value` - satur lauka ciparisko vērtību
* `locked` - norāda uz to, vai lauks ir labojamsPārveidot `Board` klases rindu vērtības no cipariem par `CellValue` instancēm
Izveidojot jaunu `Board` instanci, aizpildītie cipari tiek uzstādīti ar atribūtu `locked = true`.
Izsaucot metodi `insert`, vai `insert!` ar koordinātām uz struktūru, kuras `locked` vērtība ir `true`, izmetam kļūdas paziņojumu([Vairāk par exceptioniem šeit](https://www.honeybadger.io/blog/a-beginner-s-guide-to-exceptions-in-ruby/)). Kļūdai jāizmanto paštaisīta `Exception` klase.
****
## Parauga ievades faila formāts
*Nulles apzīmē tukšās sudoku mīklas vietas*
```
8 5 0 |0 0 2 |4 0 0
7 2 0 |0 0 0 |0 0 9
0 0 4 |0 0 0 |0 0 0
------+------+------
0 0 0 |1 0 7 |0 0 2
3 0 5 |0 0 0 |9 0 0
0 4 0 |0 0 0 |0 0 0
------+------+------
0 0 0 |0 8 0 |0 7 0
0 1 7 |0 0 0 |0 0 0
0 0 0 |0 3 6 |0 4 0
```