Descripción del desafío
Tienes una biblioteca de música con muchas pistas grabadas por muchas bandas, cada una de las cuales tiene un nombre, como Queen,Aerosmith , Sunny Day Real Estate, The Strokes. Cuando un reproductor de audio muestra su biblioteca alfabéticamente por nombre de banda, generalmente omite la Theparte, ya que muchos nombres de bandas comienzan The, lo que facilita la navegación a través de su colección de medios. En este desafío, dada una lista (matriz) de cadenas, debe ordenarla de esa manera (es decir, omitir la Thepalabra al comienzo del nombre). Puede escribir un método o un programa de trabajo completo.
Muestra de entradas / salidas
[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]
Notas / casos de borde
Ordenar lexicográficamente no distingue entre mayúsculas y minúsculas, por lo tanto
The Police,The policeythe policetodos son equivalentes,Su algoritmo solo debe omitir la primera
thepalabra, por lo que las bandas nombradasThe TheoThe The Bandordenadas normalmente por la segundathe,Una banda llamada
The(una palabra de tres letras) se ordena normalmente (sin saltos),El orden de dos bandas con el mismo nombre, una de las cuales comienza con
the(likeThe PoliceyPolice) no está definido,Puede suponer que si el nombre de una banda consta de más de una palabra, están separados por un solo carácter de espacio. No necesita manejar espacios en blanco iniciales o finales,
Todas las cadenas de entrada coinciden
[A-Za-z0-9 ]*, es decir, consistirán solo en letras mayúsculas y minúsculas del alfabeto inglés, dígitos y caracteres de espacio,Recuerda que este es un desafío de código de golf , ¡así que haz tu código lo más corto posible!

