Opis wyzwania
Masz bibliotekę muzyczną z wielu utworów nagranych przez wielu zespołów, z których każdy ma swoją nazwę, jak Queen
, Aerosmith
, Sunny Day Real Estate
, The Strokes
. Gdy odtwarzacz audio wyświetla bibliotekę alfabetycznie według nazwy zespołu, zwykle pomija The
część, ponieważ zaczyna się wiele nazw zespołów The
, co ułatwia poruszanie się po Twojej kolekcji multimediów. W tym wyzwaniu, biorąc pod uwagę listę (tablicę) ciągów, musisz posortować ją w ten sposób (tzn. Pomijając The
słowo na początku nazwy). Możesz napisać metodę lub w pełni działający program.
Przykładowe wejścia / wyjścia
[Queen, Aerosmith, Sunny Day Real Estate, The Strokes] -> [Aerosmith, Queen, The Strokes, Sunny Day Real Estate]
[The Ramones, The Cure, The Pixies, The Roots, The Animals, Enrique Iglesias] -> [The Animals, The Cure, Enrique Iglesias, The Pixies, The Ramones, The Roots]
[The The, The They, Thermodynamics] -> [The The, Thermodynamics, The They]
Notatki / etui Edge
Sortowanie leksykograficznie nie uwzględnia wielkości liter, tak
The Police
,The police
ithe police
wszystkie są równoważne,Twój algorytm powinien pomijać tylko pierwsze
the
słowo, więc pasma nazwaneThe The
lubThe The Band
są sortowane normalnie według drugiegothe
,Zespół o nazwie
The
(trzyliterowe słowo) jest sortowany normalnie (bez pomijania),Rząd dwóch pasm o tej samej nazwie, z których jeden zaczyna się od
the
(jakThe Police
iPolice
) jest niezdefiniowany,Możesz założyć, że jeśli nazwa zespołu składa się z więcej niż jednego słowa, są one oddzielone pojedynczym znakiem spacji. Nie musisz obsługiwać wiodących ani końcowych białych znaków,
Wszystkie ciągi wejściowe są zgodne
[A-Za-z0-9 ]*
, tzn. Będą się składać wyłącznie z małych i wielkich liter alfabetu angielskiego, cyfr i spacji,Pamiętaj, że jest to wyzwanie związane z golfem , dlatego ustaw swój kod tak krótko, jak to możliwe!
The
iThe The
? (Większość odpowiedzi prawdopodobnie musiałaby się zmienić, jeśli jest to coś innego niż niezdefiniowany)Odpowiedzi:
Python,
566264 bajtySpróbuj
Dzięki @Chris H za zwrócenie uwagi, że
lstrip()
nie radził sobieThe The
poprawnie, ponieważ pasek wysadzał wszystkie pasujące znaki i sortował go jako pusty ciąg, a @manatwork za znalezienie wady w używaniureplace()
. Nowa wersja powinna działać.Stara wersja:
źródło
['The The', 'The', 'The Animals', 'Thermodynamics', 'The They']
. Przypadek drugiej krawędzi sugeruje, że sit powinien być [„Zwierzęta”, „The”, „The”, „Termodynamika”, „The Oni”] (lub zamienić 2 i 3 elementy). Trochę majstrowania sugeruje, że przestrzeń w środkustrip('the ')
jest ignorowana - spróbujfor x in ['The The', 'The They', 'Thermodynamics', 'The', 'The Animals']: print (x.lower().strip('the '))
replace()
nie jest dużo lepsze:'what the snake'.replace('the ','',1)
wyniki'what snake'
.V ,
3228 bajtówWypróbuj online!
Uwaga do siebie: Stwórz skrót
:sort
, aby nie potrzebować 6 całych bajtów na jedno polecenie!Wyjaśnienie:
źródło
the
wszystkie litery będą małethe pAper chAse
?Retina , 34 bajty
Końcowe podawanie linii jest znaczące.
I / O to jedno pasmo na linię.
Wypróbuj online!
Wyjaśnienie
Duplikuj każdą linię, używając
;
jako separatora.Obróć wszystko przed
;
małą literą.Usuń wszelkie
the
znaki pojawiające się na początku linii.Sortuj linie.
Usuń początki wierszy, których użyliśmy do sortowania.
źródło
(?i:the )?(.*)
/\L$1\E;$0
/Pyke, 16 bajtów
Wypróbuj tutaj!
źródło
Perl, 52 bajty
-13 bajtów dzięki @manatwork
-1 bajtów dzięki @ msh210
Jedno pasmo na linię jako wejście, podobnie jak wyjście.
Implementacja jest dość prosta: program drukuje listę pasm, posortowaną za pomocą funkcji niestandardowej (
f
), która zwraca nazwę pasma małymi literami bez ewentualnego wiodącegothe
.źródło
sub f{lc$_[0]=~s/^the //ir}
.lc
parametru, anii
flagi w zamianie. A może spotkałeś przypadek testowy, w którym to nie działa?perl -e 'sub f{lc$_[0]=~s/^the //ri}print sort{f($a)cmp f$b}<>' <<< $'Queen\nAerosmith\nSunny Day Real Estate\nThe Strokes'
.lc pop
zamiastlc$_[0]
isay
zamiastprint
. (To ostatnie wymaga-M5.01
, co jest bezpłatne.) Testowane w Strawberry 5.20.2 tylko z pierwszym przypadkiem testowym z pytania.Python,
667269 bajtówUżywa
sorted
metody Pythona zkey
argumentem słowa kluczowego do sortowania według nazwy minus „The”. To jest lambda; aby to nazwać, nadaj mu nazwę, umieszczającf=
na wierzch.Teraz z dodatkową rozróżnianiem wielkości liter!
źródło
the
, w którym to przypadku ta metoda nie będzie działać poprawnie.Rubin, 42 bajty
Wypróbuj online!
źródło
Perl 6 , 26 bajtów
Wyjaśnienie:
Test:
źródło
PowerShell v2 +,
333229 bajtówZaoszczędź 3 bajty dzięki @MathiasRJessen
Dane wejściowe są za pomocą argumentów wiersza polecenia. Sortuje oryginalne nazwy na podstawie wyników bloku skryptu,
{...}
który wykonuje wyrażenie regularne w-replace
celu usunięcia wiodącego (bez uwzględniania wielkości liter)"the "
.Przykłady
źródło
-replace
jest domyślnie bez rozróżniania wielkości liter,'^the '
wystarczy dla wzorcaJavaScript / ECMAScript 6
9370 bajtów70 Podziękowania dla Neila i Downgoata za radę
Wersja do odczytu dla wariantu 70-bajtowego
93
Wersja do odczytu dla wariantu 93-bajtowego
źródło
^
? Również localeCompare nie rozróżnia wielkości liter w moim systemie, więc nie potrzebowałemtoLowerCase
tylko/i
flagi na wyrażeniu regularnym . Na koniec możesz zagrać w golfa w następujący sposób:B=>B.sort((a,b)=>...,R=s=>...)
-sort
ignoruje ustawiony parametr dodatkowyR
.^
Go na początku wyrażenia regularnegoJava 8, 178 bajtów
Wersja bez golfa:
Zadzwoń jako taki:
źródło
void q(String[]s){...}
nas->{...}
. I możesz zmienić oba za(x.toLowerCase().startsWith("the ")?x.substring(4):x)
pomocąx.replaceFirst("(?i)the ","")
. Tak więc suma wynosi:s->{java.util.Arrays.sort(s,(a,b)->a.replaceFirst("(?i)the ","").compareToIgnoreCase(b.replaceFirst("(?i)the ","")));}
- 118 bajtóws->{ ... }
nie były dozwolone, i musiałem mieć pełny podpis metody z typami i tym podobne. Od tego czasu nie wiem, czy to się zmieniło.Nim , 96 bajtów
Te
import
zajmują tyle bajtów:|
Tłumaczenie mojej odpowiedzi w języku Python .
To jest anonimowa procedura; aby go użyć, należy przejść do procedury testowej. Oto pełny program, którego możesz użyć do testowania:
źródło
Haskell, 84 bajty
Zadzwoń z
Testcase:
źródło
MATL , 16 bajtów
Format wejściowy to (każda linia odpowiada przypadkowi testowemu)
Wypróbuj online!
Wyjaśnienie
źródło
C #, 139 bajtów
Wypróbuj online!
Bez policzenia użycia odpowiedź miałaby 102 bajty.
źródło
ToLower()
l=>l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b));
Do 67 bajtów, a następnie trzeba dodać nausing System.Linq;
zbytToLower
ze względu na rozróżnianie wielkości liter. W przeciwnym razie w zamówieniu rozróżniana jest wielkość liter.BASH, 64 bajtów
Wejście: standardowe, jedno pasmo na linię. Wyjście: standardowe
Uwaga: Drugie zamienniki (s / ^ The / / i s / ^ / The /) używają znaku tabulacji, więc nie zawsze poprawnie kopiują / wklejają.
źródło
Bash + coreutils, 44 bajty
Objaśnienie: format wejściowy i wyjściowy to jedno pasmo na linię
Uruchomienie testowe (przy użyciu dokumentu z EOF jako znacznikiem końcowym):
Wydajność:
źródło
Vim, 18 bajtów
Teraz, kiedy zdałem sobie sprawę, że jest to możliwe, jestem trochę zawstydzony moją 26-bajtową odpowiedzią V, zwłaszcza że V ma być krótszy niż vim. Ale to właściwie wbudowane.
Objaśnienie (prosto z pomocy vima):
źródło
C,
216212135 + 5 (qsort
) =221217140 bajtówW końcu udało mi się dokończyć to
C
. Wskazówki dotyczące gry w golfa są bardzo mile widziane.W tym zgłoszeniu
M
należy podać funkcję porównaniaqsort
. Dlatego, aby to wywołać, należy użyćqsort
formatu, wqsort(argv++,argc--,8,M)
którymargv
zawiera argumenty wiersza polecenia iargc
liczbę podanych argumentów.Wypróbuj online!
źródło
05AB1E , 27 bajtów (niekonkurencyjny)
Wypróbuj online!
Wyjaśnienie
źródło
Groovy, 34 bajty
41% moja odpowiedź brzmi
.toLowerCase()
: zabij mnie teraz.Wydajność
Podczas uruchamiania ...
Wynik to...
[The Animals, The Cure, Enrique Iglesias, The Pixies, The ramones, The Roots]
Bez danych wyjściowych debugowania lub błędów.
źródło
q / kdb +,
3633 bajtówRozwiązanie:
Przykład:
Wyjaśnienie:
Usuń „[Tt] he” z każdego ciągu wejściowego, posortuj tę listę, a następnie posortuj oryginalną listę na podstawie indeksowania posortowanej listy.
źródło
Japt ,
1110 bajtówSpróbuj
źródło
Java
176158 bajtówGłówna funkcja
); }
Funkcja sortowania w golfa:
źródło
the
. W sortowaniu nie jest rozróżniana wielkość liter.public String[]sort(String[]names){ for(int i=-1;++i<names.length;) names[i]=names[i].replaceFirst("(the|The)", ""); return Arrays.sort(names,String.CASE_INSENSITIVE_ORDER); }
ponieważ The i The powinny działać, i ciągnie niezmiennyArrays.sort
zwraca typ voidthe pAper chAse