Oslav s námi vysvědčení a získej 90 % extra kreditů ZDARMA při nákupu od 1199 kreditů. Použij promo kód VYSVEDCENI90 pouze dnes!
NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Soutěž: Machr na algoritmy - Sudoku

Soutěž již skončila

Zadání

Jak již název machra napovídá, budete si tentokrát hrát se sudoku. Přesněji řečeno ho budete řešit. Ještě přesněji řečeno napíšete konzolovou aplikaci, která ho vyřeší za vás.

Vstup bude vypadat nějak takto:

_ _ _ 1 _ 2 _ _ _
3 _ 9 8 _ 4 1 _ 7
8 _ _ _ _ _ _ _ 2
_ 3 _ 4 _ 6 _ 7 _
4 _ _ _ _ _ _ _ 1
_ 1 _ 2 _ 5 _ 9 _
5 _ _ _ _ _ _ _ 8
1 _ 6 5 _ 3 9 _ 4
_ _ _ 6 _ 8 _ _ _

(mezi znaky jsou mezery, rozložení chybějících čísel může být jakékoli)
Výstup bude stejný, jen místo podtržítek vypíšete doplněné číslice.

Pokud by se stalo, že řešení existuje více, vypište jedno z nich, je jedno které.

Povolené jazyky: C, C++, C#, Pascal, Java, Python
Pokud budete chtít použít jiný (nebo budete mít nějaký dotaz k soutěži), zeptejte se v komentářích.

Výhra

Vítěz dostane placku Machr a ocenění do portfolia.

Výhra

Výsledky

Jméno bodů Řešení ( Stáhnout vše )
Patrik Valkovič 92 Stáhnout řešení
Libor Šimo (libcosenior) 85 Stáhnout řešení
rikenbekr 82 Stáhnout řešení
Luboš Běhounek Satik 80 Stáhnout řešení
D0ll0k 77 Stáhnout řešení
Lukáš Křehula 75 Stáhnout řešení
Michael Škrášek 75 Stáhnout řešení
krepsy3 70 Stáhnout řešení
Vlado Cukalovsky 57 Stáhnout řešení
LukasMegPrask 52 Stáhnout řešení
Ladislav Ondris 30 Stáhnout řešení
Aktivity
Avatar
Zdeněk Pavlátka:21.11.2016 0:49

V této soutěži budete řešit sudoku.

Soutěž končí 3. prosince 12:00, tak se nezapomeň zapojit! :)

Odpovědět
21.11.2016 0:49
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Jan Bezdíček
Tvůrce
Avatar
Jan Bezdíček:21.11.2016 1:00

PHP CLI ? :D

 
Nahoru Odpovědět
21.11.2016 1:00
Avatar
Jan Bezdíček
Tvůrce
Avatar
Jan Bezdíček:21.11.2016 3:48

A vubec ... proc CLI, formular pro policka a zpracovani v PHP, muze byt ? :)

 
Nahoru Odpovědět
21.11.2016 3:48
Avatar
Odpovídá na Jan Bezdíček
Zdeněk Pavlátka:21.11.2016 12:45

Může být, pokud vstup bude řešen pomocí 1 textarea do kterého zadám to samé co ostatním. A výstup bude vyřešený nějak inteligentně, aby se dal zkopírovat jako text v takové podobě, jako mají mít výstup ostatní (třeba v tom samém textarea ;) ).

Nahoru Odpovědět
21.11.2016 12:45
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Zdeněk Pavlátka
Martin Dráb:21.11.2016 12:50

Vstup na aplikaci bude čekat na standardním vstupu, nebo se očekává, že název vstupního souboru bude třeba jedním za rgumentů příkazové řádky?

Nahoru Odpovědět
21.11.2016 12:50
2 + 2 = 5 for extremely large values of 2
Avatar
coells
Tvůrce
Avatar
 
Nahoru Odpovědět
21.11.2016 13:45
Avatar
Odpovídá na Martin Dráb
Zdeněk Pavlátka:21.11.2016 15:12

Standardní vstup, standardní výstup