TheyThe The? (La mayoría de las respuestas probablemente tendrían que cambiar si es algo que no sea indefinido)Respuestas:
Python,
566264 bytesIntentalo
Gracias a @Chris H por señalar que
lstrip()no se manejabaThe Thecorrectamente, ya que la tira estaba explotando todos los caracteres coincidentes y clasificándola como una cadena en blanco, y @manatwork por encontrar la falla en el usoreplace(). La nueva versión debería funcionar.Versión antigua:
fuente
['The The', 'The', 'The Animals', 'Thermodynamics', 'The They']. El segundo caso sugiere que el asiento debería ser ['Los animales', 'El The', 'The', 'Termodinámica', 'The They'] (o intercambie los artículos segundo y tercero). Un poco de violín sugiere que el espacio interiorstrip('the ')está siendo ignorado - intentefor x in ['The The', 'The They', 'Thermodynamics', 'The', 'The Animals']: print (x.lower().strip('the '))replace()no es mucho mejor:'what the snake'.replace('the ','',1)resultados'what snake'.V ,
3228 bytesPruébalo en línea!
Nota para uno mismo: ¡Haga una abreviatura para
:sortque no necesite 6 bytes completos para un solo comando!Explicación:
fuente
theestá en minúsculas, comothe pAper chAse?Retina , 34 bytes
El avance de línea final es significativo.
I / O es una banda por línea.
Pruébalo en línea!
Explicación
Duplicar cada línea, utilizando
;como separador.Convierta todo delante de
;a en minúsculas.Elimine cualquier
thes que aparezca al comienzo de una línea.Ordenar las líneas.
Elimina los comienzos de las líneas que usamos para ordenar.
fuente
(?i:the )?(.*)/\L$1\E;$0/Pyke, 16 bytes
Pruébalo aquí!
fuente
Perl, 52 bytes
-13 bytes gracias a @manatwork
-1 byte gracias a @ msh210
Una banda por línea como entrada, y también lo es la salida.
La implementación es bastante sencilla: el programa imprime la lista de bandas, ordenadas con la ayuda de una función personalizada (
f) que devuelve el nombre de la banda en minúsculas sin el guión finalthe.fuente
sub f{lc$_[0]=~s/^the //ir}.lcparámetro entre paréntesis como eliindicador en sustitución. ¿O has conocido un caso de prueba donde eso no funciona?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 poplugar delc$_[0]y ensaylugar deprint. (Esto último requiere-M5.01, que es gratis.) Probado en Strawberry 5.20.2 con solo el primer caso de prueba de la pregunta.Python,
667269 bytesUtiliza el
sortedmétodo de Python con elkeyargumento de la palabra clave para ordenar por el nombre menos "The". Esta es una lambda; para llamarlo, ponle un nombre poniéndolof=al frente.¡Ahora con insensibilidad a mayúsculas y minúsculas!
fuente
the, en cuyo caso este método no funcionará correctamente.Ruby, 42 bytes
Pruébalo en línea!
fuente
Perl 6 , 26 bytes
Explicación:
Prueba:
fuente
PowerShell v2 +,
333229 bytesGuardado 3 bytes gracias a @MathiasRJessen
La entrada es a través de argumentos de línea de comandos. Ordena los nombres originales en función de los resultados del bloque de secuencia de comandos
{...}que realiza una expresión regular-replacepara eliminar el inicio (sin distinción entre mayúsculas y minúsculas)"the ".Ejemplos
fuente
-replaceno distingue entre mayúsculas y minúsculas por defecto,'^the 'será suficiente para el patrónJavaScript / ECMAScript 6
9370 bytes70 Gracias a Neil y Downgoat por sus consejos.
Versión legible para la variante de 70 bytes
93
Versión legible para la variante de 93 bytes
fuente
^dentro? Además, localeCompare no distingue entre mayúsculas y minúsculas en mi sistema, por lo que no necesitaba eltoLowerCase, solo una/ibandera en la expresión regular. Finalmente, puede jugar golf de la siguiente manera:B=>B.sort((a,b)=>...,R=s=>...)-sortignora el parámetro adicional que estableceR.^shuold ir al comienzo de la expresión regularJava 8, 178 bytes
Versión sin golf:
Llamar como tal:
fuente
void q(String[]s){...}as->{...}. Y puedes cambiar ambos(x.toLowerCase().startsWith("the ")?x.substring(4):x)conx.replaceFirst("(?i)the ",""). Entonces el total se convierte en:s->{java.util.Arrays.sort(s,(a,b)->a.replaceFirst("(?i)the ","").compareToIgnoreCase(b.replaceFirst("(?i)the ","")));}- 118 bytess->{ ... }no estaban permitidas y tenía que tener una firma de método completa con tipos y demás. No sé si eso ha cambiado desde entonces.Nim , 96 bytes
Aquellos
importtoman tantos bytes:|Una traducción de mi respuesta de Python .
Este es un procedimiento anónimo; para usarlo, debe pasar a un procedimiento de prueba. Aquí hay un programa completo que puede usar para realizar pruebas:
fuente
Haskell, 84 bytes
Llamar con
Caso de prueba:
fuente
MATL , 16 bytes
El formato de entrada es (cada línea corresponde a un caso de prueba)
Pruébalo en línea!
Explicación
fuente
C #, 139 bytes
¡Prueba en línea!
Sin contar los usos, la respuesta sería de 102 bytes.
fuente
ToLower()debido al requisito de mayúsculas y minúsculasl=>l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b));Para 67 bytes y luego debe agregar elusing System.Linq;tambiénToLowerdebido al requisito de mayúsculas y minúsculas. De lo contrario, la orden distingue entre mayúsculas y minúsculas.BASH, 64 Bytes
Entrada: stdin, una banda por línea. Salida: stdout
Nota: Los segundos reemplazos (s / ^ The / / y s / ^ / The /) usan el carácter de tabulación, por lo que no siempre copian / pegan correctamente.
fuente
Bash + coreutils, 44 bytes
Explicación: el formato de entrada y salida es una banda por línea
Prueba de funcionamiento (utilizando un documento aquí con EOF como marcador final):
Salida:
fuente
Vim, 18 bytes
Bueno, ahora que me di cuenta de que esto es posible, estoy un poco avergonzado por mi respuesta de 26 bytes V, especialmente porque se supone que V es más corto que vim. Pero esto es más o menos una construcción.
Explicación (directamente de vim help):
fuente
C,
216212135 + 5 (qsort) =221217140 bytesBueno, finalmente pude terminar esto
C. Los consejos de golf son muy apreciados.En este envío,
Mes la función de comparación que se debe suministrarqsort. Por lo tanto, para invocar esto, debe usarqsorten el formatoqsort(argv++,argc--,8,M)dondeargvcontiene los argumentos de la línea de comandos yargces el número de argumentos proporcionados.¡Pruébelo en línea!
fuente
05AB1E , 27 bytes (no competitivos)
Pruébalo en línea!
Explicación
fuente
Groovy, 34 bytes
41% mi respuesta es
.toLowerCase(), mátame ahora.Salida
Cuando corres ...
El resultado es...
[The Animals, The Cure, Enrique Iglesias, The Pixies, The ramones, The Roots]Sin salida de depuración o error.
fuente
q / kdb +,
3633 bytesSolución:
Ejemplo:
Explicación:
Elimine cualquier "[Tt] he" de cada cadena de entrada, ordene esta lista, luego ordene la lista original según la indexación de la lista ordenada.
fuente
Japt ,
1110 bytesIntentalo
fuente
Java
176158 bytesFunción principal
); }
Función de clasificación de golf:
fuente
the. El tipo debe ser insensible a mayúsculas y minúsculas.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); }The and The debería funcionar, y encadena un inmutableArrays.sortdevuelve tipo vacíothe pAper chAse