À chacun de ces neuf mots prêtant à confusion , attribuez un nombre de 1 à 9 comme vous le souhaitez:
though
through
thorough
Thoreau
throw
threw
trough
tough
troll
Écrivez un programme qui accepte une chaîne. Si l'entrée est l'un de ces neuf mots, sortez le numéro que vous lui avez attribué. Si l'entrée n'est pas l'un des mots ci-dessus, le programme peut faire n'importe quoi (y compris une erreur ou une boucle pour toujours).
Les mots sont sensibles à la casse, par exemple Thoreau
, devraient produire un nombre compris entre 1 et 9 mais thoreau
ne feront pas nécessairement la même chose.
Exemple
Supposons que vous attribuez les numéros comme suit:
though 9
through 2
thorough 7
Thoreau 6
throw 3
threw 5
trough 4
tough 1
troll 8
Alors quand tough
est entrée, 1
devrait être sortie.
Quand through
est entrée, 2
devrait être sortie.
Quand throw
est entrée, 3
devrait être sortie.
. . .
Quand though
est entrée, 9
devrait être sortie.
Toutes les autres entrées peuvent faire n'importe quoi.
Détails
- Prenez la chaîne d'entrée via stdin ou la ligne de commande et sortez-la vers stdout.
- La sortie peut contenir une seule nouvelle ligne de fin.
- Au lieu d'un programme, vous pouvez écrire une fonction qui prend une chaîne et imprime le résultat normalement ou le renvoie.
- La soumission la plus courte en octets l'emporte .
la source
find
méthode de chaîne Python . Ensuite, les règles ont changé. Idée intelligente pas si intelligente maintenant.Réponses:
CJam,
11 97 octetsComment ça marche :
Nous utilisons le fait que la somme des codes ASCII + 2 modulés avec 11 donne un très bel ordre de 1 à 9 puis 10 pour les neuf mots concernés. Voici la commande:
Explication du code :
4 octets enregistrés grâce à user23013
Essayez-le en ligne ici
la source
q1b2+B%
.Pyth, 8 caractères
Essayez-le en ligne: Démonstration ou suite de tests
J'utilise le devoir:
Explication:
BTW, j'ai trouvé le nombre magique 8109 en utilisant ce script:
fqr1 10Sme%CdT.z1
.la source
Python 2,
9254 octetsLa chaîne d'index est créée avec
for word in words: print chr(hash(word)%95+32),
. Comme indiqué dans la réponse de Jakube, la fonction de hachage donnera des résultats différents selon la version de Python. Cette chaîne d'index est calculée sur Python 2.7.6 64 bits.Réponse plus longue (92 octets) mais moins cryptique:
Les programmes renvoient 1-9 car, bien que Thoreau ait jeté un troll dur dans cet ordre. Lorsque l'entrée n'est pas trouvée, find renverra un -1 qui se transforme en zéro après le
+1
.la source
0
truc n'est plus nécessaire. Désolé de l'avoir changé.Python 2.7.9 version 32 bits, 22 octets
Remarquez que la version est vraiment importante ici. Vous obtiendrez des résultats différents si vous utilisez une version 64 bits de Python. Étant donné que la
hash
méthode calcule les valeurs de hachage 64 bits au lieu de 32 bits.La mission est:
Essayez-le en ligne: http://ideone.com/Rqp9J8
la source
sorted(...)==range(1,10)
, je me suis arrêté.Pyth, 7 octets
J'utilise l'attribution suivante:
Cz
interprète l'entrée comme un nombre de base 256. Ensuite, nous prenons ce mod 31, soustrayons 1, et prenons le résultat mod 10. Pseudocode équivalent:Démonstration , test du harnais .
la source
Python 2, 27 octets
Avec cette mission:
Plusieurs variantes sont possibles, par exemple
la source
Japt , 6 octets
Essayez-le | Vérifier tous les mots
Explication
Profite du fait que, lors de l'analyse d'une
n
chaîne de base en un entier, JavaScript arrêtera l'analyse s'il rencontre un chiffre supérieur àn
et retournera le résultat jusqu'à ce point. En utilisant ici la base 32 (chiffres0-v
), lesw
s dans "jeté" et "jet" sont, pour l'essentiel, ignorés.JavaScript, 22 octets
Une traduction directe - ne semble pas utile de la publier séparément.
la source
C (gcc) , 66 octets
Essayez-le en ligne!
la source
-O
indicateur du compilateur.h;f(char*s){for(h=33;*s;)h^=*s++;h=index("(Z5qW]2@H",h)-"H"+9;}
Java 8,
5325 octetsou
Port de @Optimizer réponse CJAM de, parce qu'il ( le plus probable) ne peut se faire une plus courte en Java ..
Essayez-le en ligne.
la source
parseInt
, n'est-ce pas? Un port de ma solution ne serait-il pas plus court?parseInt
une base donnée, mais malheureusement, il est assez excessif en octets en raison de l'exigence de classe statique:Long.parseLong(...,32)
comme variante la plus courte. De plus, il semble échouer pour"throw"
(et"threw"
aussi) en Java pour une raison quelconque .w
est en dehors de la plage de base 32, semble-t-il (et l'utilisation de 33 donne des résultats incorrects).Gelée , 7 octets
Essayez-le en ligne!
Boring Jelly port de la fantastique réponse CJam.
la source