• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Podział tablicy na mniejsze: pomoc w zrozumieniu kodu źródłowego i algorytmu

Object Storage Arubacloud
0 głosów
233 wizyt
pytanie zadane 22 października 2018 w Algorytmy przez TeslaX93 Gaduła (3,600 p.)

Hej.

Mam do rozwiązania problem dotyczący podziału tablicy n-elementowej na mniejsze tablice, ale z kilkoma warunkami (niepuste podtablice, itd.) Na przykład mając tablicę [1,2,3,4] jako argument, powinien zwrócić:

[
[[1, 2, 3, 4]],
[[1, 2, 3], [4]],
[[1, 2], [3, 4]],
[[1, 2], [3], [4]],
[[1], [2, 3, 4]],
[[1], [2, 3], [4]],
[[1], [2], [3, 4]],
[[1], [2], [3], [4]]     ]

 

Zamiast odkrywać koło na nowo, poszukałem trochę, ale znalazłem tylko ten wątek na jakiejś pochodnej stackoverflow, który idealnie opisuje to, czego szukam. Problem polega na tym, że rozwiązanie tego jest zapisane w jakichś chorych językach programowania, których za nic nie ogarniam, a nawet rozwiązanie w Pythonie używa konstrukcji, o której wcześniej nie miałem pojęcia.

Czy mógłby mi ktoś rozjaśnić co tam się dzieje i jak krok po kroku można osiągnąć dokładnie to, co jest opisane w tamtym wątku?

1 odpowiedź

0 głosów
odpowiedź 22 października 2018 przez adrian17 Ekspert (344,860 p.)
edycja 22 października 2018 przez adrian17

blem polega na tym, że rozwiązanie tego jest zapisane w jakichś chorych językach programowania, których za nic nie ogarniam

Celem codegolf.stackexchange jest zazwyczaj wyprodukowanie jak najkrótszego kodu generującego dany wynik, ignorując czytelność :)

Jest prosty algorytm rekurencyjny generujący taki wynik: dla danej listy, weź pierwsze X elementów, po czym wykonaj algorytm na pozostałych elementach i połącz pierwszą listę z wynikami rekurencyjnego wywołania.

W Twoim przykładzie: podziel np listę przy pierwszym elemencie. Pierwsza część to [1], druga to [2, 3, 4]. Wywołując algorytm na drugiej części, dostaniesz:

[[2, 3, 4]],
[[2, 3], [4]],
[[2], [3, 4]],
[[2], [3], [4]]    

Dodaj [1] do każdego z nich i dostaniesz:

[[1], [2, 3, 4]],
[[1], [2, 3], [4]],
[[1], [2], [3, 4]],
[[1], [2], [3], [4]]

Podobnie dzieląc listę [1, 2, 3, 4] na drugim elemencie dostaniesz [1, 2] i [3, 4]. Wywołując algorytm na [3, 4] dostałbyś:

[[3, 4]]
[[3], [4]]

Dodając [1, 2] do każdego z nich dostaniesz:

[[1, 2], [3, 4]],
[[1, 2], [3], [4]],

Powtarzając to dla każdego podziału dostaniesz pełny zbiór rozwiązań.

(Na oko, ten 4-punktowy oneliner pythonowy z codegolf.stackexchange robi dokładnie ten algorytm, tylko wywołuje się rekurencyjnie na pierwszej połówce podziału, nie na drugiej)

Naklepałem czytelniejszy kawałek Pythona implementującego to, ale nie wiem czy chcesz gotowca, więc na razie go nie dam :)

Podobne pytania

0 głosów
0 odpowiedzi 117 wizyt
pytanie zadane 3 maja 2019 w Programowanie przez BinaryMan Stary wyjadacz (12,620 p.)
–4 głosów
0 odpowiedzi 701 wizyt
0 głosów
0 odpowiedzi 455 wizyt

92,552 zapytań

141,399 odpowiedzi

319,534 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...