Semordnilaps (também conhecidos como heteropalindromes, semi-palindromes, semi-palindromes, reversgrams, miroretehs, anagramas reversíveis, reversões de palavras ou anadromos) são palavras que também são palavras quando escritas para trás. Alguns exemplos são:
- Ward <=> Draw
- Minerado <=> Denim
- Peças <=> Correia
Dado um número inteiro positivo N (via argumento da função ou STDIN), retorne / produza uma lista de semordnilaps dessa lista de palavras em inglês , que possuem exatamente N letras. A lista de palavras podem ser salvos localmente em seu computador como um arquivo de texto chamado: w.txt
. Você também pode obter a lista a partir do URL, mas ela será incluída na contagem de bytes.
Regras:
- Palindromes não são semordnilaps! Portanto, as palavras "meio-dia", "rotor" e "radar" não devem ser incluídas na lista.
- Somente uma das palavras (em um par semordnilap) deve ser incluída na lista. Portanto, se "cachorro" estiver na lista, "deus" não deve estar (não importa qual deles está incluído).
- Se não houver semordnilaps, a saída deve ser uma sequência vazia, 0, FALSE ou outra coisa indicando que não houve resultados. A função deve funcionar mesmo se não houver resultados.
Este é um código de golfe, portanto o código mais curto em bytes vence!
Entre os melhores
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Emordnilap
e o pluralSemordnilap
? ;)Respostas:
Pitão , 23 (código 18, 5 STDIN necessário)
Esta é uma solução bastante direta.
J
armazena a lista de palavras. Em seguida, filtramos a lista de palavras (f J
) no comprimento da palavra sendo a entrada (qlTQ
), a palavra invertida na lista (}_TJ
) e a inversão da palavra sendo maior que a palavra (>_TT
). A última condição garante queT
não seja palindrômica e que apenas um dos pares seja impresso. A lista resultante é impressa.Como o Pyth funciona, a única maneira de abrir um arquivo é receber seu nome no STDIN. É por isso que contei 5 dos bytes STDIN,,
w.txt
na minha pontuação.Exemplo de execução:
fonte
Ruby, 74 bytes
Repete a lista removendo elementos, o que evita os palíndromos e gera os itens "estressados" e "sobremesas". Usando o mesmo nome de variável para a função e o iterador contorna uma peculiaridade de sintaxe Ruby: mesmo que já tenha
f=i.pop
sido avaliada antesf.reverse
, a linha não será analisada, a menos quef
já signifique alguma coisa. Eu também poderia usarp
.fonte
bash
134157118 bytesf () { comm -12 <(sort w.txt) <(rev w.txt|sort)|while read w; do ((${#w}==$1))&&[[ $w<$(rev<<<$w) ]]&&echo $w; done; }
Esta não é uma entrada séria, mas em resposta à resposta de Brian Bash . É assim que costumo pensar em programar esse tipo de coisa no Bash - usando o próprio Bash o mínimo possível e deixando as ferramentas internas fazer todo o trabalho.
fonte
&&[[ $w > $(rev<<<$w) ]]&& echo $w
ainda evitasort|tail -1
. Com isso, acho que você pode até soltar a classificação final e a única, porque remove palíndromos e gera apenas uma das palavras.<(sort w.txt)
tudo bem.Python,
126125120 bytesSolução bastante simples.
fonte
k=c[::-1]
. Além disso, você não poderia ligarset()
apenas pela segunda vez? Eu não acho que haja repetições no arquivo?k
(9 para definição mais 1 para nova linha mais 1 para espaço), mas eu só salvaria 10 caracteres (removi[::-1]
para 6, mas adicionei 1 porque, então, preciso de um espaço). Sobre oset
, eu precisoJ
ser um conjunto, porque removo as palavras usadas para satisfazer a regra dos não-dupeN==len(c)and
economizar espaço.=
e deveria ser==
.CJam,
4847454238 bytesComo o URL precisa ser contado, estou usando o mesmo encurtador de URL que o Optimizer.
o
§
parte do ASCII estendido, para que cada caractere no código possa ser codificado em um único byte.Como no caso do Optimizer, você precisará usar o interpretador Java e executá-lo localmente a partir de um arquivo, digamos
semordnilap.cjam
, e depoisportanto, a entrada é fornecida como um argumento da linha de comandos.
Como funciona (um pouco desatualizado):
A sequência resultante é impressa automaticamente no final do programa.
fonte
Java,
280218 bytesComparado com o resto da competição, não faço a menor idéia se essa é uma boa pontuação.
Expandido:
Usa compareTo () para ignorar simultaneamente palíndromos e duplicatas.
fonte
Files.readAllLines(Paths.get("w.txt"))
antes. Esse é um truque útil.CJam, 68 bytes
Você precisará fazer o download da versão Java do compilador a partir daqui e salvar o código acima em um arquivo chamado words.cjam (pode ser qualquer nome). Em seguida, execute o código como
Por exemplo, para
N = 8
,fonte
Node.js, 172 bytes
Função:
Teste:
fonte
K, 59 bytes
Bem direto. Leia a lista, construa a lista reversa, faça sua interseção, filtre os palíndromos, filtre a contagem necessária, classifique e desduplice os pares.
fonte
Ruby, 95 bytes
Explicação
Integer
.String
(a
).Array
em todas as palavras (sem novas linhas).a
.Array
l
.l
.Um vazio
Array
é retornado quando nenhuma palavra qualificada foi encontrada.fonte
Node.js, CoffeeScript, 132 bytes
Node.js, 162 bytes
Console de ferramentas de desenvolvimento do Chrome, 111 bytes (na página de download)
Todas as versões retornam uma matriz de todos os Semordnilaps de comprimento
n
.Node.js, 162 bytes
Imprime todos os semordnilaps:
fonte
Julia, 101 bytes
Isso realmente deve funcionar ...
fonte
Mathematica, 105 bytes
Às vezes, o Import divide automaticamente o texto em uma lista de linhas ou o trata como CSV ou TSV. Em outros momentos, o Import lerá o conteúdo do arquivo em uma string. A importação fez o último para os dados de teste.
fonte
BATER
testes ...
fonte