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.

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.


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!


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.


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!


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


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]


20

TI-BASIC, 2

i2

Onde iestá o número imaginário.

Saídas 2i


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

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#");}

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.


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.



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.


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.


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.


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).


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...

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.


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.


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 ...



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)


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

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

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)


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

2

JavaScript, 56

($=_=>_!=$._?_?$(_.slice(1))+_[0]:')':$('($='+$+')('))()

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.


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.