Imprima su código al revés - quine inversa

83

Escriba un programa que imprima su propio código fuente al revés, en otras palabras, un eniuq .

Puntuación:

  • +50 si usa datos de extracción de Internet.
  • +25 si lees tu propio código fuente.
  • +1 punto por personaje
  • La puntuación más baja gana.

Reglas:

  • No usar otros archivos (p reverse.txt. Ej. )
  • La longitud mínima del código es de dos caracteres.
  • Su programa no puede ser un palíndromo.
ike
fuente
1
Parece que esto se ha hecho antes , solo que sin la regla de "no palíndromos".
Iszi
3
¿Son esos puntajes bonos o penalizaciones ? Debe especificar con palabras si algo es una penalización o una bonificación, porque decir +10puede significar "puntuar como si tuviera 10 caracteres más de lo que realmente tiene" o "el código puede tener 10 caracteres más que no ser puntuado ", u otras interpretaciones.
AJMansfield
77
@AJMansfield La puntuación más baja gana significa que + x sería una penalización, -x sería una bonificación.
Iszi
99
La única pregunta que tengo, entonces, es ¿por qué extraer datos de Internet tiene una penalización mayor que leer el archivo fuente?
AJMansfield
44
Woohoo, primer lugar en la lista de preguntas de la red: D Nuestro sitio necesita más atención ...
Pomo de la puerta

Respuestas:

69

GolfScript - 2


1

(es decir, \n1dónde \nestá el carácter de nueva línea)

Salida:

1

(es decir 1\n)


Para citar a Ilmari :

GolfScript agrega automáticamente una nueva línea al final de la salida

Por lo tanto, una nueva línea seguida de un número imprimirá el número seguido de una nueva línea.

Justin
fuente
14
+1 No pensé que nada podría vencer a la solución de Mathematica.
Kaya
26
Solución bastante aburrida ...
theonlygusti
@theonlygusti Es golfscript, qué espera ...
Programas Redwolf
96

eh? , 5 caracteres

!hcuO

En realidad, NO tengo idea de cómo funciona, pero si descargas el intérprete y escribes !hcuO, entonces obtienesOuch!

Para ejecutar esto, debe ejecutar el programa así:

huh.exe !hcuO

En realidad buscará un archivo llamado !hcuO, pero no existe, por lo que generaOuch!

ProgramFOX
fuente
93
+1 por escribir algo que no entiendes
Cruncher
30
¿No es un poco irónico que no entiendas cómo funciona tu propio código, en un esolang que, por diseño, tampoco se supone que entienda tu código?
Iszi
@ Iszi Esa es la broma.
AJMansfield
99
No estoy seguro de que esté utilizando huh?correctamente, aunque me cuesta encontrar la documentación adecuada. Parece que el uso está destinado a ser huh.exe <path to source code>y Ouch!se devuelve para una ruta no válida. Intente poner su código en un archivo real y alimente ese archivo como argumento para huh?ver qué sucede. También es interesante ver que genera un Notes.txtarchivo con algunos comentarios.
Iszi
8
Ok, esto me acaba de decir que cree que entiende, pero no vi que sucediera nada. Tal vez debería dejar de jugar con él en mi sistema primario.
Iszi
85

Mathematica, 3 caracteres

a 2

a 2significa aveces 2. Entonces la respuesta es 2 a.

alephalpha
fuente
2
Esto probablemente ganará a menos que alguien pueda obtener una solución de dos caracteres.
ike
22
De hecho, conozco una solución de dos caracteres. También en Mathematica: 1#. La salida es #1.
alephalpha
77
@alephalpha: ¡Entonces deberías publicar eso como respuesta!
ProgramFOX
65

H9 + , 13 caracteres

!dlrow ,olleH

Como dice la página web, todos los caracteres que no son H, 9o +son ignorados, entonces mi programa imprimiráHello, world!

