introduction
Quelle proportion de l'alphabet anglais une chaîne donnée utilise-t-elle? La phrase précédente utilise 77%. Il a 20 lettres uniques (howmucftenglisapbdvr) et 20/26 ≃ 0,77.
Défi
Pour une chaîne d'entrée, renvoyez le pourcentage de lettres de l'alphabet anglais présentes dans la chaîne.
La réponse peut être en pourcentage ou sous forme décimale.
La chaîne d'entrée peut avoir des majuscules et des minuscules, ainsi que des signes de ponctuation. Cependant, vous pouvez supposer qu'ils n'ont pas de signes diacritiques ou accentués.
Cas de test
Contribution
"Did you put your name in the Goblet of Fire, Harry?" he asked calmly.
Quelques sorties valides
77%, 76.9, 0.7692
Contribution:
The quick brown fox jumps over the lazy dog
Toutes les sorties valides:
100%, 100, 1
La sortie attendue pour "@#$%^&*?!"
et ""
est 0.
"@#$%^&*?!"
,""
77%
et76.9
est accepté, est-il77
accepté aussi?Réponses:
Python 3 , 42 octets
Essayez-le en ligne!
Nous filtrons tous les caractères non alphabétiques de la chaîne en prenant la différence (définie) des représentations majuscules et minuscules. Ensuite, nous prenons la longueur et divisons par 26.
Python 3 , 46 octets
Essayez-le en ligne!
Comptez les caractères alphabétiques uniques (minuscules) et divisez par 26. En Python 2, il faudrait 3 caractères supplémentaires; deux pour changer
{*...}
enset(...)
, et un pour faire 26 un flotteur:,26.
pour éviter la division du plancher.Python 3 , 46 octets
Essayez-le en ligne!
Même longueur, essentiellement la même que la précédente, mais sans méthode de chaîne "intégrée".
la source
1.0
et non1
? (Je ne voulais pas spécifiquement l'interdire pour ne pas désavantager des langues spécifiques, mais je suis curieux)//
, mais ce serait toujours une division entière, ce qui n'est évidemment pas ce que nous voulons ici. Il est logique qu'ils n'aient pas fait dépendre le type de données de la sortie des valeurs spécifiques des opérandes, ce qui signifie toujours flotte, même s'il s'agit d'un nombre entier.MATL , 8 octets
Essayez-le sur MATL Online
Explication
la source
Octave / MATLAB, 33 octets
Essayez-le en ligne!
Explication
la source
05AB1E ,
876 octets-1 octet grâce à @LuisMendo .
Essayez-le en ligne ou vérifiez quelques cas de test supplémentaires .
Alternative de 6 octets fournie par @Grimy :
Essayez-le en ligne ou vérifiez quelques cas de test supplémentaires .
Les deux programmes sortent en décimal.
Explication:
la source
láêg₂/
est également un 6 octets.C # (Visual C # Interactive Compiler) ,
5649 octetsEssayez-le en ligne!
-6 octets grâce à innat3
la source
&&
en&
.APL (Dyalog Extended) , 10 octets SBCS
Fonction de préfixe tacite anonyme. Renvoie la fraction décimale.
Essayez-le en ligne!
⌈
majuscule⎕A∩
intersection avec l' alphabet majuscule A≢
longueur du décompte∘
puis26÷⍨
diviser par vingt-sixla source
⌹∘≤⍨⎕A∊⌈
Perl 6 ,
2724 octets-3 octets grâce à nwellnhof
Essayez-le en ligne!
la source
.lc
fonctionnerait aussi), d'un point de vue "correct", il.fc
pourrait être préférable (en particulier si le défi avait des lettres non anglaises)Utilitaires Bash et Gnu (
8178686042 octets)-8 octets grâce à @wastl
-18 octets grâce à Nahuel utilisant des astuces que je ne connaissais pas:
sort -f
etgrep -i
ignorer la cassesort -u
est un remplacement pour| uniq
la source
echo $(tr A-Z a-z|tr -cd a-z|fold -1|sort -u|wc -l)/26|bc -l
K (oK) ,
1915 octetsSolution:
Essayez-le en ligne!
Explication:
Convertissez les entrées en minuscules, modulo 97 ("az" est 97-122 en ASCII, modulo 97 donne 0-25), prenez des résultats uniques, résumez qui sont inférieurs à 26 et convertissez-les en pourcentage de 26.
Remarques:
1-%[;26]
=>1-1%26%
#(!26)^
=>+/26>?
la source
97
fait ici%[;26]
->1%26%
1%26%#?(26>)#97!_
1%26%+/26>?97!_
pour 15PowerShell ,
5552 octetsEssayez-le en ligne!
Première tentative, toujours essayer des idées aléatoires
EDIT: @Veskah a souligné que ToUpper enregistre un octet en raison de la plage de numéros, également supprimé supplémentaire
()
et un espaceExpansion:
($args|% ToUpper|% ToCharArray|sort|get-unique|where{$_-in 65..90}).count/26
Modifie la chaîne en majuscules
inférieures, se développe en un tableau, trie les éléments et sélectionne les lettres uniques (gu a besoin d'une entrée triée), ne conserve que les caractères de valeur ascii97 à 122 (a à z)65 à 90 (A à Z), compter le total et diviser par 26 pour la sortie décimalela source
R , 47 octets
Essayez-le en ligne!
Convertit en majuscules puis en points de code ASCII et vérifie les valeurs 65:90 correspondant à A: Z.
la source
scan
pour ne pas diviser les guillemets, comme le fait par défaut?Retina 0.8.2 , 45 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Lettres minuscules et suppression de la ponctuation.
Dédupliquer.
Multipliez par 100.
Ajoutez 13.
Entier diviser par 26 et convertir en décimal.
la source
APL (Dyalog Extended) , 8 octets
Essayez-le en ligne!
vaguement basé sur la réponse d'Adám
⌈
majuscule⎕A∊
booléen (0 ou 1) vecteur de longueur 26 indiquant quelles lettres de l' alphabet anglais A sont dans la chaîne⌹∘≤⍨
moyenne arithmétique, c'est-à-dire division matricielle de l'argument et vecteur tout-1 de même longueurla source
charbon , 11 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. La sortie est sous forme décimale (ou
1
pour les pangrammes). Explication:la source
Lot, 197 octets
Prend l'entrée sur STDIN et sort un pourcentage arrondi. Explication:
Saisissez la chaîne.
Supprimez les citations, car elles sont un casse-tête à gérer dans Batch.
Commencez par une demi-lettre à des fins d'arrondi.
Supprimez tour à tour chaque lettre de la chaîne. Appelez le sous-programme pour vérifier si quelque chose a changé, en raison de la façon dont Batch analyse les variables.
Calculez le résultat en pourcentage.
Début du sous-programme.
Si la suppression d'une lettre modifie la chaîne, incrémentez le nombre de lettres.
la source
Pepe ,
155138 bytesEssayez-le en ligne! La sortie est sous forme décimale.
Explication:
la source
K (oK) , 19 octets
Essayez-le en ligne!
J , 30 octets
Essayez-le en ligne!
la source
32!
est trop large - il fait que le reste de l'expression traite certains caractères de ponctuation comme des lettres, par exemple essayez d'ajouter:
dans l'exemple d'entréeRétine ,
574635 octets-11 octets s'inspirant de l' astuce de @Neil d'ajouter 13 unaires avant de diviser .
Encore -11 octets grâce à @Neil directement.
Arrondit (correctement) à un entier entier.
Essayez-le en ligne.
5746Version 40 octets qui fonctionne avec une sortie décimale:Même -11 octets ainsi que -6 octets supplémentaires grâce à @Neil .
15.3
15.4
Essayez-le en ligne.
Explication:
Convertissez toutes les lettres en minuscules:
Supprimer toutes les non-lettres:
Uniquify toutes les lettres:
Remplacez chaque lettre unique par 1 000 soulignements:
Comptez le nombre de fois où 26 traits de soulignement adjacents s'y insèrent:
Insérez un point au bon endroit:
la source
.*
pourrait être juste.
pour une sauvegarde de 1 octet, mais vous pouvez enregistrer 10 autres octets en utilisantD
eduplicate au lieu de le faire manuellement!D
-builtin, merci! Et je ne sais pas pourquoi j'ai utilisé à la.*
place de.
.. Merci pour -11 octets dans les deux versions! :)-1`\B
correspond directement à la position d'insertion souhaitée.Java 8,
6259 octets-3 octets grâce à @ OlivierGrégoire .
Essayez-le en ligne.
Explication:
la source
c&95
en combinaison avecc%91>64
pour une raison quelconque. Je pense que vous m'avez déjà proposé ce golf à quelques reprises.s->{int r=0,b=0;for(var c:s)if((c&95)%91>64&&b<(b|=1<<c))r++;return r/26.;}
(75 octets)Julia 1.0 , 34 octets
Utilise le vectorisé version de l'opérateur ∈, vérifiant le confinement dans la chaîne pour tous les caractères compris entre a et z. Additionne ensuite le BitArray résultant et divise par le nombre total de lettres possibles.
Essayez-le en ligne!
la source
C, 96 octets
Essayez-le en ligne!
la source
Perl 5
-MList::Util=uniq -p
, 24 octetsEssayez-le en ligne!
la source
Stax , 9 octets
Exécuter et déboguer
la source
u
et en l'utilisant|b
, mais les économies disparaissent sous l'emballage. Je pourrais avoir un 8 octets, mais l'interprète en ligne est bizarre et bogué.|b
. Il mute incorrectement son opérande plutôt que de faire une copie. J'ai créé un problème github pour le bogue. github.com/tomtheisen/stax/issues/29 Comme solution de contournement,|b
fonctionnera correctement la première fois. Après cela, vous devrez peut-être recharger la page. Si vous avez trouvé un bug différent, si vous pouvez fournir une reproduction, je serai probablement en mesure de le corriger.v
au début, insérer|b
aprèsVa
, courir, retirer le premierv
, retirer|b
, remballer. Oui, c'est le bug que j'ai trouvé.Gelée , 8 octets
Essayez-le en ligne!
Explication
la source
JavaScript (Node.js) , 45 octets
Essayez-le en ligne!
JavaScript (Node.js) , 47 octets
Essayez-le en ligne!
la source
Python 3 ,
5149 octets51 -> 49 octets, grâce à alexz02
Essayez-le en ligne!
la source
lambda s:len({*filter(str.isalpha,s.lower())})/26
Japt , 9 octets
L'essayer
la source
Python 2 , 57 octets
Essayez-le en ligne!
Un peu plus long que la réponse Python 3 d'ArBo mais affiché comme une approche différente dans Python 2 de toute façon.
la source
Rubis
-n
,3834 octets-4 octets de @historcrat!
Essayez-le en ligne!
la source
C, 95 octets
(remarque: arrondi vers le bas)
Version alternative à retour décimal (95 octets):
Cela emprunte à la réponse de @Steadybox.
la source