Nahoru Odpovědět
21.11.2016 15:12
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na Zdeněk Pavlátka
Petr Šťastný:21.11.2016 15:48

Budu tedy zadání načítat ze souboru a vypisovat do konzole? A sudoku bude 9x9, nebo to mám někde nechat uživatele vybrat?

 
Nahoru Odpovědět
21.11.2016 15:48
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Petr Šťastný
Martin Dráb:21.11.2016 15:53

Standardní vstup = zadání načteš ze standardního vstupu (nějaký ten input stream, std::cin v C++), což může a nemusí být ve skutečnosti soubor. Podobně s výstupem.

Nahoru Odpovědět
21.11.2016 15:53
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Petr Šťastný
Zdeněk Pavlátka:21.11.2016 16:25

Bude to klasické 9×9 sudoku

Nahoru Odpovědět
21.11.2016 16:25
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na Zdeněk Pavlátka
krepsy3:21.11.2016 22:17

Dobře, já ale dělám v C#. To tě to mám nechat psát do konzole? Nebo dva texťáky in.txt a out.txt? Nebo úprava jednoho texťáku? Nebo výběr pře ty console args?

Nahoru Odpovědět
21.11.2016 22:17
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na krepsy3
Zdeněk Pavlátka:21.11.2016 23:14

V C# standardní vstup a výstup == Console.

Nahoru Odpovědět
21.11.2016 23:14
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na Zdeněk Pavlátka
krepsy3:22.11.2016 8:18

Čili postupně vyplníš a odentruješ 9 řádků? A devět dostameš?

Nahoru Odpovědět
22.11.2016 8:18
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na krepsy3
Zdeněk Pavlátka:22.11.2016 9:47

dá se to tak říct

Nahoru Odpovědět
22.11.2016 9:47
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Pjanus
Člen
Avatar
Pjanus:22.11.2016 18:01

Mohl bych pro řešení použít Haskell?

 
Nahoru Odpovědět
22.11.2016 18:01
Avatar
Nahoru Odpovědět
22.11.2016 19:44
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Petr Šťastný
Tvůrce
Avatar
Petr Šťastný:23.11.2016 18:48

Tak mám zatím 2 algoritmy, ten první 'hloupý' vyřeší jenom velmi jednoduché sudoku. Ten druhý, chytrý, prohlásí každé zadání které dostane za neplatné :D

Jak jste daleko?

 
Nahoru Odpovědět
23.11.2016 18:48
Avatar
Pavel Novák
Člen
Avatar
Pavel Novák:23.11.2016 18:58

Dotaz: normální sudoku 9×9, odentruješ každé číslo a potom ti má vyjet správné řešení a napsat, jestli to měl dotyčný správně? Nebo jen jestli to měl nebo neměl správně a ukončit?

Nahoru Odpovědět
23.11.2016 18:58
Nikdy se nevzdávat!
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na Pavel Novák
Petr Šťastný:23.11.2016 19:01

Jestli jsem to správně pochopil, tak:

  • Načteš sudoku - 9x Console.ReadLine(), přičemž podtržítko _ je prázdno a číslo je ... číslo, odděleno mezerou
  • Vyřešíš sudoku, tedy doplníš čísla místo podtržítek ze zadání
  • Vykreslíš sudoku
 
Nahoru Odpovědět
23.11.2016 19:01
Avatar
Odpovídá na Zdeněk Pavlátka
Josef Kuchař - Pepa489:23.11.2016 19:12

Bude to jako one line nebo multiline vstup ?

Nahoru Odpovědět
23.11.2016 19:12
2x piš, jednou debuguj
Avatar
Pavel Novák
Člen
Avatar
Odpovídá na Petr Šťastný
Pavel Novák:23.11.2016 19:17

"Vykreslíš sudoku" - celý jeho řešení nebo správný řešení?

Nahoru Odpovědět
23.11.2016 19:17
Nikdy se nevzdávat!
Avatar
Zdeněk Pavlátka:23.11.2016 19:53

