El código más corto que encuentra todos los "sub-palíndromos" únicos de una cadena, es decir: cualquier subcadena con longitud> 1 que es un palíndromo.
eg.1
input: "12131331"
output: "33", "121", "131", "313", "1331"
eg.2
input: "3333"
output: "33", "333", "3333"
code-golf
string
palindrome
subsequence
Eelvex
fuente
fuente
333
ser? Ingenuamente terminarías imprimiendo33
dos vecesRespuestas:
J, 24
3140Uso de la muestra:
¡Toma eso, GolfScript!
fuente
/dev/random
para engañarnos ;-)~.(#~(1<#*]-:|.)&>),<\\.
(24 caracteres)?Python 124
fuente
Haskell 98, 88
9196fuente
Python -
138136Este código no duplica los sub-palíndromos.
fuente
'"'+t+'"'
at
para ahorrar algo de espacio, aunque utiliza comillas simples.Ruby -
12610297 caracteresfuente
Golfscript, 48 caracteres
subpalindrome.gs
Uso:
La primera operación
{,}{(;}/
convierte una cadena en una lista de subcadenas finales. Luego se asigna una transformación similar de subcadenas iniciales sobre el resultado. Luego aplanar con{+}*
, filtrar palíndromos usando el predicado.,1>\.-1%=*
, tomar valores únicos con.&
, luego imprimir bonito.Sería mejor extraer la transformación de las subcadenas finales como un bloque y reutilizarla como reemplazo de las subcadenas iniciales después de invertir cada subcadena posterior, pero no puedo encontrar una manera sucinta de hacerlo.
fuente
Haskell -
170, 153fuente
main=getLine>>=(\x->putStrLn$intercalate", "$toList$p x)
conmain=getLine>>=putStrLn.intercalate", ".toList.p
. También sustituiría una llamada ap
con su cuerpo.subsequences
! Su programa informa más subpalíndromes que la salida de referencia, por ejemplo 1. ("1111" por ejemplo)J, 48
p.ej
fuente
Prolog, 92
Uso de la muestra:
fuente
Windows PowerShell, 104
109111Esto espera la entrada en stdin y arrojará todos los palíndromos encontrados uno por línea en stdout:
(Cuando se ejecuta desde que
cmd
se convierteecho 12131331|powershell -file subp.ps1
, es solo que$input
tiene un significado ligeramente diferente dependiendo de cómo se llamó el script, pero puede ser estándar, solo que no de forma interactiva).30-01-2011 13:57 (111) - Primer intento.
2011-01-30 13:59 (109) - Declaración de variable en línea.
2011-06-02 13:18 (104) - Se rehizo el hallazgo de la subcadena uniéndose a una matriz de caracteres en lugar de llamar
.Substring()
e insertado un poco más.fuente
Q, 78
uso
fuente
Retina ,
3427 bytesPruébalo en línea!
El conjunto de pruebas necesita un
M
porque es seguido por otra etapa para insertar líneas vacías entre los casos de prueba.Explicación
Imprime (
!
) todas las@
coincidencias únicas ( ), superpuestas (&
) de la expresión regular(.)+.?(?<-1>\1)+(?(1)^)
. Esto coincide con un palíndromo de longitud 2 o más utilizando grupos de equilibrio. Hay una advertencia para la parte de "todas las coincidencias superpuestas": podemos obtener como máximo una coincidencia por posición inicial. Sin embargo, si dos palíndromos de diferente longitud comienzan en la misma posición, el palíndromo más corto aparecerá nuevamente al final del palíndromo más largo. Y dado que la codicia de las+
prioridades da lugar a partidos más largos, de todos modos estamos obteniendo palíndromos.fuente
05AB1E ,
1110 bytesPruébalo en línea!
fuente
1›
a≠
. :)Perl, 112
fuente
JavaScript (ES6), 120 bytes
Esta función toma una cadena como entrada y genera una matriz.
fuente
Clojure, 81 bytes
for
era una combinación perfecta aquí :) Podría usarse:when(=(reverse p)p)
si la entrada fuera una lista de caracteres O una cadena completa no cuenta como un palíndromo, en ese caso, el rango máximo dei
podría ser(count %)
también.El estuche más compacto para referencia:
fuente
Python, 83
102caracteresLa frase
(t[1:]or())and...
es equivalente a(...)if t[1:]else()
y guarda un personaje! Estoy demasiado orgulloso de esto, dados los ahorros.Ejemplo:
fuente
Scala 127
Para mantener esta comparación de manzanas con manzanas con la otra respuesta de Scala, también hice del mío un objeto que extiende la aplicación. En lugar de iterar la cadena de entrada manualmente y usar la subcadena, aproveché el desplazamiento () para crear una secuencia de todas las subcadenas para mí.
fuente
Scala 156
170fuente
Perl 6 ,
3532 bytesPruébalo
Pruébalo
Expandido:
fuente
Coco , 69 bytes
Pruébalo en línea!
Python 2 , 73 bytes
Pruébalo en línea!
fuente
Jalea , 9 bytes
Pruébalo en línea!
fuente
APL (Dyalog Classic) , 27 bytes
Pruébalo en línea!
fuente
∪w/⍨≡∘⌽¨⍨w←⊃,/1↓(⍳∘≢,/¨⊂)
es válido.Japt , 14 bytes
Pruébalo en línea!
Explicación:
fuente
PowerShell , 99 bytes
Pruébalo en línea!
Menos golfizado:
fuente
Brachylog , 11 bytes
Pruébalo en línea!
(El encabezado en el enlace está roto en el momento de la publicación, así que aquí está el predicado (equivalente de función en Brachylog) solo en el primer caso de prueba, con un
w
al final para imprimir realmente el resultado).Siento que hay una forma más corta de verificar que la longitud es mayor que 1. (Si no filtrara los palíndromos triviales, simplemente sería
{s.↔}ᵘ
).fuente
APL (NARS), 65 caracteres, 130 bytes
prueba:
Alguien sabe mejor por qué, y puede explicar esto mejor, sin cambiar todo esto ... No estoy tan seguro de este código, posible si los ejemplos de prueba son más numerosos, algo saldrá mal ...
fuente
Japt , 9 bytes
Intentalo
fuente
Java 8,
202201199 bytesPruébalo aquí
Si una función no está permitida y se requiere un programa completo, son
256255253 bytes en su lugar:Pruébalo aquí
Explicación:
fuente
JavaScript (ES6), 107 bytes
Devuelve un conjunto .
Casos de prueba
Mostrar fragmento de código
fuente