Description du défi
Vous avez une bibliothèque musicale avec de nombreuses pistes enregistrées par de nombreux groupes, dont chacun a un nom, comme Queen
, Aerosmith
, Sunny Day Real Estate
, The Strokes
. Lorsqu'un lecteur audio affiche votre bibliothèque par ordre alphabétique par nom de groupe, il ignore généralement la The
partie, car de nombreux noms de groupe commencent par The
, ce qui facilite la navigation dans votre collection multimédia. Dans ce défi, étant donné une liste (tableau) de chaînes, vous devez le trier de cette façon (c'est-à-dire en omettant le The
mot au début du nom). Vous pouvez soit écrire une méthode ou un programme de travail complet.
Exemples d'entrées / sorties
[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]
Notes / étuis Edge
Le tri lexicographique est insensible à la casse, donc
The Police
,The police
etthe police
sont tous équivalents,Votre algorithme ne doit omettre que le premier
the
mot, donc les bandes nomméesThe The
ouThe The Band
sont triées normalement par le secondthe
,Une bande nommée
The
(un mot de trois lettres) est triée normalement (pas de saut),Ordre de deux bandes portant le même nom, dont l'une commence par
the
(commeThe Police
etPolice
) n'est pas définie,Vous pouvez supposer que si le nom d'un groupe se compose de plusieurs mots, ils sont séparés par un seul espace. Vous n'avez pas besoin de gérer les espaces blancs de début ou de fin,
Toutes les chaînes d'entrée correspondent
[A-Za-z0-9 ]*
, c'est-à-dire qu'elles ne seront composées que de lettres minuscules et majuscules de l'alphabet anglais, de chiffres et de caractères d'espacement,N'oubliez pas qu'il s'agit d'un défi de code-golf , alors faites votre code aussi court que possible!
The
etThe The
? (La plupart des réponses devraient probablement changer si ce n'est pas défini)Réponses:
Python,
566264 octetsEssayez-le
Merci à @Chris H d'avoir souligné que cela
lstrip()
ne se passait pasThe The
correctement, car la bande dynamitait tous les caractères correspondants et la triait comme une chaîne vide, et @manatwork pour trouver la faille dans l'utilisationreplace()
. La nouvelle version devrait fonctionner.Ancienne version:
la source
['The The', 'The', 'The Animals', 'Thermodynamics', 'The They']
. Le cas du 2e bord suggère que la position assise devrait être [«Les animaux», «Le», «Le», «Thermodynamique», «Le Ils»] (ou permutez les 2e et 3e éléments). Un petit tripot suggère que l'espace à l'intérieurstrip('the ')
est ignoré - essayezfor x in ['The The', 'The They', 'Thermodynamics', 'The', 'The Animals']: print (x.lower().strip('the '))
replace()
n'est pas beaucoup mieux: les'what the snake'.replace('the ','',1)
résultats'what snake'
.V ,
3228 octetsEssayez-le en ligne!
Note à soi-même: faites une abréviation pour
:sort
que je n'aie pas besoin de 6 octets entiers pour une seule commande!Explication:
la source
the
est en minuscules, commethe pAper chAse
?Rétine , 34 octets
Le saut de ligne arrière est important.
Les E / S sont une bande par ligne.
Essayez-le en ligne!
Explication
Dupliquez chaque ligne en utilisant
;
comme séparateur.Tournez tout devant un
;
boîtier inférieur.Supprimez tous les
the
s qui apparaissent au début d'une ligne.Triez les lignes.
Supprimez les débuts des lignes que nous avons utilisées pour le tri.
la source
(?i:the )?(.*)
/\L$1\E;$0
/Pyke, 16 octets
Essayez-le ici!
la source
Perl, 52 octets
-13 octets grâce à @manatwork
-1 octets grâce à @ msh210
Une bande par ligne en entrée, tout comme la sortie.
L'implémentation est assez simple: le programme imprime la liste des bandes, triées à l'aide d'une fonction personnalisée (
f
) qui renvoie le nom de la bande en minuscules sans le début éventuelthe
.la source
sub f{lc$_[0]=~s/^the //ir}
.lc
du paramètre et dui
drapeau de substitution. Ou avez-vous rencontré un cas de test où cela ne fonctionne pas?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
au lieu delc$_[0]
etsay
au lieu deprint
. (Ce dernier nécessite-M5.01
, qui est gratuit.) Testé dans Strawberry 5.20.2 avec seulement le premier cas de test de la question.Python,
667269 octetsUtilise la
sorted
méthode Python avec l'key
argument mot - clé pour trier par le nom moins "The". Ceci est un lambda; pour l'appeler, donnez-lui un nom en le mettantf=
en avant.Maintenant avec une insensibilité à la casse supplémentaire!
la source
the
, auquel cas cette méthode ne fonctionnera pas correctement.Rubis, 42 octets
Essayez-le en ligne!
la source
Perl 6 , 26 octets
Explication:
Tester:
la source
PowerShell v2 +,
333229 octetsEnregistré 3 octets grâce à @MathiasRJessen
L'entrée se fait via des arguments de ligne de commande. Trie les noms d'origine en fonction des résultats du bloc de script
{...}
qui effectue une expression régulière-replace
pour supprimer le début (sans respecter la casse)"the "
.Exemples
la source
-replace
est insensible à la casse par défaut,'^the '
suffira pour le motifJavaScript / ECMAScript 6
9370 octets70 Merci à Neil et Downgoat pour leurs conseils
Version lisible pour la variante 70 octets
93
Version lisible pour la variante 93 octets
la source
^
? En outre, localeCompare est insensible à la casse sur mon système, donc je n'avais pas besoin detoLowerCase
, juste un/i
indicateur sur l'expression régulière. Enfin, vous pouvez jouer au golf comme suit:B=>B.sort((a,b)=>...,R=s=>...)
-sort
ignore le paramètre supplémentaire qui définitR
.^
shuold go au début de l'expressionJava 8, 178 octets
Version non golfée:
Appelez comme tel:
la source
void q(String[]s){...}
às->{...}
. Et vous pouvez changer les deux(x.toLowerCase().startsWith("the ")?x.substring(4):x)
avecx.replaceFirst("(?i)the ","")
. Le total devient donc:s->{java.util.Arrays.sort(s,(a,b)->a.replaceFirst("(?i)the ","").compareToIgnoreCase(b.replaceFirst("(?i)the ","")));}
- 118 octetss->{ ... }
n'étaient pas autorisées et je devais avoir une signature de méthode complète avec les types et ainsi de suite. Je ne sais pas si cela a changé depuis.Nim , 96 octets
Ceux
import
s prennent tellement d'octets:|
Une traduction de mon réponse Python .
Il s'agit d'une procédure anonyme; pour l'utiliser, il doit être passé dans une procédure de test. Voici un programme complet que vous pouvez utiliser pour les tests:
la source
Haskell, 84 octets
Appeler avec
Cas de test:
la source
MATL , 16 octets
Le format d'entrée est (chaque ligne correspond à un cas de test)
Essayez-le en ligne!
Explication
la source
C #, 139 octets
Essayez en ligne!
Sans compter les utilisations, la réponse serait de 102 octets.
la source
ToLower()
raison de l'exigence insensible à la cassel=>l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b));
Pour 67 octets, puis vous devez ajouterusing System.Linq;
aussiToLower
raison de l'exigence insensible à la casse. Sinon, la commande serait sensible à la casse.BASH, 64 octets
Entrée: stdin, une bande par ligne. Sortie: stdout
Remarque: Les seconds remplacements (s / ^ Le / / et s / ^ / Le /) utilisent le caractère de tabulation, donc ils ne copient / collent pas toujours correctement.
la source
Bash + coreutils, 44 octets
Explication: le format d'entrée et de sortie est une bande par ligne
Test (en utilisant un document ici avec EOF comme marqueur de fin):
Sortie:
la source
Vim, 18 octets
Eh bien maintenant que j'ai réalisé que c'était possible, je suis un peu gêné par ma réponse V de 26 octets, d'autant plus que V est censé être plus court que vim. Mais c'est à peu près une fonction intégrée.
Explication (directement de l'aide de vim):
la source
C,
216212135 + 5 (qsort
) =221217140 octetsEh bien, j'ai finalement réussi à terminer cela
C
. Les conseils de golf sont très appréciés.Dans cette soumission,
M
est la fonction de comparaison à fournirqsort
. Par conséquent, pour invoquer cela, vous devez utiliserqsort
au formatqsort(argv++,argc--,8,M)
oùargv
contient les arguments de ligne de commande etargc
est le nombre d'arguments fournis.Essayez-le en ligne!
la source
05AB1E , 27 octets (non concurrent)
Essayez-le en ligne!
Explication
la source
Groovy, 34 octets
41% ma réponse est
.toLowerCase()
, tuez-moi maintenant.Sortie
Lors de l'exécution ...
Le résultat est...
[The Animals, The Cure, Enrique Iglesias, The Pixies, The ramones, The Roots]
Sans sortie de débogage ou d'erreur.
la source
q / kdb +,
3633 octetsSolution:
Exemple:
Explication:
Supprimez tout "[Tt] he" de chaque chaîne d'entrée, triez cette liste, puis triez la liste d'origine en fonction de l'indexation de la liste triée.
la source
Japt ,
1110 octetsEssayez-le
la source
Java
176158 octetsFonction principale
); }
Fonction de tri golf:
la source
the
. Le tri doit être insensible à la casse.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); }
puisque le et le devraient fonctionner, et les cordes sont immuablesArrays.sort
renvoie type voidthe pAper chAse