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 whyfonction dans votre langue. La fonction doit fonctionner avec et sans argument d'entrée (utilisez alternativement input 0ou -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 nest 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é.
/2de fonctionner. Cela donne des valeurs fractionnaires. 13devrait également être insisted(14/2 = 7% 4 = 3 = 2e d'insistance).
the rich The programmercause du spécifié the?
Theet Todans vos listes devraient probablement être en minuscules pour correspondre à vos exemples ...
whyou serait-WHYil acceptable?