Sortuj nazwy zespołów

22

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 Theczęść, 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 Thesł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 policei the policewszystkie są równoważne,

  • Twój algorytm powinien pomijać tylko pierwsze thesłowo, więc pasma nazwane The Thelub The The Bandsą sortowane normalnie według drugiego the,

  • 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(jak The Policei Police) 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 , dlatego ustaw swój kod tak krótko, jak to możliwe!

shooqie
źródło
Czy nazwy zawierające tylko cyfry występują przed alfabetem lub po nim?
AdmBorkBork,
Najważniejsze są tylko ciągi
liczbowe
1
Jaka jest kolejność sortowania Thei The The? (Większość odpowiedzi prawdopodobnie musiałaby się zmienić, jeśli jest to coś innego niż niezdefiniowany)
Brad Gilbert b2gills
co powiesz na Los Lobos?
njzk2
3
Nawiasem mówiąc, The jest prawdziwym zespołem. (wraz z The Who, The What, The Where, The When, The How and The How)
DanTheMan

Odpowiedzi:

7

Python, 56 62 64 bajty

lambda b:sorted(b,key=lambda x:(x,x[4:])[x.lower()[:4]=='the '])

Spróbuj

Dzięki @Chris H za zwrócenie uwagi, że lstrip()nie radził sobie The Thepoprawnie, 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:

