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
Libor Šimo (libcosenior):3.12.2016 18:45

No hold amaterovi sa tazko zrovnava s vystudovanym profikom. :-`

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

No do vystudování mám ještě daleko :D Na minulé úloze z prográmka jsme strávil 60 hodin :/

Nahoru Odpovědět
3.12.2016 18:46
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
rikenbekr:3.12.2016 22:23

Takže když jsem to psal v C a čisté řešení trvá 6 ms, tak je to dobré nebo špatné?
Procesor: Intel core i5-5200U

Nahoru Odpovědět
3.12.2016 22:23
In world without fences and walls, who needs Gates and Windows?
Avatar
Odpovídá na rikenbekr
Libor Šimo (libcosenior):4.12.2016 7:42

Viac nez len dobre.

Nahoru Odpovědět
4.12.2016 7:42
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
rikenbekr:4.12.2016 13:23

To nechápu, včera to bylo 6 ms a dneska ráno je to 15 ms. Jak měříte časový intervalu v C?

Nahoru Odpovědět
4.12.2016 13:23
In world without fences and walls, who needs Gates and Windows?
Avatar
Odpovídá na rikenbekr
Libor Šimo (libcosenior):4.12.2016 13:52

Ja to neriesim. Necham ukoncit program a v konzole s vypise vysledok.
Rozdielne vysledky su ovplyvnene behom ineho probramu na pozadi.
Staci viac krat spustit a dostanes sa na to povodne.

Nahoru Odpovědět
4.12.2016 13:52
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
rikenbekr:4.12.2016 14:12

Jak nechám ukončit program? To je C#?
A pořád to nevysvětluje 0 ms, to je nemožné.
Navíc včera to bylo stabilní a to byl počítač více zatížen.

Editováno 4.12.2016 14:13
Nahoru Odpovědět
4.12.2016 14:12
In world without fences and walls, who needs Gates and Windows?
Avatar
Odpovídá na rikenbekr
Libor Šimo (libcosenior):4.12.2016 14:17

Ale nie, je to c. Aby program v c po spusteni exe suboru len nepreblikol na obrazovke, treba na koniec funkcie main, pred return 0, napisat napr. getchar(), aby konzola oatala otvorena, kym nebude stlacena nejaka klavesa.

Nahoru Odpovědět
4.12.2016 14:17
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na rikenbekr
Libor Šimo (libcosenior):4.12.2016 14:19

Cize nechat ukoncit program znamena zakomentovat riadok getchar().

Nahoru Odpovědět
4.12.2016 14:19
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
rikenbekr
Člen
Avatar
rikenbekr:4.12.2016 14:32

No já to původně tvořil na Linuxu a proto tam nic podobného nemám protože textové prostředí nemá kam zmizet.
Když si otevřu cmd ve Windows a spustím program tak to vypíše jenom to co sem posílal.

Nahoru Odpovědět
4.12.2016 14:32
In world without fences and walls, who needs Gates and Windows?
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
rikenbekr:4.12.2016 14:49

No já to původně tvořil na Linuxu a proto tam nic podobného nemám (čekání na stisk klávesy) protože textové prostředí nemá kam zmizet.
Když si otevřu cmd ve Windows a spustím program tak to vypíše jenom to co sem posílal.
Sorry za double post ale zmizelo mi tlačítko edit

Nahoru Odpovědět
4.12.2016 14:49
In world without fences and walls, who needs Gates and Windows?
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
krepsy3:4.12.2016 15:57

Tak můj C# udělal Lubošovo Sudoku za ostudných 298 ms :D (měřeno Visual studiem pomocí kroková v debugu)

Můj stroj: Dell Inspiron 13 7000 series (2015)

Nahoru Odpovědět
4.12.2016 15:57
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na krepsy3
Libor Šimo (libcosenior):4.12.2016 16:13

Skusil si aj release? Tam by to malo byt o nieco lepsie.

Nahoru Odpovědět
4.12.2016 16:13
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na rikenbekr
Libor Šimo (libcosenior):4.12.2016 16:18

Dnes som testoval ciastocne pouzitie binarnych operacii, ale rychlost sa zatial nezlepsila.

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

Ono je asi skoro jedno aky jazyk pouzijes. Ak je kod napisany optimalne, strojrovy kod asi bude rovnaky alebo skoro rovnaky.

Editováno 4.12.2016 16:22
Nahoru Odpovědět
4.12.2016 16:21
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
rikenbekr:4.12.2016 16:27

Spouštíte program v příkazové řádce, nebo nějakém vývojovém prostředí?

Nahoru Odpovědět
4.12.2016 16:27
In world without fences and walls, who needs Gates and Windows?
Avatar
Odpovídá na krepsy3
Patrik Valkovič:4.12.2016 16:52

Debug verze je mnohem pomalejší než Release. Můj program to udělal za 30ms bez optimalizace a za 6ms s optimalizací (to fakt píšu tak hrozně?!), takže zkus release a pustit to z příkazové řádky. Čas měřím (na linuxu) pomocí

time ./main.exe < vstup.txt

Jen je problém, že například já dělám už nějaké výpočty během parsování, takže těžko otestuju program bez načtené vstupů a výstupu :D

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

Ak sa hodnoti aj cas, je fajn ze to nehodnotis ty. :-D

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

Priznam sa, chcel by som machra. :-)

Editováno 4.12.2016 17:15
Nahoru Odpovědět
4.12.2016 17:14
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Patrik Valkovič:4.12.2016 17:40

Ono paradoxně před rokem jsem dělal něco podobného (tentokrát jsem pro měnu vyplňova Kakuro) do školy, ale to jsem nestihl :D A tohle jsem měl za 3 hodiny napsané, je fajn vidět nějaký progress ;-)

Nahoru Odpovědět
4.12.2016 17:40
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Patrik Valkovič
rikenbekr:4.12.2016 17:48

Tak jsem to skusil na Linuxu:
Doba běhu bez výpočetní části (in, out):

real    0m0.001s
user    0m0.000s
sys     0m0.000s

Výstup celého programu

Solve :
7 3 6 1 5 2 8 4 9
8 4 5 7 6 9 1 3 2
2 9 1 4 8 3 5 7 6
4 5 2 8 7 6 3 9 1
9 1 8 3 2 5 4 6 7
6 7 3 9 1 4 2 5 8
1 8 9 5 4 7 6 2 3
5 2 7 6 3 8 9 1 4
3 6 4 2 9 1 7 8 5

real    0m0.007s
user    0m0.004s
sys     0m0.000s

Mám k tomu otázku:
co jsou ty jednotlivé časy(real, user, sys)?
Tyto výsledky jsou z terminálu otevřeném v grafickém prostředí.
Když jsem zkusil to samé v textovém sezení byl real 15 - 28 ms cca.
Všiml si někdo že to zadání co se tu testovalo má vícero řešení? (každý ho má jiné)

Nahoru Odpovědět
4.12.2016 17:48
In world without fences and walls, who needs Gates and Windows?
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Patrik Valkovič
rikenbekr:4.12.2016 17:50

Je nějaký způsob jak změřit kolik kterých instrukcí program provedl? To by bylo nejobjektivnější srovnání.
Jsem jediný kdo používá textový editor a kompilátor v příkazové řádce (gcc)? :D

Editováno 4.12.2016 17:52
Nahoru Odpovědět
4.12.2016 17:50
In world without fences and walls, who needs Gates and Windows?
Avatar
Odpovídá na rikenbekr
Patrik Valkovič:4.12.2016 17:55

sys je systémové volání - to znamená jak dlouho čekal tvůj program na nějakou operaci systému (například přidělení paměti), real je reálný čas, jak dlouho proces běžel (včetně započítání jiných procesů, které běžely na pozadí atd, no a user je skutečný čas, který běžel jen samotný program (bez započítání jiných procesů).
Instrukce jdou provést pomocí

valgrind --tool=callgrind ./main.exe < input.txt

Spočítá celkový počet instrukcí (nebo volání nebo co to počítá) a řekne ti i v jaké funkci trávíš nejvíce času, jak se funkce mezi sebou volají (a kolikrát) a podobné užitečné věci. Pro prohlížení logu používám kcachegrind.

Nahoru Odpovědět
4.12.2016 17:55
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Libor Šimo (libcosenior):4.12.2016 18:27

Myslim, ze to nechame na Zdenka. Aj tak ma tazku ulohu.

Nahoru Odpovědět
4.12.2016 18:27
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:4.12.2016 20:59

No, to jo. O "vyloučení" budou muset nejpíš rozhodovat i blbiny.

Výstup bude stejný, jen místo podtržítek vypíšete doplněné číslice.

Já jsem si uvědomil, že ve výstupu číslice mezerami neodděluji... :(

Nahoru Odpovědět
4.12.2016 20:59
Programátor je stroj k převodu kávy na kód.
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
krepsy3:4.12.2016 21:00

Priznam sa, chcel by som machra. :-)

To asi každý... :D

Nahoru Odpovědět
4.12.2016 21:00
Programátor je stroj k převodu kávy na kód.
Avatar
Libor Šimo (libcosenior):5.12.2016 10:17

Do pekla, binárne operácie veľmi nepomohli, ale niečo iné áno.
Vyskúšajte toto zadanie:

"_ _ _ _ 9 _ _ _ 7",
"_ _ _ 2 _ _ 9 8 _",
"_ 4 _ 8 3 _ _ _ 1",
"_ _ _ _ _ _ 7 _ 2",
"_ _ _ _ _ _ _ 1 _",
"_ _ 1 _ 7 _ 3 _ _",
"4 _ 8 _ 1 _ _ _ 5",
"_ _ _ 9 2 _ _ 7 3",
"9 _ 2 _ _ 8 _ _ _"

Pred úpravami v kóde som mal čas 0,127 s.
Po úpravách je v prílohe. (je tam aj špecifikácia PC)

Nahoru Odpovědět
5.12.2016 10:17
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Patrik Valkovič:5.12.2016 10:21

Čím se ti to podařlo stáhnout ten čas?

Nahoru Odpovědět
5.12.2016 10:21
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Libor Šimo (libcosenior):5.12.2016 10:22

Teraz pozerám, že mi to spravilo chybu vo výpočte. :-(

Nahoru Odpovědět
5.12.2016 10:22
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Patrik Valkovič
Libor Šimo (libcosenior):5.12.2016 10:57

Zatiaľ to nemám odladené, ale skúšam 2 cykly, ktoré sa veľa krát opakujú, nahradiť priamym zadaním.
Pre pochopenie:

for (i = 0; i < 9; i++) {
        if (niečo == i + 1)
                vykonaj;
}
if (niečo == 1)
        vykonaj;
if (niečo == 2)
        vykonaj;
if (niečo == 3)
        vykonaj;
........
if (niečo == 9)
        vykonaj;
Nahoru Odpovědět
5.12.2016 10:57
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Patrik Valkovič
Libor Šimo (libcosenior):5.12.2016 11:03

Už som to opravil a aj tak sa čas trochu znížil.

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

Tak můj C# to tvoje udělal za 286 ms :D :O

Nahoru Odpovědět
5.12.2016 11:15
Programátor je stroj k převodu kávy na kód.
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:5.12.2016 11:19

Tak koukám že to asi nějak blbne. Zkusil jsem Liborovo Zadání několikrát:

  • - 61 ms
  • 401 ms
  • 34 ms
  • 265 ms
  • - 34 ms
  • - 63 ms

Wtf?

Editováno 5.12.2016 11:19
Nahoru Odpovědět
5.12.2016 11:19
Programátor je stroj k převodu kávy na kód.
Avatar
Patrik Valkovič:5.12.2016 11:20

]:-> ]:-> Někdo se vám možná podaří být rychlejší jak C

Nahoru Odpovědět
5.12.2016 11:20
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
rikenbekr:5.12.2016 11:20

A kde přesně jste využil binární operace?

Nahoru Odpovědět
5.12.2016 11:20
In world without fences and walls, who needs Gates and Windows?
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:5.12.2016 11:23

Tak už mi to dělá dobře - Liborovo Sudoku cca. 3154 ms :O:O

A přitom

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

tohle mi to udělá za cca. 20 ms! :O

Nahoru Odpovědět
5.12.2016 11:23
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na krepsy3
Luboš Běhounek Satik:5.12.2016 11:34

Generátor náhodných čísel :D

Jinak jsem si všimnul, že moje verze se zasekne na zadání, které nemá řešení - sice jsem tuhle variantu zkoušel, ale to bylo ještě než jsem přidal backtracking - u něj jsem se zapomněl zamyslet nad zadáním, které nemá řešení.

Ještě by se mohlo zkusit, jak moc by to zrychlilo přepsat to z LINQ čistě na cykly a pole/listy.

Nahoru Odpovědět
5.12.2016 11:34
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Patrik Valkovič:5.12.2016 11:42

Zkus parallel LINQ jestli to tam má někde smysl :D

Nahoru Odpovědět
5.12.2016 11:42
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na rikenbekr
Libor Šimo (libcosenior):5.12.2016 11:50

Napr. na porovnanie čísiel:

(if (!(x ^ y))
        ....;
Nahoru Odpovědět
5.12.2016 11:50
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):5.12.2016 11:52

A ešte raz k tomu môjmu zadaniu. V prílohe sú najnižšie hodnoty bez úpravy a s úpravou.

Nahoru Odpovědět
5.12.2016 11:52
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
rikenbekr
Člen
Avatar
Nahoru Odpovědět
5.12.2016 12:26
In world without fences and walls, who needs Gates and Windows?
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
krepsy3:5.12.2016 12:50

On byl nějaký problém s odečítáním DateTimů pomocí mínusu, ale kámoš D0ll0k mi poradil, ať použiju DateTime.Substrac­t();, a už to fachá normálně, výsledky jsou zhruba stejné. Jinak znovu: můj stroj: Dell Inspiron 13 7000 series (2015), specs si můžete najít :D

Nahoru Odpovědět
5.12.2016 12:50
Programátor je stroj k převodu kávy na kód.
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na krepsy3
Martin Dráb:5.12.2016 15:09

Moc bych DateTime nevěřil, co se týče přesnosti, která nemusí být zrovna na milisekundy, ale může se odvíjet např. od délky časového kvanta pro plánování vláken na procesoru (což může znamenat granularitu třeba 10-16 ms). Takže to chce zprůměrovat větší množství pokusů, aby takové měření o něčem vypovídalo.

Nahoru Odpovědět
5.12.2016 15:09
2 + 2 = 5 for extremely large values of 2
Avatar
homestead
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
homestead:5.12.2016 16:09

Zadanie od Satika má strašne veľa riešení, asi za 10 min. mi to našlo 95000 riešení a to som musel prerušiť. Dobré zadanie by malo mať len jedno riešenie...

Nahoru Odpovědět
5.12.2016 16:09
Žiť a nechať žiť...
Avatar
Odpovídá na homestead
Libor Šimo (libcosenior):5.12.2016 16:14

To sme tu uz riesili. Ako vysledok staci prve funkcne riesenie. Preto je cas vypoctu taky kratky.

Nahoru Odpovědět
5.12.2016 16:14
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
homestead
Člen
Avatar
homestead:5.12.2016 16:15

libcosenior - zadanie má len jedno riešnie. Vyriešené za 0,055 sek.

Nahoru Odpovědět
5.12.2016 16:15
Žiť a nechať žiť...
Avatar
Nahoru Odpovědět
5.12.2016 16:16
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
homestead
Člen
Avatar
homestead:5.12.2016 16:18

v c #, ale algoritmus som našiel na internete a upravil...

Nahoru Odpovědět
5.12.2016 16:18
Žiť a nechať žiť...
Avatar
homestead
Člen
Avatar
Odpovídá na krepsy3
homestead:5.12.2016 16:25

krepsy3 - len jedno riešenie, 0,013 sek.

Nahoru Odpovědět
5.12.2016 16:25
Žiť a nechať žiť...
Avatar
Odpovídá na homestead
Libor Šimo (libcosenior):5.12.2016 16:45

Preco si nesutazil?

Nahoru Odpovědět
5.12.2016 16:45
Aj tisícmíľová cesta musí začať jednoduchým krokom.
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.