Imprima o seu código ao contrário - quine reverso

83

Escreva um programa que imprima seu próprio código fonte de trás para frente, ou seja, um eniuq .

Pontuação:

  • +50 se você usar dados extraídos da Internet.
  • +25 se você ler seu próprio código-fonte.
  • +1 ponto por personagem
  • Menor pontuação ganha.

Regras:

  • Não é possível usar outros arquivos (por exemplo reverse.txt)
  • O comprimento mínimo do código é de dois caracteres.
  • Seu programa não pode ser um palíndromo.
ike
fonte
1
Parece que isso já foi feito antes , apenas sem a regra "sem palíndromos".
Iszi
3
Essas pontuações são bônus ou multas ? Você precisa especificar em palavras se algo é uma penalidade ou um bônus, porque dizer +10pode ser entendido como "marcar como se tivesse 10 caracteres a mais do que realmente" ou "o código pode ter mais 10 caracteres que não ser pontuado "ou outras interpretações.
AJMansfield
7
@AJMansfield O menor número de vitórias significa que + x seria uma penalidade, -x seria um bônus.
Iszi
9
A única pergunta que tenho, então, é por que puxar dados da Internet recebe uma penalidade maior do que ler o arquivo de origem?
AJMansfield
4
Woohoo, primeiro lugar na lista de perguntas sobre redes quentes: D Nosso site precisa de mais atenção ...
Maçaneta da porta

Respostas:

69

GolfScript - 2


1

(ou seja, \n1onde \nestá o caractere de nova linha)

Resultado:

1

(ie 1\n)


Para citar Ilmari :

O GolfScript anexa automaticamente uma nova linha ao final da saída

Assim, uma nova linha seguida por um número imprimirá o número seguido por uma nova linha.

Justin
fonte
14
+1 Não achei que nada pudesse superar a solução Mathematica.
Kaya
26
Solução muito chato ...
theonlygusti
@theonlygusti É golfscript, o que você espera ...
Programas Redwolf
96

Hã? 5 caracteres

!hcuO

Na verdade, eu não faço ideia de como isso funciona, mas se você baixar o intérprete e se você escreve !hcuO, você obtémOuch!

Para executar isso, você precisa executar o programa como este:

huh.exe !hcuO

Na verdade, ele procurará um arquivo chamado !hcuO, mas ele não existe, portanto, geraOuch!

ProgramFOX
fonte
93
+1 para escrever algo que você não entende
Cruncher
30
Não é apenas um pouco irônico que você não entenda como o seu próprio código funciona, em um esolang que por design também não deveria entender o seu código?
Iszi
@ Iszi Essa é a piada.
AJMansfield
9
Não sei se você está usando huh?direito, embora esteja tendo dificuldades para encontrar a documentação adequada. Parece que o uso deve ser huh.exe <path to source code>e Ouch!é retornado para um caminho inválido. Tente colocar seu código em um arquivo real e alimente esse arquivo como argumento huh?e veja o que acontece. Também é interessante ver que ele gera um Notes.txtarquivo com alguns comentários.
Iszi
8
Ok, isso acabou de me dizer que acha que entende, mas não vi nada acontecer. Talvez eu devesse parar de brincar com ele no meu sistema principal.
Iszi
85

Mathematica, 3 caracteres

a 2

a 2significa avezes 2. Então a resposta é 2 a.

alefalpha
fonte
2
Provavelmente, isso vencerá, a menos que alguém possa obter uma solução de dois caracteres.
ike
22
Na verdade, eu conheço uma solução de dois caracteres. Também em Mathematica: 1#. A saída é #1.
alephalpha
7
@alephalpha: Então você deve postar isso como resposta!
precisa
65

H9 + , 13 caracteres

!dlrow ,olleH

Como a página web diz, todos os caracteres que não são H, 9ou +são ignorados, então meu programa irá imprimirHello, world!

