Un palíndromo es una cadena que se escribe de la misma manera, tanto hacia atrás como hacia adelante. Por ejemplo, 'Eva, ¿puedo apuñalar a los murciélagos en una cueva?' es un palíndromo (EVACANISTAB | BATSINACAVE)
Para este código de golf, utilizando el idioma de su elección, determine si una cadena dada es un palíndromo o no.
Casos de borde:
- La puntuación no se cuenta para palindrominess.
- Los caracteres de control no se cuentan para palindrominess.
- El espacio en blanco no se cuenta para palindrominess.
- Los números se cuentan para palindrominess.
- El caso en este desafío no se cuenta para palindrominess.
- No hay límite para la longitud de las cadenas a evaluar, excepto por lo que impone su idioma de elección.
- Para este desafío, limítese al conjunto de caracteres ASCII.
Requerimientos técnicos:
- Solo se necesitan cuerpos de método; cosas adicionales como firmas de métodos, declaraciones de estructura de datos, etc. no cuentan para el requisito de victoria.
- El código debe compilarse o interpretarse sin errores o excepciones en tiempo de compilación.
- El código no debe arrojar excepciones o bloqueos no manejados. (Casi no hace falta decirlo. Casi.)
- El código debe devolver algún valor que indique palindrominess. El tipo de datos depende del idioma que use (por ejemplo, un usuario de C # podría usar a
bool
, mientras que un usuario de JavaScript podría usar avar
). - No puede escribir su propio intérprete que realice esta tarea como una capacidad 'nativa' para que pueda 'jugar' un puntaje casi ganador. (Ojalá no sea necesario decirlo).
Condición de victoria:
- El código más corto en caracteres gana.
Líder actual: tmartin (k, 25 caracteres)
... ¿Quieres la marca de verificación verde mágica de tu respuesta? Batir la respuesta de este chico!
code-golf
palindrome
decision-problem
Andrew Gray
fuente
fuente
Respuestas:
K, 25
.
fuente
{x~(|)x:(_)x inter(,/).Q`a`A`n}
{#|:\_x@&x in,/.Q`a`A`n}
, donde 1 es verdadero y 2 es falsoPerl, 26 char
Evalúa a 1 cuando
$_
es un palíndromo""
(uno de los valores falsos de Perl) cuando no lo es.Uso de la muestra:
salida:
fuente
_
cadena, ¿verdad? Y no requiere ninguna entrada, así que ¿no necesitarás usar la-p
opción?\W
en expresiones regulares excluye guiones bajos. Me temo que necesitarás[^a-z\d]
en tu expresión regular. Me temo que de todos modos me golpean._|\W
lugar de[_\W]
._|\W
a\Pl
: ideone.com/0ufdaQ . Deberían ser solo las letras Unicode.\Pl
no coincidiría con los dígitos, así que supongo que_|\W
es lo mejor que puedes hacer.C # 82 solamente :)
No pude resistir la tentación de escribir un programa sin repeticiones en mi idioma favorito.
Una prueba está disponible aquí: http://ideone.com/8bwz7z
fuente
GolfScript,
36 34 3130 caracteresAlgoritmo similar a mi solución anterior (Javascript) .
0"0:A[a{"@{>^}+/
- Optimizado por Peter Taylor y Howard. Mi versión era"/9@Z"{1$<},,2%\;
. Howard donó la concatenación de funciones y Peter Taylor donó XOR para el módulo-2. Básicamente es un método genérico para comparar si el valor está en una secuencia de rangos.{.96>32*-}%
(11 caracteres) no es realmente una mejora con respecto a Javascript.toUpperCase()
(14 caracteres), especialmente porque altera algunas puntuaciones extrañas que siguenz
en la tabla ASCII (que no importa aquí).Sin embargo, como sugirió Peter Taylor, si primero filtramos los caracteres alfanuméricos, podemos convertirlos a minúsculas y dígitos simplemente configurando un bit en cada carácter:
{32|}
.-1%=
realiza todo el trabajo pesado palindrómico. Una parte que no me gusta mucho es cuánto tiempo me llevó descubrir cómo invertir una matriz. Debería haber leído los documentos. Los otros dos personajes realizan la gestión de la pila y la comparación.Prueba: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7IjA6QVtheyJcez59KywsMiV9LHszMnx9JS4tMSU9
Además, si puedo suponer que ninguno de los siguientes caracteres de control están presentes: (escape de enlace de datos, control de dispositivo 1-4, reconocimiento negativo, inactividad síncrona, final del bloque de transmisión, cancelar, final del medio) (todos estamos de acuerdo en que estos son todo bastante oscuro) o si puedo tratarlos como versiones en mayúscula de los dígitos 0-9, podemos guardar otros dos caracteres:
GolfScript, 28 caracteres
Prueba: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7MzJ8fSV7MCIwOmF7IkB7Pl59Ky99LC4tMSU9
fuente
{"0:A["\{>}+,,2%},
+
en los bloques. Ese es un truco genial.a{
a la lista de caracteres del filtro para incluir las letras minúsculas, pero luego puede usar mayúsculas con solo{32|}%
. El resultado final es{"0:A[a{"\{>}+,,2%},{32|}%.-1%=
0"0:A[a{"@{>^}+/
hace el trabajo.Javascript, 53 caracteres:
es una expresión javascript que se evalúa como verdadera si
x
es un palíndromo, y como falsa si no lo es. Se supone quex
es una cadena. Si eso no está garantizado, antepongax+="",
Aquí hay una ruta de navegación: debido a cómo
reverse()
funciona,falla Sin embargo,
Está perfectamente bien.
fuente
+""
convierte en una cadena, se+
convierte en un número|0
y se~~
convierte en un número entero, se!!
convierte en un booleano./[^\W_]/g
R: 66
Uso:
fuente
Golpe:
524846 caracteresEsto toma la picadura para verificar como primer parámetro y establece el código de salida en 0 para palíndromo y 1 para no.
Ejecución de muestra:
fuente
Python 2: 49 (sin contar la firma del método)
Un programa completo, con entrada y salida se puede escribir en 74 caracteres.
Ejemplo de uso:
(
huge_palindrome.txt
contiene este palindrome de 17,826 palabras)Esta solución se puede adaptar a Python 3 agregando algunos caracteres:
Pitón 3: 55
fuente
sys.stdin.read
es básicamente lo mismo queraw_input
s
variable. Decidí proporcionar la definición completa pero, como era habitual en 2013, no incluir la firma del método en la duraciónJAVA (o el lenguaje más detallado de todos)
1029695 charUso (con código sin golf):
Acortado con la ayuda del comentarista a continuación
fuente
if(s==null) return 1==0;
:? ¿O Java impone curlies en lasif
declaraciones?null
un buen hábito, pero no se practica en CodeGolf. Como puedo ver, nadie más lo hizo en esta pregunta. Saltarlo. 2) El espacio entre argumentos ayuda a la legibilidad, pero no al golf. Eliminarlo; 3) En lugar de explícitamente,toLowerCase()
la cadena se usaequalsIgnoreCase()
más tarde en lugar deequals()
. De esta manera, debe ajustar la expresión regular, pero aún 1 carácter más corto. pastebin.com/s7H84fajreplaceAll("[^A-Za-z0-9]","")
=>replaceAll("\\W","")
replaceAll("\\W|_","");
para eliminar_
también => 95 caracteresMathematica
5453Un byte guardado gracias a CatsAreFluffy:
Para aquellos con la versión 10.2 o anterior:
Ejemplo
fuente
PalindromeQ
es 1 byte más corto que#==Reverse@#&
PalindromeQ= #==Reverse@#&
J, 30 caracteres
Uso:
fuente
k (
50 48 4538 caracteres)Suprime todos los errores, devolviendo un valor predeterminado de
0b
(falso).Ejemplo:
editar: afeitó tres caracteres más evitando la variable intermedia. H / T, CS. -7: No es necesario suprimir errores.
fuente
Ruby:
4338 caracteresEjecución de muestra:
fuente
s.tr!('^A-Za-z0-9','').upcase!.reverse==s
!
métodos! Sigues asombrándome con tus trucos.tr
ytr!
parece comportarse de manera diferente cuando no tienen nada que transcribir: pastebin.com/4YThW2qN Eso hace que lap['757']
prueba se bloquee con "NoMethodError: método indefinido 'upcase!' for nil: NilClass ”error.s=s.upcase.tr('^A-Z0-9','');s==s.reverse
C ++,
107(mal contado),100(contado incorrectamente), 81using namespace std;
.Usos
int
porque es más corto quechar
oauto
.fuente
Lua, 56
fuente
%W
es algo así como\W
en regex, también excluye caracteres como guiones bajos. Esto no es deseado.%w
no incluye_
(%W
obviamente lo incluye, entonces)s=s:lower():gsub('%W','')return s:reverse()==s
46 caracteresfunction(s)
Python 3/2 59 caracteres:
fuente
Haskell, 43
El uso de las bibliotecas estándar
Control.Monad
,Control.Monad.Instances
yData.Char
:fuente
import Data.Char
import Control.Monad
ap(==)reverse.map toLower.filter isAlphaNum
tampoco lo hace con la adición de espacios o algo así, lo siento, no estoy demasiado interesado en Haskell :)Control.Monad.Instances
. (Estoy usando la instancia de mónada Reader conap
, pero esa instancia no se exportaControl.Monad
).PHP 60 caracteres.
Primero prueba Codegolf.
Ejemplo:
fuente
echo($x=preg_replace('/\W/','',strtolower($c)))==strrev($x);
.Python 2 64 Charecters:
fuente
77
versión de caracteres. Sin embargo, no tengo idea de por qué abhiram publicó la versión sin golf.re.findall('[a-z0-9]+',input.lower())
caracteres de la parte 3 sean más cortos.Haskell 48
usado así:
fuente
Charla , Squeak / Pharo sabor
116 caracteres con formato tradicional con pestañas
Agrega dos métodos a String:
Por supuesto, podríamos eliminar algunos espacios, o usar nombres de métodos más cortos, pero no traicionemos el espíritu de Smalltalk.
Además, esto manejará los palíndromos franceses, como en http://fr.wikipedia.org/wiki/Liste_de_palindromes_fran%C3%A7ais , no hay muchas respuestas en esta página.
fuente
Python 3 (51 caracteres)
y puede ser Python 2
basado en la solución abhiram (con golf más agresivo)
se puede acortar a 46 caracteres, usando RE '\ w'
y variante con cuerpo de función extremadamente acortado (27 caracteres)
fuente
Windows PowerShell,
564745 caracteresActualizado (ver comentarios), y puede eliminar los corchetes alrededor de la expresión regular:
Original (56)
Original sin golf:
fuente
($s=$s-replace'[\W]')-eq(-join$s[$s.length..0])
($s=$s-replace'\W')-eq-join$s[$s.length..0]
.C ++, 74 bytes
Este código es realmente elegante y fácil de entender (cuando está formateado correctamente). No creo que sea posible acortar más en C ++, y no utiliza ninguna función de biblioteca estándar.
Ejemplo de uso:
Versión bien formateada:
fuente
error: ISO C++ forbids declaration of ‘p’ with no type
Su función debe tener un tipo de retorno.while(*++e);
lugar dewhile(*e)++e;
. Pero como Titus mencionó, esta respuesta no es válida.PHP,
26 84 80 78 6263 bytestoma la entrada del primer argumento de línea de comando; impresiones
1
para la verdad, cadena vacía para la falsedad.I18n es un poco expansivo, ya que no hay una alternativa multibyte para
strrev
(110 bytes; ejecutar con-r
):utf8_strrev robado descaradamente del manual de PHP . También es posible que desee echar un vistazo a esta publicación de blog .
fuente
-R
causaría problemas con los saltos de línea en la cadena para probar, ¿no? Desde la especificación "-R <code> Ejecute PHP <code> para cada línea de entrada". Además<?=strrev($s=strtolower(preg_replace("#\W#","",$argn)))==$s;
sería más corto.$argn
sin-R
.$argv[1]="O Genie, der Herr ehre dein Ego!"; # :D
Rubí, 48
Bastante simple y apresuradamente hecho para no jugar demasiado al golf. Lo jugaré más tarde.
fuente
Pylongolf2 , 24 bytes
c
toma la entrada,╨2
para convertir a minúsculas.Luego presiono una expresión regular en la pila y la uso
-
para eliminar todos los caracteres no alfabéticos en la entrada._
duplica la entrada╨1
lo revierte y=
luego los compara.~
imprime la pila al final que imprimetrue
ofalse
.fuente
PowerShell,
194190 bytesUna implementación recursiva para mostrar cómo un bloque de script PowerShell sin nombre puede llamarse a sí mismo.
sin golf:
pruebas:
fuente
[^a-z0-9]
?05AB1E , 4 bytes (no competitivos)
No competitiva , ya que el lenguaje es posterior al desafío. Código:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
Gelatina, 10 personajes (no competitivos)
Devuelve 1 si es verdadero, 0 si es falso
Pruébalo en línea!
fuente
fØBŒlŒḂ
:f
filtro para mantenerØB
el conjunto [a-zA-Z0-9] yŒl
convertir a minúsculas, y luegoŒḂ
prueba si palíndromo.