Avertissement: ce défi contient des spoilers légers pour The Secret of Monkey Island.
Vers la fin du jeu, vous êtes conduit à travers les catacombes par un chef de navigateur préservé comme par magie:
Vous avez besoin de son collier globe oculaire, mais la tête hésite à vous le donner. Une façon de l'obtenir est de continuer à mendier:
Guybrush: Puis-je s'il vous plaît avoir ce collier?
Chef: Non, mais merci d'avoir demandé si poliment.
Guybrush: Oh allez, pleeeeease?
Chef: Vous pouvez mendier tout ce que vous voulez, mais vous ne pouvez pas l'avoir.
Guybrush: Assez s'il vous plaît?
Chef: Vous pouvez mendier tout ce que vous voulez, mais vous ne pouvez pas l'avoir.
Guybrush: Assez JOLI s'il vous plait?
Chef: Vous pouvez mendier tout ce que vous voulez, mais vous ne pouvez pas l'avoir.
Guybrush: Assez s'il vous plaît avec du sucre sur le dessus?
Tête: Oh, d'accord, gros bébé. Vous pouvez l'avoir. Hé, à quoi ça sert un collier si vous n'avez pas d'épaules?
Le défi
Écrivez un programme complet qui imprime la boîte de dialogue ci-dessus. Le hic, c'est que chaque fois que le programme est appelé, il ne devrait imprimer que deux lignes (une plaidoirie par Guybrush et la réponse du chef). Par exemple, si votre soumission est écrite en Python, l'utilisation devrait ressembler à ceci:
$> python please.py
Guybrush: May I please have that necklace?
Head: No, but thanks for asking so politely.
$> python please.py
Guybrush: Oh come on, pleeeeease?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty PRETTY please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please with sugar on top?
Head: Oh, all right, you big baby. You can have it. Hey, what good's a necklace if you don't have shoulders?
Invoquer le programme plus de 5 fois peut entraîner un comportement indéfini, vous pouvez donc soit boucler, continuer à imprimer les deux dernières lignes ou le programme peut même être interrompu après la 5e invocation.
Vous pouvez écrire dans un fichier du répertoire de travail ou modifier le code source du programme lui-même pour suivre les appels. Dans ce dernier cas, votre programme ne doit pas dépendre de son propre nom de fichier. (Dans le premier cas, vous pouvez supposer que le nom de fichier de votre programme n'entrera pas en conflit avec les noms de fichiers dont dépend votre programme.)
Vous ne devez pas supposer un environnement de type REPL ou que des données soient conservées dans la RAM entre les invocations. Par exemple, si vous répondez dans Mathematica, vous devez supposer que je quitte le noyau entre les invocations.
Il s'agit du code golf, la réponse la plus courte (en octets) l'emporte. Si votre programme dépend de l'existence de fichiers supplémentaires avant la première invocation , ajoutez son nom et son contenu à votre nombre d'octets.
la source
node please.js
5 sorties différentes.Réponses:
Python, 224 + 97 + 1 = 322 caractères
Une solution des plus simples pour tout démarrer. Merci à gnibbler de m'avoir aidé à raser 18 octets!
Nécessite que le fichier
z
soit présent dans le même répertoire (+1 pour le nom de fichier, +224 pour la taille du fichier):Vous pouvez générer
z
avec les éléments suivants:Production:
la source
line1\nline2|line3\nline4|line5\nline6|line7\nline8|line9\nline10
maintenant vous pouvez diviser|
et justeprint D[n]
Lisp commun (SBCL): 659 caractères
Explications
format
avecnil
).Ce ne sera pas la soumission la plus courte, mais je pensais que c'était une bonne approche du problème.
Première invocation
Invocations ultérieures
la source
C # - 593 + 1 + 1 caractères (595)
Modifications: mis à jour avec les suggestions de Martin et diverses autres optimisations
Le premier +1 est un nom de fichier. Le deuxième +1 correspond au contenu de ce fichier. Sans tous les espaces et les sauts de ligne supprimés, vous pouvez le lire:
Explication
S'appuie sur un fichier texte appelé "x" pour être présent dans le répertoire. Doit initialement contenir un zéro et est utilisé pour stocker la progression.
Le programme extrait l'élément pertinent du tableau de chaînes en fonction de la progression et écrit la progression à la fin. Certaines lignes réutilisées pour raccourcir la longueur, d'où la logique de sélection d'index
h+b[(a+5)/6*2+1]
pour la sélection des réponses.Production
Mon premier golf de code, probablement pas le plus court possible en C # mais bon - Monkey Island, n'a pas pu résister!
Code supprimé:
la source
a<1?1:a<8?3:9
, si C # prend en charge les entiers véridiques, alors aussia?a<8?3:9:1
. Mais vous pouvez probablement même utiliser la division entière et faire(a+5)/6*2
et déplacer la dernière chaîne de la tête pour remplacer la première vide (index 5). Et essayez des trucs commeusing s=System.String;
. (Oh et vous pourriez peut-être omettre l'espace de noms, ou même utiliser l'espaceSystem
de noms pour éviterSystem
dans toutes les utilisations.)JS,
488473Actualiser 5 fois la page contenant ce code affiche les 5 différentes boîtes de dialogue.
Démo:
http://c99.nl/f/212197.html
la source
Perl - 356 octets
Une approche d'auto-modification, avec des substitutions pour les chaînes communes.
Exemple d'utilisation:
la source