Biorąc pod uwagę dodatnią liczbę całkowitą, możemy utworzyć nową liczbę, która jest opisana cyframi pobranymi parami (z wiodącym 0 dodanym dla liczb o nieparzystej liczbie cyfr).
Na przykład:
1234 można odczytać jako jedną 2, trzy 4s - więc wyjście dla 1234 wynosi 2444.
643 ma nieparzystą liczbę cyfr, więc zero wiodące jest dodawane, aby było parzyste. Następnie 0643 można odczytać jako: zero 6s, cztery 3s, stąd wynik wyniósłby 3333.
(To jest OEIS A056967 ).
Zadanie: biorąc pod uwagę tablicę dodatnich liczb całkowitych, posortuj je według wartości opisanej parą cyfr, w porządku rosnącym. Kolejność nie ma znaczenia między liczbami wejściowymi, które prowadzą do tej samej wartości.
Dane wejściowe : tablica / lista / zestaw dodatnich liczb całkowitych. Zera na wejściu są nie dozwolone, a wejście jako ciągi cyfr / wykazy / etc. są niedozwolone - dane wejściowe powinny być tak zbliżone do liczb całkowitych / liczbowych, jakie jest w stanie używać Twój język.
Dane wyjściowe : tablica posortowana w wyżej wymieniony sposób, zwrócona w jeden ze zwykłych sposobów (funkcja zwraca wartość / STDOUT / krzyczy w pustkę / itp.) Możesz wydrukować je pojedynczo, zwrócić jako liczby, ciągi znaków lub listy cyfry
Przypadki testowe
Input
Output
[19, 91, 2345, 2023]
[19, 2023, 2345, 91]
[25257, 725, 91, 5219, 146125, 14620512]
[725, 5219, 14620512, 91, 146125, 25257]
[123130415 3335 91 111111111 528 88]
[528, 111111111, 123130415, 3335, 88, 91]
[1 21 33 4 5]
[1 4 5 21 33]
[3725, 10, 2537, 1, 1225, 2512]
[10, 1, 1225, 2512, 2537, 3725]
[125, 26, 1115, 1024]
[1115, 1024, 125, 26]
(W czwartym przypadku testowym wszystkie 1, 4 i 5 są oceniane na 0, więc można je sortować między sobą w dowolnej kolejności. Podobnie w piątym przypadku testowym 10 i 1 oba oceniają na 0, a więc można je sortować według albo zamówienie.)
(Powiązane: Powiedz, co widzisz , Jeden 1, Dwa 1, Jeden 2 Jeden 1
Podziękowania dla Kevina Cruijssena za pomoc w wyjaśnieniu pytania w piaskownicy.
strtoi
zwraca liczbę całkowitą - prawda? Jeśli tak, to w porządku, to jest legalne.Odpowiedzi:
APL (Dyalog) , 26 bajtów
Dzięki ngn za zapisanie 1 bajtu :)
Wypróbuj online!
Inspiracja pochodzi od dzaima & ngn
źródło
100⊥⍣¯1⊢⍵
->⍵⊤⍨⍵/100
działa na 26.100⊥⍣¯1⊢⍵
->⍵⊤⍨⍴⍨100
{⍵[⍋⌽↑,⍨⌿⍴⌿⊃⊥⍣¯1/10 100⍵]}
R , 141 bajtów
Wypróbuj online!
Raczej żmudna odpowiedź - ale działa na wszystkich przypadkach testowych. Buduje wyjście z parą cyfr i sortuje dane wejściowe zgodnie z tym.
źródło
v
zmiennej pochodzi od innych odpowiedzi - nigdyv
wcześniej jej nie używałem . I miłe użycieintToUtf8
!R , 120 bajtów
Wypróbuj online!
Nieskluczony kod z wyjaśnieniem:
źródło
[!1:0]
Sztuką jest naprawdę ładne - nie widziałem go wcześniej.[!1:0]
faceci ukrywają coś porządnego. Bawiłem się tym i wskazówkami na temat gry w golfa R, próbując uzyskać arytmetycznie liczbę z cyfr (bezas.double
), ale wymyśliłem tylko wersję 132-bajtową: TIOPyth , 14 bajtów
Wypróbuj tutaj! | Zestaw testowy! | 12 bajtów z listą cyfr we / wy
Jak to działa?
źródło
Galaretka , 10 bajtów
Wypróbuj online!
Sprawdź pakiet testowy!
Jak to działa
źródło
2537
i3725
nie reprezentują tej samej liczby.[2537, 3725]
. Nigdy nie wątpiłem, że to zbieg okoliczności, dlatego do odpowiedzi dołączyłem tę notatkęPerl 6 , 53 bajtów
Wypróbuj online!
Anonimowy Jakakolwiek lambda, która pobiera listę wartości i sortuje je według tego, co opisują pary liczb.
W takim przypadku cofam numer, a następnie
rotor
przestawiam listę o dwa, aby uzyskać każdą parę liczb. Wyklucza to pierwszą cyfrę liczb nieparzystych, ale ponieważ przekłada się0
to na liczbę razy tę liczbę, jest w porządku. Dodatkowo, wyrównuje wartości, aby użyć[x]
poprawnie.źródło
Python 2 ,
8074 bajtówWypróbuj online!
źródło
Haskell ,
8988 bajtówOszczędność bajtu dzięki ovs
Ostatni wiersz definiuje anonimową funkcję, której można użyć w następujący sposób:
Podstawową funkcjonalność zapewnia operator infix,
(?)
który śledzi mnożnikm
, a pozostałe dane wejściowe RLEn
.(?)
ciągle odejmuje 10 od,n
podczas gdy istnieje dziesiątka cyfry do odjęcia, a gdy to robi, wypycha kolejną kopię ostatniej cyfry na przód wyjścia (przez mnożnikm
, który jest zwiększany za każdym razem o 10). Kiedy miejsce dziesiątek zostanie wyczerpane, ostatnie dwie cyfry są odrzucane, a proces powtarza się, aż liczba zostanie zmniejszona do 0. W końcu używamy operatora (z początkowym mnożnikiem 1) jako klucza sortowania.źródło
m?n|n<1=0|n%100<10=m?div n 100|w<-n-10=m*10?w+m*n%10
jest bajt krótszy.Łuska , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Dyalog APL,
41393635313029 bajtówWypróbuj online!
-2 dzięki szarlatanowi Krowy
-4 (plus -4 za pomysł na konwersję bazy) dzięki ngn
-2 dzięki, więc H.PWiz
źródło
⊃,/
może zostać∊
{⍺⍴⍨⍎⍵}
->⍴⍨∘⍎
{⍵[⍋F ⍵]}
as⊂⌷¨⍨∘⍋F
C (gcc) (systemy 32-bitowe),
188177176 bajtówWypróbuj online!
po
amd64
dodaniu flagi-m32
do kompilacji.Zastosowanie :
s(x,n);
gdziex
wskazuje na tablicę liczb całkowitych do sortowania in
jest długością tej tablicy.Drugi przypadek testowy daje zły wynik, ponieważ konwersja
25257
daje2222277777
przepełnienie 32-bitowej liczby całkowitej - dodano piąty przypadek testowy bez tej liczby.Wyjaśnienie:
źródło
d()
jest długa ze względu na ciągi znaków i związane z nimi funkcje, możesz zapisać wiele bajtów po prostu czytając ostatnie 2 cyfry i budując dane wyjściowe w ten sposób:o;u;i;d(x){for(u=1,o=0;x;x/=100)for(i=0;i++<x%100/10;o+=x%10*u,u*=10);x=o;}m(int*a,int*b){u=d(*a)-d(*b);}s(l,c){qsort(l,c,4,m);}
zaoszczędzisz także bajty, unikając deklarowania i inicjowaniachar
s.b-~sprintf(b+1,"%d",x)%2
zamiastb+!(sprintf(b+1,"%d",x)&1)
x/10%10
zamiastx%100/10
Python 2 ,
10210197101 bajtówWypróbuj online!
źródło
Brachylog , 18 bajtów
Wypróbuj online!
Wyjaśnienie
Mnóstwo drobnych rzeczy potrzebnych do uwzględnienia trzech różnych przypadków: nieparzysta liczba cyfr, para 0 razy liczba i normalne pary.
źródło
|Ȯt
jest to niepotrzebne i faktycznie sprawia, że sortowanie jest błędne: jest równoważne wypełnieniu 1 zamiast 0, więc biorąc pod uwagę [125, 26, 1], sortuje to jako [1, 26, 125] zamiast [1 , 125, 26].Perl 5 , 76 bajtów
Funkcja zamiast jednowierszowej na raz.
Zupełnie prosto:
g
sortuje dane wejściowe numerycznie, używająch
do konwersji liczb.h
robi to za pomocą wyrażenia regularnegos/(.)(.)/$2x$1/gre
(który jest prawdopodobnie wystarczająco czytelny). A0
lewe dopełnienie jest wykonywane za pomocą0 x("@_"=~y///c%2)."@_"
(gdziey///c
jest skrócony sposób pisanialength
,x
to operator powtarzania i.
konkatenacja).Wypróbuj online!
Spodziewam się jednak krótszych odpowiedzi Perla!
źródło
Siatkówka , 44 bajty
Wypróbuj online! Generowanie klucza sortowania na początku wiersza jest trudniejsze, ale krótki etap sortowania prowadzi do oszczędności 3 bajtów. Wyjaśnienie:
Zastosuj dwa pierwsze etapy na każdej linii osobno.
Dopasuj i skopiuj parzystą liczbę końcowych cyfr.
Zastąp każdą parę cyfr ich opisaną wartością.
\G\d
Powoduje dopasowanie się zatrzymać w przestrzeni.Sortuj numerycznie.
Usuń klucze sortowania.
źródło
05AB1E ,
2019 bajtówNaprawiono błąd dla +1 bajtu, a następnie golfowany o -2 bajty dzięki @sundar .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Zdecydowanie można grać w golfa .. Nie jestem zbyt szczęśliwy z tego powodu
Wyjaśnienie:
źródło
Attache , 50 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES8),
7270 bajtówWypróbuj online!
źródło
Japt, 13 bajtów
Wypróbuj lub uruchom wszystkie przypadki testowe
Wyjaśnienie
źródło
Galaretka , 14 bajtów
Wypróbuj online!
źródło
Rubinowy , 71 bajtów
Wypróbuj online!
źródło
Java 11,
204189 bajtówBierze listę długich parametrów jako parametr i sortuje tę listę wejściową (bez zwracania nowej listy).
Wypróbuj online (UWAGA:
String.repeat(int)
jest emulowany,repeat(String,int)
ponieważ Java 11 nie jest jeszcze w TIO. Liczba bajtów pozostaje taka sama).Wyjaśnienie:
źródło
+""
aby przekonwertować liczbę na String. Powinien zostać teraz naprawiony. :)