(Primer desafío, avíseme si tiene algún problema).
Un heterograma es una palabra donde ninguna letra del alfabeto aparece más de una vez, y un palíndromo es una frase que es igual hacia atrás y hacia adelante.
El desafío aquí es escribir un fragmento de código que tome una palabra (solo letras) como entrada y genere si es o no un heterograma (verdad / falsedad). El problema es que el programa debe ser un palíndromo: lee lo mismo hacia atrás y hacia adelante. La capitalización no importa aquí, por lo que, para que el heterograma sea válido, no puede tener tanto q como Q, por ejemplo. No se permiten comentarios y no puede colocar cadenas que contengan su código (o una parte importante de su código) para intentar facilitar la parte del palíndromo: P
Este es el código de golf, por lo que gana el código más corto. ¡Buena suerte!
EDITAR: Parens, corchetes u otros símbolos que tienen formas izquierda y derecha deben invertirse apropiadamente para la parte del palíndromo. Entonces (helloolleh) es un palíndromo, pero (helloolleh (no lo es. Aparentemente esto se llama un palíndromo conveniente).
EDIT 2: no obtendrá ninguna entrada vacía, entrada con varias palabras o entrada con caracteres que no sean letras. Así que no te preocupes por eso :)
fuente
(hellolleh)
un palíndromo válido? Similar para[]
,{}
y<>
(cuando corresponda).asdsa
considerará igual aasd\nsa
?Respuestas:
Pyth - 11 bytes
(Espacios finales y principales necesarios y contados).
Test Suite .
fuente
Pyth, 17 bytes
Pruébelo en línea aquí.
El espacio principal es necesario. Lo he contado y el espacio final en el recuento de bytes.
Aquí está el desglose:
fuente
.q
en tus comentarios, pero un.w
en tu programa.Pitón 3, 125
El principal problema es hacer que el reverso del código sea analizable. Entonces podemos dejar que salga de los identificadores indefinidos.
fuente
<
a>
!Perl, 43 bytes
Ejemplo de uso:
fuente
> <> ,
137131 BytesCuando vi este desafío, pensé que> <> finalmente podría ser una buena opción de lenguaje, ya que al usarlo puedes ignorar los palíndromos; es sencillo asegurarse de que el puntero solo permanezca donde debería. Si bien esto es cierto,> <> desafortunadamente hace que los condicionales de golf sean insoportables (o simplemente el golf en general). Espero usar algunos trucos extraños que pensé para compensar esto, pero aquí hay una respuesta "rápida" (no en realidad, tanto en lo que respecta al programa como a la creación). Puedes probarlo en línea aquí .
Devuelve 1 para verdadero y -1 para falso (podría cambiarlo a 0 pero la longitud se mantendría igual, desafortunadamente)
Como siempre, avíseme si esto no funciona y si tiene alguna idea sobre cómo jugar golf. Lo probé en algunos casos de prueba, pero siempre podría haber una excepción.
Aquí hay otra versión, una que creo que es un poco más inteligente, pero lamentablemente es diez bytes más. Los valores de verdad / falsey esta vez son 1 y un error (
something smells fishy...
):Explicación:
Aquí está el código sin la parte agregada para convertirlo en un palíndromo. Este no usa los trucos "más inteligentes" que intenté usar para la versión alternativa, por lo que es un poco más fácil de explicar (si alguien está interesado en una explicación de los "trucos", me encantaría dar uno , aunque).
Línea 1:
Así es como funciona el intercambio enrevesado (
:{:@=?v$
): utilizaré un caso de prueba de esta pila:[5,1,8,1]
donde el último carácter es el superior.:{
La parte superior de la pila se duplica:[5,1,8,1,1]
y la pila se desplaza hacia la izquierda:[1,8,1,1,5]
:@
La parte superior se duplica:[1,8,1,1,5,5]
luego, los tres valores superiores se desplazan a la derecha:[1,8,1,5,1,5]
=?v
Innecesario para esta parte de explicación$
El valor superior se intercambia una vez más[1,8,1,5]
, lo que, si observará, es la pila original desplazada una vez (como si{
hubiera sido el único comando).Entonces, lo que esto hace en inglés ("Gracias a Dios, en realidad está explicando las cosas") es verificar toda la pila con el valor superior y pasar a un punto en la segunda línea si algún valor es igual al superior. Esta comprobación se realiza de forma proporcional a la cantidad de valores que hay en la pila (
l - 1
dondel
está la longitud de la pila) para que todos los valores se verifiquen entre sí.Línea 2:
fuente
><>
es un palíndromo en sí mismo (simplemente no es conveniente)PHP, 126 bytes
Debe ejecutar esto con la
short_tags
directiva ini desactivada en 5.4 o superior.Primer campo de golf. Dos copias, la primera imprime un montón de basura con el resultado falso / verdadero:
Esta versión no imprimirá ninguna jerga (162 bytes):
Ejecutar desde la línea de comando con
Probablemente se pueda jugar un poco más.
fuente
?><?
, puedes usar//\\
. Eso debería eliminar ese requisito. Y en lugar de__halt_compiler()
usarreturn;
return;
sigue siendo válido.05AB1E, 9 bytes
Pruébalo en línea.
* inserte algo acerca de regresar a mi primer desafío *
No compitiendo desde 05AB1E se hizo después de este desafío.
Explicación
fuente
Brachylog , 3 bytes, desafío de fechas posteriores al idioma
Pruébalo en línea!
Este es uno de los pocos programas que funciona tanto en Brachylog 1 como en Brachylog 2. El enlace TIO es Brachylog 1 por los viejos tiempos. También inusualmente para Brachylog, este es un programa completo, no una función. (Los programas completos en Brachylog generan implícitamente booleanos, que es justo lo que queremos para esta pregunta).
El principio general aquí es que colocar un predicado entre un par de letras mayúsculas idénticas es una afirmación de que el valor actual es invariante bajo ese predicado. Entonces, a menudo se ven cosas como
AoA
"está ordenado" ("invariante bajo clasificación");A↔A
(en Brachylog 2) significa "es un palíndromo" ("invariante bajo inversión"), y así sucesivamente. Este programa es "invariable al eliminar duplicados", es decir, "no contiene duplicados". Es realmente conveniente que este método para especificar la invariancia sea un palíndromo.fuente
Brachylog , 3 bytes
Pruébalo en línea!
El predicado tiene éxito si la entrada es un heterograma y falla si no lo es.
fuente
MATL , 7 bytes
Pruébalo en línea!
Devuelve la lista [1, 1] si la entrada es un heterograma y [0, 0] si no.
Explicación:
fuente