Wprowadzenie
Załóżmy, że masz listę liczb całkowitych (lub dowolnych obiektów, ale trzymajmy się liczb całkowitych dla uproszczenia). Listy mogą mieć różne długości, a niektóre z nich mogą być puste. Napiszmy listy w formacie tabelarycznym:
[[ 1, 2, 3, 4, 5],
[ 6, 7],
[ 8, 9, 10, 11],
[],
[12, 13, 14],
[15, 16, 17, 18]]
Tabela ta ma 5 pionowe kolumny, zawierające numery 1, 6, 8, 12, 15
, 2, 7, 9, 13, 16
, 3, 10, 14, 17
, 4, 11, 18
, i 5
. Jeśli odwrócić każdą kolumnę otrzymujemy list 15, 12, 8, 6, 1
, 16, 13, 9, 7, 2
, 17, 14, 10, 3
, 18, 11, 4
, i 5
. Podłączmy te liczby z powrotem do kolumn tabeli, zachowując jednakowe długości wierszy:
[[15, 16, 17, 18, 5],
[12, 13],
[ 8, 9, 14, 11],
[],
[ 6, 7, 10],
[ 1, 2, 3, 4]]
Twoim zadaniem jest wdrożenie tej operacji.
Wejście i wyjście
Twoje dane wejściowe to lista nieujemnych liczb całkowitych reprezentujących wiersze. Rzędy mogą mieć różne długości, a niektóre z nich mogą być puste. Zawsze będzie co najmniej jeden rząd. Twój wynik jest wynikiem odwrócenia każdej kolumny, jak opisano powyżej. Dane wejściowe i wyjściowe mogą mieć dowolny rozsądny format.
Najniższa liczba bajtów w każdym języku wygrywa. Standardowy golf zasady .
Przypadki testowe
[[]] -> [[]]
[[],[]] -> [[],[]]
[[8,5,1]] -> [[8,5,1]]
[[1,200],[0,3]] -> [[0,3],[1,200]]
[[],[3,9],[1],[]] -> [[],[1,9],[3],[]]
[[],[5,8,7],[0,6,5,7,1]] -> [[],[0,6,5],[5,8,7,7,1]]
[[1,8,5],[7,5,4],[],[1]] -> [[1,5,4],[7,8,5],[],[1]]
[[],[],[2],[],[31],[],[5],[],[],[],[7]] -> [[],[],[7],[],[5],[],[31],[],[],[],[2]]
[[1,10,100,1000],[2,20,200],[3,30],[4],[5,50,500],[6,60],[7]] -> [[7,60,500,1000],[6,50,200],[5,30],[4],[3,20,100],[2,10],[1]]
[[8,4],[3,0,4,8,1],[8],[0,8],[9,7,1,6],[3,8,1,9,5]] -> [[3,8],[9,7,1,9,5],[0],[8,8],[3,0,1,6],[8,4,4,8,1]]
[[3,9,3],[5],[1],[3,5],[9,0,6,2],[1,3],[4,9,2],[6,6,7,8,7]] -> [[6,6,7],[4],[1],[9,9],[3,3,2,8],[1,0],[5,5,6],[3,9,3,2,7]]
[[8,5,6],[3,5,2,4,9],[4,3,8,3,7],[6,1,1],[1,8,9,9],[9,1,2],[8,7]] -> [[8,7,2],[9,1,9,9,7],[1,8,1,3,9],[6,1,8],[4,3,2,4],[3,5,6],[8,5]]
[[2,4],[1,4],[0,8,7,3],[4,9,2,5],[2,8,0],[0,8,3],[7,3,1],[],[3,3,7,8]] -> [[3,3],[7,3],[0,8,7,8],[2,8,1,5],[4,9,3],[0,8,0],[1,4,2],[],[2,4,7,3]]
[[1,9],[3],[2,4,5]] -> [[2,4],[3,null],[1,9,5]]
)Odpowiedzi:
Galaretka , 16 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
ṣ
najwyższa linia jest bardzo sprytna! (ḟṚṁṣj
Czy⁸ḟ⁹Ṛṁ⁸ṣ⁹¤j⁹
tak?) Inaczej miałem to na jeszcze jeden bajtJapt ,
1513 bajtówzapisano 2 bajty dzięki @Shaggy
Przetestuj online!
Drugi wiersz można usunąć, jeśli wolno nam uzupełnić wiersze wartościami zerowymi, oszczędzając 4 bajty.
Wyjaśnienie
źródło
l;
zÊ
imf_Ä
z®fÄ
.mf
wydaje się, że działa tylko na drugą linię.mf
APL (Dyalog Unicode) ,
201916 bajtów SBCS-4 dzięki ngn.
Pełny program Monity o wejście z STDIN.
Wypróbuj online!
Objaśnienie z przykładem przejścia
⎕
monit o podanie danych wejściowych[[1,8,5],[7,5,4],[],[1]]
*
podnieść e do potęgi tego ( e n, co zapewni, że nie będzie zer)[[2.7,2981,148.4],[1096.6,148.4,54.6],[],[2.7]]
↑
zmieszaj listy w jedną matrycę, wypełniając zerami:┌ ┐
│2.7E0 3.0E3 1.5E2│
│1.1E3 1.5E2 5.5E1│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
⍉
transponować┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│3.0E3 1.5E2 0.0E0 0.0E0│
│1.5E2 5.5E1 0.0E0 0.0E0│
└ ┘
⌽@×⍤1
odwróć pozytywne elementy każdego rzędu┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│1.5E2 3.0E3 0.0E0 0.0E0│
│5.5E1 1.5E2 0.0E0 0.0E0│
└ ┘
⍉
transponować┌ ┐
│2.7E0 1.5E2 5.5E1│
│1.1E3 3.0E3 1.5E2│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
↓
podziel macierz na listę list[[2.7,148.4,54.6],[1096.6,2981,148.4],[0,0,0],[2.7,0,0]]
0~¨⍨
usuń zera z każdej listy[[2.7,148.4,54.6],[1096.6,2981,148.4],[],[2.7]]
⍟
naturalny logarytm[[1,5,4],[7,8,5],[],[1]]
źródło
K4 , 36 bajtów
Rozwiązanie:
Przykłady:
Wyjaśnienie:
To było uciążliwe, a ja wciąż pracuję nad uproszczeniem indeksowania.
Na przykład zamiast indeksowania w at,
x[0]
który zwróciłby pierwszy wiersz , chcemy wziąć pierwszą kolumnę , co można zrobić za pomocąx[;0]
.Jednak przekazanie zmiennej
y
dox[;]
traktuje ją jakox[y]
niex[;y]
odkładanie jej::
tam:x[::;]
.Jest to równoważne z przerzucaniem listy list, ale przerzucanie wymaga, aby wszystkie listy miały taką samą długość!
źródło
Haskell , 174 bajty
Wypróbuj online!
Niegolfowane / Wyjaśnienie
Chodzi o to, aby owinąć wszystkie elementy
[]
i wypełnić wiersze[]
(okazało się, że jest krótszy niż wypełnienie ujemną liczbą całkowitą, co pozwala również na ujemne wartości wejściowe, co jest miłe), a następnie transponować, odwrócić wszystkie rzędy i ponownie transponować i spłaszczyć każdy rząd :* Ta funkcja transpozycji (
h
) po prostu zwraca listę, jeśli nie ma żadnych elementów.Funkcja odwrotna musi ignorować
[]
elementy (np.[[],[1],[],[3],[4]]
->[[],[4],[],[3],[1]]
), robi to przez otrzymanie dwóch argumentów: Pierwszy to elementy w odwrotnej kolejności (np.[4,3,1]
), A drugi pierwotny wiersz.źródło
Python 2 ,
11110592 bajtówWypróbuj online!
źródło
print
zamiastreturn
zapisać bajt.JavaScript (ES6),
7976 bajtówEdycja: Zapisano 3 bajty dzięki @ETHproductions.
źródło
APL (Dyalog Unicode) , 27 bajtów SBCS
Wypróbuj online!
źródło
@
ale nie mam tego.Clojure, 123 bajty
Spodziewałem się
(+ nil)
się rzucić wyjątek, ale ewaluujenil
: oDziała to bez dopełniania, zamiast tego zlicza ile poprzednich rzędów jest co najmniej tak długich jak bieżący
R
.źródło