Wyzwanie:
Biorąc pod uwagę listę liczb całkowitych, posortuj malejąco według ich największych pojedynczych cyfr. Kolejność liczb o tej samej największej cyfrze jest następnie sortowana według drugiej największej cyfry itp.
Ignorujemy zduplikowane cyfry liczb. A jeśli wszystkie cyfry w liczbie są takie same, kolejność liczb na liście może być dowolna.
Przykład:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Czemu? Oto odpowiednie cyfry, według których posortowano numery:
Output:
[8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0 ]
Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]
Zasady konkursu:
- Ignorujemy zduplikowane cyfry, więc
478
i-7738
będą zamawiane jako478, -7738
, ponieważ największe cyfry to[8,7,4]
i[8,7,3]
, a nie[8,7,4]
i[8,7,7,3]
. - Jeśli wiele cyfr ma te same cyfry, ich kolejność może być dowolna. Więc
373
i-73
mogą być sortowane jako obie373, -73
lub-73, 373
(cyfry dotyczą[7,3]
obu tych liczb). - Jeśli liczba nie zawiera więcej cyfr do sprawdzenia, zostanie umieszczona z tyłu odpowiednich liczb. Więc
123
i3120
zostaną posortowane jako3120, 123
, ponieważ największe cyfry[3,2,1]
są takie same, ale0
występują wcześniejnone
. - Możesz założyć, że wszystkie liczby na wejściu są w zakresie
[-999999,999999]
. - Wystarczy jedno z możliwych wyników, ale możesz wypisać wszystkie możliwe dane wyjściowe, w których listy podrzędne mogą znajdować się w dowolnej permutacji, jeśli chcesz (chociaż wątpię, że zaoszczędziłoby to bajtów w dowolnym języku).
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Input: [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
[902, -382, 34202, -34, 2132, -312, 321, 23, 11]
etc. The sublist [-312, 321, 2132] can be in any permutation
Input: [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
[29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
etc. The sublists [4, 44] and [2212, 21] can be in any permutation
Input: [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output: [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]
m:g/\d./
na.abs.comb
: tio.run/…Python 2 ,
605554 bajtów-1 bajt dzięki Jonasowi Auseviciusowi .
Wypróbuj online!
Bez golfa
Wypróbuj online!
źródło
None
można zastąpićcmp
wsort
funkcjiPython 2 ,
5860 bajtówlambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Wypróbuj online!
źródło
Brachylog , 9 bajtów
Uwaga: ze względu na to, jak działa porządkowanie w brachylogu, nie działa on poprawnie na numer. Jest to naprawione przez rzutowanie liczby na ciąg (
ṫ
) kosztem 1 bajtu.Wypróbuj online!
źródło
ṫ
(do ciągu) rozwiązuje problem. Zamawianie cyfr w kolejności malejącej działa w następujący sposób. Zamów od najmniejszej do największej, a następnie odwróć. Problem polega na tym, że liczba3120
uporządkowana od najmniejszej do największej jest0123
równa123
odwrotnej wartości,321
a nie3210
ṫ
). Jak wspomniano w @Arnauld, myślałem, że twój komentarz oznacza, że twój obecny kod nie działa. Lepiej byłoby wspomnieć o tym: „ Może to być 8 bajtów po usunięciuṫ
(toString), ale niestety nie działa zgodnie z przeznaczeniem ze względu na sposób zamawiania w Brachylog. ”Pyth,
76 bajtów-1 bajt @Sok
Pyth, który używa tylko ASCII do wydruku, ma tutaj trochę wadę. Optymalnie zakodowane byłyby to
6*log(95)/log(256) = 4.927
bajty, pokonując 05AB1E.Wyjaśnił:
Wypróbuj tutaj .
źródło
N
można pominąć , aby zaoszczędzić 1 bajt - wszystkie funkcje typu lambda wnioskują o istnieniu podstawowej zmiennej lambda, jeśli na końcu brakuje jakichkolwiek argumentów. Przykłady obejmująm
wnioskowanied
,f
wnioskowanieT
,u
wnioskowanieG
...Galaretka , 8 bajtów
Wypróbuj online!
Jak to działa
źródło
Ṛ
raczej niż upends,U
. Zauważ jednak, że nie potrzebujeszD
sortowania odṢ
, jest on realizowany ziterable(z, make_digits=True)
wywołaniem wewnątrz. Tak byłoAṢQṚµÞṚ
7.MathGolf ,
76 bajtówWypróbuj online! lub jako pakiet testowy .
Wyjaśnienie
Po przyjrzeniu się rozwiązaniu Emigna 05AB1E stwierdziłem, że nie potrzebowałem operatora absolutnego (a moja poprzednia odpowiedź była właściwie nieprawidłowa z powodu tego operatora). Główną różnicą jest to, że przekształcam na ciąg znaków i otrzymuję unikalne znaki zamiast używania 1-bajtowego operatora w 05AB1E.
źródło
Japt , 12 bajtów
Wszystkie przypadki testowe
Wyjaśnienie:
źródło
Haskell ,
5452 bajtyWypróbuj online!
źródło
r=reverse
powoduje zapisanie dwóch bajtów. Pozwalamy również na anonimowe funkcje, więcf=
nie trzeba ich liczyć.f=r$r id.nub.show;r=(reverse.).sortOn
.Stax ,
67 bajtówUruchom i debuguj
źródło
-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
zamiast zamierzonego8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
lub8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. Ten przypadek testowy jest również używany w tym przykładzie i w celu wyjaśnienia zasad, więc przyjrzałbym się temu, aby lepiej to zrozumieć. Wygląda na to, że sortujesz według jednej największej cyfry tylko raz, bez żadnych innych reguł?APL (Dyalog Extended) , 19 bajtów
Wypróbuj online!
Naprawiono kosztem +2 bajtów dzięki OP.
źródło
¯7738
jest umieszczony przed478
, ale powinien być po nim: cyfry[8,7,4]
pojawiają się przed cyframi[8,7,3]
.C (gcc) ,
114111109 bajtówWypróbuj online!
Wyjaśnienie:
f () używa qsort () do sortowania podanej tablicy w miejscu. Korzystanie z funkcji porównania c () do porównywania liczb, które oceniają liczby za pomocą v (). v () oblicza wyższą liczbę, jeśli w parametrze występują większe cyfry.
[Edytuj 1] Poprawiono o 3 bajty. 2 bajty kredytów dla Kevina. Dzięki
[Edytuj 2] Ulepszono jeszcze 2 bajty. Kredyty dla gastropnera. Dzięki
źródło
n>0
w golfa wedługn
mojej metodyv
.int*a,n
można skrócić doint*a
.for(a=0;n=abs(n);
zamiastn=n<0?-n:n;for(a=0;n;
J , 17 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
JavaScript (SpiderMonkey) , 68 bajtów
Dzięki za @Arnauld za ponowne przypomnienie mi, że SpiderMonkey używa stabilnego sortowania, więc -4 bajtów do usunięcia
||-1
.Wypróbuj online!
JavaScript (Node.js) , 72 bajty
Wypróbuj online!
źródło
Java (JDK) , 98 bajtów
Wypróbuj online!
Wyjaśnienie
Uwaga:
Potrzebowałem sposobu na odwzorowanie liczb na albo
0/1
albo0/-1
.indexOf
ma tę fajną właściwość, że konsekwentnie zwraca-1
znaki, których nie znaleziono.-1
przesunięcie w prawo o dowolną liczbę jest zawsze-1
. Każda liczba dodatnia przesunięta w prawo o wystarczająco dużą liczbę zawsze będzie generować0
.I oto jesteśmy:
źródło
>>9
zamiast używania ze>>32
względu na ograniczony zakres liczb.Rubinowy , 55 bajtów
Wypróbuj online!
źródło
Perl 5
-nl
, 68 bajtówWypróbuj online!
źródło
Julia 1.0 , 50 bajtów
Wypróbuj online!
źródło
APL (NARS), 366 znaków, 732 bajty
Dla operatora qsort jest to jedna translacja w APL algo na stronie 139 K&R Linguaggio C. Myślę, że w tym jest wykorzystanie danych jako C ze wskaźnikami ... Test
źródło
PowerShell, 44 bajty
Skrypt testowy:
Wydajność:
źródło
PHP,
87 8684 bajtówUruchom
-nr
lub wypróbuj online .Wymienić
++$i
z$argc
(+ 1) bajtów do tłumienia ogłoszenia (i uczynić-n
obosolete).awaria
-
jest „mniejszy” niż cyfry, więc nie ma wpływu na sortowanie.źródło
Common Lisp, 88 bajtów
Wypróbuj online!
Dobry stary gadatliwy Common Lisp!
Wyjaśnienie:
źródło
C # (interaktywny kompilator Visual C #) ,
7574 bajtów-1 dzięki @ tylko ASCII
Wypróbuj online!
W języku C # ciągi są uważane za „wyliczalne” znaków. Używam tego na swoją korzyść, najpierw konwertując każdą liczbę na ciąg. LINQ jest następnie wykorzystywany do sortowania unikalnych znaków (cyfr) w odwrotnej kolejności. Przekształcam każdą posortowaną tablicę znaków z powrotem na ciąg i używam tego jako klucza sortowania do uporządkowania całej listy.
źródło
-
, wygląda na to, że kolejność tych nie ma tak naprawdę znaczenia?-
przypadek testowy nr 2 zwraca,... 321 2132 ...
co wydaje się nieprawidłowe?