Diskuze: Ukaž, co umíš? Faktoriál!
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 17 zpráv z 17.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


je nejaky casovy limit?
Pokud myslíš časový limit běhu programu, tak ... 10 sekund 
Pokud myslíš časové omezení soutěže, nestojím si za žádným termínem. Uvidíme podle odezvy.
A pokud nějaký termín potřebuješ, tak tady je termín speciálně pro tebe: 16.11.2013 17:45:36
myslel jsem omezeni souteze 
samozrejme lepsi bude bez limitu 
jinak ma to fungovat tedy tak ze program bude scitat
10000 + 9999 ... 2 + 1 = vysledek?
Posílám řešení v JavaScriptu. V Chrome se do 10 sekund vejdu.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8" />
<title>Ukaž, co umíš? Faktoriál!</title>
</head>
<script type="text/javascript">
function run(){for(var d=[0],c=[1],e=1;1E4>=e;e++){for(var a=0,b=c.length-1;0<=b;b--)a+=e*c[b],c[b]=a%10,a=Math.floor(a/10);for(;0<a;)c.unshift(a%10),a=Math.floor(a/10);for(var a=0,f=c.length-1,b=d.length-1;0<=b;b--)a+=d[b]+c[f--],d[b]=a%10,a=Math.floor(a/10);for(;0<=f;)a+=c[f--],d.unshift(a%10),a=Math.floor(a/10);for(;0<a;)c.unshift(a%10),a=Math.floor(a/10)}c=d.length+";";for(b=0;10>b;b++)c+=d[b];c+="...";for(b=d.length-10;b<d.length;b++)c+=d[b];document.body.innerHTML=c};</script>
<body onload="run()">
</body>
</html>
Mně to ve FF a Chromiu vypíše jen
35661;4579776707...0420940313
Ale pozor, výsledné číslo bude mít přes 35.000 číslic. Na konci vypište počet číslic v X a prvních několik číslic zepředu a zezadu.
35661 je počet číslic a zbytek je prvních několik číslic zepředu a zezadu.

Moc hezký pokus, pobavil jsi mě. Mám rád podobné funkce.
Bohužel, jsou zde dva malé problémy:
Držím palce.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8" />
<title>Ukaž, co umíš? Faktoriál!</title>
</head>
<script type="text/javascript">function run(){for(var d=[0],c=[1],f=1;1E4>=f;f++){for(var a=0,b=c.length-1;0<=b;b--)a+=f*c[b],c[b]=a%10,a=Math.floor(a/10);for(;0<a;)c.unshift(a%10),a=Math.floor(a/10);for(var a=0,e=c.length-1,b=d.length-1;0<=b&&0<=e;)a+=d[b]+c[e],d[b]=a%10,a=Math.floor(a/10),b--,e--;for(;0<=e;)a+=c[e--],d.unshift(a%10),a=Math.floor(a/10);for(;0<a;)d.unshift(a%10),a=Math.floor(a/10)}c=d.length+" ";for(b=0;10>b;b++)c+=d[b];c+="...";for(b=d.length-10;b<d.length;b++)c+=d[b];document.body.innerHTML=c};</script>
<body onload="run()">
</body>
</html>
Teď už je výsledek správný, gratuluji!
Ale algoritmus lze napsat ještě jednodušším způsobem, dokážeš na to
příjít? 
To je pravda, nicméně asymptotická složitost je stejná jako v případě
mého prvního naivního řešení 
Nejraději mám úlohy, kdy první "blbé" řešení nefunguje vůbec a je
potřeba vymyslet něco lepšího.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8" />
<title>Ukaž, co umíš? Faktoriál!</title>
</head>
<script type="text/javascript">function run(){for(var c=[1],b=1E4;1<b;b--){for(var a=1,d=0;d<c.length;d++)a+=b*c[d],c[d]=a%10,a=Math.floor(a/10);for(;0<a;)c.push(a%10),a=Math.floor(a/10)}a=c.length+" ";for(b=c.length-1;b>c.length-11;b--)a+=c[b];a+="...";for(b=9;0<=b;b--)a+=c[b];document.body.innerHTML=a};</script>
<body onload="run()">
</body>
</html>
Pro takhle malá čísla není důležitá asymptota, ale velikost konstanty. Ale řešení už je správné.
V C# trvá výpočet cca 0.5 sekundy (Core i5 2.8GHz) 
Čistě pro zajímavost... Nedávno jsem pomáhal kamarádovi se zápočtovou úlohou a kód v C# byl asi o 10% rychlejší, než C-čkový kód pod GCC. Stejně tak Apple uvádí, že CLang compiler je o 20-50% rychlejší než GCC.
Zkusím to napsat ve Fortranu, mělo by to být ještě o něco rychlejší.
Zobrazeno 17 zpráv z 17.