Page 4 of 4

Code Kata: staňte sa lepším programátorom

Posted: Thu Aug 30, 2012 9:12
by RSTEIN
@Matajon Ale řekl bych, že tohle tu katu nesplní ne? ;) Vypíše se Fizz[]Buzz, ale ne ostatní čísla do stovky.

Code Kata: staňte sa lepším programátorom

Posted: Thu Aug 30, 2012 10:56
by Matajon
RSTEIN wrote:@Matajon Ale řekl bych, že tohle tu katu nesplní ne? ;) Vypíše se Fizz[]Buzz, ale ne ostatní čísla do stovky.
To jsem si taky uvědomil chvíli po tom, co jsem to poslal a ten příspěvek jsem smazal. :-)

Code Kata: staňte sa lepším programátorom

Posted: Thu Aug 30, 2012 15:21
by Igor Kulman
Matajon wrote:To jsem si taky uvědomil chvíli po tom, co jsem to poslal a ten příspěvek jsem smazal.
Tak daj fungujúce riešenie

Code Kata: staňte sa lepším programátorom

Posted: Sat Sep 01, 2012 12:12
by Petrroll
Úplně jsem zapomněl tuhle KATU odevzdat (takže se zpožděním):

Code: Select all

        private static void fizzbuzz_normal()
        {
            string output = string.Empty;
            for (int i = 0; i <= 100; i++)
            {
                if (i % 3 == 0)
                { output += "fizz"; }

                if (i % 5 == 0)
                { output += "buzz"; }

                if (output == string.Empty)
                { output = i.ToString(); }

                Console.WriteLine(output);
                output = string.Empty;
            }
        }
Bude tenhle týden zas další? I když byla tahle jednoduchá, tak je to příjemný procvičení na pár minutek (tahle doslova na pár).

Code Kata: staňte sa lepším programátorom

Posted: Sun Sep 02, 2012 7:47
by Igor Kulman
Napíšte funkciu na výpočet n-tého Fibonacciho čísla. Túto funkciu postupne zdokonaľujte, vykonajte 2-3 iterácie zlepšovania.

Termín: štvrtok 6.8.2012

Hint k iterácií:
Rekurzia -> Rekurzia s pamäťou / Lazy vyhodnocovanie -> Rekurzia s continuation -> cyklus (Fold fo funkcionálnom jazyku)

(priamy matematický výpočet zo zlatého rezu, Pasacalovho trojuholníka)

(písmo je rovnakej farby ako pozadie, je potrebné blok označiť a ukáže sa)

Code Kata: staňte sa lepším programátorom

Posted: Thu Sep 06, 2012 21:04
by Igor Kulman
Nikto nič? Veď je to jednoduché?

Code Kata: staňte sa lepším programátorom

Posted: Thu Sep 06, 2012 21:46
by mvacha

Code: Select all

         static int NthFibonacci(int n)
        {
            if (n == 0)
                return 0;
            else if (n == 1)
                return 1;
            else
                return NthFibonacci(n - 1) + NthFibonacci(n - 2);
        }

         static int NthFibonacci2(int n)
         {
             int result = 0;
             int prev = 0;
             int prevPrev = 0;

             for(int i = 0; i <= n; i++)
             {
                 if (i == 1)
                 {
                     result = 1;
                 }
                 else
                 {
                     result = prevPrev + prev;
                 }
                prevPrev = prev;
                prev = result;
             }

             return result;

         }

Code Kata: staňte sa lepším programátorom

Posted: Thu Sep 06, 2012 22:07
by Igor Kulman
Skús ešte jednu iteráciu, napríklad niečo z hintu

Code Kata: staňte sa lepším programátorom

Posted: Wed Jan 30, 2013 21:20
by Igor Kulman
Nedá mi to nespomenúť. Rozmýšľal som, ako vygenerovať všetky permutácie stringu (alebo všeobecne zoznamu), lenivo som to hodil do google a bol som zhrozený, ako zložito to ľudia píšu. Od TDD mánie až po objektový fetišizmus. Tak som si to skúsil, v F# to išlo ľahko ale bol som prekvapený, že v C# to tiež nie som schopný napísať jednoducho, jedine, že doslova prepíšem F# kód. Ako by ste generovali permutácie vy?

Code Kata: staňte sa lepším programátorom

Posted: Wed Jan 30, 2013 22:13
by Igor Kulman
No cykly, práve že v C# som sa hrozne zasekol. V F# som vymyslel toto

Code: Select all

let rec permutations (input: 'a list) = seq {
    if (input.IsEmpty) then 
        yield []
    else
        
            for i in input do
            yield! input
                    |> List.filter (fun x-> x<> i) 
                    |> permutations
                    |> Seq.map (fun x->i::x)
    }
ale C# bol len obyčajný prepis na

Code: Select all

public IEnumerable<IEnumerable<T>> Permutation<T>(IEnumerable<T> input)
{            
    if (input == null || !input.Any()) yield break;
    if (input.Count() == 1) yield return input;

    foreach (var item in input)
    {
        var next  = input.Where(l => !l.Equals(item)).ToList();
        foreach (var perm in Permutation(next))
        {
            yield return (new List<T>{item}).Concat(perm);
        }
    }
}
Daj tie cykly, asi už neviem uvažovať jednoducho. Najmä keď som videl rôzne objektové svinstvá, čo mi google našiel,

Code Kata: staňte sa lepším programátorom

Posted: Wed Jan 30, 2013 22:51
by matoman
nechce sa mi to pisat ale asi takto: http://php.vrana.cz/permutace.php" onclick="window.open(this.href);return false;

proste jednoducha rekurzia:

Code: Select all

foreach i in X
 permutacia = (i, permutacia X\i)
Edit: vidim, ze ty to v tom C# mas podobne.. Co sa ti na tom nepaci?

Code Kata: staňte sa lepším programátorom

Posted: Wed Jan 30, 2013 23:06
by Igor Kulman
Ten prepis do C# sa mi nezdá, je to nejaké divné a kostrbaté a ak by som nepoužil yield ani neviem ako by som to napísal.

V taktom Haskelli, tam by to bola krása :)

Code: Select all

perms [] = [[]]
perms xs = [ x:ps | x <- xs , ps <- perms ( xs\\[x] ) ]

Code Kata: staňte sa lepším programátorom

Posted: Thu Jan 31, 2013 0:05
by matoman
Napadla ma nova kata:

Napiste program, ktory pre danu permutaciu, vrati dalisu v poradi (pri lexikografickom usporiadani)

Code Kata: staňte sa lepším programátorom

Posted: Thu Jan 31, 2013 0:11
by Igor Kulman
matoman wrote:Napadla ma nova kata:

Napiste program, ktory pre danu permutaciu, vrati dalisu v poradi (pri lexikografickom usporiadani)
To daval Kryl :)