En utilisant la langue de votre choix, écrivez la fonction / le script / le programme le plus court possible qui identifiera le mot avec le plus grand nombre de lettres uniques dans un texte.
- Les lettres uniques doivent inclure tout caractère distinct utilisant le codage UTF-8 .
- Les versions majuscules et minuscules du même caractère sont différentes et distinctes;
'a' != 'A'
- Les versions majuscules et minuscules du même caractère sont différentes et distinctes;
- Les mots sont liés par n'importe quel espace.
- Les «lettres» sont tout symbole qui peut être représenté par un seul caractère unicode.
- Le document texte doit être lu par votre code - aucun préchargement / codage en dur du texte autorisé.
- La sortie doit être le mot, suivi du nombre de lettres uniques.
llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch - 18
- Tout délimiteur / espacement entre les deux valeurs dépend de vous, tant qu'il y a au moins un caractère pour les séparer.
- Dans le cas où plusieurs mots existent avec le nombre le plus élevé, imprimez tous les mots pour ce nombre, avec une nouvelle ligne délimitant.
super accusé de réception - 16 pseudolamellibranchiate - 16
- C'est le golf de code, donc le code le plus court gagne.
Cette réponse sur English.SE m'a inspiré pour créer ce défi. L'exemple utilise uniquement une liste de mots , mais tout texte doit pouvoir être traité.
LlanfairPG
est un mot gallois et contient des lettres de l'alphabet gallois -ll
etch
sont toutes les deux des lettres simples dans la langue galloise.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+~`<>/\\?'";:{}[],.
Un mot est-il donc valide?Réponses:
APL (56)
Il s'agit d'une fonction (la question dit que c'est autorisé) qui prend une chaîne et renvoie une matrice de mots et des longueurs uniques.
Usage:
Explication:
⎕ML←3
: définissez le niveau de migration sur 3 (de sorte que la⊂
partition soit la place de la fermeture)W←⍵⊂⍨⍵≠' '
: stocker dansW
la chaîne donnée, où chaque partition se compose de caractères non blancs.⍙←⍒∆←↑∘⍴∘∪¨W
: obtenir la quantité (⍴
) d'∪
éléments uniques ( ) dans chaque partie (¨
) deW
, et les stocker dans∆
, puis obtenir l'ordre de tri lors du tri vers le bas sur ce (⍒
) et le stocker dans⍙
.∆[⍙
...]
: trier∆
par⍙
, donc maintenant nous avons les longueurs uniques dans l'ordre.∆∘.=∆←∆
: stockez le tri∆
dans∆
et voyez quels éléments∆
sont égaux.↑+/
: additionner les lignes (maintenant nous savons combien d'éléments sont égaux à chaque élément) puis prendre le premier élément (maintenant nous savons combien d'éléments sont égaux au premier élément, c'est-à-dire combien de mots sont liés pour la première place.)W[⍙]⍴⍨
: trierW
par⍙
et prendre le premier N, où N est le nombre que nous venons de calculer.{⍵,⍴∪⍵}¨
: pour chacun d'eux, obtenez le mot lui-même et la quantité de caractères uniques dans le mot⊃
: format comme matricela source
Mathematica
96115Edit : le code trouve maintenant tous les mots du nombre maximum de caractères. Je refuse de traiter les virgules comme des mots.
Exemples
ou
ou
Exemples plus longs
Surprise: Le mot le plus "unique" dans la Déclaration d'Indépendance est aussi le mot le plus unique dans Alice au pays des merveilles !
la source
Python 2 (110 (98 utilisant une entrée de fichier))
.
Choses à améliorer: impression (33 caractères)
La ponctuation est considérée comme une lettre.
la source
NameError: global name 'r' is not defined
. Après avoir ajouté des guillemets simples autour de lar
:AttributeError: 'file' object has no attribute 'split'
. Python 3.3.0:SyntaxError: invalid syntax 'print i,c'
.Ceci est mon premier codegolf, je suis tellement excité :) Cela signifie également que ce n'est probablement pas bon.
Groovy
127117112105Edit: Puisque les fonctions semblent être autorisées ici, c'est une sur 105. J'ai également renommé les variables pour que la première colonne lise ACDC, car cela est important dans tout type de code source:
Vous appelleriez ça comme ça:
Sans fonction avec entrée standard en 112 :
Entrée: Lorem Ipsum Text de primo
Sortie de tous les scripts:
Quelqu'un a une idée de comment les rendre plus groovy?
la source
Perl 78 octets
L'interprétation de la restriction «Le document texte doit être lu par votre code» signifie que les options de ligne de commande qui lisent et analysent l'entrée ne sont pas autorisées. Comme avec la solution PHP ci-dessous, seuls les caractères 10 et 32 sont considérés comme des délimiteurs de mots. L'entrée et la sortie sont également prises de la même manière.
PHP 128 octets
Les seuls caractères considérés comme délimiteurs de mots sont le caractère 10 et le caractère 32. Les autres, y compris la ponctuation, sont considérés comme faisant partie du mot.
Celui-ci contient quelques caractères binaires, ce qui permet d'économiser des guillemets, mais doit par conséquent être enregistré avec un codage ANSI pour fonctionner correctement. Alternativement, cette version peut être utilisée, qui est plus lourde de 3 octets:
Exemple d'E / S:
entrée 1:
sortie 1:
entrée 2:
sortie 2:
la source
incredulity
a 10 lettres uniques, pas 11.GoRuby 2.0.0 - 66 caractères
Les solutions ci-dessous n'ont pas trouvé toutes les correspondances, mais une seule. Voici ma version finale:
Exemples:
produit:
GoRuby 2.0.0 - 29 caractères (format de sortie non exact)
Attend l'entrée de stdin. Le format de sortie est cependant un peu différent. Par exemple:
GoRuby 2.0.0 -
4240 caractèresattend l'entrée de stdin
Ruby 1.9.3 - 6965 caractèresattend l'entrée de stdin (comme ci-dessus, mais sans abréviations GoRuby)
la source
Javascript
163155152162octetsC'est à peu près aussi court que possible:
Dans cette version, les
/\s/
mots sont séparés en fonction des espaces, ce qui inclut la ponctuation, les virgules, les points, etc. dans les mots. Ceci est facilement changé/\b/
pour ne pas les inclure.Je verrai ce que je peux faire avec les boucles for au lieu de forEaches dans un instant.
E / S:
la source
In the event more than one word exists with the highest count, print all words for that count, **with one new line delimiting**.
Scala 129 caractères:
la source
R - 106 caractères
En fonction du texte saisi comme paramètre:
Et quelques exemples:
Ou R - 100 caractères
En fonction du chemin d'accès au fichier texte en paramètre:
Usage:
la source
Python
176168la source
Python3 119
Lit à partir d'un fichier appelé
a
.Testé avec les textes d'entrée de @primo:
la source
VBScript - 430 / VBA - 420
VBScript:
VBA:
la source