Avez-vous déjà voulu demander au compilateur "Pourquoi?" La plupart d'entre nous ont été frustrés lorsque le code ne fonctionne pas comme il se doit. Mathworks a donc implémenté une jolie petite fonction why
, qui répond à la question. Pour donner quelques exemples de MATLAB:
why
The programmer suggested it.
why
To fool the tall good and smart system manager.
why(2)
You insisted on it.
why(46)
Bill insisted on it.
Votre tâche consiste à implémenter la why
fonction dans votre langue. La fonction doit fonctionner avec et sans argument d'entrée (utilisez alternativement input 0
ou -1
). La fonction doit être nommée why
(ou, l'écriture why(n)
en STDIN devrait entraîner l'impression de la chaîne appropriée).
Si aucun argument n'est donné ou si l'argument est nul ou négatif, la chaîne de sortie doit être une phrase valide et aléatoire. Donc, il devrait y avoir une fonction why
, why()
, why(0)
ou why(-1)
qui retourne une phrase au hasard.
Si un argument d'entrée n
est donné (argument de fonction, pas STDIN), la sortie doit être la nième chaîne (définie ci-dessous). Donc, why(1)
devrait toujours produire (imprimer / afficher) le même résultat.
Les phrases sont construites comme suit (Type 1, Type 2 et Spécial). Toutes les phrases se terminent par !
.
"Person" "ending" !
"Verb" "adjective" "Person" !
A list of special cases
La liste des personnes:
Stewie
Peter
Homer
The programmer
The system manager
You
La liste des terminaisons:
suggested it
insisted on it
did it
La liste des verbes est:
To fool
To satisfy
To please
La liste des adjectifs:
the smart
the bald
the tall
the rich
the stupid
La liste des cas particuliers:
How should I know?
Stop asking!
Don't ask!
La façon de sélectionner un numéro est:
Type de phrases:
Odd number => Type 1
Even number => Type 2
n % 7 = 0 => Type 3 (% is the modulus operator)
Noms: Le nième nom est défini en utilisant le module (%).
n = 1: 1 % 7 => Stewie
n = 2: 2 % 7 => Peter
...
n = 6: 6 % 7 => You
n = 7: 7 % 7 => How should I know?
n = 11: 11 % 7 => The programmer
n = 14: 14 % 7 => Stop asking!
n = 21: 21 % 7 => Don't ask!
Terminaisons: La nième terminaison est également définie à l'aide du module. Supposons que les terminaisons (1, 2 et 3) sont répertoriées comme (1 2 2 3)
. Comme les nombres sont toujours impairs, utilisez((n+1)/2 % 4)
n = 1: ((1+1)/2 % 4) => suggested it
n = 3: ((3+1)/2 % 4) => insisted on it
n = 13: ((13+1)/2 % 4) => did it
Adjectifs: Le nième adjectif est défini à l'aide du module. Comme les nombres sont toujours pairs, utilisez:(n % 10)/2
n = 2: (2 % 10)/2 => Smart
n = 6: (6 % 10)/2 => The tall
...
Verbes: Le nième verbe est également défini à l'aide du module. Supposons que les verbes (1, 2 et 3) sont répertoriés comme (1 2 2 3)
Comme les nombres sont toujours identiques pour les verbes, utilisez(n % 8) / 2
n = 2: (2 % 8)/2 => To fool
n = 4: (4 % 8)/2 => To satisfy
n = 6: (6 % 8)/2 => To satisfy
n = 8: (8 % 8)/2 => To please
Maintenant, la façon d'en créer un au hasard devrait être assez simple, il suffit de sélectionner un au hasard n
.
Quelques exemples:
why
You suggested it!
why
To fool the tall Homer!
why
Don't ask!
why(1)
Stewie suggested it!
why(14)
Stop asking!
why(8)
To please the rich Stewie!
Les règles de golf du code standard s'appliquent. Un gagnant sera sélectionné une semaine après le jour où le défi a été publié.
why
ou serait-WHY
il acceptable?/2
de fonctionner. Cela donne des valeurs fractionnaires.13
devrait également êtreinsisted
(14/2 = 7% 4 = 3 = 2e d'insistance).the rich The programmer
cause du spécifiéthe
?The
etTo
dans vos listes devraient probablement être en minuscules pour correspondre à vos exemples ...Réponses:
JavaScript (ES6) 345
Je ne suis pas sûr des chiffres, mais voici ma tentative.
Testez l'exécution de l'extrait ci-dessous dans un navigateur compatible EcmaScript.
la source
0
comme délimiteur de chaîne au lieu de,
!split(0)
est la même longueur desplit','
(faire semblant que ce sont des backticks)C #, 502 octets
Ce projet doit avoir le AssemblyName défini sur pourquoi ce qui produira un exécutable avec le nom correct.
Entièrement golfé:
Indentation et nouvelles lignes pour plus de clarté:
Exemple d'entrée / sortie:
la source
Powershell
437461453 octetsEdit: manqué les verbes en double
Division entre le corpus et les calculs pour le comptage d'octets
to
,the
,it
et!
étant donné qu'ils ont fixé des lieux).Définit l'argument par défaut à 0 s'il n'est pas spécifié. Si l'argument est
<1
alors il obtient un nombre aléatoire<99
fn:1
et se réexécute. Techniquement, cela signifie-50
qu'il fonctionnera également, étant traité comme un cas aléatoire.Explication:
fn:1
99 Choisi pour enregistrer un octet. S'il y a plus de 99 phrases possibles ci-dessus (n'a pas été calculé), passez à 999 ou 9999 selon le cas (+1/2 octets)la source
MUMPS, 379 octets
Lorsqu'aucune entrée n'est donnée, un nombre aléatoire dans 0..839 est généré.
Usage:
La stratégie d'évaluation de gauche à droite de MUMPS permet d'économiser quelques bons octets entre parenthèses ici.
Note: voyez ces cordes qui ressemblent
"foo^bar^baz^qux"
? Ce sont ce que l'on appelle des "chaînes délimitées" et constituent le moyen standard de stocker des listes qui correspondent à la limite de taille de chaîne maximale, car MUMPS n'a pas réellement de listes / tableaux (ou, en fait, aucune structure de données en dehors des arbres). Pour les listes trop grandes pour tenir dans une seule chaîne, nous utilisons à la place des arbres de profondeur 1 et mettons les valeurs sur les feuilles de l'arbre. Amusement!la source
why
fonction. ;)Emacs Lisp 473 octets
Le plus grand « déchets » est probablement
format
,%s
... sections. Si des variables pouvaient être insérées dans les chaînes sans la spécification, cela économiserait 10 octets%s
et 12 autresformat
la source
Ruby
396378372 octetsJe suis sûr que ce n'est pas joué au maximum.
Edit: Je viens de réaliser que je ne connais pas la priorité des opérateurs. Tant pis..
la source
CJam, 281 octets
Lien permanent
Je n'ai jamais utilisé CJam auparavant, je vais donc suivre tous les conseils. Je suis sûr qu'il y a beaucoup de trucs que je ne connais pas!
(Je ne savais pas comment nommer cela en tant que fonction appelée "pourquoi" - il semble que les fonctions n'existent pas dans CJam - donc je ne sais pas si une réponse CJam est correcte ou non ...)
la source
Lua 5.3.0,
452460446 octetsC'est ma première tentative de golf à code, alors corrigez-moi si j'ai fait quelque chose de mal!
Non golfé:
la source
Python (2), 692 octets
J'apprends encore, alors s'il vous plaît soyez doux! :)
Fonctionne avec ou sans int comme argument de ligne de commande.
J'ai essayé de mettre l'accent sur l'exactitude du code autant que possible, comme pour générer des nombres aléatoires à partir
-sys.maxint - 1
desys.maxint
et afficher des phrases dans le bon cas.Le code repose très fortement sur les instructions if qui, j'en suis sûr, pourraient être remplacées par quelque chose de plus efficace.
Les commentaires sont les bienvenus!
Non golfé (1341 octets)
la source
argument%8/2-1
et supprimez le second. Vous pouvez également remplacer==0
par<1
.