PRO VŠECHNY, KDO TO DOSUD NEPOCHOPILI:
Na standardním vstupu dostanete 9 řádek, na každé bude 9 číslic / podtržítek oddělených mezerami.
Na standardní výstup vypíšete 9 řádek, na každé bude 9 číslic oddělených mezerami.
Výstup je správný:

  1. pokud je platným řešením (dle klasických pravidel sudoku)
  2. pokud na dané pozici ve vstupu byla číslice, bude stejná jako ta na výstupu
Nahoru Odpovědět
23.11.2016 19:53
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Petr Šťastný
Michael Škrášek:23.11.2016 20:55

Zatím jsem si rozvrhl program a vyřešil tu sudoku sám :D

Nahoru Odpovědět
23.11.2016 20:55
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
Pavel Novák
Člen
Avatar
Pavel Novák:23.11.2016 21:01
:D
Nahoru Odpovědět
23.11.2016 21:01
Nikdy se nevzdávat!
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Petr Šťastný
Martin Dráb:23.11.2016 21:53

Zatím jsem ve stavu doufání, že mi to zabere max. dva večery :-). Takže je ještě spooousta času.

Nahoru Odpovědět
23.11.2016 21:53
2 + 2 = 5 for extremely large values of 2
Avatar
Jan Bezdíček
Tvůrce
Avatar
Jan Bezdíček:24.11.2016 2:21

Tak ja si napsal "na koleni resic sudoku" ... vlozil tam toto sudoku a byl cely stastny, ze to funguje a uz jsem to pomalu nahraval. No pak jsem zjistil, ze sudoku jsou i slozitejsi, nez jen takove, ktere se resi tim, ze "kouknu jestli je to v radku, sloupci nebo "3x3 bloku" a bude opravdu treba pouzit algoritmus.

Tak jsem si zasel pro zmrzlinu, zapnul TBBT a se slzou v oku si jdu lehnout ...

 
Nahoru Odpovědět
24.11.2016 2:21
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:24.11.2016 17:58

Hint: Kdo si to chce fakt otestovat, tak si najděte nějaký task na nějakém online judgi (uva, ...) :)

 
Nahoru Odpovědět
24.11.2016 17:58
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Jan Bezdíček
Jan Vargovský:24.11.2016 17:59

Ono to jde, jen to chce backtrackovat, když už to "nemá" řešení :)

 
Nahoru Odpovědět
24.11.2016 17:59
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jan Vargovský
gcx11:24.11.2016 19:25

Kromě toho, co vypsal Jan Bezdíček, tak existují i další metody při řešení. Backtracking bych použil, až když i ty další metody selžou.

 
Nahoru Odpovědět
24.11.2016 19:25
Avatar
Petr Šťastný
Tvůrce
Avatar
Petr Šťastný:24.11.2016 20:29

...

Editováno 24.11.2016 20:30
 
Nahoru Odpovědět
24.11.2016 20:29
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):26.11.2016 13:44

Moze sa stat, ze testovacie zadanie nebude riesitelne?

Nahoru Odpovědět
26.11.2016 13:44
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:26.11.2016 18:19

Pro každý zadaný vstup bude existovat alespoň jedno řešení.

Nahoru Odpovědět
26.11.2016 18:19
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):26.11.2016 18:20

Dik. Aj ked vlastne by na jedno zadanie malo podla prisnych pravidiel existovat iba jedno riesenie. ;-)

Editováno 26.11.2016 18:21
Nahoru Odpovědět
26.11.2016 18:20
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):26.11.2016 21:13

Ako zisťujem, jednoduché to nebude. :-S

Nahoru Odpovědět
26.11.2016 21:13
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:26.11.2016 22:09

Aj ked vlastne by na jedno zadanie malo podla prisnych pravidiel existovat iba jedno riesenie.

Tak nějak nechápu, co tím myslíš...

Nahoru Odpovědět
26.11.2016 22:09
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Zdeněk Pavlátka
Martin Dráb:26.11.2016 22:54

Podle mě tím naráží na to, že správné Sudoku má mít právě jedno řešení. Ale setkal jsem se s různými variantami (jen čísla 1-6, některá políčka není možné vyplnit...), takže v tomto nevidím problém.

