Semordnilaps (también conocidos como heteropalíndromos, semi-palíndromos, semi-palíndromos, reversgramas, mynoretehs, anagramas reversibles, reversiones de palabras o anádromos) son palabras que también son palabras cuando se escriben al revés. Algunos ejemplos son:
- Ward <=> Draw
- Denim minado <=>
- Piezas <=> Correa
Dado un número entero positivo N (a través del argumento de función o STDIN), devuelve / genera una lista de semordnilaps de esta lista de palabras en inglés , que tienen exactamente N letras. La lista de palabras se puede guardar de forma local en el ordenador como un archivo de texto llamado: w.txt
. También puede obtener la lista de la url, pero se incluirá en el recuento de bytes.
Reglas:
- Palindromes no son semordnilaps! Por lo tanto, las palabras "mediodía", "rotor" y "radar" no deben incluirse en la lista.
- Solo se debe incluir en la lista una de las palabras (en un par de semordnilap). Por lo tanto, si "perro" está en la lista, "dios" no debería estar (no importa cuál esté incluido).
- Si no hay semordnilaps, la salida debe ser una cadena vacía, 0, FALSE u otra cosa que indique que no hubo resultados. La función debe funcionar incluso si no hay resultados.
Este es el código de golf, por lo que gana el código más corto en bytes.
Tabla de clasificación
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Emordnilap
y el plural serSemordnilap
? ;)Respuestas:
Pyth , 23 (18 códigos, 5 STDIN necesarios)
Esta es una solución bastante sencilla.
J
almacena la lista de palabras. Luego filtramos sobre la lista de palabras (f J
) en la longitud de la palabra que es la entrada (qlTQ
), la palabra invertida está en la lista (}_TJ
), y la inversión de la palabra es mayor que la palabra (>_TT
). La última condición aseguraT
que no sea palindrómico y que solo se imprima uno de los pares. Se imprime la lista resultante.De la forma en que funciona Pyth, la única forma de abrir un archivo es recibir su nombre en STDIN. Es por eso que he contado 5 de los bytes STDIN,,
w.txt
en mi puntaje.Ejemplo de ejecución:
fuente
Ruby, 74 bytes
Itera la lista eliminando elementos, lo que evita los palíndromos y genera "estresados" y "postres". Usando el mismo nombre de variable para la función y el iterador evita una peculiaridad de sintaxis de Ruby: aunque
f=i.pop
se evalúa antesf.reverse
, la línea no se analizará a menos quef
ya signifique algo. Yo también podría usarp
.fuente
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 no es una entrada seria, sino más bien en respuesta a la respuesta de Brian's Bash . Así es como tiendo a pensar en programar este tipo de cosas en Bash: utilizando Bash en sí mismo por el menor tiempo posible y dejando que las herramientas integradas hagan todo el trabajo.
fuente
&&[[ $w > $(rev<<<$w) ]]&& echo $w
aún lo evitasort|tail -1
. Con eso, creo que incluso puedes soltar el tipo final y único, porque elimina los palíndromos y solo genera una de las palabras.<(sort w.txt)
está bien.Python,
126125120 bytesSolución bastante sencilla.
fuente
k=c[::-1]
. Además, ¿no podrías llamarset()
solo la segunda vez? ¿No creo que haya repeticiones en el archivo?k
(9 para la definición más 1 para la nueva línea más 1 para el espacio), pero solo ahorraría 10 caracteres (saque[::-1]
para 6 pero agregue 1 porque luego necesito un espacio). Sobre elset
, necesitoJ
ser un conjunto porque elimino las palabras usadas para satisfacer la regla de no engañarN==len(c)and
ahorra un espacio.=
y deberías serlo==
.CJam,
4847454238 bytesComo se debe contar la URL, estoy usando el mismo acortador de URL que Optimizer.
Forma
§
parte de ASCII extendido, por lo que cada carácter del código puede codificarse en un solo byte.Como en el caso de Optimizer, tendrá que usar el intérprete de Java y ejecutarlo localmente desde un archivo, digamos
semordnilap.cjam
, y luegoentonces la entrada se da como un argumento de línea de comando.
Cómo funciona (un poco desactualizado):
La cadena resultante se imprime automáticamente al final del programa.
fuente
Java,
280218 bytesEn comparación con el resto de la competencia, no tengo ni idea de si es un buen puntaje.
Expandido:
Utiliza compareTo () para ignorar simultáneamente palíndromos y duplicados.
fuente
Files.readAllLines(Paths.get("w.txt"))
antes. Ese es un truco útil.CJam, 68 bytes
Deberá descargar la versión Java del compilador desde aquí y guardar el código anterior en un archivo llamado words.cjam (puede ser cualquier nombre). Luego ejecuta el código como
Por ejemplo, para
N = 8
,fuente
Nodo.js, 172 bytes
Función:
Pruebas:
fuente
K, 59 bytes
Muy claro. Lea la lista, construya la lista inversa, tome su intersección, filtre los palíndromos, filtre el recuento requerido, ordene y deduzca los pares.
fuente
Ruby, 95 bytes
Explicación
Integer
.String
(a
).Array
Pase por una de todas las palabras (sin líneas nuevas).a
.Array
l
.l
.Se
Array
devuelve un vacío cuando no se encontraron palabras calificadas.fuente
Node.js, CoffeeScript, 132 bytes
Nodo.js, 162 bytes
Chrome Dev Tools Console, 111 Bytes (en la página de descarga)
Todas las versiones devuelven una matriz de todas las Semordnilaps de longitud
n
.Nodo.js, 162 bytes
Imprime todos los semordnilaps:
fuente
Julia, 101 bytes
Esto debería funcionar ...
fuente
Mathematica, 105 bytes
A veces, Importar dividirá automáticamente el texto en una lista de líneas o lo tratará como CSV o TSV. En otras ocasiones, Import leerá el contenido del archivo en una cadena. Import hizo lo último para los datos de prueba.
fuente
GOLPETAZO
pruebas ...
fuente