ProgramFOX
fuente
30
El único beneficio práctico de los lenguajes esotéricos locos es responder estas preguntas locas.
totymedli
Sería más práctico si estas preguntas fueran así.
kojiro
1
¡Eso es bastante inteligente!
theonlygusti
40

Javascript: 34 caracteres

reifitnedi detcepxenU :rorrExatnyS

salidas SyntaxError: Unexpected identifier, al menos en la consola de Chrome

scrblnrd3
fuente
8
Uso inteligente del abuso del sistema a través del abuso de errores
WallyWest
2
Señor, me ha alegrado el día: D
major-mann
44
No es una idea original, ya había una respuesta sobre esto en Python 2.
o0 '.
1
@Lohoris Lo siento, no lo vi
scrblnrd3
1
Consola Firebug en Mozilla Firefox: tnemetats erofeb ; gnissim :rorrExatnyS=> SyntaxError: missing ; before statement.
kenorb
27

Pitón, 43 41

_=']0~::[_%%_ tnirp;%r=_';print _%_[::~0]
shane
fuente
24

Mathematica, 2 bytes

1#

Salidas:

# 1

Jay Bosamiya
fuente
20

TI-BASIC, 2

i2

¿Dónde iestá el número imaginario?

Salidas 2i

Timtech
fuente
1
Esto solo funciona en la pantalla de inicio, no dentro de un PRGM.
kernigh
8
@kernigh ¿Lo probaste? Funciona bien. (Si la última declaración de un programa TI-BASIC se evalúa como una expresión, su resultado se imprime en lugar de 'Listo' cuando finaliza el programa)
AJMansfield
18

BÁSICO, 22 12 7 caracteres

:-)

1 enil ni rorre xatnyS

EDITAR: si se le permite ingresar al programa en modo inmediato, esto podría reducirse a rorre xatnyS(12 caracteres).

En BBC BASIC, solo necesitas 7 caracteres:

ekatsiM
ossifrage aprensivo
fuente
13

C ++ 472 caracteres

Muchos personajes, pero no puedo pensar en una forma más simple en un lenguaje basado en C.

#include<iostream>
#include<string.h>
#define p(t) std::cout<<'}'<<';'<<')'<<strrev(&std::string(#t)[0])<<t;
char* strrev(char*p){char*t=p;char*q=p;while(q&&*q)++q;for(--q;p<q;++p,--q)*p=*p^*q,*q=*p^*q,*p=*p^*q;return t;}
int main(){p("(p{)(niam tni};t nruter;q*^p*=p*,q*^p*=q*,q*^p*=p*)q--,p++;q<p;q--(rof;q++)q*&&q(elihw;p=q*rahc;p=t*rahc{)p*rahc(verrts *rahc;t<<)]0[)t#(gnirts::dts&(verrts<<')'<<';'<<'}'<<tuoc::dts )t(p enifed#>h.gnirts<edulcni#>maertsoi<edulcni#");}
user11232
fuente
13

golpetazo

$ dnuof ton dnammoc :found :hsab-
-bash: dnuof: command not found

Longitud: 31 caracteres.


sh

$ dnuof ton dnammoc :found :hs-
sh: dnuof: command not found

Longitud: 29 caracteres.

Este no podría funcionar en algunas distribuciones de Linux, pero funciona en OSX.


tcsh

$ .dnuof ton dnammoC :found.
.dnuof: Command not found.

Longitud: 26 caracteres.


csh

% .dnuof ton dnammoC :found.
.dnuof: Command not found.

Longitud: 26 caracteres.


El ganador es:

ksh

$ dnuof ton :found :hsk
ksh: dnuof: not found

Longitud: 21 caracteres.


Lo anterior debería funcionar en todos los sistemas operativos basados ​​en * unix.

kenorb
fuente
32
No funciona para mí, tengo un comando llamadodnuof
Kroltan
8
Olvidé agregar, no funciona en las distribuciones que ha dnuofinstalado (sea lo que sea). Malditos hackers.
kenorb
55
Jajaja, hay un comando llamado dnuof? : D ¿qué hace?
Pomo de la puerta
11

