Si lo desea, escriba un programa que clasifique las ciudades de acuerdo con las reglas del juego de nombres de ciudades.
Cada nombre de la ciudad debe comenzar desde la última letra del nombre de la ciudad anterior. P.ej
Lviv -> v -> Viden -> n -> Neapolis -> s -> Sidney -> y -> Yokogama -> a -> Amsterdam -> m -> Madrid -> d -> Denwer
En la lista ordenada, la primera letra de la primera ciudad y la última letra de la última
no deben coincidir con nada, no tiene que ser la misma letra.- Puede suponer que los nombres de ciudades solo tienen letras.
- La salida del programa debe tener la misma capitalización que la entrada
Ejemplo:
% ./script Neapolis Yokogama Sidney Amsterdam Madrid Lviv Viden Denwer
["Lviv", "Viden", "Neapolis", "Sidney", "Yokogama", "Amsterdam", "Madrid", "Denwer"]
code-golf
graph-theory
sorting
defhlt
fuente
fuente
["Viden" ... "Lviv"]
inválida?)Respuestas:
Ruby,
585544 caracteresOtra implementación más de rubí. También utiliza expresiones regulares sin distinción entre mayúsculas y minúsculas (como la antigua solución de Ventero ), pero la prueba se realiza de manera diferente.
Versión previa:
fuente
!~
lugar de negar toda la expresión.Python (
162141124)Fuerza bruta para la victoria.
fuente
&(j[0][0]!=j[-1][-1])
condición; ver los comentarios de la pregunta arriba.from itertools import*;print[j for j in permutations(raw_input().split())if all(x[-1]==y[0].lower()for x,y in zip(j,j[1:]))]
j
,x
,y
? ¿Cómo se definen? Lo siento si estas preguntas son tontas, soy nuevo en Python y me gustaría trabajar con él un poco más.j
contiene una permutación de las ciudades, que se genera con elpermutations
comando. La letra grandeif
al final básicamente valida que para todos los valores enj
, la última letra de un valor enj
es la misma letra que la primera letra del siguiente valor enj
. Honestamente, tampoco sé quézip
hace,zip
funciona de manera misteriosa.Ruby 1.9,
6354 caracteresLa nueva solución se basa en la solución de Howard :
Esto utiliza el hecho de que siempre habrá una solución válida.
Solución anterior, basada en la solución de w0lf :
fuente
max_by
. Y su nueva versión me inspiró para una aún más nueva (y más corta).Rubí
74 72104103 7170Demostración: http://ideone.com/MDK5c (en la demostración que he usado en
gets().split()
lugar de$*
; No sé si Ideone puede simular argumentos de línea de comandos).fuente
$*.permutation{|p|p p if p.inject(p[0][0]){|m,e|m.casecmp(e[0])==0?e[-1]:?_}>?_}
pero la tuya es 9 caracteres más corta!p$*.permutation.find{|i|i.inject{|a,e|a&&e[0]=~/#{a[-1]}/i&&e}}
es bastante más corto Una solución Ruby 1.8 (!) Que es aún más corta:p$*.permutation.find{|i|i.inject{|a,e|a&&a[-1]-32==e[0]&&e}}
-32
solución también es muy ingeniosa, pero se basa en el hecho de que los nombres comienzan con una letra mayúscula y terminan en minúscula, lo que puede no ser siempre el caso.Python, 113
Muy similar a la respuesta de @ beary605, e incluso más forzada.
fuente
Haskell ,
9474 bytesRecurrentemente encuentra todas las soluciones. -7 bytes si está bien generar todas las soluciones en lugar de la primera. ¡Gracias a @Lynn por deshacerse de la molesta importación, eliminando 18 bytes de la puntuación!
Pruébalo en línea!
fuente
Data.Char
importación conlast b==[r!!0!!0..]!!32
. Además, no necesita padresg[x|x<-c,x/=b]
fromEnum
que sería imprescindible. Es curioso, ya me quité esos paréntesis una vez, pero debo haber copiado de la pestaña incorrecta ...GolfScript, 78 caracteres
Una primera versión en GolfScript. También hace un enfoque de fuerza bruta. Puede ver el script que se ejecuta en la entrada de ejemplo en línea .
fuente
Casco , 10 bytes
Pruébalo en línea!
Explicación
Alternativamente, 10 bytes
También podríamos contar el número de pares adyacentes que satisfacen el predicado (
#
), ordenar en (Ö
) eso y tomar el último elemento (→
) para el mismo número de bytes:Pruébalo en línea!
fuente
Jelly ,
2518 bytes (¡Se aceptan mejoras!)Pruébalo en línea!
¡Gracias a @Lynn por la mayoría de estas mejoras!
Solución de 25 bytes:
Pruébalo en línea!
fuente
Ðf
que solíaX
elegir una solución aleatoria en lugar de la primera, peroḢ
funciona igual de bien.)Ðf
rápidamente en muchos de mis otros programas para ahorrar espacio!Mathematica 236 caracteres
Defina la lista de ciudades:
Encuentra el camino que incluye todas las ciudades:
Salida:
El enfoque anterior supone que las ciudades se pueden organizar como un gráfico de ruta.
El gráfico p se muestra a continuación:
fuente
C, 225
Ejecutar con nombres de países como argumentos de línea de comando
Nota:
fuente
#define L(x)for(int i=x;i<n;i++)
y no declarai
al principiomain
, ahorrará 1 byte.J,
6965605954 caracteresAlgo fuera del ritmo.
Ejemplo:
fuente
C #, 398
Y aquí está C # con Linq 5 centavos
fuente
K, 96
.
fuente
C # (.NET Core) , 297 bytes
Pruébalo en línea!
fuente