Wyzwanie:
Biorąc pod uwagę listę niepustych list liczb całkowitych, zwróć listę krotek o następującej formie: Krotki pierwszej listy zaczynające się od każdego elementu pierwszej listy, a następnie pierwszy element każdej kolejnej listy, więc powinna być i-ta krotka [ith element of first list, first element of second list, ... , first element of last list]
. Na przykład:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] => [[1, 4, 7], [2, 4, 7], [3, 4, 7], ...
Następnie wykonaj krotki formularza [last element of first list, ith element of second list, first element of third list, ..., first element of last list]
, więc w naszym przykładzie byłoby to:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] => ..., [3, 4, 7], [3, 5, 7], [3, 6, 7], ...
Kontynuuj z każdą pozostałą listą, aż dojdziesz do [last element of first list, ..., last element of second to last list, ith element of last list]
:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] => ..., [3, 6, 7], [3, 6, 8], [3, 6, 9]]
Pełna wydajność jest następująca:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] =>
[[1, 4, 7], [2, 4, 7], [3, 4, 7], [3, 5, 7], [3, 6, 7], [3, 6, 8], [3, 6, 9]]
Niektóre płyty kotła dla dobrego pomiaru:
- Jeśli chcesz, aby dane wejściowe były listami ciągów lub listami liczb całkowitych dodatnich, nie ma problemu. Pytanie dotyczy manipulacji listami, a nie tego, co jest na listach.
- Dane wejściowe i wyjściowe mogą być w dowolnym akceptowalnym formacie .
- Dozwolony jest pełny program lub funkcja.
- Standardowe luki są domyślnie niedozwolone.
- To pytanie dotyczy kodu golfowego, więc wygrywa najmniej bajtów.
Przykłady:
[] => [[]] (or an error, thanks to ngn for correcting the output in this case)
[[1]] => [[1]]
[[1, 2], [3, 4], [5]] => [[1, 3, 5], [2, 3, 5], [2, 4, 5]]
[[1], [2], [5, 6], [3], [4]] => [[1, 2, 5, 3, 4], [1, 2, 6, 3, 4]]
[[1, 2, 3], [4, 5]] => [[1, 4], [2, 4], [3, 4], [3, 5]]
[[1, 2, 3], []] => unspecified behavior (can be an error)
[[3, 13, 6], [9, 2, 4], [5, 10, 8], [12, 1, 11], [7, 14]] =>
[[3, 9, 5, 12, 7], [13, 9, 5, 12, 7], [6, 9, 5, 12, 7], [6, 2, 5, 12, 7],
[6, 4, 5, 12, 7], [6, 4, 10, 12, 7], [6, 4, 8, 12, 7], [6, 4, 8, 1, 7],
[6, 4, 8, 11, 7], [6, 4, 8, 11, 14]]
[[16, 8, 4, 14, 6, 7, 10, 15], [11, 1, 12, 2, 19, 18, 9, 3], [13, 5, 17]] =>
[[16, 11, 13], [8, 11, 13], [4, 11, 13], [14, 11, 13], [6, 11, 13],
[7, 11, 13], [10, 11, 13], [15, 11, 13], [15, 1, 13], [15, 12, 13], [15, 2, 13],
[15, 19, 13], [15, 18, 13], [15, 9, 13], [15, 3, 13], [15, 3, 5], [15, 3, 17]]
Jeśli ktoś ma lepszy tytuł, daj mi znać.
źródło
[] => []
tak powinno być,[] => [[]]
ale nie mogę znaleźć słów, które mogłyby wyjaśnić, dlaczego.[[]]
ponieważ istnieje jedna pusta krotka z jednym wpisem z każdej z (zerowych) list podrzędnych. Prawdopodobnie jest to zbyt denerwujące, aby wymagać od programów poprawnego wyświetlania tego, więc powiem, że nie jest to konieczne.[]
, ściśle mówiąc, jest pustą listą niepustych list, ale dane wyjściowe są niejednoznaczne pomiędzy[]
i[[]]
jeśli jest to dozwolone wejście. („Krotki pierwszej listy zaczynające się od każdego elementu pierwszej listy ...” - nie ma pierwszej listy, więc gotowe ->[]
)[]
powinno być[[]]
. Na przykład liczba krotek wyjściowych jest liczbą,sum(inner list lengths) - length of outer list + 1
która w pustym przypadku daje1
, która jest długością,[[]]
ale nie długością[]
. Jest to jednak trochę pedantyczny problem ...Odpowiedzi:
JavaScript (ES6), 59 bajtów
Oczekuje listy dodatnich liczb całkowitych.
Wypróbuj online!
W jaki sposób?
Przy każdej iteracji:
źródło
a.some
sztuczka jest niesamowita!awe.some
nie byłoby marnotrawstwem bajtów ... :)Python 2 , 62 bajty
Wypróbuj online!
Wykorzystanie popowego pomysłu Chasa Browna zainspirowanego przesłaniem JS Arnaulda .
Python 2 , 68 bajtów
Wypróbuj online!
Mutuje pierwsze elementy list, aby zachować żądane wartości. To
[[0,0]]+
brzydkie włamanie do wydrukowania pierwszych wartości.źródło
Galaretka , 15 bajtów
Wypróbuj online! (stopka wyświetla rzeczywistą zwróconą listę zamiast reprezentacji galaretki)
W jaki sposób?
Indeksy do kartezjańskiego produktu list w wymaganych punktach ...
ẈṚ’ṣ1T$¦ƬUṚị"€
(14 bajtów) kończy się niepowodzeniem dla danych wejściowych o (nie końcowej) długości jednej liście; ale możeṣ1T$
może być zastąpiony czymś innym?źródło
K (ngn / k) ,
40211918 bajtówWypróbuj online!
wykorzystuje pomysły z odpowiedzi @ H.PWiz
{
}
funkcja z argumentemx
#:'
długość każdego|
odwrócić!
wszystkie krotki indeksu dla tablicy o tych wymiarach jak kolumny w macierzy (lista list)|
odwrócić+
transponować|\
bieganie maksima?
wyjątkowyx@'/:
użyj każdej krotki po prawej jako indeksów na odpowiednich listach odx
źródło
Węgiel drzewny , 33 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Rzucaj liczby całkowite na łańcuchy przed niejawnym drukowaniem przy użyciu domyślnego formatu wyjściowego list, czyli każdego elementu w osobnej linii, a listy zagnieżdżone w podwójnych odstępach.
Weź sumę długości list i odejmij długość listy list. Następnie zapętlić od 0 do tej wartości włącznie.
Mapuj listę list i indeksuj do każdej listy.
Zablokuj indeks na 0 i ostatni indeks na liście. (Sugerowane są nawiasy zamykające.)
Po pierwszej liście odejmij zmniejszone długości wszystkich poprzednich list od indeksu najbardziej zewnętrznego. (To nie działa dla pierwszej listy, ponieważ długość list jest pusta, a suma nie jest liczbą.)
źródło
Python 2 , 72 bajty
Wypróbuj online!
To jest port Pythona w doskonałym algorytmie JavaScript Arnaulda .
źródło
APL (Dyalog Classic) ,
323027 bajtówWypróbuj online!
kompletny program, dane wejściowe są z klawiatury (
⎕
)dla
[]
wyjść wejściowych[[]]
(ich odpowiednikami APL są0⍴⊂⍬
i,⊂⍬
)zakłada unikalność liczb na wejściu
źródło
,⊂,1
JavaScript (ES6),
5854 bajtówPo ponad 14 próbach gry w golfa w dół (usuwając wszystkie wystąpienia pętli while
push
iconcat
), doszedłem do iteracji algorytmicznie podobnej do odpowiedzi @ Arnauld , co nie jest zaskakujące, biorąc pod uwagę, jak zwięzła jest!Akceptuje listę list liczb całkowitych dodatnich. Wypróbuj online!
58 bajtów
Dla 1 bajt, zastępując
s = y.shift()
zey.shift(s = 1)
powinien obsługiwać wszystkie liczby całkowite (prawdopodobnie, bo nie testowałem go osobiście).58 bajtów
Wersja premiowa z niewielkimi zmianami:
Wyjaśnienie
Wczesne wersje kodu próbowały zmodyfikować klon (tablicy) pierwszych elementów każdej tablicy, ale dodatkowy krok inicjalizacji tej tablicy był kosztowny ... dopóki nie zdałem sobie sprawy, że mapowanie pierwszych elementów każdej tablicy „jedyna” operacja konieczna, jeśli zmutuję oryginalne tablice.
Używa flagi logicznej, aby sprawdzić, czy jakakolwiek tablica została już przesunięta (tj. Skrócona). Odwrócił się dalej od sprawdzania warunkowego, obserwując, że JS wymusza tablice z wartością liczbową jako jedynym elementem do tej liczby, jednocześnie zmuszając tablice z wieloma wartościami jako NaN.
źródło
APL (Dyalog) , 15 bajtów ( SBCS )
Dzięki ngn za wskazanie niepotrzebnego bajtu
Wypróbuj online!
{∪⌈\,⍉⍳≢¨⍵}
generuje listy do indeksowania na wejściu. na przykład(1 2 3) (4 5 6) (7 8 9) -> (0 0 0) (1 0 0) (2 0 0) (2 1 0) (2 2 0) (2 2 1) (2 2 2)
≢¨⍵
: długość każdej listy na wejściu,⍉⍳
tworzy wszystkie kombinacje liczb aż do wejścia. na przykład2 3 -> (0 0) (1 0) (0 1) (1 1) (0 2) (1 2)
⌈\
: skanowanie z maksimum. np. powyższy przykład byłby teraz(0 0) (1 0) (1 1) (1 1) (1 2) (1 2)
∪
: usuń duplikaty⊃¨¨⊂
dokonuje indeksowania, pamiętając o głębokości każdego argumentuźródło
⊆
wydaje się niepotrzebne .Python 2 , 91 bajtów
Wypróbuj online!
źródło