lambda b:sorted(b,key=lambda x:x.lower().lstrip('the '))
atlasolog
źródło
1
Nie jestem przekonana. Dodanie „Zwierzęta” do ostatniej listy daje ['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 środku strip('the ')jest ignorowana - spróbujfor x in ['The The', 'The They', 'Thermodynamics', 'The', 'The Animals']: print (x.lower().strip('the '))
Chris H
To replace()nie jest dużo lepsze: 'what the snake'.replace('the ','',1)wyniki 'what snake'.
manatwork
5

V , 32 28 bajtów

ç^The /dwA_
:sort
ç_/$xIThe 

Wypróbuj online!

Uwaga do siebie: Stwórz skrót :sort, aby nie potrzebować 6 całych bajtów na jedno polecenie!

Wyjaśnienie:

ç^The /     "On every line starting with 'The ',
       dw   "Delete a word
         A_ "And (A)ppend an underscore '_'

:sort       "Sort all lines alphabetically

ç_/         "On every line containing an underscore,
   $x       "Delete the last character
     IThe   "And prepened 'The '
DJMcMayhem
źródło
Nie zna V, ale wygląda na to, że działa dobrze bez gwiazdek. Czy to zbieżność z danymi wejściowymi, czy faktycznie niepotrzebna?
kirkpatt
1
@kirkpatt Dobry pomysł! To prawie działa, ale nie do końca. Na przykład przy tym wprowadzeniu niepoprawnie umieszcza „Radiohead” po „The Ramones” i „The Roots”. To jednak daje mi pomysł ...
DJMcMayhem
Co się stanie, jeśli thewszystkie litery będą małe the pAper chAse?
AdmBorkBork
4

Retina , 34 bajty

Końcowe podawanie linii jest znaczące.

%`^
$';
T`L`l`.+;
m`^the 

O`
.+;

I / O to jedno pasmo na linię.

Wypróbuj online!

Wyjaśnienie

%`^
$';

Duplikuj każdą linię, używając ;jako separatora.

T`L`l`.+;

Obróć wszystko przed ;małą literą.

m`^the 

Usuń wszelkie theznaki pojawiające się na początku linii.

O`

Sortuj linie.

.+;

Usuń początki wierszy, których użyliśmy do sortowania.

Martin Ender
źródło
Czy nie możesz spakować pierwszych 3 kroków w jednym kroku? Jak w PCRE: s / (?i:the )?(.*)/ \L$1\E;$0/
Falco
@Falco .NET nie obsługuje zmian wielkości liter w łańcuchach podmiany i nie dodałem ich jeszcze do niestandardowego zamiennika Retina.
Martin Ender
4

Pyke, 16 bajtów

.#l1D"the ".^4*>

Wypróbuj tutaj!

.#                - sort_by(V, input)
  l1              -  i = i.lower()
      "the ".^    -   i.startswith("the ")
              I   -  if ^:
               4> -   i[4:]
niebieski
źródło
3

Perl, 52 bajty

-13 bajtów dzięki @manatwork
-1 bajtów dzięki @ msh210

sub f{lc pop=~s/^the //ri}print sort{f($a)cmp f$b}<>

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ącego the.

Dada
źródło
Jest krótszy o podstawienie zamiast dopasowywania: sub f{lc$_[0]=~s/^the //ir}.
manatwork
Rzeczywiście o 1 bajt krótszy, dzięki.
Dada,
Właściwie policzyłem 2 lub 3 bajty krócej: nie trzeba ani nawiasu wokół lcparametru, ani iflagi w zamianie. A może spotkałeś przypadek testowy, w którym to nie działa?
manatwork
Myślenie ponownie, ilość opcji wiersza poleceń może również zostać zmniejszona, jeśli wziąć każdą nazwę zespołu na osobnej linii: perl -e 'sub f{lc$_[0]=~s/^the //ri}print sort{f($a)cmp f$b}<>' <<< $'Queen\nAerosmith\nSunny Day Real Estate\nThe Strokes'.
manatwork
1
Zapisz trzy bajty: lc popzamiast lc$_[0]i sayzamiast print. (To ostatnie wymaga -M5.01, co jest bezpłatne.) Testowane w Strawberry 5.20.2 tylko z pierwszym przypadkiem testowym z pytania.
msh210
2

Python, 66 72 69 bajtów

lambda x:sorted(x,key=lambda a:a[4*(a.lower()[:4]=='the '):].lower())

Używa sortedmetody Pythona z keyargumentem 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!

Miedź
źródło
2
Jednak nie spełnia wymagań rozróżniania wielkości liter ... Nazwa zespołu może zaczynać się od tego the , w którym to przypadku ta metoda nie będzie działać poprawnie.
shooqie,
@shooqie Oh, nie widziałem tego wymogu. Naprawię to.
Copper
2

Perl 6 , 26 bajtów

*.sort({fc S:i/^'the '//})

Wyjaśnienie:

# 「*」 is the input to this Whatever lambda
*.sort(

  # sort based on the return value of this Block lambda
  {
    fc # foldcase the following

    # string replace but not in-place
    S
      :ignorecase
      /
        # at the start of the string
        ^

        # match 「the 」
        'the '

      # replace with nothing
      //
  }
)

Test:

use v6.c;
use Test;

my @tests = (
  « 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' »,
);

# give it a lexical name for clarity
my &band-sort = *.sort({fc S:i/^'the '//});

plan +@tests;

for @tests -> ( :key(@input), :value(@expected) ) {
  is-deeply band-sort(@input), @expected, @expected.perl;
}
1..3
ok 1 - ("Aerosmith", "Queen", "The Strokes", "Sunny Day Real Estate")
ok 2 - ("The Animals", "The Cure", "Enrique Iglesias", "The Pixies", "The Ramones", "The Roots")
ok 3 - ("The The", "Thermodynamics", "The They")
Brad Gilbert b2gills
źródło
2

PowerShell v2 +, 33 32 29 bajtów

$args|sort{$_-replace'^the '}

Zaoszczę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 -replacecelu usunięcia wiodącego (bez uwzględniania wielkości liter) "the ".

Przykłady

PS C:\Tools\Scripts\golfing> .\sort-band-names.ps1 'the Ramones' 'The cure' 'The Pixies' 'The Roots' 'the Animals' 'Enrique Iglesias'
the Animals
The cure
Enrique Iglesias
The Pixies
the Ramones
The Roots

PS C:\Tools\Scripts\golfing> .\sort-band-names.ps1 'The The' 'The They' 'Thermodynamics'
The The
Thermodynamics
The They

PS C:\Tools\Scripts\golfing> .\sort-band-names.ps1 'THE STOOGES' 'The Strokes' 'The The' 'the they' 'the band' 'STP'
the band
THE STOOGES
STP
The Strokes
The The
the they
AdmBorkBork
źródło
-replacejest domyślnie bez rozróżniania wielkości liter, '^the 'wystarczy dla wzorca
Mathias R. Jessen
@ MathiasR.Jessen Tak, dziękuję za przypomnienie.
AdmBorkBork
@ValueInk Zobacz komentarz Mathiasa na temat braku rozróżniania wielkości liter i dodany ostatni przykład.
AdmBorkBork
2

JavaScript / ECMAScript 6 93 70 bajtów

70 Podziękowania dla Neila i Downgoata za radę

B=>B.sort((a,b)=>R(a).localeCompare(R(b)),R=s=>s.replace(/^the /i,''))

Wersja do odczytu dla wariantu 70-bajtowego

let sortBandNames = (bandNames) => {
    let stripThe = (name) => name.replace(/^the /i, '');
    let compareFunc = (a, b) => stripThe(a).localeCompare(stripThe(b));
    return bandNames.sort(compareFunc)
};

93

f=B=>{R=s=>s.toLowerCase().replace(/the /,'');return B.sort((a,b)=>R(a).localeCompare(R(b)))}

Wersja do odczytu dla wariantu 93-bajtowego

let sortBandNames = (bandNames) => {
    let stripThe = (name) => name.toLowerCase().replace(/the /, '');
    let compareFunc = (a, b) => stripThe(a).localeCompare(stripThe(b));
    return bandNames.sort(compareFunc)
};
Pandacoder
źródło
Czy to wyrażenie regularne nie powinno zawierać ^? Również localeCompare nie rozróżnia wielkości liter w moim systemie, więc nie potrzebowałem toLowerCasetylko /iflagi na wyrażeniu regularnym . Na koniec możesz zagrać w golfa w następujący sposób: B=>B.sort((a,b)=>...,R=s=>...)- sortignoruje ustawiony parametr dodatkowy R.
Neil
Gdzie w wyrażeniu regularnym ^ pójdzie? Byłoby to zaprzeczeniem, a wyrażenie powinno pasować i usuwać „the”. Spróbuję użyć porównania regionalnego bez konwersji małymi literami.
Pandacoder
@ Pandacoder Shuold ^Go na początku wyrażenia regularnego
Downgoat
@Downgoat Po przetestowaniu wszystkich podanych przypadków i kilku przypadkach wpadłem na szczególny zamiar złamania RegEx, z lub bez ^ Nie mam zmiany w zachowaniu, tylko dodatkowa postać, która niczego nie osiąga.
Pandacoder
@ Pandacoder, który nie powoduje, że jest prawidłowy. ^ jest kotwicą, która wymaga, aby „the” był na początku zgodnie ze specyfikacją
Downgoat
1

Java 8, 178 bajtów

void q(String[]s){java.util.Arrays.sort(s,(a,b)->(a.toLowerCase().startsWith("the ")?a.substring(4):a).compareToIgnoreCase(b.toLowerCase().startsWith("the ")?b.substring(4):b));}

Wersja bez golfa:

void sort(String[] bands) {
    java.util.Arrays.sort(bands, (a, b) -> 
        (a.toLowerCase().startsWith("the ") ? a.substring(4) : a).compareToIgnoreCase(
            b.toLowerCase().startsWith("the ") ? b.substring(4) : b
        )
    );
}

Zadzwoń jako taki:

public static void main(String[] args) {
    String[] bands = {"The Strokes", "Queen", "AC/DC", "The Band", "Cage the Elephant", "cage the elephant"};
    sort(bands); // or q(bands) in the golfed version
    System.out.println(java.util.Arrays.toString(bands));
}
Justin
źródło
Wiem, że odpowiedziałeś na to prawie rok temu, ale możesz zagrać w golfa kilka rzeczy. Ponieważ twierdzisz, że używasz Java 8, możesz zmienić void q(String[]s){...}na s->{...}. 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ów
Kevin Cruijssen
Zgrabna sztuczka z replaceFirst. Kiedy odpowiedziałem na to pytanie, kilka razy powiedziano mi o innych odpowiedziach, które s->{ ... }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.
Justin
Nie byłem wtedy pewien, ale obecnie jest to dozwolone i używane przez prawie wszystkich graczy w Javę lub C # .NET.
Kevin Cruijssen
0

Nim , 96 bajtów

import algorithm,strutils,future
x=>x.sortedByIt toLower it[4*int(it.toLower[0..3]=="the ")..^0]

Te importzajmują 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:

import algorithm,strutils,future
proc test(x: seq[string] -> seq[string]) =
 echo x(@["The The", "The They", "Thermodynamics"]) # Substitute your input here
test(x=>x.sortedByIt toLower it[4*int(it.toLower[0..3]=="the ")..^0])
Miedź
źródło
0

Haskell, 84 bajty

import Data.List
p(t:'h':'e':' ':s)|elem t"Tt"=s
p s=s
sortBy(\a b->p a`compare`p b)

Zadzwoń z

sortBy(\a b->p a`compare`p b)["The The", "The They", "Thermodynamics"]

Testcase:

let s = sortBy(\a b->p a`compare`p b)
and[s["Queen", "Aerosmith", "Sunny Day Real Estate", "The Strokes"]==["Aerosmith", "Queen", "The Strokes", "Sunny Day Real Estate"],s["The Ramones", "The Cure", "The Pixies", "The Roots", "The Animals", "Enrique Iglesias"]==["The Animals", "The Cure", "Enrique Iglesias", "The Pixies", "The Ramones", "The Roots"],s["The The", "The They", "Thermodynamics"]==["The The", "Thermodynamics", "The They"]]
Laikoni
źródło
0

MATL , 16 bajtów

tk'^the '[]YX2$S

Format wejściowy to (każda linia odpowiada przypadkowi testowemu)

{'Queen', 'Aerosmith', 'Sunny Day Real Estate', 'The Strokes'} 
{'The Ramones', 'The Cure', 'The Pixies', 'The Roots', 'The Animals', 'Enrique Iglesias'}
{'The The', 'The They', 'Thermodynamics'}

Wypróbuj online!

Wyjaśnienie

t        % Implicitly input cell array of strings. Push another copy
k        % Convert to lowercase
'^the '  % String to be used as regex pattern: matches initial 'the '
[]       % Empty array
YX       % Regex replacement: replace initial 'the ' in each string by empty array
2$S      % Sort input according to the modified cell array. Implicitly display
Luis Mendo
źródło
0

C #, 139 bajtów

using System.Linq;System.Collections.IEnumerable S(string[] l)=> l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b).ToLower());

Wypróbuj online!

Bez policzenia użycia odpowiedź miałaby 102 bajty.

raznagul
źródło
Wierzę, że możesz zignorować ToLower()
wersję
Możesz także uczynić z niego anonimową funkcję, która powinna oszczędzić niektóre bajty:
TheLethalCoder
l=>l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b));Do 67 bajtów, a następnie trzeba dodać na using System.Linq;zbyt
TheLethalCoder
@TheLethalCoder: Potrzebuję drugiego ToLowerze względu na rozróżnianie wielkości liter. W przeciwnym razie w zamówieniu rozróżniana jest wielkość liter.
raznagul
W porządku, ale kwestia przekształcenia go w funkcję anonimową nadal obowiązuje
TheLethalCoder
0

BASH, 64 bajtów

sed 's/^the / /;s/^The /    /'|sort -fb|sed 's/^ /the /;s/^ /The /'

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ą.

Riley
źródło
0

Bash + coreutils, 44 bajty

sed '/^the /I!s,^,@ ,'|sort -dk2|sed s,@\ ,,

Objaśnienie: format wejściowy i wyjściowy to jedno pasmo na linię

sed '/^the /I!s,^,@ ,'   # prepend '@ ' to each line not starting with 'the ', case
                         #insensitive. This adds a temporary field needed by sort.
sort -dk2                # sort in ascending dictionary order by 2nd field onward
sed s,@\ ,,              # remove the temporary field

Uruchomienie testowe (przy użyciu dokumentu z EOF jako znacznikiem końcowym):

./sort_bands.sh << EOF
> Queen
> Aerosmith
> Sunny Day Real Estate
> The Strokes
> EOF

Wydajność:

Aerosmith
Queen
The Strokes
Sunny Day Real Estate
seshoumara
źródło
0

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.

:sor i/\(The \)*/<CR>

Objaśnienie (prosto z pomocy vima):

                            *:sor* *:sort*
:[range]sor[t][!] [b][f][i][n][o][r][u][x] [/{pattern}/]
            Sort lines in [range].  When no range is given all
            lines are sorted.

            With [i] case is ignored.

            When /{pattern}/ is specified and there is no [r] flag
            the text matched with {pattern} is skipped, so that
            you sort on what comes after the match.
            Instead of the slash any non-letter can be used.
DJMcMayhem
źródło
0

C, 216 212 135 + 5 ( qsort) = 221 217 140 bajtów

M(void*a,void*b){char*A,*B;A=*(char**)a;B=*(char**)b;A=strcasestr(A,"The ")?A+4:A;B=strcasestr(B,"The ")?B+4:B;return strcasecmp(A,B);}

W 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 Mnależy podać funkcję porównania qsort. Dlatego, aby to wywołać, należy użyć qsortformatu, w qsort(argv++,argc--,8,M)którym argvzawiera argumenty wiersza polecenia i argcliczbę podanych argumentów.

Wypróbuj online!

R. Kap
źródło
0

05AB1E , 27 bajtów (niekonkurencyjny)

vyð¡RD¤…TheQsgα£Rðý})‚øí{ø¤

Wypróbuj online!

Wyjaśnienie

vyð¡RD¤…TheQsgα£Rðý})‚øí{ø¤   Argument l
v                 }           For each y in l, do:
 yð¡                            Split y on space
    RD                          Reverse and duplicate
      ¤…TheQ                    Last element equals "The" (true = 1, false = 0)
            sgα                 Absolute difference with length of array
               £                Get elements from index 0 to calculated difference
                R               Reverse
                 ðý             Join on space
                    )‚øí      Pair each element with original
                        {ø¤   Sort and get the original band name
kalsowerus
źródło
0

Groovy, 34 bajty

{it.sort{it.toLowerCase()-'the '}}

41% moja odpowiedź brzmi .toLowerCase(): zabij mnie teraz.


Wydajność

Podczas uruchamiania ...

({it.sort{it.toLowerCase()-'the '}})(['The ramones','The Cure','The Pixies','The Roots','The Animals','Enrique Iglesias'])

Wynik to...

[The Animals, The Cure, Enrique Iglesias, The Pixies, The ramones, The Roots]

Bez danych wyjściowych debugowania lub błędów.

Urna Magicznej Ośmiornicy
źródło
0

q / kdb +, 36 33 bajtów

Rozwiązanie:

{x(<)@[x;(&)x like"[Tt]he *";4_]}

Przykład:

q){x(<)@[x;(&)x like"[Tt]he *";4_]}("Queen";"Aerosmith";"Sunny Day Real Estate";"The Strokes";"the Eagles")
"Aerosmith"
"the Eagles"
"Queen"
"The Strokes"
"Sunny Day Real Estate"

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.

