fundo
Três anos atrás, esse cara, Tom Murphy, pensou em estender a idéia de um portmanteau a todas as palavras em um idioma e chamou isso de portmantout ( portmanteau plus tout [francês para todos ]). Definindo inglês como uma lista de 108.709 palavras, ele conseguiu encontrar uma sequência de 611.820 letras com as duas propriedades a seguir:
- Cada palavra em inglês está contida na string.
- Alguma vizinhança contendo duas letras adjacentes na sequência é uma palavra em inglês.
Aqui está um link para uma página na qual essa saída pode ser encontrada (junto com uma explicação em vídeo).
Um portmantout
A primeira das duas propriedades de um portmantout é fácil de entender. O segundo pode exigir alguma explicação.
Basicamente, as palavras devem se sobrepor. "golfcode" nunca aparecerá em um portmantout em inglês, pois não há nenhuma palavra que contenha o "fc". No entanto, você pode encontrar "codegolf" em um portmantout, pois "ego" preenche a lacuna (e todos os outros pares de letras estão em "code" ou "golf").
Sua tarefa:
Escreva um programa ou função que pegue uma lista de cadeias e retorne qualquer porta da lista.
Este código Python 3 verificará um portmantout.
Casos de teste
Todas as listas são desordenadas; isso é,
{"code", "ego", "golf"} -> "codegolf"
{"more", "elm", "maniac"} -> "morelmaniac" or "morelmorelmaniac" or "morelmorelmorelmaniac" or...
Would a morelmaniac be some sort of mycologist?
{"ab", "bc", "cd", "de", "ef", "fg", "gh", "hi", "ij", "jk", "kl", "lm", "mn", "no", "op", "pq", "qr", "rs", "st", "tu", "uv", "vw", "wx", "xy", "yz", "za"} -> "abcdefghijklmnopqrstuvwxyza" or "rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdef" or any 27+ letters in order
E porque não? O massivo no site de Murphy, se o seu código for executado dentro de um prazo razoável.
Regras
- Seu código deve parar.
- Você não precisa retornar o mesmo portmantout a cada execução.
- Você pode assumir todas as cadeias consistem em apenas letras minúsculas
a
atravész
. - Se nenhuma portmantout for possível, seu programa poderá fazer qualquer coisa. Ex:
{"most", "short", "lists"}
- Aplicam-se regras padrão para E / S e brechas .
Isso é código-golfe , então a solução mais curta (em bytes) em cada idioma vence! Feliz golfe!
{"sic", "bar", "rabbits", "cradle"} -> "barabbitsicradle"
{"mauve", "elated", "cast", "electric", "tame"} -> "mauvelectricastamelated"
(mais casos de teste)