Définition
Le rang d'un mot est défini comme la position du mot lorsque toutes les permutations (ou dispositions) possibles de ses lettres sont organisées par ordre alphabétique, comme dans un dictionnaire, peu importe si les mots ont un sens ou non.
Examinons ces deux mots - «bleu» et «vu». Pour commencer, nous écririons tous les arrangements possibles des lettres de ces mots dans l'ordre alphabétique:
"blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl",
"eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb",
"ulbe","uleb"
"seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen",
"sene","snee"
Regardons maintenant à gauche et trouvons la position des mots dont nous avons besoin. On voit que le mot "bleu" est en 4ème position et "vu" est en 10ème position. Ainsi, le rang du mot "bleu" est 4, et celui de "vu" est 10. C'est la façon générale de calculer le rang d'un mot. Assurez-vous de commencer à compter à partir de 1 seulement.
Tâche
Votre tâche consiste à écrire un code pour prendre n'importe quel mot en entrée et afficher son rang. Le rang doit être la sortie. Faites attention aux mots contenant des lettres répétées.
Exemples
"prime" -> 94
"super" -> 93
"bless" -> 4
"speech" -> 354
"earth" -> 28
"a" -> 1
"abcd" -> 1
"baa" -> 3
Vous pouvez supposer que l'entrée est entièrement en minuscules et l'entrée ne contiendra que des caractères alphabétiques . De plus, si un espace vide ou une chaîne non valide est entré, vous pouvez renvoyer n'importe quoi.
Notation
C'est le code-golf , donc le code le plus court gagne!
la source
O(n log n)
ou moins. (désolé, pas de Python) Ma soumission (C ++) prend 2,53 secondes pour résoudre le test 14.['h', 'e', 'l', 'l', 'o']
par opposition à'hello'
?Réponses:
Gaia , 4 octets
Essayez-le en ligne!
la source
Python 3 , 71 octets
Essayez-le en ligne!
la source
05AB1E , 5 octets
Essayez-le en ligne! ou comme suite de tests
Explication
la source
Pyth , 6 octets
Suite de tests.
Explication
la source
Gelée , 5 octets
Essayez-le en ligne! ou voir la suite de tests
Comment ça marche
la source
Œ¿
cela ne fonctionne pas.ṢŒ¿
travail?1
Python 2 , 78 octets
Essayez-le en ligne!
Python 3 , 73 octets
Essayez-le en ligne!
la source
CJam , 8 octets
Essayez-le en ligne!
+1 octet en raison de l'exigence d'indexation 1.
la source
Haskell , 56 octets
Essayez-le en ligne!
+6 octets en raison de l'exigence d'indexation 1. :(
la source
Japt ,
810 octets0 indexé.Poxy, 1-indexation inutile, augmentant mon nombre d'octets de 25%!Essaye-le
Explication
á
obtient toutes les permutations de l'entrée,â
Enlève les doublons,n
les trie etb
obtient l'indice de la première occurrence de l'entrée,U
.la source
J ,
2823 octets-5 octets grâce à FrownyFrog
Comment ça marche?
Essayez-le en ligne!
la source
1+/:~@~.@(A.~i.@!@#)i.]
Tcl, 196 octets
Tcl n'a pas de méthode intégrée pour calculer la prochaine permutation lexicographique, nous devons donc le faire nous-mêmes. Mais attendez ... il est plus court de le faire avec une simple fonction récursive qui calcule toutes les permutations possibles dans n'importe quel ordre.
Non golfé:
la source
K (oK) ,
2318 octetsSolution:
Essayez-le en ligne!
Exemples:
Explication:
Générez des permutations des index de la chaîne d'entrée triée, utilisez-les pour indexer de nouveau dans la chaîne d'entrée, prenez les éléments distincts, voyez où la chaîne d'origine correspondait et ajoutez-en une.
la source
Java 8, 211 octets
Explication:
Essayez-le en ligne.
la source
Python 3 ,
183182 octetsLa première réponse qui s'exécute en temps polynomial!
Essayez-le en ligne!
Exiger que l'entrée soit entièrement en majuscules, car ... elle enregistre un octet.
Programme complet, prend l'entrée
stdin
et la sortie destdout
.Noms de variables: (sorte de code non golfé)
Malheureusement,
from math import factorial as f
prend exactement 1 octet de plus.(Remarque indépendante: j'ai vérifié le
Combinatorica`
package de Mathematica, rien d'utile, y comprisRankPermutation
)la source
Husk , 6 octets
Essayez-le en ligne! Je pense qu'il devrait y avoir un moyen d'abandonner
(
.Explication:
la source
Nettoyer ,
113111 octetsEssayez-le en ligne!
+3 octets pour gérer l'indexation 1: /
la source
APL (Dyalog Unicode) , 33 octets (SBCS)
Essayez-le en ligne!
la source
Python 3 ,
105104103 octetsEssayez-le en ligne!
la source
Rubis , 49 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
106100 bytesCas de test
Afficher l'extrait de code
Comment?
P () est notre fonction de permutation récursive. Mais l'objet englobant de P est également utilisé pour stocker les rangs des permutations.
Le code d'habillage se lit désormais comme suit:
la source
C ++, 230 octets
Selon ma demande, le code doit certainement être exécutable tel quel. La clause de fonction uniquement est essentiellement des ordures. : - @
Merci à ceux qui ont aimablement répondu à la question de savoir ce qui peut être découpé pour moi. Dans l'intérêt de la validité code , j'ai évité le GCC-isme populaire d'inclure <bits / stdc ++. H>, que j'ai toujours considéré comme une mauvaise triche.
Ce qui suit est ce qui reste de mon message d'origine:
Je ne suis toujours pas sûr lorsque j'utilise C et C ++ ce qui compte pour le total d'octets. Selon le programme, la fonction ou l'extrait?la réponse est encore vague (tant qu'il ne s'agit pas d'un extrait, je suppose). Je vais donc avec le plus court des deux possibilités.
Ici, il n'est pas golfé avec les en-têtes nécessaires, etc.:
Ce golf jusqu'à 230 octets, un tiers de ce passe- partout standard requis par chaque programme C ++. (Donc, je ne me sens pas trop mal sans le compter, mais comme je n'ai jamais vu de plainte ferme de toute façon, OP devra me dire ce qu'il préfère satisfaire "écrire un code pour prendre n'importe quel mot comme entrée" et afficher son rang. ")
Je ne suis pas sûr non plus que cela satisfasse «le rang devrait être affiché».
la source
using namespace std
, en-#include <algorithm>
têtes utilisés pour définir la fonction en octets. Et ... Non,main(){}
est un programme C ++ (g ++) valide à 8 octets.import math
c'est souvent nécessaire. Permettez-moi de trouver la méta pertinente ...puts
etprintf
). Votre code doit être compilé et exécuté avec succès tel quel pour être valide. Voir: codegolf.meta.stackexchange.com/a/10085/45941main
fonctions ne peut pas être exécuté tel quel .Perl 5 , 98 + 3 (
-pF
) = 101 octetsEssayez-le en ligne!
la source
Octave , 43 octets
Essayez-le en ligne!
la source
Perl 6 , 53 octets
Essayez-le en ligne!
la source
PowerShell , 275 octets
Essayez-le en ligne!
Donc, c'est un bordel sanglant.
PowerShell n'a pas de permutations intégrées, donc ce code utilise l'algorithme d' ici (beaucoup joué), qui est disponible sous la licence publique limitée de Microsoft ( pièce B sur cette page de licence).
Le programme prend l'entrée
$s
sous forme de chaîne, puis le programme réel commence par$b=New-Object ...
. Nous construisons un nouvel objet StringBuilder , qui est (essentiellement) une chaîne de caractères modifiable. Cela nous permettra de gérer plus facilement les permutations. Nous appelons ensuite la fonctionn
(définissant en$j
cours de route la longueur de la chaîne d'entrée),sort
avec le-u
drapeau nique la sortie, prenons le.indexOf()
pour trouver la chaîne d'entrée et ajoutons1
car PowerShell est indexé zéro.La fonction est la partie principale du programme. Il prend en entrée un nombre et chaque itération compte à rebours jusqu'à ce que nous atteignions
1
(c'est-à-dire une seule lettre). Le reste de la fonction appelle essentiellement la fonction de manière récursive, prend la lettre actuelle et l'itère dans toutes les positions.Il existe un seul bit de logique supplémentaire
if($s.length-eq1){1;exit}
pour prendre en compte les chaînes d'entrée de longueur en1
raison du fonctionnement de la fonction de permutations.la source
Pyt , 5 octets
Explication:
Essayez-le en ligne!la source