{x iasc @[x;where x like "[Tt]he *";4_]} / ungolfed solution
{                                      } / lambda function
        @[x;                       ;  ]  / apply function to x at indices
                                    4_   / 4 drop, remove first 4 items
            where x like "[Tt]he *"      / where the input matches 'The ...' or 'the ...'
   iasc                                  / returns sorted indices
 x                                       / index into original list at these indices
streetster
źródło
-2

Java 176 158 bajtów

public String[]sort(String[]names){
  for(int i=-1;++i<names.length;)
    if(names[i].startsWith("(The |the )"))
      names[i]=names[i].substring(4);
  return Arrays.sort(names,String.CASE_INSENSITIVE_ORDER);
  }

Główna funkcja

public static void main(String[]args){
  Scanner s = new Scanner(System.in);
  List<String> list= new ArrayList<>();
  while(!(String h = s.nextLine).equalsIgnoreCase("~")){
    list.add(h);
  }
System.out.println(sort(list.toArray(newString[0]))

); }

Funkcja sortowania w golfa:

String[]s(String[]n){for(int i=-1;++i<n.length;)if(n[i].startsWith("(The |the )"))n[i]=n[i].substring(4);return Arrays.sort(n,String.CASE_INSENSITIVE_ORDER);}

Dzięki @raznagul za zapisanie 18 bajtów

Roman Gräf
źródło
Nie działa, jeśli nazwa zaczyna się od the . W sortowaniu nie jest rozróżniana wielkość liter.
shooqie,
To w ogóle nie zadziała ... Ciągi są niezmienne. Chcesz to zrobić, 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 niezmienny
Socratic Phoenix
Naprawiłem to, ale znajdź mi jeden zespół, który zaczyna się od małego „the”
Roman Gräf
2
Arrays.sortzwraca typ void
user902383
1
@ RomanGräfthe pAper chAse
AdmBorkBork