Nahoru Odpovědět
26.11.2016 22:54
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):26.11.2016 22:57

Dnes som o sudoku precital velke mnozstvo stranok a niekde som sa docital, ze prave sudoku ma vzdy len jedno riesenie.
Myslim, ze to nemusime brat az tak vazne, na nete sa toho popise.... :-D

Nahoru Odpovědět
26.11.2016 22:57
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
krepsy3:26.11.2016 23:09

Možná, že to tak páni Japonci původně zamýšleli, když sudoku vzniklo. Ona právě ta nejednoznačnost je při papírovém řešení s tužkou v ruce to nejhorší, člověk nemá jistotu, že mu to nejednoznačné řešení neudělá nějakou paseku. Takže proč ne, na algoritmus by to nemělo mít vliv. Pokud nebude používat náhodně generované řady čísel, bude mít při prvním řešení vždy nižší index nižší číslo než jeho protějšek s vyšším indexem (resp. vyšší, záleží na směru iterací).

Editováno 26.11.2016 23:10
Nahoru Odpovědět
26.11.2016 23:09
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na krepsy3
Zdeněk Pavlátka:26.11.2016 23:49

Pro účely této soutěže by na počtu řešení moc nemělo záležet (tedy až na to, že nějaké existuje). U výstupu programů se nebude kontrolovat jedno konkrétní, ale to, jestli splňuje základní pravidla, takže je úplně jedno, které vypíšete.

Nahoru Odpovědět
26.11.2016 23:49
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na Zdeněk Pavlátka
krepsy3:27.11.2016 8:43

Ještě se chci zeptat na to bodování. Předpokládám, že budeš testovat např. 20 různě obtížných vstupů, s tím, že oboduješ podle úspěšnosti. Jaká budou přesně další kritéria i s počty bodů

Nahoru Odpovědět
27.11.2016 8:43
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na krepsy3
Zdeněk Pavlátka:27.11.2016 11:57

Popravdě to ještě nemám na 100% rozhodnuté, zatím to vypadá že polovina bodů bude daná úspěšností v řešení 20 vstupů,

Nahoru Odpovědět
27.11.2016 11:57
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Patrik Valkovič:1.12.2016 16:36

Nudil jsme se na dvou přednáškách ve škole, tak tam máte i něco mojeho :D

Nahoru Odpovědět
1.12.2016 16:36
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):1.12.2016 18:42

Sorry, mam hrube prsty a klikol som nechtiac na minus. :-(

Nahoru Odpovědět
1.12.2016 18:42
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):2.12.2016 17:40

Tak som tiež niečo vytvoril. Dúfam, že sa bude páčiť. :-P

Nahoru Odpovědět
2.12.2016 17:40
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):2.12.2016 18:54

Zdenku, tak sa mi zda, ze toto bude tazke vyhodnocovanie. 8-)

Nahoru Odpovědět
2.12.2016 18:54
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Patrik Valkovič:2.12.2016 19:41

Příliš deterministické zadání :D Není to zas takový problém vypočítat, byť jen hrubou silou.

Nahoru Odpovědět
2.12.2016 19:41
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Libor Šimo (libcosenior):2.12.2016 19:43

Práve preto asi bude ťažké rozhodnúť o víťazovi.

Nahoru Odpovědět
2.12.2016 19:43
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:2.12.2016 20:07

Velkou roli bude tedy jistě hrát správný objektový návrh (nemám), přehledný kód (snad mám tak napůl) a zakomentvání :D

Nahoru Odpovědět
2.12.2016 20:07
Programátor je stroj k převodu kávy na kód.
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:2.12.2016 20:53

oprava: zakomentování (ještě nemám) :D

Noc bude dnes dlouhá...

Nahoru Odpovědět
2.12.2016 20:53
Programátor je stroj k převodu kávy na kód.
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Jan Lupčík:2.12.2016 22:34

Ale tak zase pěkné vidět tolik soutěžících. :)

Nahoru Odpovědět
2.12.2016 22:34
TruckersMP vývojář
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 50 zpráv z 207.