Tu tarea es simple. El programa lee en una línea de texto desde la entrada estándar, e imprime el mismo texto en forma de caracteres invertidos. No está permitido imprimir nada más.
Por ejemplo:
entrada: "¡Hola!", salida: "! olleH"
¡El problema es que su programa debe ser capaz de hacer exactamente lo mismo si el código fuente en sí está invertido!
Puntaje: se aplica el puntaje estándar de código de golf, con la siguiente modificación para limitar el aburrimiento
//margorp
program//
respuestas de estilo: cualquier solución que sea un palíndromo incurrirá en una penalización de + 25% a la puntuación, redondeada. Esta penalización aún se aplica si, por ejemplo, inserta caracteres en el programa que no tienen ningún efecto útil, solo para romper el palíndromo.
-1%#%1-/1
o-1%#%(0
?Respuestas:
APL, 5
Esto invierte (a lo
⌽
largo del último eje) la entrada (⍞
), y es seguido por un comentario (⍝
marca un comentario de línea). Invertido, el programa invierte (a lo⊖
largo del primer eje) la entrada y le sigue un comentario. Debido a que la entrada siempre será unidimensional, en este caso⌽
y⊖
funcionalmente equivalentes. Quizás sea aún más astuto que la solución GolfScript, así que aquí hay una solución más limpia (sin comentarios), que obtiene un puntaje de 9 .Esto primero toma un vector vacío (
⍬
), lo aplana (monádico,
) y lo invierte (a lo⊖
largo del primer eje). Esto todavía deja un vector vacío. Luego se concatena (diádico,
) a la entrada (⍞
), dejando la entrada intacta. Luego aplana (monádico,
) la entrada ya plana y la invierte (a lo⌽
largo del último eje). Luego concatena (diádico,
) otro vector vacío (⍬
) a la entrada invertida. Esto no hace nada y deja atrás la entrada invertida. Invertido, este programa hace lo mismo, basado nuevamente en el hecho de que⌽
y⊖
son funcionalmente equivalentes con argumentos unidimensionales.Realmente no podría decir que estoy agregando caracteres inútiles para romper el palíndromo (las dos funciones inversas diferentes son diferentes con una entrada de dos o más dimensiones; solo estoy aprovechando el hecho de que actúan igual con uno- entrada dimensional)
fuente
Unix shell - 8 + 25% = 10
La respuesta anterior de
cat|tac
no funcionó realmente,tac
invierte el orden de las líneas, no el orden de los caracteres en una línea.fuente
Haskell, 53
Técnicamente no es un palíndromo, pero, dado que el orden de declaración de funciones no importa, una vez invertido, tiene exactamente el mismo programa.
fuente
main=niam
declaración a la mitad y obtienes un palíndromo.Rubí, 37
Invertido:
fuente
Tcl, 78
No es un palíndromo.
fuente
exit
a#
(el # es un parámetro, no el comienzo de un comentario).\#
en la siguiente línea se ejecutará#
(no se inicia el comentario porque escapó) que es lo nuevoexit
.gs2, 2
(Sí, este lenguaje se creó antes del desafío. No, no es una broma ni una escapatoria. El espacio ASCII (0x20
) es inverso ).EDITAR: aw, hombre, esta pregunta es súper vieja? Si tan solo me hubiera comprometido antes. : <Sin embargo, dejaré esta respuesta solo porque es demasiado buena para dejarla pasar.
fuente
Golfscript, 9 (7 * 1.25 = 8.75)
sucio, sucio, sucio, pero extremadamente corto.
-1%
significa "seleccionar cada elemento (carácter), hacia atrás" y#
significa "comentario de línea". El resto es solo un poco de la magia de E / S de GolfScript.Esta es la solución "limpia" (sin comentarios) más corta que he encontrado ( 14 * 1.25 = 17.5 ):
lo que significa: empujar una cadena vacía, soltarla, invertir la entrada, clonarla dos veces, dividirla sola (consumir dos copias y producir una matriz vacía), eliminar todas las de la matriz vacía, soltar la matriz vacía, empujar una cadena vacía e (implícitamente) imprime la pila.
fuente
Rubí, 44
Solo un comentario al final de un programa normal: P
35 caracteres, + 25% = 44
fuente
Tcl, 75.25
Esta vez un palíndromo.
fuente
]]
y]]
es el personaje \ x1A.)Pitón 3, 42
Créditos
:-)
) creada por mífuente
print(input()[::-1])#)]1-::[)(tupni(tnirp
Python 3 para reducir el puntaje a 51.25.;
es una inserción que no tiene ningún efecto útil.Rebmu : 9 (con penalización) o 13 (sin)
La solución aburrida de Rebmu es 9 y lleva la pena palindrómica. Lo mostraré de todos modos "solo porque":
Usando el truco inmóvil de notar que las letras mayúsculas de las letras son palabras separadas, y la falta de una letra mayúscula principal significa que no estamos haciendo una palabra establecida, producimos cinco palabras comunes:
Que es una abreviatura para el código equivalente (también Rebmu legal):
El hecho de que vr y nr no tengan sentido no importa, porque a pesar de no estar asignados a nada son palabras válidas. Entonces el evaluador solo ejecuta el
return reverse a
... funciona en ambos sentidos. Pero esto es análogo en cierto sentido al truco aburrido: el código no está comentado, pero está muerto y no se ejecuta en una ruta.Para algo más emocionante que no incurre en la penalización, ¿qué tal esta solución de 13 caracteres:
Veamos cómo se procesa esto en sus rutas hacia adelante y hacia atrás, cuando se expande. Adelante:
Al revés como
ArvA vr: RV a
:En el lado negativo, la variante hacia atrás está sobrescribiendo la abreviatura de reversa. Pero bueno, no es un palíndromo, y son solo 13 caracteres. :-)
(Nota: Esto supone que está ejecutando Rebmu en el modo / args, donde a es el argumento predeterminado para el programa pasado al intérprete en la línea de comando y usted acepta el resultado. Si leer desde la entrada estándar es realmente un requisito, las cosas crezca, por ejemplo, de 9 a 11 caracteres para la solución simple:.
rnRVrArVRnr
Y si tiene que imprimir a la salida estándar desde el programa en lugar de aceptar la salida de expresión del intérprete, eso también agregaría un par de caracteres).fuente
JavaScript, 62 * 1.25 = 78
No demasiado creativo, pero lo mejor que se me ocurrió. (supone que la entrada se almacena en variable
i
)Obtuve esto:
63 caracteres, sin palíndromo
pero se sentía demasiado como hacer trampa. : PI podría hacer muchos más cambios triviales (como usar en
i['split']
lugar dei.split
), pero todos esos todavía tienen ganas de hacer trampa: Pfuente
(p=a=>a&&p()==`(p=${p})(i)`?i:i.split``.reverse().join``)(i)
(60 bytes) hace esa cosa.Pyke, 2 (+ 25%), no competidor
Pyke toma la entrada implícitamente y las salidas implícitamente.
_
Es la función inversa.fuente
Tcl, 99
Si se llama a un comando que no existe, se llama a un
unknown
comando especial que podría cargar el comando. O hacer otras cosas divertidas.fuente
T-SQL, 86 * 1.25 = 108
Aquí hay una aburrida entrada palindrómica para SQL Server 2008 (y más reciente) solo para mostrar que es posible.
@ contiene el texto de entrada, la cadena de ejemplo es "Hola". El recuento de caracteres de esta entrada es para una cadena de entrada de dos caracteres.
fuente
Barril , ceil (1 + 0.25) = 2 bytes
Esto toma entrada y se invierte, y la salida implícita lo genera literalmente. TIO
fuente
Befunge-98 (PyFunge) , 17 bytes
Pruébalo en línea!
Pruébalo en línea! (Invertido)
fuente
QBIC , 14 + 25% = 18 bytes
Emplea un código fuente palindrómico. Usar dos formas distintas de hacer esto lleva algo más de tiempo (34 bytes):
Explicación:
fuente
Pushy , 7 bytes (5 + 25%)
Pruébalo en línea!
Esto incurre en una penalización del 25% ya que es un palíndromo, pero es lo mejor que puedo hacer. No importa en qué dirección se ejecute el programa, ejecuta estos 3 comandos:
La sustitución
i
dec
(clear stack) o\
(comment) tiene el mismo efecto.fuente
05AB1E , 1 + 25% = 2 bytes
Pruébalo en línea!
fuente
R , 65 bytes
EDITAR: abandonó la penalización del 25% gracias a un cambio trivial, pero invisible para mí, por Grimy.
Pruébalo en línea!
Saluda a la abismal capacidad de R de manejar cadenas, incluso cuando utilizas paquetes diseñados para cadenas como
stringi
... barffuente