Votre tâche consiste à traduire un nombre lisse-103 en un mot anglais, en utilisant la méthode décrite ci-dessous.
Comment?
- Générez la liste des facteurs premiers (avec répétition) du nombre saisi.
- Trier la liste:
- Si 2 n'est pas l'un des facteurs premiers, triez la liste par ordre croissant.
- Si 2 est l'un des facteurs premiers, supprimez-le de la liste et triez les facteurs restants par ordre décroissant.
Traduisez chaque facteur dans une lettre, en utilisant le tableau suivant:
3 = S 13 = L 29 = X 43 = O 61 = Z 79 = H 101 = K 5 = P 17 = Q 31 = N 47 = R 67 = T 83 = V 103 = Y 7 = M 19 = U 37 = C 53 = A 71 = E 89 = D 11 = F 23 = I 41 = W 59 = G 73 = J 97 = B
Remarque : Ce tableau a été construit de manière empirique afin de maximiser le nombre de mots possibles. Pour les plus curieux, voici une liste de 2 187 mots qui peuvent être encodés de cette façon (peuvent inclure un langage grossier). Ce n'est certainement pas garanti d'être optimal, mais c'est assez bon pour ce défi.
Exemples
Exemple 1: 579085261 (ordre croissant)
- Les facteurs premiers sont [37, 47, 53, 61, 103] .
- 2 n'est pas un facteur premier, nous conservons donc la liste triée par ordre croissant.
- 37 = C, 47 = R, etc. La sortie est "CRAZY".
Exemple 2: 725582 (ordre décroissant)
- Les facteurs premiers sont [2, 11, 13, 43, 59] .
- 2 est un facteur premier, nous le supprimons et trions la liste par ordre décroissant, ce qui donne:
[59, 43, 13, 11] . - 59 = G, 43 = O, etc. La sortie est "GOLF".
Exemple 3: 10757494 (avec un facteur répété)
- Les facteurs premiers sont [2, 11, 71, 71, 97] .
- 2 est un facteur premier, nous le supprimons et trions la liste par ordre décroissant, ce qui donne:
[97, 71, 71, 11] . - 97 = B, 71 = E, 11 = F. La sortie est "BEEF".
Clarifications et règles
- Il est garanti que le numéro d’entrée est lisse et divisible par 2 au maximum une fois.
- Par définition, un nombre entier est un entier positif .
- L'entrée et la sortie peuvent être traitées dans n'importe quel format raisonnable. La sortie peut être en minuscule ou en majuscule. Les espaces de fin sont acceptables. Les espaces blancs ne sont pas.
- Si votre programme / fonction ne peut pas prendre en charge de grandes entrées, veuillez le spécifier dans votre réponse.
- C'est le code golf, donc la réponse la plus courte en octets est gagnante.
Cas de test
34874 --> ARM
483254 --> BAR
353722 --> EAR
494302 --> EGG
39061 --> FAT
6479 --> FUN
60421 --> ICE
54166 --> JAM
48911474 --> BETA
2510942 --> BOOM
2303854 --> DOOM
844261 --> FIRE
1606801 --> MAZE
1110085 --> PAGE
5212974 --> BALLS
67892046 --> BEANS
885396199 --> CREEK
67401037 --> FUNKY
27762173 --> QUICK
1238440506 --> ARROWS
33045832681 --> CRAGGY
1362714005 --> PIRATE
137302698 --> TROLLS
358310128062 --> BEGGARS
40255151586 --> DETAILS
164633248153 --> FIXATED
621172442227 --> UNRATED
2467812606 --> VACUUMS
86385078330 --> GROWNUPS
26607531423091 --> UNWORTHY
Ò
sur579085261
, se sent comme <s> Emigna </ s> Adnan a déjà commencé.<=103
... votre résultat estPIRATE MAZE
, ouDOOM VACUUMS
...Réponses:
Gelée ,
29 à27 octetsMerci à @JonathanAllan pour le golf d'un octet!
Essayez-le en ligne!
Contexte
est un littéral numérique. Les caractères entre les guillemets sont remplacés par leurs index basés sur 1 dans la page de code Jelly , et le tableau résultant est interprété comme un nombre base 250. Cela donne le nombre entier c: = 288824892868083015619552399 .
Comment ça marche
la source
Gelée , 36 octets
Essayez-le en ligne!
Explication
Constante d'assistance
1£
(produit“SPMFLQUIXNCWORAGZTEJHVDBKY ”
avec un 1 ajouté)Programme principal
J'ai l'impression que ma compression de la liste surpasse facilement l'autre réponse de Jelly, mais que mon algorithme d'utilisation pourrait être beaucoup plus efficace. Peut-être que je vais essayer de les combiner.
Jelly , 31 bytes, inspiré par la réponse de @ Leakynun
Essayez-le en ligne! (légèrement modifié pour courir beaucoup plus vite)
Est-ce qu’il est incohérent d’imprimer une nouvelle ligne de fin (mais PPCG autorise normalement les réponses avec ou sans nouvelle ligne, alors je suppose que cela fonctionne aussi?). Est très lent (O ( n ) où n est l'entrée, et ces nombres ne sont pas tout à fait petits…)
Explication
Constante d'assistance
1£
(produit“¶SPMFLQUIXNCWORAGZTEJHVDBKY”
, où¶
est newline)Programme principal
la source
05AB1E ,
3938 octetsUtilise le codage CP-1252 . Essayez-le en ligne!
la source
Ø
était la partie de ce qui a battu le mien de 20 octets quand même: P.Python 2,
220217 octetsEssayez-le en ligne - exécute uniquement le plus petit scénario de test sans manquer de mémoire
Ungolfed:
Cette version ne l'utilise pas
exec
, vous pouvez donc tester tous les cas de test sans manquer de mémoire.Essayez-le en ligne
la source
Ruby ,
139138134125120115 + 7 =146145141132127122 octetsUtilise le
-rprime
drapeau pour +7 octets.-1 octet de @daniero. -4 octets en se rappelant que je peux simplement faire une vérification de la divisibilité régulière au lieu de vérifier l'existence de la division première
2
.-9 octets de la solution Python de @ mbomb007 me rappelant un moyen plus rapide de récupérer la lettre correspondante.
-5 octets, car les espaces de fin sont maintenant autorisés.
-5 octets de découverte
Enumerable#find_index
Essayez-le en ligne! (tous les cas de test)
Explication
la source
zip
et"
Bash + utilitaires GNU + paquet bsd-games, 170
Cela semble plutôt non optimal, mais cela fonctionne:
Essayez-le en ligne .
la source
Gelée , 33 octets
Essayez-le en ligne!
la source
Japt ,
5150 octets49 octets de code, +1 pour le
-P
drapeau.Essayez-le en ligne!
Cela pourrait être bien plus court si seulement Japt avait quelques fonctionnalités en plus ...
Explication
`yspmflquixncÙgz’jhvdbk`
est exactement la même chaîne que tout le monde utilise compressée autant que Japt peut la compresser (3 octets de moins que l'original!). À l'heure actuelle, le seul outil de compression intégré de Japt remplace les paires courantes de lettres minuscules par un caractère à un octet.Examinons donc le code actuel:
Puis
£
est utilisé pour remplacer chaque élémentX
dans le résultat comme ceci:Le résultat est un tableau de caractères à ce stade, de sorte que l'
-P
indicateur le joint en une seule chaîne et le résultat est envoyé implicitement à la sortie.la source
Gelée , 40 octets
Essayez-le en ligne!
Vérifiez tous les tests en une fois! (légèrement modifié)
la source
Pyth ,
54 à47 octets7 octets grâce à isaacg
(
❤
représente un caractère non imprimable)Pyth n'a pas beaucoup d'intégrateurs principaux ...
Hexdump:
Essayez-le en ligne!
la source
J , 59 octets
Essayez-le en ligne!
Assez facile...
la source
PHP, 173 octets
Version en ligne
Étendu
PHP, 178 octets
Version en ligne
Étendu
la source
Python, 1420 octets
Cela pourrait certainement être court-circuité, mais c’est ma tentative de le résoudre sans chiffres ni littéraux de chaîne. Je réalise que c'est un problème de code-golf et que ce n'est pas tout à fait court mais je voulais le partager quand même, je ne sais pas si cela enfreint les règles ou pas.
C'était très amusant à faire, j'ai utilisé l'algorithme de ce billet de blog pour réduire la représentation numérique ASCII de "SPMFLQUIXNCWORAGZTEJHVDBKY" dans l'expression de décalage de bit que j'utilise. En général, je me suis également beaucoup inspiré de ce blog, je voulais l’essayer moi-même et c’était un bon défi de le faire.
Voici une version légèrement plus lisible, avec quelques noms de variables plus sensibles aussi
la source