Programátorský úkol

Aoidhghean

Re:Programátorský úkol
« Odpověď #15 kdy: 10. 09. 2017, 12:00:35 »
To je o matematickém základu. Pokud v dvourozměrném poli automaticky vidíš matici, tak k transpozici v tomto případě dojdeš během pár minut.

Jen pro pořádek: tady se nepoužívá transpozice matice ale otočení, to jsou úplně jiné věci.
Nejsou, otočení je (reverse . transpose).


kelidas

Re:Programátorský úkol
« Odpověď #16 kdy: 10. 09. 2017, 12:30:32 »
Přidávám jiný zápis již popsaného řešení v Pythonu s využitím knihovny numpy. Doplněno o generátor zadání.

Kód: [Vybrat]
import numpy as np
import time

def gen_input(r=3, c=3):
    '''Generate input
    >>> a = gen_input(r=3, c=3)
    >>> print(a)
    [[ 1.  2.  3.]
     [ 8.  9.  4.]
     [ 7.  6.  5.]]
    '''
    a = np.zeros((r, c))
    ind = np.indices((r, c))
    rind = snake(ind[0])
    cind = snake(ind[1])

    a[rind, cind] = np.arange(r * c) + 1
    return a

def snake(a):
    a = np.asarray(a)
    ret = []
    while a.size != 0:
        ret.extend(a[0, :])
        a = a[1:, ::-1].T
    return ret

rows = 1000
cols = 1000

t = time.clock()
a = gen_input(rows, cols)
# to convert "a" to list use "a = a.tolist()"
print('time to generate input =', time.clock() -t)

t = time.clock()
r = snake(a)
print('time to snake =', time.clock() -t)

print('check =', np.all(r==np.arange(rows * cols) + 1))

jazykovědec

Re:Programátorský úkol
« Odpověď #17 kdy: 10. 09. 2017, 13:48:56 »
Pokud jsi dělal admina, tak je šance, že ti vývoj půjde a zároveň algoritmy nejsou dobrý začátek. Jako admin musíš mít velký přehled a chápat souvislosti. Algoritmy jsou fajn pro začátečníky a běžné lopaty. Podstatná je architektura, stejně jako u systémů. Kde se třeba zálohuje, jak často, jak moc, po jaké síti, na čem to běží, co dělat při výpadku pěti věcí, atd. To jsou věci, které jsou pak i u vývoje podstatné, jen samozřejmě jiné. Na Python bych se vykašlal, to je dobré pro adminy na patlání, ale nic většího v tom neuděláš. Vždy můžeš přejít na pořádný jazyk, ale proč rovnou nezačít s tím nejlepším.

Na začátek máš ideální řešení vlastních problémů. To můžeš použít i v práci a během půl roku najít dobrý job jako vývojář.

pounds

Re:Programátorský úkol
« Odpověď #18 kdy: 10. 09. 2017, 14:03:22 »
není to uplně čisté, protože to mění původní pole... a taky se mi tam nelíbí ten copy-paste způsob kontrolování konce pole
Kód: [Vybrat]
def mackat_hada(m)
 o=[];
 loop do
  o.push(*m.shift); break unless (m[0] && m[0][0]);
  o.push(*m.map{|row|row.pop}); break unless (m[0] && m[0][0]);
  o.push(*m.pop.reverse); break unless (m[0] && m[0][0]);
  o.push(*m.map{|row|row.shift}.reverse); break unless (m[0] && m[0][0]);
 end
 o
end

print mackat_hada([[1,2,3,4],[5,6,7,8],[9,10,11,12]]).join(",")

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Programátorský úkol
« Odpověď #19 kdy: 10. 09. 2017, 14:10:41 »
Na Python bych se vykašlal, to je dobré pro adminy na patlání, ale nic většího v tom neuděláš.

Tak tajle v tom delaji Star Wars: https://www.python.org/about/success/ilm/

Dalsi priklady: https://www.python.org/about/success/

Ted je otazka, cemu rikate "neco vetsiho". Necelych 200000 radek by stacilo? https://wiki.python.org/moin/LargePythonProjects


aaa

Re:Programátorský úkol
« Odpověď #20 kdy: 10. 09. 2017, 14:15:02 »
Mě by docela zajímalo, jestli ty vývojáře, co tu odstraňují první řádek a otáčí čtverec, jestli už někdy nějaký podobný algoritmus viděli, nebo jeho části a jenom to rychle zkombinovali, případně jestli to mají z nějaké teorie jak to řešit, nebo je to fakt za 10 minut napadlo jako úplně z nuly.

I když se zamýšlím, že třeba hodně dělá i to, že člověk zná možnosti, mě by nenapadlo, že je nějaký jednoduchý způsob jak celé to pole otočit o 90 stupňů, v životě jsem to neviděl, že by se to dělalo, tak prostě moje myšlenky ani tímto směrem nemohly jít.
U mna bol postup bez triku hned. Nechcelo sa mi osetrovat 4 strany, ked staci osetrit jednu a otocit to. To by bolo otacanie, kde by som isiel podla indexov a prepisoval to do noveho pola.

