Wpis z mikrobloga

Hej pajtonowe świry, przybywam prosic o pomoc z zrozumieniu paru rzeczy w poniższym kodzie.
https://pastebin.com/mXyv3CFB
kodzik ten jest rozwiązaniem do zadania stąd
https://www.codewars.com/kata/540afbe2dc9f615d5e000425/python
obiekt dla którego walidacja jest poprawna
https://pastebin.com/wwXaRypM

To zadanko mnie wzięło i #!$%@?ło mną w ścianę, śmiejąc mi się prosto w twarz, a teraz nawet rozwiązanie sprawia mi problem, chciałbym z waszą pomocą je zrozumiec i wynieść jak najwięcej :)
Mam problem ze zrozumieniem petli(tej z czterema for'ami) oraz returna

1. Jak mam zrozumieć iterowanie się przez listę za pomocą tej pętli? Gdyby była zagnieżdzona to bym kumał(nawet printa bym sobie wpisał i bym wiedział gdzie w której liście i cyfrze, czyli gdzie w kwadracie jestem XD) ale tutaj jest w jednym szyku, nie umiem sobie zwizualizować tego jak on iteruje się po tych kwadratach sudoku. Tym bardziej gdy ta pętla jest użyta w returnie, tam już wgl nie wiem o co chodzi

2. No właśnie, return! Wiem mniej więcej jak działają funkcje all i map. Lecz nie rozumiem tego wrzucania za pomocą map do funkcji w której jest "set(range(1, n + 1))"
Tak wiem elementy setu się nie mogą powtarzać, pewnie dlatego został użyty ale cieżko mi jest sobie to wyobrazić, zwizualizować. Dotychczas podczas mej nauki gdy uływałem np. map to jako argument miałem prosta listę. Nie 4 pętle itd

Pomóżcie mirasy, nie mam zamiaru usuwac posta, niech inni skorzystają
Pozdrawiam i dzieki za poswiecony czas, wybaczcie za chaotyczne opisanie, mam nadzieje ze ktos zrozumie xD

#python #naukaprogramowania #programowanie #programista15k #informatyka
  • 6
@Tooca_rev:
Ad1 To jest zagnieżdżona lista składana. Dla każdego p i q iterując od zera do n w odstępie rootN, będącego defakto początkiem kwadratu planszy, składa się listę będącą wszystkimi elementami tego kwadratu iterując x,y od zera do rootN.

Ad2. isOneToN tworzy zbiór set z elementów argumentu i porównuje go do set(range(1, n + 1)) czyli zbioru wszystkich elementów na planszy od 1 do n włącznie. Czyli all (map (isOneToN, zbior)
@Tooca_rev: Zadanie jest dobrze rozwiazanie, ale ten kod jest fatalnej jakosci, niepythonowy i obskurny

Co do petli w petli => sudoku sklada sie z kwadratow, jezeli dlugosc calego wiersza to N, to dlugosc poszczegolnego kwadratu to sqrt(N). Latwiej bedzie Ci to zrozumiec myslac o standardowym boardzie do sudoku - 9x9

Plansza 9x9, sklada sie z 9 kwadratow o boku 3x3, ostatnia petla tworzy liste list z wartosciami z poszczegolnych kwadratow, a
@lionbest: Napisales: "Ad2. isOneToN tworzy zbiór set z elementów argumentu i porównuje go do set(range(1, n + 1))"
czyli w kodzie (all(map(isOneToN, self.board)) funkcja map wyciaga z "listy w liscie" argumenty w postaci cyfr? Z listy nie da sie stworzyc setu, sam argument self.board to lista z listami, wiec skąd funkcja map ma wiedziec jak "głęboko" siegnac do cyfr. A co gdyby list w liscie bylo 3,4 lub 5.
Zreszta w
@Tooca_rev: te mapy to wlasnie powod dla ktorych ten kod jest ciezszy do z rozumienia

To jest rownowaznosc tego zapisu:

all(isOneToN(row) for row in self.board)
Z planszy bierzesz kazdy z wierszy i porownujesz czy zawiera on tylko liczby od 1 do n. Swoja droga range jest *do* gornej granicy, wiec range(1, 10) = 1,2,3,4,5,6,7,8,9 - powrot do podstaw by sie przydal ( ͡° ͜ʖ ͡°)
@Tooca_rev: No właśnie tak działa set, zamienia listę na obiekt zbioru. Map jest użyte, aby dla każdej listy w liście wywołać isOneToN czyli porównać do pełnego zbioru. map zwraca listę wyników isOneToN, a all sprawdzi, czy wszystkie elementy tej listy są true.

range(1, 9 + 1) zwróci listę [1,2,3,4,5,6,7,8,9] a set zamieni ją w obiekt zbioru.