Twoim zadaniem jest sortowanie tablicy zawierającej ciągi „ćwiartka”, „dziesięciocentówka”, „nikiel” i „grosz” dowolną liczbę razy w określonej kolejności i sortowanie ich w takiej kolejności: quarter dime nickel penny
(innymi słowy, od największej do najmniejszej wartości pieniężnej).
Zasady
- Twój program musi pobrać tablicę jako dane wejściowe zawierające nazwy monet amerykańskich i posortować je od największej do najmniejszej według wartości pieniężnej.
- Dla tych, którzy nie pochodzą z USA lub nie używają zmian, wartości monet amerykańskich, od największej do najmniejszej, wynoszą:
- Kwartał: 25 centów
- Grosz: 10 centów
- Nikiel: 5 centów
- Grosz: 1 cent
- Dla tych, którzy nie pochodzą z USA lub nie używają zmian, wartości monet amerykańskich, od największej do najmniejszej, wynoszą:
- Możesz sortować tę tablicę w dowolny sposób, pod warunkiem, że dane wyjściowe są uporządkowane według wartości pieniężnych pokazanych powyżej.
- Dane wejściowe można przyjmować w dowolny sposób, czy to argumenty wiersza polecenia, czy STDIN.
- Tablica wejściowa składałaby się z małych ciągów znaków, mniej więcej tak:
quarter dime nickel nickel quarter dime penny penny
- Rzeczywisty format wejścia i wyjścia zależy od Ciebie.
Przypadki testowe
"penny nickel dime quarter"
-> "quarter dime nickel penny"
"nickel penny penny quarter quarter quarter dime dime dime dime"
-> "quarter quarter quarter dime dime dime dime nickel penny penny"
"quarter dime nickel nickel quarter dime penny penny"
-> "quarter quarter dime dime nickel nickel penny penny"
To jest golf golfowy , więc obowiązują standardowe zasady i luki.
code-golf
string
array-manipulation
sorting
ckjbgames
źródło
źródło
Odpowiedzi:
Japt ,
53 bajtyPrzetestuj online!
Wyjaśnienie
Ja także dodałem funkcję sortującą do mojego języka w ciągu ostatnich kilku tygodni :-)
ñ
przejmuje tablicę i funkcję i sortuje tablicę tak, jakby każdy element został zmapowany przez tę funkcję.g
Funkcja na sznurku zajmuje w szeregun
i zwracan
th char w ciągu, jeśli opakowanien
jest ujemna lub poza końcem łańcucha. Ciągi można zatem wyrównać w następujący sposób:Dziewiąty znak (indeksowany 0) każdego łańcucha został pogrubiony. Są w prawidłowej kolejności, więc wszystko, co musimy zrobić, to
ñg9
. (Chociaż teraz, kiedy na to spojrzę,ñg5
to też zadziała ...)źródło
V , 7 bajtów
Wypróbuj online!
Używa to nowego, sortującego polecenia, które dodałem do V około tydzień temu (
ú
). Słodki czas!Sposób ten polega na domyślnym sortowaniu każdej linii (wartości ASCII), ale ignorowaniu pierwszego dopasowania określonego wyrażenia regularnego. W tym przypadku wyrażeniem regularnym jest
(qu)?
, chociaż ma pewne rażące elementy inne niż ASCII, aby uniknąć używania odwrotnych ukośników. Jeśli zignorujesz dwie pierwsze litery „ćwiartki”, zaczyna się od „a”, a następnie wszystkie monety są już w kolejności alfabetycznej.Wersja niekonkurencyjna, 4 bajty
Ta funkcja została już zaimplementowana, ale jeszcze jej nie testowałem, więc miałem błąd, który zdałem sobie sprawę tylko z powodu tego wyzwania. Nie ma łącza do TIO, ponieważ TIO jest nieco opóźnione.
Działa to poprzez odwrotne sortowanie każdej linii, ale ignorowanie pierwszego znaku w każdej linii.
źródło
Python, 36 bajtów
Nienazwana funkcja sortująca listę w miejscu według podanej funkcji kluczowej.
Plastry każdej nazwy monety są wtedy
arter
,dime
,ickel
, ipenny
- które są w alfabetycznym (lub co ważniejsze, porządkowa) kolejności.źródło
el
źle, tęsknię zac
: pBash + coreutils, 18
Wypróbuj online .
źródło
Python 3 ,
424138 bajtówNienazwana funkcja lambda, która pobiera dane wejściowe jako listę ciągów znaków, jest sortowana na miejscu.
(Outgolfed Jonathan Allan)
Wypróbuj online!
Inne rozwiązania, które pomieszałem z:
źródło
PowerShell , 21 bajtów
Wypróbuj online!
Wyjaśnienie
Bezwstydnie ukradł algorytm w odpowiedzi ETHproductions (w zasadzie). Mnożę każdy ciąg przez 3, a następnie sortuję na podstawie 9 znaku wynikowego ciągu.
źródło
$_
PowerShell?1,2,3,4 | ForEach-Object { $_*2 }
wyświetli każdą liczbę razy 2; blok skryptu jest uruchamiany raz dla każdego elementu wejściowego.Galaretka , 4 bajty
Wypróbuj online! (stopka,
ÇY
łączy wynikową listę ze znakami linii dla ładniejszego wydruku).W jaki sposób?
N-ty indeks listy w Galaretce to N-ty element zaczynający się od lewej strony, licząc od 1, i zapętlający się z powrotem do początku, gdy zajdzie taka potrzeba. (0 jest po prawej stronie, -1 po lewej i tak dalej).
Więc szósty znak
['d','i','m','e']
jest,'i'
ponieważ szóstka jest zgodna z dwoma modulo czterema.Szósty znak czterech monet w kolejności to kwarta
e
r, di
mel
,p
nicke , enny. Są one w kolejności alfabetycznej (lub, co ważniejsze, porządkowej).Innym sposobem, aby osiągnąć to samo byłoby, aby posortować według obróconego strun z
ṙ5µÞ
, gdzieṙ
obraca się w prawo, dzięki czemu strunyerquart
,imed
,lnicke
, ipenny
.źródło
Pyton , 32 bajty
Wypróbuj online! Sortuje listę na miejscu.
Chodzi o to, aby użyć funkcji klawisza sortującego bez znaku
lambda
. Dobrym kandydatem byłx.strip
, który pobiera ciąg znakówx
i usuwa jego lewą i prawą krawędź ze wszystkich znaków na wejściu. Na przykład"abcdef".strip("faces") == "bcd"
.Metoda
"npr".strip
wymaga:które są posortowane leksykograficznie. Znalazłem strunę
npr
brutalną siłą.npu
anpt
także praca, i nie ma nic krótszego.źródło
Bash (+ coreutils) 11 bajtów
Grał w golfa
Jak to działa
Sortowanie odwrotne za pomocą „klucza sortowania” od drugiego znaku pierwszego pola (słowa) do końca wiersza, tj .:
Test
Wypróbuj online!
źródło
CJam , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Pyke,
975 bajtówWypróbuj tutaj!
źródło
Siatkówka, 10
610 bajtów zapisanych dzięki @ETHproductionsq
dob
b
powrotem doq
Wypróbuj online .
źródło
V ,
87 bajtów1 bajt zapisany dzięki @DJMcMayhem
[Wypróbuj online!]
Zobacz @ DJMcMayhem za odpowiedź w V (
10 bajtów krócej niż kopalnia)Wypróbuj online!
Oto starsze rozwiązanie o 1 bajt większe, ale bardzo mi się podoba.
V , 8 bajtów
[Wypróbuj online!]
Wypróbuj online!
Wyjaśnienie
Teraz bufor będzie w tym formacie:
Jedyne, co pozostało do zrobienia, to przenieść kwaterę na szczyt.
źródło
:m0
na swoim alternatywnym rozwiązaniu, aby zaoszczędzić bajt (i powiązać mnie)Úçq/:m0
:move
Japt , 3 bajty
Wypróbuj online!
Kilka innych 3-bajtowych rozwiązań:
Wypróbuj online!
Wypróbuj onlin!
źródło
T-SQL,
413634 bajtówWyjaśnienie
Załóżmy, że dane wejściowe są wstępnie załadowane do zmiennej tabeli o nazwie
@
, o nazwie pojedynczej kolumnya
, gdzie każda wartość to jedna moneta do posortowania.select * from @
Częścią kotła jest płyta „uzyskać wszystkie wartości do powrotu”. Prawdziwa magia dzieje się worder by
klauzuli.Stosując tę samą strategię jako Johnathan Allan , I sortować według ostatnich pięciu znaków (SQL zwróci cały ciąg jeśli jest zbyt krótki):
arter
,dime
,ickel
,penny
.źródło
q
jest następną literą pop
, więc aby zwykły mod, którego wynikiem jestq
mniej niżp
wartość, musiał być czynnikiemq
, który jest liczbą pierwszą. Możesz najpierw odjąć 1, a potem zadziała moduł 7, ale prawdopodobnie zajmie to co najmniej tyle bajtów, co 113.JavaScript (ES6),
3533 bajtówPrzypadki testowe
Pokaż fragment kodu
źródło
Befunge, 158 bajtów
Wypróbuj online!
Przetwarzanie i sortowanie ciągów nie jest typem rzeczy, które zwykle chcesz spróbować w Befunge, ale to rozwiązanie wykorzystuje Johna Kasunicha że tak naprawdę nie musimy niczego sortować. Po prostu policzymy liczbę wystąpień każdej monety (którą można łatwo określić na podstawie pierwszego znaku), a następnie wyprowadzamy tyle nazw każdej monety w odpowiedniej kolejności.
Wciąż nie jest wcale konkurencyjny pod względem wielkości, ale takie podejście jest przynajmniej lepsze niż byłoby, gdybyśmy próbowali poradzić sobie z wyzwaniem jako ćwiczenie sortowania strun.
źródło
Pyth, 3 bajty
Demonstracja
Na podstawie produkcji ETH odpowiedź „sw Japt.
Wyjaśnienie:
źródło
APL (Dyalog APL) , 11 bajtów
Pobiera i zwraca listę ciągów.
Wypróbuj online!
{
funkcja anonimowa:⍵[
…]
Argument indeksowany przez⍋
indeksy rosnące↑
matryca, której rzędy są wypełnione5⌽
pięć kroków obróconych¨⍵
elementy argumentu}
źródło
Brachylog , 3 bajty
Wypróbuj online!
Podejście skradzione z Japt odpowiedzi ETHproductions.
źródło
Łuska , 3 bajty
Wypróbuj online!
Przeniesiony z mojej odpowiedzi Brachylog, która zgrywa Japt odpowiedź ETHproductions, ale nie jest dokładnym tłumaczeniem, ponieważ używa rotacji zamiast prostego dostępu do n-tego elementu. Zrobiłem to, ponieważ
∋
nie pozwala na indeksowanie poza końcem danych wejściowych (co jest prawdopodobnie całkiem pomocne w wielu okolicznościach ze względu na deklaratywny charakter języka). W łuskę,!
nie pozwalają indeks poza koniec wejściu, z tego samego modularnego owijania wokół tego Japtñg9
zastosowań, ale to od 1 więc ten program w szczególności by skończyć jako jeden bajt już:Ö!10
.źródło
Partia, 82 bajty
Pobiera dane wejściowe jako argumenty wiersza polecenia i dane wyjściowe do STDOUT. Działa poprzez łączenie list wynikających z filtrowania oryginalnej listy na każdej monecie.
źródło
Rubinowy, 34 bajty
dane wejściowe i wyjściowe jako tablica ciągów
źródło
Ruby, 31 bajtów
źródło
Rubinowy, 30 bajtów
Liczby magiczne znalezione metodą prób i błędów. Trochę niezdarny, ale krótszy niż używanie
.reverse
.źródło
Perl 6 ,
40 3634 bajtówSpróbuj
Spróbuj
Spróbuj
Rozszerzony:
źródło
Mathematica, 50 bajtów
źródło
RProgN , 18 bajtów
Wyjaśnił
Wypróbuj online!
źródło
java 8,
128112 bajtówTo jest wyrażenie lambda dla
java.util.function.Function<String[],String[]>
Objaśnienie: Dla każdej z 4 monet w kolejności przejrzyj dane wejściowe i dołączaj nazwę monety do wyniku za każdym razem, gdy występuje dopasowanie do unikalnego charakteru tej monety. Podziel wynik na tablicę i zwróć go.
źródło
Rubinowy, 27 bajtów
źródło