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 The
parte, 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 The
palabra 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 police
ythe police
todos son equivalentes,Su algoritmo solo debe omitir la primera
the
palabra, por lo que las bandas nombradasThe The
oThe The Band
ordenadas 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 Police
yPolice
) 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!
The
yThe 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 The
correctamente, 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
:sort
que no necesite 6 bytes completos para un solo comando!Explicación:
fuente
the
está 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
the
s 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}
.lc
parámetro entre paréntesis como eli
indicador 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 pop
lugar delc$_[0]
y ensay
lugar 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
sorted
método de Python con elkey
argumento 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-replace
para eliminar el inicio (sin distinción entre mayúsculas y minúsculas)"the "
.Ejemplos
fuente
-replace
no 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/i
bandera en la expresión regular. Finalmente, puede jugar golf de la siguiente manera:B=>B.sort((a,b)=>...,R=s=>...)
-sort
ignora 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
import
toman 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énToLower
debido 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,
M
es la función de comparación que se debe suministrarqsort
. Por lo tanto, para invocar esto, debe usarqsort
en el formatoqsort(argv++,argc--,8,M)
dondeargv
contiene los argumentos de la línea de comandos yargc
es 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.sort
devuelve tipo vacíothe pAper chAse