Jak se pozná senior

pavlix

  • ****
  • 253
Re:Jak se pozná senior
« Odpověď #210 kdy: 18. 12. 2016, 23:49:57 »
for a in range(1, 11):
    print(''.join(" {:3}".format(a*b) for b in range(1, 11)))


Lopata

Re:Jak se pozná senior
« Odpověď #211 kdy: 19. 12. 2016, 00:37:01 »
Citace od: pavlix kdy 18. 12. 2016, 23:49:57
for a in range(1, 11):
    print(''.join(" {:3}".format(a*b) for b in range(1, 11)))

Senior nepíše kód write-only, ale naopak tak, aby ho přečetl kdokoliv po něm, a to i lopaty.

Lol Phirae

Re:Jak se pozná senior
« Odpověď #212 kdy: 19. 12. 2016, 01:10:47 »
Citace od: Lopata kdy 19. 12. 2016, 00:37:01
Senior nepíše kód write-only, ale naopak tak, aby ho přečetl kdokoliv po něm, a to i lopaty.


printf "1   2   3   4   5   6   7   8   9  10\n2   4   6   8  10  12  14  16  18  20\n ..."


Nechtěl by tuhle píčovinu už někdo konečně zamknout?

robotron

Re:Jak se pozná senior
« Odpověď #213 kdy: 19. 12. 2016, 01:30:52 »
CitaceHele javalopato, tak teda udělej školní úkol, napiš program na výpis tabulky malé násobilky.

Numericka vypocetni uloha si zada reseni v numerickem SW.

(1:10)*(1:10)'

andy

Re:Jak se pozná senior
« Odpověď #214 kdy: 19. 12. 2016, 02:17:04 »
Třeba takhle:

nasobilka = map (\c -> map c [1..10]) [1..10] :: [[Int]]
printIt = mapM_ (putStrLn . concatMap (printf "%4d")) nasobilka


It should be noted that no ethically-trained software engineer would ever consent to write a 'DestroyBaghdad' procedure. Basic professional ethics would instead require him to write a 'DestroyCity' procedure, to which 'Baghdad' could be given as a parameter.


printNasobilka cols rows = mapM_ (putStrLn . concatMap (justify . show)) nasobilka
  where
    nasobilka = [ map (*x) [1..cols] | x <- [1..rows]] :: [[Int]]
    collen = length (show $ cols * rows) + 1
    justify str = replicate (collen - length str) ' ' ++ str


Trošku mi to připomíná https://wiki.haskell.org/The_Fibonacci_sequence

Ale nebo použít nekonečný seznam ;)

nasobilka = [ map (*x) [1..] | x <- [1..]] :: [[Int]]
printNasobilka cols rows = mapM_ (putStrLn . concatMap (printf "%4d") . take cols) (take rows nasobilka)



Tuxik

  • *****
  • 1 473
Re:Jak se pozná senior
« Odpověď #215 kdy: 19. 12. 2016, 06:40:15 »
No tak si to užijte v céčku, když jinak nedáte...
#include <stdio.h>
#include <string.h>

#define XSIZE 10
#define YSIZE 10

int main() {
    int number, x, y, max_len, cur_len, spaces;
    char number_str[10];
    snprintf (number_str, 10, "%d", XSIZE*YSIZE);
    max_len = strlen(number_str);
    for (y=1; y<=YSIZE; y++) {
        for (x=1; x<=XSIZE; x++) {
            number = x*y;
            snprintf (number_str, 10, "%d", number);
            cur_len = strlen(number_str);
            for (spaces=cur_len; spaces<=max_len; spaces++)
                printf ("%s", " ");
            printf ("%s", number_str);
        }
        printf ("%s", "\n");
    }
}

Tuxik

  • *****
  • 1 473
Re:Jak se pozná senior
« Odpověď #216 kdy: 19. 12. 2016, 07:08:22 »
Případně by šlo použít řešení s log10, což bude jednodušší, ale možná ne tak čitelný pro lopatky...
#include <stdio.h>
#include <math.h>

#define XSIZE 10
#define YSIZE 20

int main() {
    int number, x, y, max_len, cur_len, spaces;
    max_len = log10(XSIZE*YSIZE)+1;
    for (y=1; y<=YSIZE; y++) {
        for (x=1; x<=XSIZE; x++) {
            number = x*y;
            cur_len = log10(number)+1;
            for (spaces=cur_len; spaces<=max_len; spaces++)
                printf ("%s", " ");
            printf ("%i", number);
        }
        printf ("%s", "\n");
    }
}

A kdo to nezkompiluje, tak je céčková lopata :P :D

gll

Re:Jak se pozná senior
« Odpověď #217 kdy: 19. 12. 2016, 08:21:03 »
Nejlepší řešení z těch co jsem tu viděl je to původní v basicu.

Tuxíku, víš, že printf může dostat jako argument šířku?


#include <stdio.h>
#include <math.h>

#define XSIZE 10
#define YSIZE 20

int main() {
    int x, y, max_len;
    max_len = log10(XSIZE*YSIZE)+2;
    for (y=1; y<=YSIZE; y++) {
        for (x=1; x<=XSIZE; x++) {
            printf ("%*i", max_len, x*y);
        }
        printf ("\n");
    }
}


V pythonu se dá pro formátovaný tisk použít skvělá knihovna pandas.


from pandas import DataFrame, np
v = np.mat(np.arange(1,11))
print DataFrame(v.T*v).to_string(header=False, index=False)