GolfScript, 12 caracteres

"-1%.`"-1%.`

Este código toma la cadena entre comillas dobles "-1%.`", la invierte ( -1%), la duplica ( .) y anula la evaluación ( `) de la segunda copia, restaurando las comillas dobles a su alrededor.

Entrada anterior (13 caracteres):

{`'.~'+-1%}.~

Basado en el quine {'.~'}.~de 8 caracteres de esta respuesta ; los 5 caracteres adicionales son necesarios para stringificar e invertir la salida.

PD. Tenga en cuenta que GolfScript agrega automáticamente una nueva línea al final de la salida. Si esto se cuenta como parte de la salida, se puede agregar una nueva línea correspondiente a cualquier versión del código sin afectar la salida, por un costo de un carácter adicional.

Ilmari Karonen
fuente
10

Befunge 98-10 caracteres

"8k,'!1+,@

Esto funciona si su intérprete no interpreta las líneas ajustadas después de "agregar un espacio adicional. Si su intérprete interpreta líneas ajustadas así, entonces esta solución de 11 caracteres funciona ( porque los espacios duplicados en un literal de cadena se interpretan como uno ):

"9k,'!1+,@ 

Si puedo usar gsin penalización, entonces estos también funcionan (7 y 8 caracteres respectivamente):

"5k,g,@

y

"6k,g,@ 
Justin
fuente
9

Rubí, 60

puts(2,s=<<2.chop.reverse,s)
puts(2,s=<<2.chop.reverse,s)
2

Basado en un clásico rubí quine.

histocrat
fuente
Buen uso de heredocs.
Jon Purdy
9

Perl, 41

$_=q{print~~reverse"\$_=q{$_};eval"};eval

Antigua respuesta de 52 caracteres (27 + 25 penalizaciones)

open+0;print ~~ reverse <0>

Lee su propia fuente, almacena el reverso en un escalar e imprime eso.

smcg
fuente
1
El scalaroperador puede ser reemplazado por ~~. Sin embargo, debe agregar +25 a su puntaje para leer su propio código fuente.
breadbox
@breadbox señaló
smcg
+1. Estaba a punto de publicar algo así como mi solución de shell : $_='say"lave;\047",~~reverse,"\047=_\$"';evalpero su solución es más corta :-) Tenga en cuenta que puede usar hasta 39 caracteres say. Espero que superes todas las rarezas esotéricas :-)
Tomas
@Tomas es usted que sugiere reemplazar printcon say? Eso termina sin imprimir nada.
smcg
¿Corriste perl con la -Mfeature=sayopción?
Tomás
9

Fisión , 6 bytes.

Un caso raro de una quina generalizada que tiene la misma longitud que la quina normal :

"LO+!'

La idea es la misma que la del quine normal, pero estamos usando un átomo a la izquierda (comenzando en L) para que el modo de impresión atraviese el código en el orden opuesto.

Martin Ender
fuente
8

J: 26

Comillas estándar (26 caracteres) : definiendo una función y pasándola su propia definición, entre comillas:

|.(,],2#{:)'|.(,],2#{:)'''

Probablemente podría hacerse más corto.

Específico J (33 caracteres) : definiendo una variable y preguntando en qué archivo se definió la variable, es decir, este, y luego imprimiendo el contenido de ese archivo:

1!:2&2|.1!:1(4!:4 a=:<'a'){4!:3''

Debe guardarse y ejecutarse desde un script (es decir, no en el REPL, porque la respuesta a la pregunta es "su argumento no se definió en un archivo", por lo que no hay ningún archivo para leer).

Dan Bron
fuente
2
El segundo debería obtener el bono de + 25 para leer el propio archivo.
Johannes Kuhn
2
@JohannesKuhn: Penalización, pero sí.
jazzpi
1
"Bonus" suena mejor.
Johannes Kuhn
7

> <> , 25 bytes

Me sorprendió descubrir que esto aún no se había hecho. :)

...yhsif sllems gnihtemoS

Pegue el código aquí y ejecútelo.

.es el comando Saltar, aparece xy ysale de la pila, y mueve la IP al (x, y)cuadro de código. En este caso, la pila está vacía, por lo que se imprime el único mensaje de error del idioma:

Something smells fishy...
mbomb007
fuente
1
La mejor respuesta
Insane
7

Microscript , 11 bytes

Como que tuve que hacer esto.

0"Caxq"Caxq

Sorprendentemente, esto es en realidad más corto que la quine verdadera más corta conocida del lenguaje. qy ason equivalentes, excepto que qagrega comillas de ajuste mientras aque no.

SuperJedi224
fuente
5

JavaScript jQuery 119 92 74 70 caracteres

alert($("#answer-16051 pre code").text().split("").reverse().join(""))

Ahora usando jQuery, como minitech sugirió en los comentarios, y envolviendo manualmente <pre><code>para que pueda usar text()sin temor a que otros bloques de código en esta publicación interfieran. <h4>Cuando lo probé, envolverlo manualmente era incompatible con el cromo, por lo que ahora debería funcionar en la mayoría de los navegadores.

Este programa, si se ejecuta desde esta página, encuentra el bloque de código directamente arriba, invierte su contenido y lo coloca en un cuadro de alerta.

Es bastante fácil de verificar, solo pégalo en la consola de desarrollo.

AJMansfield
fuente
Esto es mucho más que simplemente usar una función. Y deberías usar jQuery (en esta página) o al menos de querySelectortodos modos ...
Ry-
@minitech gracias por el consejo, lo cambié por un querySelectormomento. Me gustaría analizar la posibilidad de jQuery, pero parece que me llevará un poco más de tiempo darme cuenta.
AJMansfield
@minitech ok, gracias por el jQueryconsejo. (Ayer empecé a aprender javascript).
AJMansfield
Me gusta esta solucion; pensar más allá.
theonlygusti
4

PHP, 41 caracteres (+25)

No sé si entendí la tarea correctamente. Pero aquí hay un intento de PHP:

while(!isset($s) || $s) echo isset($s) ? array_pop($s) : ($s = str_split(file_get_contents(__FILE__)) and null);

editar: esto puede ser mucho más corto:

echo strrev(file_get_contents(__FILE__));

Pero como puede ser así de simple, probablemente esto no sea lo que se pregunta ...

nl-x
fuente
Cuando hago clic en Ejecutar, obtengo un montón de tonterías inútiles (aquí hay un pequeño fragmento: >? ;)llun dna ))__ELIF__(f$(tilps_rts = s$( : )s$(pop_yarra ? )s$(tessi ohce )s$ || )s$(tessi!(elihw ;"stnetnoc_"=.f$ ;'teg_elif'=f$ php?<>?}};ESLAF nruter;"ec6x\i66x\02x\e47x\96x\rw hay mucho más). Además, incluye tu cuenta de personaje; Este es un código de golf. Además, parece que estás leyendo tu archivo fuente, así que agrega 25 a tu número de caracteres y esa es tu puntuación. La puntuación más baja gana.
Justin
@Quincunx Primero, está al revés ... pero en segundo lugar, ¡este es el código fuente que genera phpfiddle! (pero al revés ...) Parecen escapar de muchas cosas, tratando de mantener las cosas seguras. Reemplace array_popcon array_shiftpara ver el código fuente no al revés ...
nl-x
Sí, puedo ver el código fuente invertido, pero ¿qué pasa con todo el texto extraño? Hay muchas secuencias de escape, pero hay algunas que no lo son (por ejemplo, ESLAF nruteres decir return FALSE).
Justin
@Quincunx Lo siento, no estoy entendiendo si estás interesado en la forma en que funciona phpFiddle, o si estás criticando mi código. Si es lo último, en mi defensa, coloque mi código en un archivo .php y ejecútelo en un navegador, y funcionará sin problemas. Simplemente pensé que phpfiddle era algo agradable para dejarte ver, para que puedas ver un poco de su funcionamiento interno.
nl-x
4

MATLAB, 78 caracteres:

 
|
.snoisserpxe ro stnemetats BALTAM ni dilav ton si retcarahc tupni ehT :rorrE

Tenga en cuenta que la solución requiere que comience con un carácter especial (alt + 0160) y que imprima exactamente el mensaje invertido. (A diferencia de la solución de Python)

Dennis Jaheruddin
fuente
4

UNIX shell, 31

Solución real a 52 caracteres:

A='printf "A$ lave;\047`echo $A|rev`\047=A"';eval $A

¡Pero cuidado! ¡La honestidad no vale la pena en el mundo de hoy! ¡La penalización es demasiado baja!

6 caracteres + 25 = 31:

rev $0
Tomás
fuente
En OSX rev $0genera el error: rev: illegal option -- b.
kenorb
4

MS-DOS, 24 bytes

eman elif ro dnammoc daB

Salida:

Bad command or file name
Neil
fuente
3

JavaScript, 62

function f(){alert((f+'f()').split('').reverse().join(''))}f()

Funciona para mí en el último Chrome (v 31.0.1650.63). Algunos otros navegadores pueden dar un resultado diferente. (Si invierte esa salida, entonces funcionaría: P)

Pomo de la puerta
fuente
3

SmileBASIC, 118 102 bytes

FOR I=-101TO.?MID$(("+CHR$(34))*3,30,102)[-I];:NEXTFOR I=-100TO.?MID$(("+CHR$(34))*3,30,102)[-I];:NEXT
12Me21
fuente
2

JavaScript, 56

($=_=>_!=$._?_?$(_.slice(1))+_[0]:')':$('($='+$+')('))()
Ry-
fuente
Indique su entorno porque esto no funciona en Chrome. ¿Es este Rhino o qué?
George Reith
@GeorgeReith: Cualquier cosa con soporte de función de flecha ES6. Todos los SpiderMonkeys deberían funcionar bien, por ejemplo (Rhino incluido).
Ry-
2

CSS, 88 bytes

<style>:before,*{display:block;unicode-bidi:bidi-override;direction:rtl;content:'<style>

Poner en una página html en blanco para evitar conflictos con otras etiquetas.

Mama Fun Roll
fuente
2

JavaScript, 53 50 46 43 bytes

q=_=>("q="+q+";q()").split("").reverse().join("");q()

(q=_=>`(q=${q})()`.split("").reverse().join(""))()

(q=_=>`(q=${q})()`.split``.reverse().join``)()

(q=_=>[...`(q=${q})()`].reverse().join``)()

Por favor, ayúdame a acortar esto.

ericw31415
fuente
No necesitas el envoltorio. q=_=>[...`q=${q}`].reverse().join`` funciona igual de bien
Rɪᴋᴇʀ
Si elimino el contenedor, no se ejecutará automáticamente.
ericw31415
No necesita hacerlo. Las funciones están bien.
Rɪᴋᴇʀ
Pero entonces, el código devuelve la referencia de función, no la salida de la función.
ericw31415
@ ericw31415 tiene razón. La llamada a la función es necesaria.
Mama Fun Roll
2

Guacamole Octo Fuzzy, 4 bytes

KNU_

Kimpresiones _UNK, Nempujes Noney Uempujes 0. Y _muestra el valor superior en la pila (pero no se imprime). Tan solo _UNKse imprime.

Bantha calvo
fuente
¿Por qué Ksale _UNK?
caird coinheringaahing
@RandomUser le pide a Riker más detalles, él es el creador del lenguaje. Acabo de leer los documentos.
Bald Bantha