Implementovat otacanie o 90 stupnov sa mi tiez nechcelo a tu nastupila teoria. Napadlo ma, ze vela prostredi zvlada rychlo transpoziciu - to zameni riadky za stlpce a nieco take chcem. Po zamene riadkov za stlpce uz to chce iba malu upravu, ktoru som si nakreslil na papier.
Na transpoziciu som nasiel odpoved na https://stackoverflow.com/a/17037588 a ostatne uz ide lahko.

jazykovědec

Re:Programátorský úkol
« Odpověď #21 kdy: 10. 09. 2017, 14:17:16 »
Na Python bych se vykašlal, to je dobré pro adminy na patlání, ale nic většího v tom neuděláš.

Tak tajle v tom delaji Star Wars: https://www.python.org/about/success/ilm/

Dalsi priklady: https://www.python.org/about/success/

Ted je otazka, cemu rikate "neco vetsiho". Necelych 200000 radek by stacilo? https://wiki.python.org/moin/LargePythonProjects

Nuda. Až budeš dělat vývojáře, tak se ozvi. Ten jazyk nemá podporu na velké projekty. Není rychlý. Nemá ani nástroje. Admin to nepozná, protože je to lepší než Bash, ale na větší vývoj to není vhodné.

čumil

Re:Programátorský úkol
« Odpověď #22 kdy: 10. 09. 2017, 14:24:32 »
Kód: [Vybrat]
x = [[1,2,3],
     [4,5,6],
     [7,8,9],
     [70,80,90]]
y = []

while len(x) is not 0:
    y += list(x[0])
    x = zip(*x[1:])[::-1]

print y
Řešení na 3 řádky. Pravda, funkcionální, ale jinak to snadno nejde.

čumil

Re:Programátorský úkol
« Odpověď #23 kdy: 10. 09. 2017, 14:26:11 »
Na Python bych se vykašlal, to je dobré pro adminy na patlání, ale nic většího v tom neuděláš.

Tak tajle v tom delaji Star Wars: https://www.python.org/about/success/ilm/

Dalsi priklady: https://www.python.org/about/success/

Ted je otazka, cemu rikate "neco vetsiho". Necelych 200000 radek by stacilo? https://wiki.python.org/moin/LargePythonProjects

Nuda. Až budeš dělat vývojáře, tak se ozvi. Ten jazyk nemá podporu na velké projekty. Není rychlý. Nemá ani nástroje. Admin to nepozná, protože je to lepší než Bash, ale na větší vývoj to není vhodné.
Aha, proto se v tom dělá ML, ... hold, je to na malí blbosti.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Programátorský úkol
« Odpověď #24 kdy: 10. 09. 2017, 14:26:56 »
Není rychlý.

Minimalne toto se da rici i o Jave, ktera je po svete dost rozlezla.

jazykovědec

Re:Programátorský úkol
« Odpověď #25 kdy: 10. 09. 2017, 14:30:36 »
Není rychlý.

Minimalne toto se da rici i o Jave, ktera je po svete dost rozlezla.

Ne, to se fakt nedá.

čumil

Re:Programátorský úkol
« Odpověď #26 kdy: 10. 09. 2017, 14:49:35 »
Není rychlý.

Minimalne toto se da rici i o Jave, ktera je po svete dost rozlezla.

Ne, to se fakt nedá.
Di si honit nad holkou, ne nad jazykem prosimtě.

jazykovědec

Re:Programátorský úkol
« Odpověď #27 kdy: 10. 09. 2017, 14:58:42 »
To byl tip pro kojota a ne pro nějaké patlaly, kteří si myslí, že Java je pomalá a Python se hodí na velké věci. Ať si z toho veme, co se mu líbí.

čumil

Re:Programátorský úkol
« Odpověď #28 kdy: 10. 09. 2017, 15:01:57 »
kojote, to je pro tebe, di do pythonu, jazykovědec je blbec ...

borekz

  • ****
  • 493
    • Zobrazit profil
    • E-mail
Re:Programátorský úkol
« Odpověď #29 kdy: 10. 09. 2017, 15:31:13 »
Není rychlý.
Minimalne toto se da rici i o Jave, ktera je po svete dost rozlezla.
Těžko říct, jestli je pomalejší Java nebo Python zkompilovaný do nativního kódu. V každém případě jsou z principu pomalé fintovní řešení v Pythonu v tomto vláknu diskuze, protože mají kvadratickou větší složitost. Mě se zde líbilo pouze řešení je v Javě od Kolemjdoucího, které je čitelné a zároveň má lineární složitost. Podobně by to šlo Pythonu, kdyby se chtělo.