Z tego pytania dotyczącego przepływu stosu
Biorąc pod uwagę tablicę 2D o rozmiarze , wypisz wartości w kierunku przeciwnym do ruchu wskazówek zegara. Wyjście musi zaczynać się od zewnątrz do wewnątrz, a początkowy punkt zawsze będzie .
Podany przykład :
Wartości krawędzi w kierunku przeciwnym do ruchu wskazówek zegara wynoszą wówczas .
Teraz powtarzamy proces dla wewnętrznych wartości. To zakończy się macierzą podobną do poniższej
A wartości wewnętrzne wynoszą wtedy
Ostateczny wynik to
Zasady
- Załóżmy, że dane wejściowe są niepuste
- Przyjmij wartości macierzy jako dodatnie liczby całkowite
- Standardowe I / O Sposoby zastosowania
- Obowiązują standardowe zasady gry w golfa i kryteria wygranej
Niektóre przypadki testowe
Input
[
[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10,11,12,13,14],
[15,16,17,18,19,20,21]
]
Output
1,8,15,16,17,18,19,20,21,14,7,6,5,4,3,2,9,10,11,12,13
--------------------------------------------------------
Input
[
[1,2,3],
[3,2,1],
[4,5,6],
[6,5,4],
[7,8,9],
[9,8,7]
]
Output
1,3,4,6,7,9,8,7,9,4,6,1,3,2,2,5,5,8
-----------------------------------------------------
Input
[
[1]
]
Output
1
-----------------------------------
Input
[
[1, 2],
[2, 1]
]
Output
1,2,1,2
-----------------------------------------------------
Input
[
[1,2,3,6,7],
[2,4,3,2,1],
[3,2,4,5,6],
[6,5,6,5,4],
[10,4,7,8,9],
[12,4,9,8,7]
]
Output
1,2,3,6,10,12,4,9,8,7,9,4,6,1,7,6,3,2,4,2,5,4,7,8,5,5,2,3,4,6
Odpowiedzi:
R , 54 bajty
Kilka bajtów zapisanych przez @Giuseppe i @ J.Doe.
Wypróbuj online!
Rekurencyjnie usuń pierwszą kolumnę i odwróć wiersz / transponuj (zmieniając dolny wiersz w nową pierwszą kolumnę) resztę macierzy, aż skończy się tylko jedna kolumna. Wersja „tradycyjna” bez golfisty:
Wskazano, że
ncol(m)
można zapisać w golfa, abysum(m)
zaoszczędzić kolejny bajt, ponieważ możemy przyjmować dodatnie wartości macierzy całkowitych. Ale zostawię to tak, ponieważ działa dla wszystkich macierzy (nawet macierzy ciągów!)źródło
t()
zapobiega zepsuciu warunku!drop=TRUE
`[`
if
t()
że nie musiałem używaćis.null
testu, który był w moich pierwotnych próbach.m
będzie ostatnie , więc możesz zmienić instrukcję if na 54 bajty . Wydaje się działać w przypadkach testowych.Python 2 , 52 bajty
Wypróbuj online!
źródło
Pyth , 9 bajtów
Wypróbuj tutaj!
W jaki sposób?
źródło
Stax , 7 bajtów
Uruchom i debuguj
Pobiera tablicę wierszy w jednym wierszu i tworzy wynik oddzielony znakiem nowej linii.
Rozpakowane, niepolowane i skomentowane, wygląda to tak.
Uruchom ten
źródło
Pyth, 20 bajtów
Wypróbuj tutaj
Wyjaśnienie
źródło
ok , 12 bajtów
Wypróbuj online!
To narusza fakt, że ok nie wydaje się zbytnio dbać o kształt do transpozycji. W k byłoby to 13 bajtów :
*:',/(1_+|:)\
.źródło
Czysty , 69 bajtów
Wypróbuj online!
Przenosi następny wiersz / kolumnę na początek listy, aby mógł wzorować się na argumencie.
Dla pierwszego przykładu w wyzwaniu wygląda to następująco:
źródło
Julia 0,7 , 47 bajtów
Wypróbuj online!
Julia ma wygodny wbudowany mechanizm obracania matrycy o 90 stopni, co eliminuje potrzebę operacji transpozycji do tyłu.
Jak widać z ostrzeżeń kompilatora, nalega, aby wszystkie składniki warunku trójskładnikowego były oddzielone spacjami, aw wersji 1.0 zostało to faktycznie wymuszone.
O dziwo, w tej sytuacji najkrótszym sposobem na wyjście z rekurencji było użycie bloku try-catch:
Julia 1.0 , 50 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 89 bajtów
Wypróbuj online!
Bierze pierwszą kolumnę, transponuje pozostałą, a następnie odwraca każdy wiersz (= obróć matrycę o 90 stopni CW), a następnie powtarzaj, aż do tablicy nie będzie już żadnych wpisów.
źródło
APL (Dyalog) ,
2422 bajtówWypróbuj online!
W jaki sposób?
źródło
05AB1E ,
131110 bajtów-2 bajty dzięki @Emigna .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Galaretka , 9 bajtów
Wypróbuj online!
źródło
Węgiel , 25 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Obróć wejście o 180 °. Wynika to z dwóch powodów: a) ostatni rząd jest najłatwiejszy do usunięcia, i b) łatwiej jest zapętlić, jeśli rząd zostanie usunięty na końcu pętli. (Próbowałem odzwierciedlać i generować zgodnie z ruchem wskazówek zegara, ale zajęło to dodatkowy bajt.)
Powtarzaj, aż tablica będzie pusta.
Obróć tablicę o 90 °.
Usuń ostatni wiersz tablicy i wydrukuj element jako ciągi w osobnych wierszach.
źródło
Rubinowy , 65 bajtów
Wypróbuj online!
źródło
PowerShell , 266 bajtów
Tak .. PowerShell nie jest najlepszy do obsługi macierzy. Ale algorytm jest w zasadzie taki sam jak powyżej. Każdy wiersz jest reprezentowany jako ciąg oddzielony przecinkami, i zasadniczo wykonujemy obrót i transpozycję dla każdej warstwy. Prawdopodobnie mogę golić się więcej, ale ... ja jestem już w piżamie ...
Wypróbuj online!
źródło