Se desejar, escreva um programa que classifique as cidades de acordo com as regras do jogo de nomes de cidades.
Cada nome da cidade deve começar com a última letra no nome da cidade anterior. Por exemplo
Lviv -> v -> Viden -> n -> Neapolis -> s -> Sidney -> y -> Yokogama -> a -> Amsterdam -> m -> Madrid -> d -> Denwer
Na lista classificada, a primeira letra da primeira cidade e a última letra da última
não devem corresponder a nada, não precisa ser a mesma letra.- Você pode assumir que os nomes das cidades tenham apenas letras.
- A saída do programa deve ter a mesma capitalização que a entrada
Exemplo:
% ./script Neapolis Yokogama Sidney Amsterdam Madrid Lviv Viden Denwer
["Lviv", "Viden", "Neapolis", "Sidney", "Yokogama", "Amsterdam", "Madrid", "Denwer"]
code-golf
graph-theory
sorting
defhlt
fonte
fonte
["Viden" ... "Lviv"]
inválida?)Respostas:
Ruby,
585544 caracteresMais uma implementação em ruby. Também usa regex que não diferencia maiúsculas de minúsculas (como a solução antiga de Ventero ), mas o teste é feito de maneira diferente.
Versão anterior:
fonte
!~
vez de negar toda a expressão.Python (
162141124)Força bruta para a vitória.
fonte
&(j[0][0]!=j[-1][-1])
condição; veja os comentários da pergunta acima.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
? Como eles são definidos? Sinto muito se essas perguntas são ruins, eu sou novo no Python e gostaria de trabalhar um pouco mais.j
contém uma permutação das cidades, gerada com opermutations
comando O valorif
final basicamente valida que, para todos os valores emj
, a última letra de um valor emj
é igual à primeira letra do próximo valor emj
. Honestamente, eu também não sei o quezip
faz,zip
funciona de maneiras misteriosas.Ruby 1.9,
63.54 caracteresNova solução é baseada em Howard 's solução :
Isso usa o fato de que sempre haverá uma solução válida.
Solução antiga, baseado em w0lf 's solução :
fonte
max_by
. E sua nova versão me inspirou para uma ainda mais nova (e mais curta).Rubi
74 72 104 103 7170Demonstração: http://ideone.com/MDK5c (na demonstração que usei em
gets().split()
vez de$*
; não sei se o Ideone pode simular argumentos de linha de comando).fonte
$*.permutation{|p|p p if p.inject(p[0][0]){|m,e|m.casecmp(e[0])==0?e[-1]:?_}>?_}
mas a sua é 9 caracteres mais curta!p$*.permutation.find{|i|i.inject{|a,e|a&&e[0]=~/#{a[-1]}/i&&e}}
é um pouco mais curto. Uma solução Ruby 1.8 (!) Que é ainda mais curta:p$*.permutation.find{|i|i.inject{|a,e|a&&a[-1]-32==e[0]&&e}}
-32
solução também é muito engenhosa, mas se baseia no fato de que os nomes começam com uma letra maiúscula e terminam com uma minúscula, o que nem sempre pode ser o caso.Python, 113
Muito parecido com a resposta de @ beary605 e ainda mais forçado.
fonte
Haskell ,
9474 bytesEncontra recursivamente todas as soluções. -7 bytes, se estiver correto, forneça todas as soluções em vez da primeira. Obrigado a @Lynn por se livrar da importação traquina, eliminando 18 bytes de pontuação!
Experimente online!
fonte
Data.Char
importação comlast b==[r!!0!!0..]!!32
. Além disso, você não precisa parens emg[x|x<-c,x/=b]
fromEnum
que seria uma obrigação. Engraçado, eu já tirei esses parênteses uma vez, mas devo ter copiado da guia errada ...GolfScript, 78 caracteres
Uma primeira versão no GolfScript. Ele também faz uma abordagem de força bruta. Você pode ver o script em execução na entrada de exemplo online .
fonte
Casca , 10 bytes
Experimente online!
Explicação
Como alternativa, 10 bytes
Também podemos contar o número de pares adjacentes que satisfazem o predicado (
#
), classificar em (Ö
) isso e pegar o último elemento (→
) para o mesmo número de bytes:Experimente online!
fonte
Geléia ,
2518 bytes (Melhoramentos bem-vindos!)Experimente online!
Obrigado a @Lynn pela maioria dessas melhorias!
Solução de 25 bytes:
Experimente online!
fonte
Ðf
que eu usoX
para escolher uma solução aleatória em vez do primeiro, masḢ
funciona tão bem.)Ðf
rapidamente em muitos dos meus outros programas para economizar espaço!Mathematica 236 caracteres
Defina a lista de cidades:
Encontre o caminho que inclui todas as cidades:
Resultado:
A abordagem acima pressupõe que as cidades podem ser organizadas como um gráfico de caminho.
O gráfico p é mostrado abaixo:
fonte
C, 225
Executar com nomes de países como argumentos da linha de comando
Nota:
fonte
#define L(x)for(int i=x;i<n;i++)
e não declarari
no início,main
salve 1 byte.J,
6965605954 caracteresUm pouco fora do ritmo.
Exemplo:
fonte
C #, 398
E aqui está C # com Linq 5 centavos
fonte
K, 96
.
fonte
C # (.NET Core) , 297 bytes
Experimente online!
fonte