Zainspirowany pytaniem Przepełnienie stosu: Sortowanie listy: liczby rosnące, litery malejące . Twoim zadaniem jest rozwiązanie następującego problemu, a ponieważ jest to gra w golfa , powinieneś to zrobić w jak najmniejszej liczbie bajtów.
Należy wziąć listę obiektów jako wkład zawierający litery (każdy rozsądny postaci: string
, char
itp) i liczb. Następnie należy posortować liczby w kolejności rosnącej, a litery w kolejności malejącej. Należy jednak trzymać litery na pozycjach literowych, a cyfry na pozycjach liczbowych. Na przykład, jeśli lista jest:
[L, D, L, L, D, L]
Lista wyjściowa powinna mieć postać:
[L, D, L, L, D, L]
Przebieg
Wkład: ['a', 2, 'b', 1, 'c', 3]
- Posortuj liczby w porządku rosnącym:
[1, 2, 3]
- Sortuj litery w kolejności malejącej:
['c', 'b', 'a']
- Dołącz do nich z powrotem, ale zachowaj kolejność:
['c', 1', 'b', 2, 'a', 3]
Zasady
- Lista będzie zawierać tylko litery i cyfry.
- Lista może być pusta.
- Lista może zawierać tylko litery lub tylko cyfry.
- Jeśli twój język nie obsługuje tablic mieszanych, możesz użyć cyfr zamiast cyfr. Pamiętaj, że jeśli Twój język to obsługuje, musisz używać typów mieszanych.
- Listy będą tylko
[a-z]
lub[A-Z]
możesz wybrać, który z nich. - Listy są sortowane jako
a
najniższe,z
najwyższe tja = 1, z = 26
. - Standardowe luki są zabronione.
- We / wy może być dowolnymi standardowymi środkami, w tym jako ciąg.
Przypadki testowe
[5, 'a', 'x', 3, 6, 'b'] -> [3, 'x', 'b', 5, 6, 'a']
[ 3, 2, 1] -> [ 1, 2, 3 ]
[ 'a', 'b', 'c' ] -> [ 'c', 'b', 'a' ]
[] -> []
[ 2, 3, 2, 1 ] -> [1, 2, 2, 3]
Ponieważ jest to gra w golfa, najkrótsza odpowiedź w bajtach wygrywa!
code-golf
array-manipulation
sorting
TheLethalCoder
źródło
źródło
Odpowiedzi:
Siatkówka , 10 bajtów
Wypróbuj online!
O
Etap siatkówki może bezpośrednio wykonywać typu selektywnego sortowania wymaganych przez to wyzwanie.Tutaj pierwszy wiersz sortuje cyfry, podczas gdy drugi wiersz sortuje cyfry w odwrotnej kolejności.
źródło
Python 2 ,
5352 bajty-2 bajty dzięki g.rocket
-1 bajty dzięki Jonathan Frech
Wypróbuj online!
sorted
Lista będzie mieć numery pierwszej i następnie znaków jak[3, 5, 6, 'a', 'b', 'x']
, a następnie użyće<x
do filtra, co jest i co to jest numer char, w python dowolna liczba jest mniejsza niż lista (wejście) i lista jest mniejsza niż sznurku.źródło
IndexError: pop index out of range
. Poprzednie rozwiązanie zadziałało.1-(e<'`')
powinno być(e<'`')-1
. Właśnie umieściłeś je w niewłaściwej kolejności. BTW, ty ninja'd mnie: / Miałem toe>x
APL (Dyalog) ,
2726 bajtówOczekuje, że znaki będą pisane wielkimi literami
Wypróbuj online!
To tylko dwie aplikacje formularza
f@g
, zastosuj funkcjęf
do pozycji wskazanych przezg
.Dla najpierw aplikacja użytku:
f
:⍒⊃¨⊂
stopnie malejące (⍒
) każdy pick (⊃¨
) z całego argumentu (⊂
).g
: Members(e←∊∘⎕A)
(∊
) z (∘
) alfabetu A (⎕A
) i store (←
) tę funkcję jakoe
.Na drugim my aplikacja użytku:
f
:⍋⊃¨⊂
gatunki rosnące (⍋
) każdy pick (⊃¨
) z całego argumentu (⊂
).g
:(~e)
not (~
) członków alfabetu (e
; funkcja, którą wcześniej zapamiętaliśmy)źródło
83=⎕DR¨⍵
3=10|⎕DR
dla liczb całkowitych?⌊0.1×⎕DR
daje liczbę bitów używanych do reprezentacji każdego skalara, z wyjątkiem wskaźników, które zależą od architektury, ale zawsze są 326. Zatem wszystkie liczby są2|⎕DR
.JavaScript (ES6),
715147 bajtówZaoszczędzono 20 bajtów, używając
sort()
, jak sugeruje @JustinMarinerZaoszczędzono jeszcze 4 bajty dzięki @CraigAyre
Stosując podejście podobne do odpowiedzi Pytona Rod :
Przypadki testowe
Pokaż fragment kodu
źródło
sort
funkcji i używaćsort()
jej samodzielnie? Wygląda na to, że sortuje się w ten sam sposób bez funkcji (w Chrome / FF / Edge).sort()
zawiódłby. Ale ponieważ ograniczamy się do cyfr, masz rację: to działa. Dzięki!a.sort()
każdej pętli zamiast przypisywania dox
:.map(n=>a.sort()[1/n?'shift':'pop']())
+n
można go użyć zamiast1/n
R ,
8376 bajtów-7 bajtów dzięki Miff
Jest to to samo, co poniżej, ale pozwala na wprowadzanie tekstu mieszanego jako wektora,
list
a nieatomic
wektora (który rzutowałby wszystko jako znaki o typach mieszanych).Wypróbuj online!
R ,
6861 bajtów-7 bajtów dzięki Miff
Funkcja anonimowa. W tym przypadku wszystkie cyfry są rzutowane na znaki.
n[-d]
to tablica bez cyfr. ZwracaNULL
(pusta lista) przy pustych danych wejściowych.Wypróbuj online!
źródło
d=n%in%0:9
Japt ,
1815 bajtówDzięki @Shaggy za -3 bajty i pomoc w naprawianiu tablic z
0
s.Pierwszy wiersz celowo pozostawiono pusty.
Wypróbuj online! za pomocą,
-Q
aby wyświetlić sformatowaną tablicę.Wyjaśnienie
Pierwszy wiersz jest pusty, aby uniknąć zastąpienia tablicy wejściowej.
[5, 'a', 'x', 3, 6, 'b']
Utwórz kopię, spłaszczając (
c
) tablicę wejściową, a następnie sortuj (ñ
) z ciągami znaków reprezentowanymi przez ich kod char (c
). To jest przechowywane wV
.[3, 5, 6, 'a', 'b', 'x']
Następnie zamapuj tablicę wejściową według funkcji ...
Zamień liczby na ciągi binarne (prawda) lub ciągi na
""
(fałsz) (¤
). Jeśli to prawda, usuń od początkuV
(v
), w przeciwnym razie usuń od końca (o
).źródło
Vo
iVv
okolice. Jestem przekonany, że musi istnieć krótsza droga bez trójki.o
mógłbym usunąć od początku z wartościami ujemnymi lub coś ...JavaScript,
164162158142 bajtówedytuj 1: 2 bajty mniej po usunięciu zbędnego przypisania v.
edycja 2: 4 bajtów mniej dzięki TheLethalCoder.
edytuj 3: 16 bajtów mniej dzięki genialnym wskazówkom Justina Marinera
To mój pierwszy raz w golfie kodowym, więc z pewnością można go ulepszyć ... Mimo to warto spróbować.
Program wykonuje wariant sortowania selekcji, który bierze pod uwagę tylko wartości tego samego typu, co bieżący (zamieniając tylko cyfrę i liczbę lub literę i literę)
Czytelna forma:
źródło
for(j=i+1;j<l;j++)
->for(j=i++;++j<l;)
i usuń przyrost w zewnętrznej pętli.j
jak zasugerowałem, nie widzę używaszi
dalej wystarczy zmienićx[i]=x[m]
zbytx[i++]=x[m]
x[i++]=x[m]
... Dzięki!C ++ 17 (gcc) , 219 bajtów
Wypróbuj online!
Mało konkurencyjny. Ale muszę obsługiwać tablice mieszane? W PORZĄDKU.
Akceptuje tablicę wariantów w stylu zakresu i modyfikuje ją na miejscu. Kopiuje dane wejściowe do dwóch posortowanych zestawów, a następnie z powrotem do tablicy danych wejściowych / wyjściowych.
źródło
void *
w C;) Ale tak, interesujące jest zobaczyć rozwiązanie przeskakujące przez taki obręcz.#include
sMathematica, 203 bajty
Wypróbuj online!
źródło
Galaretka , 14 bajtów
Wypróbuj online!
Zasadniczo port rozwiązania Rod's Python .
źródło
Pyth ,
1211 bajtówWypróbuj online! lub Wypróbuj pakiet testowy.
Wyjaśnienie
źródło
Python,
145139130 bajtów6 bajtów zapisanych dzięki @officialaimm
9 bajtów zapisanych dzięki @Chris_Rands
Wypróbuj online!
źródło
type(x)==str
zaoszczędziłbym trochę bajtów przy użyciuisinstance(...)
myślę05AB1E , 17 bajtów
Wypróbuj online!
Korzystanie z zamknięcia sortującego było w rzeczywistości gorsze:
Σ©Ç®ai0<*}}¹SaJsvyay.;
źródło
Python 3, 77 bajtów
Ta odpowiedź opiera się na komentarzu, który mówi, że możesz używać „1”, „2” itd., Jeśli znaki i cyfry nie są porównywalne w języku. „a” i 1 nie są porównywalne w Pythonie 3.
źródło
q / kdb +,
5453 bajtówRozwiązanie:
Przykłady:
Wyjaśnienie:
Znajdź znaki na liście, sortuj malejąco, znajdź długi na liście, posortuj je rosnąco, połącz, aby uzyskać listę, np.
("x";"b";"a";3;5;6)
Następnie przypisz posortowane wartości z powrotem do ich pierwotnych pozycji na liście, np.0 3 4 1 2 5
.Gra w golfa polega tylko na zamianie q słów kluczowych (
each
,where
inot
) na ichk
odpowiedniki (co wymaga, aby były zawinięte w nawiasy).Edycje
desc
źródło
C (gcc) ,
125113110 bajtówWypróbuj online!
Wyjaśnił:
Litery są pisane wielkimi literami.
źródło
PHP, 66 bajtów:
pobiera dane wejściowe z argumentów wiersza poleceń, drukuje ciąg. Uruchom
-nr
lub wypróbuj online .Daje ostrzeżenie w PHP 7.1; zastąpić
a&
z""<
do naprawienia.źródło
Mathematica, 107 bajtów
źródło
C # (.NET Core) , 171 bajtów
Liczba bajtów obejmuje również:
Wypróbuj online!
Wyjaśnienie:
źródło
Perl 5 , 107 + 1 (-n) = 108 bajtów
Wypróbuj online!
źródło
Rubinowy , 265 bajtów
Wypróbuj online!
Pierwszy raz tutaj, Moje rozwiązanie zdecydowanie nie jest najlepsze. Ale ponieważ jest to moja pierwsza odpowiedź, pomyślałem, pisząc tylko dla zabawy.
Patrząc w przyszłość, aby zobaczyć lepsze odpowiedzi Ruby, aby zobaczyć, jakie jest najlepsze podejście. Mam nadzieję, że poprawię w przyszłych odpowiedziach =)
Czytelny
źródło
Haskell, 108 bajtów
Mogą istnieć krótsze sposoby, ale musiałem po prostu spróbować z
Lens
biblioteką.Mógłbym zdefiniować
f
po prostu skład dwóchi
wywołań, ale nadal musiałbym się do niego zastosowaćx
, aby uniknąć błędu typu wynikającego z ograniczenia monomorfizmu. Zauważ, że typf
jestTraversable t => t Char -> t Char
taki, że można go używać zString
s, które są listamiChar
s, a także z tablicamiChar
s.Oto przypadki testowe:
źródło
Python 3, 91 bajtów
źródło
Clojure, 151 bajtów
Przykład:
Oblicza skumulowaną
sumęliczbę liczb i znaków, i używa go do wyszukiwania prawidłowego elementu z uporządkowany wykaz odpowiednich elementów typu użytkownika.źródło
APL (Dyalog) , 26 bajtów
(używa
⎕IO=1
)Wypróbuj online!
źródło