ProgramFOX
fonte
30
O único benefício prático das línguas esotéricas loucas é responder a essas perguntas loucas.
amigos estão dizendo sobre totymedli
Seria mais prático se essas perguntas fossem assim.
Kojiro
1
Isso é muito inteligente!
theonlygusti
40

Javascript: 34 caracteres

reifitnedi detcepxenU :rorrExatnyS

saídas SyntaxError: Unexpected identifier, pelo menos no console do Chrome

scrblnrd3
fonte
8
Uso inteligente de abusar do sistema por meio de abuso de erro
WallyWest
2
Você senhor, fez o meu dia: D
major-mann
4
Não é uma idéia original, já havia uma resposta sobre isso no python 2.
o0 '.
1
@Lohoris Desculpe, eu não vi esse
#
1
Console do Firebug no Mozilla Firefox: tnemetats erofeb ; gnissim :rorrExatnyS=> SyntaxError: missing ; before statement.
Kenorb
27

Python, 43 41

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

Mathematica, 2 bytes

1#

Saídas:

# 1

Jay Bosamiya
fonte
20

TI-BASIC, 2

i2

Onde iestá o número imaginário.

Saídas 2i

Timtech
fonte
1
Isso funciona apenas na tela inicial, não dentro de um PRGM.
kernigh
8
@kernigh Você tentou? Funciona bem. (Se a última declaração de um programa TI-BASIC avalia como uma expressão, o resultado é impresso em vez de 'Done' quando o programa termina)
AJMansfield
18

BASIC, 22 12 7 caracteres

:-)

1 enil ni rorre xatnyS

EDIT: Se você tiver permissão para entrar no programa no modo imediato, isso poderá ser reduzido para rorre xatnyS(12 caracteres).

No BBC BASIC, você precisa apenas de 7 caracteres:

ekatsiM
ossifrage melindroso
fonte
13

C ++ 472 caracteres

Muitos personagens, mas não consigo pensar em uma maneira mais simples em uma linguagem baseada em 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
fonte
13

bater

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

Comprimento: 31 caracteres.


sh

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

Comprimento: 29 caracteres.

Este não poderia funcionar em algumas distribuições Linux, mas funciona no OSX.


tcsh

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

Comprimento: 26 caracteres.


csh

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

Comprimento: 26 caracteres.


O vencedor é:

ksh

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

Comprimento: 21 caracteres.


Acima deve funcionar em todos os sistemas operacionais * baseados em unix.

kenorb
fonte
32
Não funciona para mim, eu tenho um comando chamadodnuof
Kroltan
8
Esqueci de adicionar, ele não funciona nas distribuições dnuofinstaladas (o que quer que seja). Malditos hackers.
kenorb
5
Hahaha, tem um comando chamado dnuof? : D o que faz?
Maçaneta
11

GolfScript, 12 caracteres

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

