Herausforderungsbeschreibung
Sie haben eine Musikbibliothek mit vielen Spuren von vielen Bands aufgezeichnet, von denen jede einen Namen hat, wie Queen
, Aerosmith
, Sunny Day Real Estate
, The Strokes
. Wenn ein Audioplayer Ihre Bibliothek alphabetisch nach Bandnamen anzeigt, überspringt er normalerweise den The
Teil, da viele Bandnamen mit beginnen The
, um die Navigation durch Ihre Mediensammlung zu erleichtern. Bei dieser Herausforderung müssen Sie eine Liste (Array) von Zeichenfolgen auf diese Weise sortieren (dh das The
Wort am Anfang des Namens weglassen ). Sie können entweder eine Methode oder ein voll funktionsfähiges Programm schreiben.
Beispiel Ein- / Ausgänge
[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]
Notizen / Edge Fällen
Lexikografisch Sortierung Groß- und Kleinschreibung ist, so
The Police
,The police
undthe police
alle sind gleichwertig,Ihr Algorithmus sollte nur das erste
the
Wort weglassen , damit die Bänder nach dem zweiten benanntThe The
oderThe The Band
normal sortiert werdenthe
.Ein Band namens
The
(ein Drei-Buchstaben-Wort) wird normal sortiert (kein Überspringen),Die Reihenfolge zweier gleichnamiger Bands, von denen eine mit
the
(likeThe Police
undPolice
) beginnt, ist undefiniert.Sie können davon ausgehen, dass ein Bandname, der aus mehr als einem Wort besteht, durch ein einzelnes Leerzeichen getrennt ist. Sie müssen keine führenden oder nachfolgenden Leerzeichen verarbeiten,
Alle Eingabezeichenfolgen stimmen überein
[A-Za-z0-9 ]*
, dh sie bestehen nur aus Klein- und Großbuchstaben des englischen Alphabets, Ziffern und Leerzeichen.Denken Sie daran, dass dies eine Code-Golf- Herausforderung ist, also machen Sie Ihren Code so kurz wie möglich!
The
undThe The
? (Die meisten Antworten müssten wahrscheinlich geändert werden, wenn es etwas anderes als undefiniert ist)Antworten:
Python,
566264 BytesVersuch es
Vielen Dank an @Chris H für den Hinweis, dass dies
lstrip()
nichtThe The
richtig gehandhabt wurde , da der Streifen alle übereinstimmenden Zeichen gesprengt und als leere Zeichenfolge sortiert hatreplace()
. Die neue Version sollte funktionieren.Alte Version:
quelle
['The The', 'The', 'The Animals', 'Thermodynamics', 'The They']
. Der Fall mit der zweiten Kante schlägt vor, dass sit ['Die Tiere', 'Die', 'Die', 'Thermodynamik', 'Die Sie'] sein sollte (oder das zweite und dritte Element tauschen). Ein wenig Fummelei deutet darauf hin, dass der Platz im Innerenstrip('the ')
ignoriert wird - versuchen Sie esfor x in ['The The', 'The They', 'Thermodynamics', 'The', 'The Animals']: print (x.lower().strip('the '))
replace()
ist nicht viel besser:'what the snake'.replace('the ','',1)
Ergebnisse'what snake'
.V ,
3228 BytesProbieren Sie es online!
Hinweis für sich selbst: Machen Sie eine Abkürzung für,
:sort
damit ich nicht 6 ganze Bytes für einen einzelnen Befehl benötige!Erläuterung:
quelle
the
nur Kleinbuchstaben verwendet werdenthe pAper chAse
?Retina , 34 Bytes
Der Zeilenvorschub am Ende ist signifikant.
I / O ist ein Band pro Zeile.
Probieren Sie es online!
Erläuterung
Duplizieren jede Zeile unter Verwendung
;
als Separator.Drehen Sie alles vor einem
;
zu Kleinbuchstaben.Entfernen Sie alle
the
s, die am Anfang einer Zeile erscheinen.Sortieren Sie die Zeilen.
Entfernen Sie die Anfänge der Zeilen, die wir zum Sortieren verwendet haben.
quelle
(?i:the )?(.*)
/\L$1\E;$0
/Pyke, 16 Bytes
Probieren Sie es hier aus!
quelle
Perl, 52 Bytes
-13 Byte dank @manatwork
-1 Byte dank @msh210
Ein Band pro Zeile als Eingang, ebenso wie der Ausgang.
Die Implementierung ist sehr einfach: Das Programm druckt die Liste der Bänder, sortiert mit Hilfe einer benutzerdefinierten Funktion (
f
), die den Bandnamen in Kleinbuchstaben ohne den eventuellen Zeilenabstand zurückgibtthe
.quelle
sub f{lc$_[0]=~s/^the //ir}
.lc
den Parameter noch dasi
Flag für die Ersetzung sind erforderlich . Oder haben Sie einen Testfall getroffen, bei dem das nicht funktioniert?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
anstelle vonlc$_[0]
undsay
anstelle vonprint
. (Letzteres erfordert-M5.01
, was kostenlos ist.) Getestet in Strawberry 5.20.2 nur mit dem ersten Testfall aus der Frage.Python,
667269 BytesVerwendet Pythons
sorted
Methode mit demkey
Schlüsselwortargument, um nach dem Namen abzüglich "The" zu sortieren. Dies ist ein Lambda; Um es zu nennen, geben Sie ihm einen Namen, indem Sie ihn voranstellenf=
.Jetzt mit zusätzlicher Groß- / Kleinschreibung!
quelle
the
. In diesem Fall funktioniert diese Methode nicht ordnungsgemäß.Ruby, 42 Bytes
Probieren Sie es online!
quelle
Perl 6 , 26 Bytes
Erläuterung:
Prüfung:
quelle
PowerShell v2 +,
333229 Bytes3 Bytes gespart dank @MathiasRJessen
Die Eingabe erfolgt über Befehlszeilenargumente. Sortiert die ursprünglichen Namen basierend auf den Ergebnissen des
{...}
Skriptblocks, der einen regulären Ausdruck ausführt-replace
, um den führenden auszublenden (ohne Berücksichtigung der Groß- / Kleinschreibung)"the "
.Beispiele
quelle
-replace
Standardmäßig wird die Groß- / Kleinschreibung nicht beachtet,'^the '
für das Muster wird ausreichenJavaScript / ECMAScript 6
9370 Bytes70 Danke an Neil und Downgoat für den Rat
Lesbare Version für die 70-Byte-Variante
93
Lesbare Version für die 93-Byte-Variante
quelle
^
? Außerdem unterscheidet localeCompare auf meinem System nicht zwischen Groß- und Kleinschreibung, sodass ich das nicht benötigtetoLowerCase
, sondern nur ein/i
Flag auf dem regulären Ausdruck. Zum Schluss können Sie dies wie folgt tun :B=>B.sort((a,b)=>...,R=s=>...)
-sort
Ignoriert den zusätzlichen Parameter, der gesetzt wirdR
.^
Shuold gehen am Anfang der RegexJava 8, 178 Bytes
Ungolfed-Version:
Als solches anrufen:
quelle
void q(String[]s){...}
zus->{...}
. Und Sie können beide ändern(x.toLowerCase().startsWith("the ")?x.substring(4):x)
mitx.replaceFirst("(?i)the ","")
. So wird die Summe:s->{java.util.Arrays.sort(s,(a,b)->a.replaceFirst("(?i)the ","").compareToIgnoreCase(b.replaceFirst("(?i)the ","")));}
- 118 Bytess->{ ... }
hingewiesen , die nicht erlaubt waren, und ich musste eine vollständige Methodensignatur mit Typen und so weiter haben. Ich weiß nicht, ob sich das seitdem geändert hat.Nim , 96 Bytes
Diese
import
belegen so viele Bytes:|
Eine Übersetzung meiner Python-Antwort .
Dies ist ein anonymes Verfahren. Um es zu verwenden, muss es einem Testverfahren unterzogen werden. Hier ist ein vollständiges Programm, das Sie zum Testen verwenden können:
quelle
Haskell, 84 Bytes
Mit anrufen
Testfall:
quelle
MATL , 16 Bytes
Eingabeformat ist (jede Zeile entspricht einem Testfall)
Probieren Sie es online!
Erläuterung
quelle
139 Bytes
Online versuchen!
Ohne die Verwendung zu zählen, wäre die Antwort 102 Bytes.
quelle
ToLower()
aufgrund der Groß- und Kleinschreibung ignorierenl=>l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b));
Für 67 Bytes und dann müssen Sie auf dem hinzufügenusing System.Linq;
zuToLower
da die Groß- / Kleinschreibung nicht berücksichtigt wird. Andernfalls wird bei der Bestellung zwischen Groß- und Kleinschreibung unterschieden.BASH, 64 Bytes
Eingabe: stdin, ein Band pro Zeile. Ausgabe: stdout
Hinweis: Die zweiten Ersetzungen (s / ^ The / / und s / ^ / The /) verwenden das Tabulatorzeichen, sodass sie nicht immer korrekt kopiert / eingefügt werden.
quelle
Bash + Coreutils, 44 Bytes
Erläuterung: Das Eingabe- und Ausgabeformat ist ein Band pro Zeile
Testlauf (mit einem Here-Dokument mit EOF als Endemarker):
Ausgabe:
quelle
Vim, 18 Bytes
Nun, da mir klar wurde, dass dies möglich ist, schäme ich mich ein bisschen für meine 26-Byte-V-Antwort, zumal V kürzer als vim sein soll. Aber das ist so ziemlich ein eingebautes.
Erklärung (direkt aus der vim-Hilfe):
quelle
C,
216212135 + 5 (qsort
) =221217140 BytesNun, ich habe es endlich geschafft
C
. Golftipps werden sehr geschätzt.In dieser Übermittlung
M
wird die Vergleichsfunktion bereitgestelltqsort
. Daher ist diese aufzurufen, müssen Sie verwendenqsort
im Formatqsort(argv++,argc--,8,M)
woargv
enthält die Befehlszeilenargumente undargc
ist die Anzahl der Argumente zur Verfügung gestellt.Probieren Sie es online!
quelle
05AB1E , 27 Bytes (nicht konkurrierend)
Probieren Sie es online!
Erläuterung
quelle
Groovy, 34 Bytes
41% meine Antwort ist
.toLowerCase()
, töte mich jetzt.Ausgabe
Beim Laufen ...
Das Ergebnis ist...
[The Animals, The Cure, Enrique Iglesias, The Pixies, The ramones, The Roots]
Ohne Debug- oder Fehlerausgabe.
quelle
q / kdb +,
3633 BytesLösung:
Beispiel:
Erläuterung:
Entfernen Sie "[Tt] he" aus jeder Eingabezeichenfolge, sortieren Sie diese Liste und sortieren Sie dann die ursprüngliche Liste basierend auf der Indizierung der sortierten Liste.
quelle
Japt ,
1110 BytesVersuch es
quelle
Java
176158 BytesHauptfunktion
); }
Golf Sortierfunktion:
quelle
the
. Bei der Sortierung sollte die Groß- und Kleinschreibung nicht berücksichtigt werden.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); }
Da das und Das funktionieren soll, und eine unveränderliche ZeichenfolgeArrays.sort
gibt type void zurückthe pAper chAse