Řešil jsem to před lety na pohovoru v Javě, je to úkol, který jsem tehdá napsal snad na 3 třídy, přes 100 řádek kódu, a psal jsem to den. Teď jsem to po 3 letech, kdy si nepamatuji původní koncept zkusil znovu v Pythonu, a napsal jsem to na 17 řádek (podle mě by to šlo i kratší, ale to nebyl cíl), a podle mě jsem zvolil mnohem lepší koncept řešení.
ProblémMáte obdelník/čtverec složený z čísel, a ten prolézáte jako had po směru hodinových ručiček do středu, a vypisujete čísla za sebou jako posloupnost. Důležité je to, že to nemusí být nutně čtverec, ale může to být i obdelník. Jazyk je na vás.
Příklad 1print(snake(
[[1,2],
[3,4]]
))
Výsledek:
[1, 2, 4, 3]
Příklad 2print(snake(
[[1,3,5,7,6],
[2,5,8,2,5],
[9,2,4,6,2],
[5,7,8,1,2],
[4,2,3,5,6],
[8,6,5,4,2]]
))
Výsledek:
[1, 3, 5, 7, 6, 5, 2, 2, 6, 2, 4, 5, 6, 8, 4, 5, 9, 2, 5, 8, 2, 6, 1, 5, 3, 2, 7, 2, 4, 8]
Moje řešení - Pythondef snake(mya):
column = lambda a: [x[a] for x in mya]
right = lambda inside : mya[inside][inside:-1-inside]
down = lambda inside : column(len(mya[0]) - inside - 1)[inside:-1-inside]
left = lambda inside : list(reversed(mya[len(column(0)) - inside - 1]))[inside:-1-inside]
up = lambda inside : list(reversed(column(inside)))[inside:-1-inside]
output = []
inside = 0
while True:
add = right(inside) + down(inside) + left(inside) + up(inside)
if add:
output += add
inside += 1
else:
return output
Moje dotazy- Opravdu je možné se zlepšit v programování cvičením třeba na www.codewars.com. Udělal jsem si tam asi 20 cvičení na různé algoritmy, a najednou mi přišlo, že mi to jde lépe a lépe. Přičemž jsem si vždycky myslel, že na to jako linux admin mozek nemám, teď prostě začínám pomalu přicházet na to, že to možná je hodně o cviku, že to že jsem to před lety dost mizerně zvládal je možná fakt, že jsem prostě málo cvičil a nemám v tom praxi, ne že jsem hloupej - což mě napadlo jako první.
- Trvalo mi to napsat 3-4 hodiny, jak si vedu?
- Co bych na tomhle kódu mohl zlepšit?
- Kdyžtak můžete nasdílet vlastní řešení v libovolném jazyce
Jo před lety mě jako programátora nevzali. Stále o programování uvažuji, i když dělám admina, ale je podle mě těžké být samouk. Ty codewars mi přijdou bezvadné v tom, že je tam úloha, člověk se to pokusí vyřešit, a pak se podívá, jak to vyřešili ostatní, ale zas je to jen na algoritmy, a přeci jenom programování je dnes ekosystém (frameworky, prostředí, testování, scrum)... Nicméně rád bych se naučil alespoň na úroveň mírně pokročilého v Pythonu, protože ten mě baví víc než Java, a částečně mě zajímá AI a BigData, kde je Python lídrem.