Esse código pega a cadeia de caracteres entre aspas duplas "-1%.`", a inverte ( -1%), a duplica ( .) e desvaloriza ( `) a segunda cópia, restaurando as aspas duplas ao seu redor.

Entrada anterior (13 caracteres):

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

Baseado no quine {'.~'}.~de 8 caracteres desta resposta ; são necessários 5 caracteres extras para especificar e reverter a saída.

Ps. Observe que o GolfScript anexa automaticamente uma nova linha ao final da saída. Se isso for contado como parte da saída, uma nova linha correspondente poderá ser anexada a qualquer versão do código sem afetar a saída, por um custo de um caractere extra.

Ilmari Karonen
fonte
9

Ruby, 60

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

Baseado em um clássico ruby ​​quine.

histocrata
fonte
Bom uso de heredocs.
Jon Purdy
9

Perl, 41

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

Resposta antiga de 52 caracteres (penalidade de 27 + 25)

open+0;print ~~ reverse <0>

Lê sua própria fonte, armazena o reverso em um escalar e imprime isso.

smcg
fonte
1
O scalaroperador pode ser substituído por ~~. No entanto, você precisa adicionar +25 à sua pontuação para ler seu próprio código-fonte.
breadbox
@breadbox observou
smcg
+1. Eu estava prestes a publicar algo como a minha solução shell : $_='say"lave;\047",~~reverse,"\047=_\$"';eval, mas sua solução é mais curto :-) Note que você pode golf para baixo a 39 caracteres usando say. Espero que você vai bater todos os estranheza esotérica :-)
Tomas
@Tomas está sugerindo a substituição printcom say? Isso acaba não imprimindo nada.
smcg
Você executou perl com a -Mfeature=sayopção?
Tomas
9

Fissão , 6 bytes

Um caso raro de uma quine generalizada com o mesmo comprimento da quine normal :

"LO+!'

A idéia é a mesma do quine normal, mas estamos usando um átomo de esquerda (começando no L) para que o modo de impressão atravesse o código na ordem oposta.

Martin Ender
fonte
8

J: 26

Quining padrão (26 caracteres) : definindo uma função e passando sua própria definição, entre aspas:

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

Provavelmente poderia ser reduzido.

Específico para J (33 caracteres) : definindo uma variável e perguntando em qual arquivo a variável foi definida, ou seja, esta, e imprimindo o conteúdo desse arquivo:

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

Deve ser salvo e executado a partir de um script (ou seja, não no REPL, porque a resposta para a pergunta é "seu argumento não foi definido em um arquivo", portanto, não há arquivo para ler).

Dan Bron
fonte
2
O segundo deve receber o bônus + 25 para ler o próprio arquivo.
Johannes Kuhn
2
@JohannesKuhn: Pena, mas sim.
jazzpi
1
"Bônus" soa melhor.
Johannes Kuhn
7

> <> , 25 bytes

Fiquei surpreso ao descobrir que isso ainda não havia sido feito. :)

...yhsif sllems gnihtemoS

Cole o código aqui e execute-o.

.é o comando Jump, saltando xe ysaindo da pilha e movendo o IP para (x, y)na caixa de código. Nesse caso, a pilha está vazia, portanto, a única mensagem de erro do idioma é impressa:

Something smells fishy...
mbomb007
fonte
1
A melhor resposta
Insano
7

Microscript , 11 bytes

Eu meio que tive que fazer isso.

0"Caxq"Caxq

Surpreendentemente, isso é realmente mais curto do que o quine verdadeiro mais curto e conhecido da língua. qe, acaso contrário, são equivalentes, exceto que qadiciona citações de quebra automática enquanto anão o faz.

SuperJedi224
fonte
5

JQuery JavaScript 119 92 74 70 caracteres

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

Agora, usando jQuery, como sugerido pela minitech nos comentários, e envolto manualmente com <pre><code>para que eu possa usar text()sem medo de outros blocos de código neste post interferirem. O empacotamento manual <h4>era incompatível com o chromeium quando o testei; agora, ele deve funcionar na maioria dos navegadores.

Este programa, se executado a partir desta página, localiza o bloco de código diretamente acima, reverte seu conteúdo e o coloca em uma caixa de alerta.

É fácil verificar, basta colá-lo no console de desenvolvimento.

AJMansfield
fonte
Isso é muito mais do que apenas usar uma função. E você deve usar o jQuery (nesta página) ou pelo menos de querySelectorqualquer maneira ...
Ry-
@minitech obrigado pela dica, troquei por um querySelectoragora. Gostaria de examinar a possibilidade do jQuery, mas parece que levará um pouco mais de tempo para eu descobrir.
AJMansfield
@ minitech ok, obrigado pela jQuerydica. (Eu só comecei a aprender javascript ontem.)
AJMansfield
Eu gosto desta solução; pensando fora da caixa.
theonlygusti
4

PHP, 41 caracteres (+25)

Não sei se entendi a tarefa corretamente. Mas aqui está uma tentativa de PHP:

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

edit: isso pode ser muito mais curto:

echo strrev(file_get_contents(__FILE__));

Mas, como pode ser assim tão simples, provavelmente não é isso que está sendo perguntado ...

nl-x
fonte
Quando clico em executar, recebo um monte de bobagens inúteis (aqui está um pequeno trecho:: >? ;)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 há muito mais). Além disso, inclua sua contagem de caracteres; este é um código de golfe. Além disso, parece que você está lendo seu arquivo de origem, então adicione 25 à sua contagem de caracteres e essa é sua pontuação. Menor pontuação ganha.
Justin
@ Quincunx Primeiro, é ao contrário ... mas em segundo lugar, este é o código fonte que o phpfiddle gera! (mas ao contrário ...) Eles parecem escapar de muitas coisas, tentando manter as coisas em segurança. Substitua array_poppor array_shiftpara ver o código-fonte não ao contrário ...
nl-x
Sim, posso ver o código-fonte invertido, mas o que há com todo o texto estranho? Existem muitas seqüências de escape, mas há outras que não são (por exemplo: ESLAF nruterie return FALSE).
Justin
@ Quincunx Desculpe, não estou entendendo se você está demonstrando interesse no funcionamento do phpFiddle ou se está criticando meu código. Se for o último, em minha defesa, coloque meu código em um arquivo .php e execute-o em um navegador, e ele funcionará corretamente. Eu apenas pensei que o phpfiddle era uma coisa agradável para você ver, para que você possa ver um pouco do seu funcionamento interno.
Nl-x
4

MATLAB, 78 caracteres:

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

Observe que a solução exige que você comece com um caractere especial (alt + 0160) e imprima exatamente a mensagem invertida. (Diferente da solução python)

Dennis Jaheruddin
fonte
4

Shell UNIX, 31

Solução real com 52 caracteres:

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

Mas cuidado! A honestidade não compensa no mundo de hoje! A penalidade é muito baixa !!

6 caracteres + 25 = 31:

rev $0
Tomas
fonte
No OSX rev $0gera o erro: rev: illegal option -- b.
kenorb
4

MS-DOS, 24 bytes

eman elif ro dnammoc daB

Resultado:

Bad command or file name
Neil
fonte
3

JavaScript, 62

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

Funciona para mim no Chrome mais recente (v 31.0.1650.63). Alguns outros navegadores podem fornecer uma saída diferente. (Se você reverter essa saída, funcionaria: P)

Maçaneta da porta
fonte
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
fonte
2

JavaScript, 56

($=_=>_!=$._?_?$(_.slice(1))+_[0]:')':$('($='+$+')('))()
Ry-
fonte
Indique seu ambiente, pois isso não funciona no Chrome. Isso é Rhino ou o quê?
George Reith
@ GeorgeReith: Qualquer coisa com suporte à função de seta ES6. Todos os SpiderMonkeys devem funcionar bem, por exemplo (Rhino incluído).
Ry-
2

CSS, 88 bytes

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

Coloque uma página html em branco para evitar conflitos com outras tags.

Mama Fun Roll
fonte
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, ajude-me a diminuir isso.

ericw31415
fonte
Você não precisa do invólucro. q=_=>[...`q=${q}`].reverse().join`` funciona tão bem.
Rɪᴋᴇʀ
Se eu remover o wrapper, ele não será executado automaticamente.
ericw31415
não precisa. Funções estão bem.
Rɪᴋᴇʀ
Mas, então, o código retorna a referência da função, não a saída da função.
precisa saber é o seguinte
@ ericw31415 está certo. a chamada de função é necessária.
Mama Fun Roll
2

Fuzzy Octo Guacamole, 4 bytes

KNU_

Kimprime _UNK, Nempurra Nonee Uempurra 0. E _aparece o valor superior na pilha (mas não é impresso). Então, apenas _UNKé impresso.

Bald Bantha
fonte
Por que a Ksaída _UNK?
Caird coinheringaahing
O @RandomUser pede a Riker mais detalhes, ele é o criador da linguagem. Acabei de ler os documentos.
Bald Bantha