Ecrivez une Quine en Anglais Ordinaire


41

Ecrivez un quine composé de vrais mots anglais séparés par des espaces simples. Un "mot" est défini comme une chaîne ne contenant que des lettres minuscules et majuscules ( /[a-zA-Z]+/en regex). Pour être "réel", votre mot doit être reconnu par le dictionnaire officiel Scrabble .

J'utilise le dictionnaire Scrabble car il donne une réponse définitive sur ce qui est valide ou non. Il y a trop de zones grises avec un dictionnaire normal. Notez que "A" et "I" (sans parler de "quine") ne sont pas des mots valides au scrabble.

Dans la plupart des langages de programmation, écrire quine uniquement à l' aide de lettres et d'espaces est presque impossible, vous avez la possibilité de remplacer les espaces simples entre les mots par un caractère de votre choix. Vous avez également la possibilité d’ajouter des caractères au début du premier mot et à la fin du dernier mot. Ces caractères ajoutés peuvent être n'importe quoi (y compris les retours à la ligne et les caractères non-ASCII) à l' exception des lettres (az, AZ) . Il y a une pénalité pour les ajouter cependant (voir Scoring).

Détails

  • Comme d'habitude, les quines ne peuvent pas lire ou accéder à leur propre code source. (Je dirais que la commande Q de HQ9 + viole cela.)
  • La sortie devrait aller à stdout ou à une alternative similaire. Il n'y a pas d'entrée.
  • Les mots n'ont pas besoin d'être mis en majuscule correctement. Ils peuvent avoir des majuscules et des minuscules n'importe où. La séquence de mots n'a pas besoin de sens.
  • Aucun mot ne peut être utilisé plus de 3 fois dans votre programme. Les mots avec une majuscule différente sont toujours le même mot (par exemple, "CHIEN", "chien" et "dOg" sont tous le même mot).
  • L'utilisation de langages tels que PHP ou HTML qui ne peuvent que masquer leur contenu est considérée comme une échappatoire triviale et n'est pas autorisée.
  • Le programme doit contenir au moins un mot.

Notation

Votre score est le nombre de "mots réels" dans votre programme plus les pénalités suivantes:

  • +1 pour chaque espace remplacé par un autre personnage
  • n n pour chaque n caractères que vous avez ajoutés avant le premier mot (oui, c’est n au pouvoir n)
  • n n pour chaque n caractères ajoutés après le dernier mot

Par exemple, le programme

We all LIKE PROgraMmING

marquerait 4 parce qu'il contient 4 mots; aucun caractère n'a été ajouté ou remplacé aucun espace. Sa sortie serait bien sûr We all LIKE PROgraMmING.

Le programme

!We@all LIKE#PROgraMmING- =

marquerait 4 + 2 + 1 + 27 = 34; 4 pour les mots, 2 pour les espaces remplacés, 1 pour !le devant et 27 pour - =le fin. Sa sortie serait bien sûr !We@all LIKE#PROgraMmING- =.

Le score le plus bas gagne. Tiebreaker va à la réponse avec le moins de points de pénalité. S'il y a toujours égalité, la réponse la plus votée l'emporte.


1
Ce dictionnaire existe-t-il aussi sous forme de liste? Il serait beaucoup plus utile de parcourir le document que de devoir vérifier chaque mot individuellement.
Martin Ender

16
Shakespeare quelqu'un?
Dwana


1
@JanDvorak Je ne crois pas… Le fait que je ne puisse rien écrire comme cela ne devrait pas inciter les autres à considérer cela comme une mauvaise question. C'est un défi valable, bien que assez difficile, n'est-ce pas?
Rorlork

7
Je suis toujours intéressé par une solution Shakespeare.
John Dvorak

Réponses:


25

golfscript, 8 mots + 8 symboles = 20 16 (3?)

{four"words.written~twice"four}words.written~twice

Les mots ne sont qu'un remplissage, le noyau est un noyau quine minuscule:

{".~"}.~

Dupliquer et évaluer une fonction qui ajoute simplement les instructions pour dupliquer et évaluer elle-même. Lorsqu'une fonction est imprimée, elle est automatiquement stringifiée. C'est la plus petite quine qui fait quelque chose .

Ou nous pourrions simplement utiliser un littéral de fonction qui ne soit jamais évalué. Mais c'est comme tricher ...

{whatever}

Vous n'avez pas besoin de concaténation. {a`b"x.y~z"c}x.y~z
Dennis

@ Dennis Je n'ai même pas besoin de l'inspection dans ce cas. Merci! Je sens qu'il faut que je demande quelque chose au PO ...
John Dvorak