Tuxik

  • *****
  • 1 473
Re:Jak se pozná senior
« Odpověď #218 kdy: 19. 12. 2016, 08:49:06 »
Citace od: gll kdy 19. 12. 2016, 08:21:03
Tuxíku, víš, že printf může dostat jako argument šířku?
Ano, vím a v tabulkových výpisech nepoužívám, protože jsou situace, kdy se to rozbije, což zrovna u tabulky poněkud vadí. Na druhou stranu je pravda, že v tomto případě se to moc nemá jak rozbít, takže tohle by mělo být bez problémů (do doby, než si začneme hrát třeba s barvičkama nebo různýma unicode paznakama):

#include <stdio.h>
#include <math.h>

#define XSIZE 10
#define YSIZE 10

int main() {
int x, y, max_len;
    max_len = log10(XSIZE*YSIZE)+1;
    for (y=1; y<=YSIZE; y++) {
        for (x=1; x<=XSIZE; x++)
            printf ("%*i", max_len+1, x*y);
        printf ("%s", "\n");
    }
}

pavlix

  • ****
  • 253
Re:Jak se pozná senior
« Odpověď #219 kdy: 19. 12. 2016, 10:14:10 »
Citace od: Tuxik kdy 19. 12. 2016, 07:08:22
Případně by šlo použít řešení s log10, což bude jednodušší, ale možná ne tak čitelný pro lopatky...
#include <stdio.h>
#include <math.h>

#define XSIZE 10
#define YSIZE 20

int main() {
    int number, x, y, max_len, cur_len, spaces;
    max_len = log10(XSIZE*YSIZE)+1;
    for (y=1; y<=YSIZE; y++) {
        for (x=1; x<=XSIZE; x++) {
            number = x*y;
            cur_len = log10(number)+1;
            for (spaces=cur_len; spaces<=max_len; spaces++)
                printf ("%s", " ");
            printf ("%i", number);
        }
        printf ("%s", "\n");
    }
}

A kdo to nezkompiluje, tak je céčková lopata :P :D

Kdo to nezkompiluje, není dobrý céčkový kompilátor. ;)

pavlix

  • ****
  • 253
Re:Jak se pozná senior
« Odpověď #220 kdy: 19. 12. 2016, 10:18:50 »
Citace od: Lopata kdy 19. 12. 2016, 00:37:01
Citace od: pavlix kdy 18. 12. 2016, 23:49:57
for a in range(1, 11):
    print(''.join(" {:3}".format(a*b) for b in range(1, 11)))

Senior nepíše kód write-only, ale naopak tak, aby ho přečetl kdokoliv po něm, a to i lopaty.

Jestli jsem senior, to netuším, v mém věku asi ještě ne. ;) Ale kód obsahuje jenom konstrukce, které pythonisty běžně učím a ani nejsou nijak složitě nakombinované. Jako jo, ty závorky bych mohl zdvojit, abych nevyužíval nepovinnosti závorek u generátoru, který je jediným argumentem, nebo bych tam mohl přidat nějaký lopatí komentář. :)

gll

Re:Jak se pozná senior
« Odpověď #221 kdy: 19. 12. 2016, 18:03:20 »
Citace od: pavlix kdy 19. 12. 2016, 10:18:50
Citace od: Lopata kdy 19. 12. 2016, 00:37:01
Citace od: pavlix kdy 18. 12. 2016, 23:49:57
for a in range(1, 11):
    print(''.join(" {:3}".format(a*b) for b in range(1, 11)))

Senior nepíše kód write-only, ale naopak tak, aby ho přečetl kdokoliv po něm, a to i lopaty.
Jestli jsem senior, to netuším, v mém věku asi ještě ne. ;) Ale kód obsahuje jenom konstrukce, které pythonisty běžně učím a ani nejsou nijak složitě nakombinované. Jako jo, ty závorky bych mohl zdvojit, abych nevyužíval nepovinnosti závorek u generátoru, který je jediným argumentem, nebo bych tam mohl přidat nějaký lopatí komentář. :)

Váš kód je správně. Podle pylintu se nadbytečné závorky používat nemají.

pavlix

  • ****
  • 253
Re:Jak se pozná senior
« Odpověď #222 kdy: 19. 12. 2016, 18:12:36 »
Citace od: gll kdy 19. 12. 2016, 18:03:20
Váš kód je správně. Podle pylintu se nadbytečné závorky používat nemají.

Podle pylintu? To je ta věc, podle které je špatně mít víc než sedm atributů
instance?

javaman ()

Re:Jak se pozná senior
« Odpověď #223 kdy: 19. 12. 2016, 18:36:55 »
Samozřejmě. Máš jich snad víc? :o

gll

Re:Jak se pozná senior
« Odpověď #224 kdy: 19. 12. 2016, 18:50:55 »
Citace od: pavlix kdy 19. 12. 2016, 18:12:36
Citace od: gll kdy 19. 12. 2016, 18:03:20
Váš kód je správně. Podle pylintu se nadbytečné závorky používat nemají.

Podle pylintu? To je ta věc, podle které je špatně mít víc než sedm atributů
instance?

Oprava. Ani pylintu závorky navíc nevadí. Použil jsem verzi pro python 2, které vadily závorky u print. Používám pylint, protože funguje bez problémů ve všech editorech, které používám. U flake8 každý editor vyžaduje jinou verzi. Některá varování ignoruji. Případně se dají vypnout.