Codegolf: Quine et Antiquine


13

Ce défi est similaire à Can you Meta Quine?

Une quine est un programme qui se produit lui-même sur STDOUT. Ce défi est de produire un programme A qui lors de l'exécution produit un programme B sur STDOUT. Le programme B lorsqu'il est exécuté produit le programme A sur STDOUT. Les programmes A et B doivent être écrits (et exécutés) dans la même langue. La question liée contraint A! = B. Cela semblait trop facile. Donc, pour cette question, nous insistons sur le fait que A et B sont des antiquines, en utilisant les règles suivantes:

  1. Les programmes A et B ne peuvent pas utiliser les mêmes caractères, sauf pour les espaces blancs et les séparateurs d'instructions et les caractères de ponctuation.
  2. Les programmes A et B doivent chacun contenir au moins un caractère qui n'est ni un espace ni un séparateur d'instructions, ni un caractère de ponctuation.
  3. Aux fins des règles 1 et 2, le terme «espace» exclut tout symbole ou séquence de symboles qui lui-même est une instruction, un opérateur ou un symbole qui est interprété (par opposition à un séparateur). Par conséquent, dans le langage des espaces blancs, il n'y a pas d'espace blanc.
  4. Un séparateur d'instructions est un élément syntaxique conventionnellement utilisé dans le langage pour séparer les instructions. Cela inclurait la nouvelle ligne en python, ou le point-virgule en Java, perl ou C.
  5. Un caractère de ponctuation est un caractère ASCII qui n'est ni un espace ni dans la classe de caractères de mot POSIX (c'est-à-dire qu'un trait de soulignement n'est pas une ponctuation à cet effet) - c'est-à-dire ispunct()qu'il retournerait vrai, et ce n'est pas le cas _.
  6. Le programme A lors de son exécution doit produire un programme (programme B) sur son STDOUT, qui, à son tour, produit le programme A.
  7. Les programmes A et B doivent être dans le même langage de programmation.
  8. Le langage de programmation utilisé doit en fait être un langage de programmation. À moins que vous ne fassiez un bon cas, je suggérerai que Turing soit complet.
  9. Au moins l'un des A et B doit exécuter au moins une instruction dans le langage.

C'est le golf de code, donc la réponse la plus courte l'emporte, le score étant la longueur du programme A en octets (c'est-à-dire que la longueur du programme B n'est pas pertinente).


Pouvez-vous s'il vous plaît ajouter "ponctuation" à la liste des exceptions dans la première clause? Il est impossible de résoudre cette tâche dans de nombreuses langues (en particulier celles qui vous demandent des accolades frisées dans la fonction principale) sinon.
FUZxxl

liés mais probablement suffisamment différents.
Martin Ender

@FUZxxl J'ai autorisé les signes de ponctuation mais exclu les traits de soulignement.
abligh

1
Pour les besoins ici, sont Aet sont aconsidérés comme des "personnages" différents?
HostileFork dit de ne pas faire confiance au SE

1
Il serait préférable que vous fournissiez une liste complète des caractères ASCII qui correspondent à la règle 5.
aditsu quitte car SE est EVIL

Réponses:


5

GolfScript, 13 octets

1{\~\".~"}.~

La sortie est

-2{\~\".~"}.~

qui génère le programme initial.

Le nombre d'octets inclut le LF de fin, car la sortie de la sortie le contiendra.

Essayez-le en ligne.

Comment ça fonctionne

1       # Push 1.
{       # Start code block.
  \~\   # Apply logical NOT to the second topmost element of the stack.
  ".~"  # Push that string.
}       # End code block.
.~      # Duplicate the code block and execute the copy.

GolfScript imprime le contenu de la pile à la fin.


Veuillez relire l'énoncé du problème -Programs A and B may not use any of the same characters, save for whitespace and statement separators, and punctuation characters.
isaacg

1
Tout sauf 1et 2c'est la ponctuation.
Dennis

OK, les règles ont été modifiées depuis ma dernière lecture.
isaacg

Ouaip, ça marche. J'avais formulé les règles pour empêcher l'utilisation d'espaces blancs comme déclarations, mais j'avais oublié que la même faille serait présente pour la ponctuation. Donc échappatoire légalement exploitée.
abligh

14

Pascal (731 caractères)

Programme A:

program s;{$h+}uses sysutils;const p='program s;{$h+}uses sysutils;const p=';a='a';aa=''';';aaa='a=''';aaaa='''';aaaaa='begin write(lowercase(p+aaaa+p+aa+aaa+a+aa+a+aaa+aaaa+aa+aa+a+a+aaa+aaa+aaaa+aa+a+a+a+aaa+aaaa+aaaa+aa+a+a+a+a+aaa+stringreplace(stringreplace(stringreplace(stringreplace(aaaaa,aaaa,aaaa+aaaa,[rfreplaceall]),''lower''+''c'',''tm''+''p'',[]),''up''+''c'',''lower''+''c'',[]),''tm''+''p'',''up''+''c'',[])+aa+aaaaa))end.';begin write(upcase(p+aaaa+p+aa+aaa+a+aa+a+aaa+aaaa+aa+aa+a+a+aaa+aaa+aaaa+aa+a+a+a+aaa+aaaa+aaaa+aa+a+a+a+a+aaa+stringreplace(stringreplace(stringreplace(stringreplace(aaaaa,aaaa,aaaa+aaaa,[rfreplaceall]),'lower'+'c','tm'+'p',[]),'up'+'c','lower'+'c',[]),'tm'+'p','up'+'c',[])+aa+aaaaa))end.

Programme de sorties B:

PROGRAM S;{$H+}USES SYSUTILS;CONST P='PROGRAM S;{$H+}USES SYSUTILS;CONST P=';A='A';AA=''';';AAA='A=''';AAAA='''';AAAAA='BEGIN WRITE(UPCASE(P+AAAA+P+AA+AAA+A+AA+A+AAA+AAAA+AA+AA+A+A+AAA+AAA+AAAA+AA+A+A+A+AAA+AAAA+AAAA+AA+A+A+A+A+AAA+STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(AAAAA,AAAA,AAAA+AAAA,[RFREPLACEALL]),''LOWER''+''C'',''TM''+''P'',[]),''UP''+''C'',''LOWER''+''C'',[]),''TM''+''P'',''UP''+''C'',[])+AA+AAAAA))END.';BEGIN WRITE(LOWERCASE(P+AAAA+P+AA+AAA+A+AA+A+AAA+AAAA+AA+AA+A+A+AAA+AAA+AAAA+AA+A+A+A+AAA+AAAA+AAAA+AA+A+A+A+A+AAA+STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(AAAAA,AAAA,AAAA+AAAA,[RFREPLACEALL]),'LOWER'+'C','TM'+'P',[]),'UP'+'C','LOWER'+'C',[]),'TM'+'P','UP'+'C',[])+AA+AAAAA))END.

Programme de sorties A.


3
J'aime la (mauvaise) utilisation de la traduction des cas.
abligh

11

ROT13 ( ne participe plus à la compétition après la mise à jour des règles )

Je ne sais pas si cela compte comme langue, mais je n'ai certainement pas rattrapé le défi. Répond habituellement à certains utilitaires tels que ceux sedacceptés. Cependant, c'est un appel au jugement, donc si ça ne compte pas, je le supprimerai (y a-t-il une méta-discussion quelque part sur ce qui compte comme langue? Edit: il y en a maintenant )

A

Cycles entre Aet N:

~>> echo "A" | rot13
N
~>> echo "A" | rot13 | rot13
A

Je pense que cela ne fonctionne pas, car rot13 prend simplement des informations sur STDIN, pas d'exécuter un programme. Si vous faites valoir qu'il s'agit d'un programme de longueur nulle, cela ne satisfait pas à la règle 2. Le programme (avec sed) est ce qui est passé sed -e. Si cela était acceptable, ce catserait une quine, et ce tacserait une quine et une antiquine. Cependant, rien ne produit la source cat, tacni d'ailleurs rot13.
abligh

@abligh Si rot13 est la langue utilisée, pourquoi devrais-je imprimer le code source de rot13? De plus, si je lance Golfscript, Python ou toute autre chose, je vais probablement lui passer le code source via stdin ou fichier, donc il n'y a pas vraiment de différence. Dans ce cas, rot13 est l'interprète.
Ingo Bürk

rot13en tant que langage de programmation ne semble satisfaire à aucune définition raisonnable de «langage de programmation», et il n'interprète rien. Je vais modifier la question pour que ce soit plus clair.
abligh

Ça va pour moi. Je laisserai cette réponse comme n'étant plus en compétition et commencerai une méta discussion. Beau défi, au fait. J'ai hâte de voir de "vraies" solutions!
Ingo Bürk
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.