8
@Céphalopod Je ne lis pas mon propre code source. J'appuie simplement une fonction sur la pile et le moteur d'exécution l'imprime pour moi, tout en sachant pertinemment que l'intégralité de mon code source est un littéral de fonction.
John Dvorak

1
Je pense que {whatever}cela violerait la règle trop triviale ("Utiliser des langages tels que PHP ou HTML qui permettent de masquer leur contenu est considéré comme une échappatoire triviale et n'est pas autorisé.")
Claudiu

1
@Claudiu c'est une règle contre les langues, pas les solutions. C'est pourquoi j'ai demandé.
John Dvorak

54

> <> , 25 mots + (22 + 1 1 + 1 1 ) extra = 57 49

Oh mon dieu, mon cerveau.

'brr3deep*clap6beep+orb5flap*leap4deep+clap5beep5flap*leap9deep9clap*beep+flap0placed apple alp0leap=clip?lob8blip*flip0clip.

Comme les règles indiquent "Il n'y a pas d'entrée.", Pour que ce programme fonctionne, vous devez diriger un fichier vide.

Le brrmot Oh et oui, est valide au Scrabble, comme le sont tsktsket pfft.

Explication

Tout d'abord, les mots suivants sont no-ops:

deep clap beep flap leap clip blip flip

C'est à cause de deux raisons:

  • abcdeflnuméros de poussée (10, 11, 12, 13, 14, 15 et la longueur de la pile). De plus, iappuie sur -1 si EOF est rencontré, vu qu’il n’ya pas d’entrée.
  • La pcommande affiche trois caractères v,y,xet place vla position x,y.

Oui,> <> vous permet de modifier le code source à la volée! Nous ne nous en servons pas vraiment, car nous n’avons besoin que du ppour sauter.

Si nous nous débarrassons de ces no-ops, nous obtenons:

'brr3*6+orb5*4+55*99*+0placed apple alp0=?lob8*0.

De la même manière, la laced apppartie de placed appleet la e alppartie de apple alpsont également no-ops, et le rrde brrseulement inverse la pile deux fois, ce que nous pouvons également supprimer:

'b3*6+orb5*4+55*99*+0pl0=?lob8*0.

Enfin, quelque chose qui ressemble à un programme régulier> <>! L'idée est d'utiliser la norme> <> quine, qui fonctionne comme suit:

  • La première 'analyse de chaîne commence, poussant chaque caractère rencontré jusqu'à ce que nous frappons un autre'
  • Nous continuons à pousser des caractères jusqu'à la fin de la ligne, à quel point nous renvoyons le pointeur d'instruction au début (puisque> <> est toroïdal)
  • Nous atterrissons à 'nouveau sur l'initiale et arrêtons l' analyse syntaxique des chaînes. Le résultat est que nous avons poussé chaque caractère du programme (sauf le premier ') sur la pile.

Ensuite se passe ce qui suit:

b3*6+o                Print the initial ' quote (ASCII 39)
r                     Reverse the stack
b5*4+                 Push a ';' (ASCII 59)
55*99*+0p             Replace the 'l' of 'lob' with ';'

(print loop)
l0=?;                 If the stack is empty, terminate. Otherwise...
o                     Print the top of the stack
b8*0.                 Jump back to the beginning of the loop

"Aucun mot ne peut être utilisé plus de 3 fois dans votre programme. Les mots avec une majuscule différente sont toujours le même mot (par exemple," CHIEN "," chien "et" dOg "sont tous le même mot)." Quoi qu'il en soit, vous obtenez un vote positif de ma part, monsieur.
Rorlork

@rcrmn J'ai continué à ajouter tant de mots que j'ai complètement oublié cette règle! Corrigé maintenant, même si je voulais éviter de devoir utiliser i.
Sp3000

1
TIL "pa", "la" et "be" sont des mots valides dans Scrabble
John Dvorak le

20
Lire votre programme à haute voix me laisse imaginer à quoi ressemblaient les ordinateurs à cartes perforées.
Calvin's Hobbies

10
Je pense que vous avez volé ce programme à la source du système d'exploitation de R2D2.
cessé de tourner dans le sens anti-horaire le

21

Poulet , 1 mot

Je ne suis pas normalement dans les esolangs, mais celui-ci semblait parfait pour cela. Je pense que c'est une vraie quine:

chicken

Pousse 1 poulet à la pile. La pile est ensuite affichée.


1
Ceci (et la réponse de Julia) frontière sur trivialement invalide. Vous pouvez les garder ici, mais aucune promesse d'acceptation.
Les passe-temps de Calvin

