Miroir quine (ou ma tête me fait mal)


32

Je lisais Imprimer votre code à l'envers - reverse quine Et je pensais que cela pourrait être plus intéressant si votre code à l'envers est également exécutable . Ce défi aura donc toutes les règles et exigences de l'autre, mais doit également être une source valide une fois inversée (dans la même langue ou dans une autre langue et toujours imprimer sa source à l'envers.

Toutes les règles et le score du défi de quine inverse s'appliquent, donc toutes les réponses à cette question répondront à celle-ci (mais ne marqueront pas aussi bien.)

Modifier:

Sur demande, toutes les règles sont maintenant copiées ici.

Règles:

  • écrire un programme p qui, lorsqu'il est exécuté, produit la sortie p 'où p' est p en arrière et p 'lorsqu'il est exécuté produit p.
  • Pas d'utilisation d'autres fichiers (par exemple reverse.txt)
  • La longueur minimale du code est de deux caractères.
  • Votre programme ne peut pas être un palindrome.

Notation:

  • +50 si vous utilisez des données extraites d'Internet.
  • +25 si vous lisez votre propre code source.
  • +1 point par personnage.
  • Le score le plus bas l'emporte.

eval(eval(eval(eval(eval(eval(eval(eval(eval(p)))))))))
Andrew Larsson

