To wyzwanie już opisuje droport. Jednak jestem trochę leniwy i naprawdę potrzebuję tylko mojej tablicy, aby była nieco bardziej posortowana niż wcześniej, nie trzeba jej sortować do końca .
W opcji Sortuj upuszczamy każdy element mniej niż jakikolwiek element przed nim. W Lazy Drop Sort upuszczamy każdy element mniej niż dokładnie go poprzedzający .
Oto przykład. Rozważ następującą tablicę:
8 6 9 9 7 2 3 8 1 3
Oznaczmy każdy element mniej niż poprzedni.
8 6 9 9 7 2 3 8 1 3
^ ^ ^ ^
Zwróć uwagę, że ani nie 3
został oznaczony, ani ostatni 8
. Wszystkie są większe niż pojedynczy element po lewej stronie.
Po ukończeniu algorytmu, usunięciu zaznaczonych elementów otrzymujemy:
8 9 9 3 8 3
To w zasadzie wygląda na bardziej uporządkowane. Trochę Jestem leniwy.
Twoim zadaniem, jak mogłeś już wywnioskować, jest wdrożenie tego algorytmu.
Dane wejściowe to tablica co najmniej 1 dodatniej liczby całkowitej od 1 do 9, więc możesz również wziąć ciąg cyfr.
To jest golf golfowy , wygrywa najmniej bajtów!
Dodatkowe przypadki testowe:
1
1
1 2 3
1 2 3
5 3 1
5
1 2 3 2 1
1 2 3
1 1 1 9 9 9 1 1 1 9 9 9 1 1 1
1 1 1 9 9 9 1 1 9 9 9 1 1
9 9
9 9
5 2 4 2 3
5 4 3
Odpowiedzi:
Łuska , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6),
2825 bajtówZaoszczędź 3 bajty dzięki @Shaggy
Wypróbuj online!
źródło
n=>p<=n
wyglądałby niesamowicie ;-)(n=p)=>p<=(p=n)
działa dobrze;)p
po raz pierwszy, kiedy nie jest jeszcze zdefiniowane?a
jest początkowo ustawiony na tablicę wejściową ia-1
spowodowałoby toNaN
(chyba że zawiera jedną liczbę całkowitą, w którym to przypadku jest przymuszany do tej liczby całkowitej).R , 27 bajtów
Wypróbuj online!
źródło
MATL ,
98 bajtówOszczędność jednego bajtu dzięki Giuseppe.
Wypróbuj online!
Wyjaśnienie:
źródło
Perl 5 .10.0 +
-nl
, 16 bajtówWypróbuj online!
źródło
perl6 -ne '$/>$_||.say;$/=$_'
Haskell, 29 bajtów
po prostu proste zrozumienie listy.
źródło
Japt ,
87 bajtówZapisano 1 bajt dzięki @Oliver
Przetestuj online!
Alternatywy:
źródło
Stax , 5 bajtów
Uruchom i debuguj to online
Rozpakowujemy, odkrywamy i komentujemy kod, otrzymujemy to.
Uruchom ten
Kolejność instrukcji jest niezręczna, ale jest ku temu powód. Pakowanie kodu źródłowego Stax nie zawsze daje taki sam rozmiar danych wyjściowych dla tego samego rozmiaru danych wejściowych. Zasadniczo masz szansę zapisać bajt, jeśli ostatni znak źródła ma niższy kod znaków. Cóż,
!
ma jeden z najniższych kodów, jakie można uzyskać dla postaci drukowalnej. (W szczególności 33) Wiele 6-bajtowych programów stax ASCII nie może spakować mniejszych rozmiarów. Ale jeśli kończą się na!
, to mogą. Dlatego powodem tego konkretnego porządkowania instrukcji jest zapewnienie, że logika nie skończy się na końcu programu.źródło
J, 12 bajtów
Wyjaśnienie:
Przykłady:
Wypróbuj online!
źródło
Galaretka , 6 bajtów
I / O jest na ciągach.
Wypróbuj online!
źródło
×
nie powinno działać na powtarzanie postaci, ale działa.Java 8,
665548 bajtów-11 bajtów po napiwku @ OlivierGrégoire .
-7 dodatkowych bajtów dzięki @ OlivierGrégoire .
Wyjaśnienie:
Wypróbuj online.
źródło
~0
kiedy jest to w zasadzie-1
. Osobiście wybrałbym bardziej intuicyjne rozwiązanie, jeśli liczba bajtów jest tej samej długości (z wyjątkiemwhile(...)
vsfor(;...;)
, w którym to przypadku wolęfor
. Jednak dziękuję za kolejne -7 bajtów. :)Integer.MIN_VALUE
(co jest1<<31
chyba wtedy ...) ;-)Oktawa , 21 bajtów
Wypróbuj online!
Wyjaśnienie:
Weź wektor
x
jako dane wejściowe i utwórz wektor[0, diff(x)<0]
, w którymdiff(x)
jest wektor z różnicą między wszystkimi sąsiadującymi elementami. Zachowaj tylko te, które są negatywne, porównując go do zera, dając nam listę wszystkich elementów, które chcemy upuścić.Następnie wybieramy elementy z wektora wejściowego, które chcemy zachować.
źródło
V , 25 bajtów
Wypróbuj online!
Hexdump:
Najgorszy język do pracy. Ale zrobiłem to z odwagą .
źródło
k$yl+@"òç-/d
hiszpański?k$yl+@"òç-/d
można by swobodnie przetłumaczyć jako Ouch, kto do diabła zostawił otwarte drzwi szafy?Trójkątność , 71 bajtów
Wypróbuj online!
Jak to działa?
źródło
)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
rozszerzyłby się do twojej obecnej odpowiedzi?)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
byłby twoim kodem, rozwinąłby się do twojego obecnego szablonu, a następnie wykonał polecenia 2D na tym rozwiniętym szablonie. EDIT:.....).....\n....IEL....\n...)rFD)...\n..2+)IE)w..\n.+h)2_stDO.\n={M)IEm}...
i.....).........IEL.......)rFD).....2+)IE)w...+h)2_stDO.={M)IEm}...
i)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
by wszystkie trzy być dokładnie ten sam program.Python , 40 bajtów
Wypróbuj online!
Wprowadź jako krotkę znaków.
Python 3 , 41 bajtów
Wypróbuj online!
Ciąg wejściowy.
Python 2 , 41 bajtów
Wypróbuj online!
Ciąg wejściowy, tylko dlatego, że ciągi są większe niż,
id
ale liczby są mniejsze.źródło
Wolfram Language (Mathematica) , 33 bajty
Wypróbuj online!
Jak to działa
Kod
# - {0}~Join~Most@#
zamienia tablicę{a,b,c,d,e,f}
w{a,b-a,c-b,d-c,e-d,f-e}
. ZastosowanieArg
do tego ustawia liczby ujemnePi
i liczby nieujemne na0
.Pick[#, ..., 0]&
wybiera wpisy#
gdzie...
ma0
: w naszym przypadku dokładnie te elementy, które dają nieujemną liczbę po odjęciu poprzedniego elementu. Innymi słowy, są to dokładnie te wpisy, które chcemy zachować podczas sortowania.źródło
Cud , 27 bajtów
Przykład użycia:
Wyjaśnienie
Wersja bez golfa:
Przygotuj
0
, uzyskaj listę kolejnych par, przechowuj elementy listy, w których pierwsza liczba <= druga liczba, zdobądź drugą liczbę każdej pary.źródło
Wolfram Language (Mathematica) , 20 bajtów
Wypróbuj online!
Wyjaśnienie
Input = {8, 6, 9, 9, 7, 2, 3, 8, 1, 3}
Grupuj kolejne elementy, które ściśle zmniejszają:
{{8, 6}, {9}, {9, 7, 2}, {3}, {8, 1}, {3}}
Weź pierwszy element każdego:
{8, 9, 9, 3, 8, 3}
źródło
##>0
jest fantazyjne i tak dalej, ale tak naprawdę nic#>#2
tu nie oszczędza ;) (co sprawiłoby, że twój program działałby z dowolnymi liczbami całkowitymi, ale nie jest to wymagane).Python 2 ,
52464542 bajtówWypróbuj online!
Zapisano:
źródło
SWI-Prolog, 44 bajty
Zastosowanie: Wywołaj „ List -X”, gdzie List jest listą zamkniętą nawiasami, oddzieloną przecinkami, np. [1,4,5,1,11,6,7].
źródło
APL + WIN, 14 bajtów
Monity o wprowadzenie na ekranie wektora liczb całkowitych.
źródło
05AB1E , 6 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Kotlin , 39 bajtów
Wypróbuj online!
Filtruj elementy, które są albo pierwszym elementem (indeks == 0, albo nawet krótszym indeksem <1) LUB bieżąca wartość jest większa lub równa poprzedniej pozycji (a [i-1]).
źródło
APL (Dyalog Unicode) , 11 bajtów
Wypróbuj online!
W rzeczywistości jest to dość podobne do odpowiedzi Grahama, ale w Dyalogu i opracowane niezależnie. Również bardziej symetryczny.
źródło
K4 , 10 bajtów
Rozwiązanie:
Przykład:
Wyjaśnienie:
Znajdź indeksy, w których element jest mniejszy niż poprzedni, usuń te indeksy z danych wejściowych
źródło
Attache , 24 bajty
Wypróbuj online!
Wyjaśnienie
Mask
wybiera wszystkie elementy z drugiego argumentu, które odpowiadają prawdziwym elementom w pierwszym argumencie.1'(Delta!_>=0)
oblicza wskaźniki odpowiadające elementom, które powinny znajdować się w końcowej tablicy.Inne próby
28 bajtów (bez punktów):
~Mask#(1&`'##Delta#`>=#C[0])
32 bajty:
{Mask[1'(&`<= =>Slices[_,2]),_]}
źródło
C # (.NET Core) , 33 + 18 = 51 bajtów
Wypróbuj online!
w zasadzie instrukcja jest tam, gdzie x jest pierwszą liczbą całkowitą w tablicy lub jest większa lub równa poprzedniej liczbie, zachowaj ją. W przeciwnym razie upuść.
źródło
IEnumerable
. NieToArray()
potrzebneSystem.Collections
, co zniweczyłoby wszystkie bajty zapisane na usunięcie plikuToArray()
.IEnumerable
, wystarczy użyć jej jako typu zwrotu.Swift 4 ,
5655 bajtówWypróbuj online!
Wyjaśnienie
źródło
Galaretka , 9 bajtów
Wypróbuj online!
To wydaje się dość nieporęczne, nie byłoby zaskoczeniem, gdyby istniał lepszy sposób.
źródło
Brain-Flak ,
136, 120 bajtówTutaj jest sformatowany i „czytelny” .
Wypróbuj online!
źródło