@ Calvin'sHobbies Dans un souci d'équité, je supprimerai volontiers ceci si vous pensez que c'est trop échappatoire - Votre appel. Je travaillais sur une solution AppleScript, mais j'ai été frustré par la règle "Aucun mot ne peut être utilisé plus de 3 fois", ce qui semble rendre la tâche particulièrement difficile. Alors je me suis tourné vers le truc bon marché à la place :-)
Digital Trauma le

@ Calvin'sHobbies: Je suis l'auteur de la soumission de Julia. Je partage le sentiment de DigitalTrauma de supprimer mon message si vous estimez qu'il est trop marginal. J'ai aussi fait R. Est-ce trop proche aussi?
Alex A.

@ Alex et DT: C'est à vous de décider. Je n'accepterai probablement ni l'une ni l'autre réponse, mais cela ne me dérange pas qu'ils soient ici. Je suis toujours un peu déchiré par la réponse R, bien que l'idée soit à peu près la même que celle de Julia ...
Calvin's Hobbies

12

R, 2 mots + 1 remplacement + 1¹ fin = 4

Les objets qui ne sont affectés à rien sont simplement imprimés sur stdout. Puisqu'une expression est un objet, le code suivant s'imprime:

expression(puppy)

Soumission précédente, 5 points:

function(hello)hello

Vous avez été inspiré par ma tricheuse solution en 3 points, n'est-ce pas? ;-)
John Dvorak

1
@ JanDvorak: En fait, je n'avais pas vu cela avant de poster ceci, mais c'est maintenant une source d'inspiration rétrospective.
Alex A.

12

Python 2, 58 = 37 mots + 21 signes de ponctuation

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash and%rif reload else fire;exec prog"or English;ramming=None or"ramming"if license else pirate;print fear%puzzle+ramming'if reload else fire;exec programming

Avec quelques nouvelles lignes ajoutées:

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash
and%rif reload else fire;exec prog"or English;ramming=None or
"ramming"if license else pirate;print fear%puzzle+ramming'
if reload else fire;exec programming

La restriction de trois utilisations par mot était ce qui rendait celle-ci difficile à écrire. Je voulais utiliser la chaîne avec tout le code plus de 3 fois, et chaque chaîne devait être isolée avec des if else and oropérateurs dont je ne disposais que dans une quantité limitée.


@ user23013 Oups, j'ai oublié de le remplacer par un identifiant aléatoire.
Feersum

7

Julia, 1 mot + 1¹ précédent = 2

Julia a des objets appelés symboles qui sont définis en utilisant un précédent :. Tout comme ma solution R, cela n’imprime que lors de la soumission.

:puppy

5

Ligne de commande DOS, 10

& was unexpected at this time.

Erreur quine, pas banni semble-t-il


1
Ce code ne "code" aucune partie du code. Voir notre définition pour une quine
MilkyWay90

@ MilkyWay90 L'utilisation de la définition &code l'ensemble du code et arrête la sortie
l4m2 Le

Oh, pouvez-vous modifier la réponse pour que je puisse supprimer mon vote négatif
MilkyWay90

1
Réponse échappatoire intéressante ... est &un mot, cependant?
Programmes Redwolf

@RedwolfPrograms non, mais il & y a deux symboles. 5 (mots) + 1 (suivi) + 2 ^ 2
interligne

3

Enchantements runiques , score 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

Essayez-le en ligne!

Mots: hot ox not knot(4)
Remplacements: 3 4 +(3)
Avant: "(1)
Après:@ (1)

Tous les personnages GNOQWghtxzsont non-op dans Runic (ainsi que l'espace et la période, mais plus d'espaces n'aide pas les scores). Avec la fonctionnalité Xet krequis pour, cela donne la liste de mots disponible suivante:

5 Letter Word(s)
  thong
4 Letter Word(s)
  gong goth gowk gown hogg hong honk howk knot know nogg nowt tong town wonk wont zonk
3 Letter Word(s)
  got gox hog hon hot how nog noh not now nth own tho tog ton tow two who wok won wot
2 Letter Word(s)
  go ho no oh on ow ox to wo

J'ai choisi les cerises en fonction des besoins de l'espace dans lequel elles allaient et je leur ai donné une drôle de tête.

La suppression de tous les caractères NOP donne le quine suivant:

"3X4+k@

Essayez-le en ligne!


0

hein? - 1 mot + 1 ** 1/1 ^ 1 = 1 caractère après le mot = 2 score total.

Ouch!

Ouch! est un quine valide à hein?

Exécutez-le comme il est pythuhn.py Ouch!, et il ne peut y avoir de fichier nommé Ouch!dans le répertoire en cours.

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.