Jak se pozná senior

pavlix

  • ****
  • 253
    • Zobrazit profil
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 »
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 »
Senior nepíše kód write-only, ale naopak tak, aby ho přečetl kdokoliv po něm, a to i lopaty.

Kód: [Vybrat]
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 »
Citace
Hele 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.

Kód: [Vybrat]
(1:10)*(1:10)'

andy

Re:Jak se pozná senior
« Odpověď #214 kdy: 19. 12. 2016, 02:17:04 »
Třeba takhle:
Kód: [Vybrat]
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.

Kód: [Vybrat]
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 ;)
Kód: [Vybrat]
nasobilka = [ map (*x) [1..] | x <- [1..]] :: [[Int]]
printNasobilka cols rows = mapM_ (putStrLn . concatMap (printf "%4d") . take cols) (take rows nasobilka)


Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
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...
Kód: [Vybrat]
#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
    • Zobrazit profil
    • E-mail
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...
Kód: [Vybrat]
#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?

Kód: [Vybrat]
#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.

Kód: [Vybrat]
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
    • Zobrazit profil
    • E-mail
Re:Jak se pozná senior
« Odpověď #218 kdy: 19. 12. 2016, 08:49:06 »
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):

Kód: [Vybrat]
#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");
    }
}
« Poslední změna: 19. 12. 2016, 08:51:25 od Tuxik »

pavlix

  • ****
  • 253
    • Zobrazit profil
Re:Jak se pozná senior
« Odpověď #219 kdy: 19. 12. 2016, 10:14:10 »
Případně by šlo použít řešení s log10, což bude jednodušší, ale možná ne tak čitelný pro lopatky...
Kód: [Vybrat]
#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
    • Zobrazit profil
Re:Jak se pozná senior
« Odpověď #220 kdy: 19. 12. 2016, 10:18:50 »
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 »
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
    • Zobrazit profil
Re:Jak se pozná senior
« Odpověď #222 kdy: 19. 12. 2016, 18:12:36 »
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 »
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.