Je dis simplement que vous seriez en mesure d'exécuter la sortie de l'exécution de la sortie de l'exécution de la sortie de [...] l'exécution de la sortie de p (comme n'importe quelle quine, sauf pour la quine arrière).
Andrew Larsson

@AndrewLarsson En effet bien que la preuve de concept que je construis p sera écrite en c et p 'en perl.
hildred

Oh, ce serait cool!
Andrew Larsson

1
Oui, j'ai vu ça trop tard. Pas un doublon.
Johannes Kuhn

Réponses:


22

GolfScript, 46 caractères

0{`".~#"+.-1%+\.!@@}.~##~.}@@!.\+%1-.+"#~."`{1

Eh bien, c'est moche, mais ça marche. La sortie est égale au code inversé et est également un programme GolfScript valide qui renvoie à nouveau le code d'origine.

OK, laissez-moi essayer d'expliquer comment je l'ai construit. Tout d'abord, je suis parti du quine {".~"}.~et l' ai modifié comme dans cette réponse pour s'inverser. Pour faire de la sortie un quine exécutable en soi, j'ai fait une copie du code avant de l'inverser et j'ai inclus un #à la fin du code, de sorte que la version inversée à la fin ne devienne qu'un commentaire. Ainsi, nous obtenons la quine palindromique:

{`".~#"+.-1%}.~##~.}%1-.+"#~."`{

Cependant, selon les règles, les palindromes ne sont pas autorisés, j'ai donc dû briser la symétrie d'une manière ou d'une autre. J'ai pensé que le moyen le plus simple serait d'inclure un 0(qui, en soi, est une quine dans GolfScript) dans le code et de le retourner 1avec !après avoir créé la copie inversée. La plupart de la complexité restante est simplement une manipulation de pile laide pour obtenir tout dans le bon ordre.


Est-ce aussi golfscript lorsqu'il est inversé ou est-ce une autre langue?
hildred

Oui, c'est GolfScript dans les deux sens. En effet, à l'exception du 0et 1au début et à la fin, le reste du code est un palindrome.
Ilmari Karonen

9
Sensationnel. D'accord, je ne me sens plus assez intelligent pour cette SE :(
Cruncher

21

Perl et C 6478 1955

#!/usr/bin/perl -i//
$_=<<'rahc';eval $_; #//
print scalar reverse "#!/usr/bin/perl -i//\n\$_=<<'rahc';eval \$_; #//\n${_}rahc\n" #//
__END__
__END__ enifed#
};)"{ = ][cn\rahcn\n\"(p
};)'n\'( rahctup) 1 == 21%b ( fi
;)d(p;)]1-b[c,",d%",)d(foezis,d( ftnirpns{)b--;b;)c(foezis=b( rof
;)c(p;]9[d rahc;b tni{)(niam diov
}};)]1-b[c(rahctup )]1-b[c(fi{)b--;b;)c(nelrts=b(rof;b tni{)c*rahc(p diov
>h.gnirts< edulcni#
>h.oidts< edulcni#
;}
,0
,53,33,74,711,511,411,74,89,501,011,74,211
,101,411,801,23,54,501,74,74,01,63,59,16
,06,06,93,411,79,401,99,93,95,101,811,79
,801,23,63,59,95,23,53,74,74,01,211,411
,501,011,611,23,511,99,79,801,79,411,23,411
,101,811,101,411,511,101,23,43,53,33,74,711
,511,411,74,89,501,011,74,211,101,411,801,23
,54,501,74,74,29,011,29,63,59,16,06,06
,93,411,79,401,99,93,95,101,811,79,801,23
,29,63,59,95,23,53,74,74,29,011,63,321
,59,521,411,79,401,99,29,011,43,23,53,74
,74,01,59,59,96,87,86,59,59,01,59,59
,96,87,86,59,59,23,101,011,501,201,101,001
,53,01,521,95,14,43,321,23,16,23,39,19
,99,011,29,411,79,401,99,011,29,011,29,43
,04,211,01,521,95,14,93,011,29,93,04,23
,411,79,401,99,611,711,211,14,23,94,23,16
,16,23,05,94,73,89,23,04,23,201,501,01
,95,14,001,04,211,95,14,39,94,54,89,19
,99,44,43,44,001,73,43,44,14,001,04,201
,111,101,221,501,511,44,001,04,23,201,611,011
,501,411,211,011,511,321,14,89,54,54,95,89
,95,14,99,04,201,111,101,221,501,511,16,89
,04,23,411,111,201,01,95,14,99,04,211,95
,39,75,19,001,23,411,79,401,99,95,89,23
,611,011,501,321,14,04,011,501,79,901,23,001
,501,111,811,01,521,521,95,14,39,94,54,89
,19,99,04,411,79,401,99,611,711,211,23,14
,39,94,54,89,19,99,04,201,501,321,14,89
,54,54,95,89,95,14,99,04,011,101,801,411
,611,511,16,89,04,411,111,201,95,89,23,611
,011,501,321,14,99,24,411,79,401,99,04,211
,23,001,501,111,811,01,26,401,64,301,011,501
,411,611,511,06,23,101,001,711,801,99,011,501
,53,01,26,401,64,111,501,001,611,511,06,23
,101,001,711,801,99,011,501,53,01,95,521,01
{ = ][c
rahc

Modifier:

Brève explication: de perl les deux lignes intéressantes sont la deuxième et la troisième. La deuxième ligne contient deux instructions dont la première lit le reste du document dans une chaîne. Le second évoque la chaîne. La troisième ligne imprime tout à l'envers. tout le reste est ignoré. du côté c, vous avez un tableau qui a le programme sous forme de chaîne, qui est imprimé sous forme de tableau et de chaîne, et le reste est un commentaire.


1
wat. : O Ma tête a explosé. Mais je compte 6536 caractères dans ça ...
Poignée de porte

Quoi ... comment ... 0_0
Le gars avec le chapeau

@DoorknobofSnow J'ai compté la mauvaise version. Mais voici une version plus courte.
hildred

C'est incroyable! Je pense que Haskell / C pourrait être une autre combinaison possible.
theonlygusti

@theonlygusti, si vous le postez et que je peux le compiler, je le voterai positivement.
hildred

8

Rubis 145

DATA.read.tap {| a | met a.reverse, a.tr ("\ x79 \ x59", "\ x59 \ x79")}
: y
__FIN__
__DNE__
Y:
}) "97x \ 95x \", "95x \ 97x \" (rt.a, esrever.a stup | a | {pat.daer.ATAD

L'idée principale est simple: il suffit de mettre la première moitié du code source à l'envers après celle __END__qui peut être lue à l'aide DATAde ruby. Ensuite, imprimez simplement l'inverse de ces données, puis imprimez les données, et vous récupérez le code source d'origine

Le problème est que cela devient un palindrome (notez que la première ligne a besoin d'une fin), nous devons donc briser la symétrie. Je viens d'ajouter un symbole :yau code et du code qui transformera ce symbole entre les minuscules et les majuscules entre les exécutions, revenant ainsi à l'état d'origine après deux exécutions.

Test un: ils peuvent être exécutés

$ ruby rq2.rb > rq2t.rb
$ ruby rq2t.rb > rq2tt.rb

Test deux: le résultat de deux exécutions retournera la source d'origine

$ diff rq2.rb rq2tt.rb
$

Test trois: le code n'est pas un palindrome (le run moyen est différent)

$ diff rq2.rb rq2t.rb
3c3
< :y
---
> :Y
6c6
< Y:
---
> y:

4

> <>, 21 19 octets

'rd3*70.r l?!;o90.<

Essayez-le ici!

Utilise l'interpréteur *> <> pour plus de commodité, mais c'est un code> <> valide.


Si l'erreur est autorisée, cela peut être fait en 16 octets:

'd3*}70.!r  !|o|

Essayez-le ici!


@JoKing merci! Il était 7h du matin et j'étais tout simplement trop fatigué pour mettre ça ensemble. Je vais le modifier dans quelques heures.
Discordian

4

Gol> <> , 11 octets

":5-}H}+5:'

Un octet entier coupé! c'est presque un palindrome, mais techniquement pas à cause du '+' et du '-', haha!

Essayez-le en ligne!

Les deux ci-dessous ne fonctionnent pas, ou du moins ils ne répondent pas aux spécifications du défi, mais le code ci-dessus le fait.

version légèrement plus jeune, 12 octets

"r2ssrH}+5:'

Golfé d'un octet, simplement en utilisant la citation double et en l'incrémentant de 5! Et cette nouvelle version ressemble moins à un palindrome.

Essayez-le en ligne!

ancienne version, 13 octets

"r2ssrHrss7r'

Il y avait un problème avec le précédent que JoKing a souligné, merci pour cela, maintenant cela fonctionne, mais avec le prix de 4 octets supplémentaires ...

Essayez-le en ligne!


1

Au secours, WarDoq! (27 octets)

25 octets ajoutés en raison de la lecture du code source.

<space>q

Comment ça marche:
<space>- un commentaire qui se termine sur un caractère non-espace
q- imprimer le code source inversé (q "espace")

Renversé:

q<space>

Comment ça marche:
q- imprimer le code source inversé (q pour l'instant)
<space>- un commentaire qui se termine sur un caractère non-espace, et ajouter un caractère au début de la commande q (faire "espace" q)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.