Description succincte du défi:
Sur la base d' ETAOIN SHRDLU , votre défi consiste à écrire le programme ou la fonction le plus court dans n'importe quelle langue contenant les 26 lettres de l'alphabet anglais en fonction de leur fréquence de saisie.
Spécifications vraiment longues, sèches et complètes:
- Votre programme / fonction recevra en entrée une chaîne de texte contenant une ou plusieurs lettres majuscules et / ou minuscules, ainsi que des signes de ponctuation, des chiffres, des symboles et d’autres caractères non alphabétiques.
- Le programme / la fonction ne doit sortir que les 26 lettres MAJUSCULES de l'alphabet anglais, y compris celles qui n'apparaissent pas dans l'entrée, classées du plus au moins fréquentes en fonction du nombre de fois où elles apparaissent dans l'entrée.
- Edit: la fréquence est calculée sans distinction de casse, mais la sortie doit être en majuscule.
- Si deux lettres ou plus ont la même fréquence, elles peuvent être dans n'importe quel ordre.
Aucune autre sortie, telle qu'un espace, n'est autorisée.- Éditer 01/07/2014: Sur la base des commentaires, je modifie cette règle. Les seuls autres résultats autorisés sont les espaces de début et / ou de fin facultatifs, tels que les retours à la ligne. Aucune autre sortie n'est autorisée.
- Le comportement indéfini est autorisé pour une entrée ne contenant aucune lettre.
Le gagnant sera choisi dans 7 jours, alors faites taper vos doigts!
Exemple d'entrée:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent vitae erat velit. Mauris gravida euismod libero ut tincidunt. Phasellus elit dui, consectetur et egestas in, aliquam vitae diam. Donec eget varius ante. Vestibulum cursus diam aliquet, egestas orci quis, placerat dolor. Proin vel nisi lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam erat volutpat. Etiam libero tortor, ornare id dui eget, posuere dignissim libero. Pellentesque commodo consequat volutpat. Integer hendrerit sapien libero, vel viverra augue facilisis sit amet. Quisque consectetur eget nisl quis dignissim. Ut lacinia pretium quam a placerat.
Morbi sed interdum risus, nec pretium lectus. Morbi imperdiet est id accumsan molestie. Duis sed fermentum nisl. Nunc vitae augue mattis, dictum lectus vel, accumsan nisl. Sed ultricies adipiscing rhoncus. Vivamus eu lacus a enim venenatis eleifend. Praesent consectetur tortor non eleifend ultricies. Mauris et odio posuere, auctor erat at, fringilla est. Proin in vestibulum erat. Maecenas congue commodo ante vel varius. Sed tempus mi ut metus gravida, nec dictum libero dapibus. Morbi quis viverra elit. Ut pharetra neque eget lacus tincidunt dictum. Fusce scelerisque viverra tellus et pretium.
Fusce varius adipiscing odio. Nulla imperdiet faucibus sem, at rhoncus ipsum adipiscing vitae. Phasellus imperdiet congue lacus et mollis. Nullam egestas mauris magna, et mollis lectus varius ut. Sed sollicitudin adipiscing dolor, vel elementum elit laoreet molestie. Aliquam nec nulla vel sem ultrices ullamcorper. Nullam nec felis magna. Duis sodales orci non justo aliquam tempus. Integer mi diam, tempor sed vulputate et, varius et nunc. Vestibulum sodales ipsum id mi pharetra, ut convallis mi accumsan. Sed dictum volutpat vestibulum.
Quisque ac dolor sagittis, aliquam libero at, euismod enim. Nulla ullamcorper posuere nulla vitae varius. Nam at dolor non libero elementum pellentesque in in lorem. Fusce porttitor turpis in quam placerat varius. Donec lorem orci, condimentum eu sapien sit amet, aliquet commodo magna. Quisque sed lectus sit amet arcu euismod accumsan et non nunc. Phasellus placerat congue metus, feugiat posuere leo dictum quis. Sed ultricies feugiat eros dignissim bibendum.
Mauris scelerisque consectetur libero eget varius. Aenean neque nunc, ullamcorper vitae orci in, auctor ornare sapien. Nam lacinia molestie imperdiet. Nam vitae mattis nibh. Vestibulum consequat tellus ac nisi sagittis pulvinar. Nullam mollis ornare quam, et venenatis leo porttitor sit amet. Nulla urna neque, dignissim non orci ut, volutpat ultrices erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque vestibulum tellus nec eros faucibus porta.
Exemple de sortie:
EITUSALNROMCDPVGQBFHJKWXYZ
Remarque: il existe un lien à 5 sens KWXYZ
pour cette entrée.
Modifier:
La compétition est terminée! Merci à tous ceux qui ont participé. Et maintenant, pour le (s) gagnant (s): Les réponses de CJam de Dennis et d’ Iaacg en python ont été composées de 19 caractères. (Désolé, mais je n'accepterai aucune des réponses car je pense que ce serait injuste pour l'autre.) Edit: Sur le conseil de Dennis, je vais marquer sa réponse comme acceptée car il a été le premier à atteindre 19 caractères. Des mentions honorables vont à la troisième place de Golfscript, Ilmari Karonen, avec 22 caractères, ainsi qu'à la réponse Python de undergroundmonorail, 75 caractères, qui a obtenu le plus grand nombre de votes positifs. Encore une fois, merci à tous ceux qui ont participé!
Réponses:
CJam,
2119 octetsEssayez-le en ligne.
Exemple
(pas de nouvelle ligne)
Comment ça marche
Plus d'occurrences signifie plus de caractères sont supprimés, donc les caractères les plus fréquents apparaissent au début du tableau.
la source
Python 2 ou 3 -
7775 octetsJ'avais une réponse avant qui a attrapé l'entrée de STDIN, mais j'ai réalisé que c'était techniquement invalide. J'ai utilisé
input()
ce qui n'obtient qu'une seule ligne, mais l'exemple de saisie de la question implique qu'il doit gérer plusieurs lignes à la fois. Pour répondre aux spécifications, j'ai transformé ma réponse en une fonction qui prend un argument de chaîne. À ma grande surprise, c'était deux octets plus petit! Cela ne m'est pas venu à l'espritprint(...)
etinput()
était plus long quef=lambda s:
ets
.Cela rend également la réponse compatible avec Python 2 et Python 3. À l’origine, il s’agissait uniquement de Python 3, car il l’utilisait
input()
(ce qui était appeléraw_input()
dans 2). Maintenant que c'est une fonction, ça marche dans les deux cas.A expliqué
la source
count
n'est pas une variable ou quoi que ce soit, c'est une fonction littérale. Aussi cool que cela puisse être de pouvoir multiplier la valeur de retour d'une fonction-1
en collant un-
devant, ce n'est pas une caractéristique de python.Bash, 65 octets
Exemple
Comment ça marche
la source
{A..Z}
. Tous les paramètres régionaux LC_COLLATE fonctionnent, car OpenBSD n'a que LC_COLLATE = C.Pyth 1.0.2 , 19
20Essayez-le ici: http://ideone.com/fork/YlWpEJ
En savoir plus sur Pyth ici: http://esolangs.org/wiki/Pyth
Exemple:
Donne:
Explication:
=ZUw
: Convertir les entrées en majuscules et les stocker dans Z.sV
: Imprimer la somme du revers dem;d
: Les dernières entrées deS
: Triés par leur première entrée, par ordre croissantm[cZkk)
: Les listes [nombre de k dans Z, k]UG
: Pour k en majuscules.Équivalent Python brut:
Ce n'est pas une entrée, je pensais juste que les gens aimeraient le voir. Dans Pyth 1.0.4, le programme suivant est une solution à 10 caractères:
Explication:
JUw
: Convertir les entrées en majuscules et les stocker dans J.o
: (Imprimer) Trier par_cJN
: -1 * (nombre de N dans J)UG
: Plus de N en majuscules.Ce n'est pas une solution légale car plusieurs des modifications apportées de Pyth 1.0.2 à 1.0.4, y compris l'ajout de la fonction
o
, trier par, ont été apportées à ce problème.la source
Z
pour y faire référence une fois par la suite? Est-ce que le simple fait de placer l'expressionZ
à sa place ferait en sorte que les entrées soient lues plusieurs fois?Javascript ( ES6 )
119117Edit: (-2) Suppression de la nécessité d'
toUpperCase
utiliser un RegEx respectant la casse dans l'split
appel.Alternative (même longueur): condensez le tri et le décompte des caractères en une seule fonction.
En fonction:
105104Edit: (-1) Condenser le tri et le décompte des caractères en une seule fonction.
la source
GolfScript, 22 caractères
Essayez-le en ligne.
Explication:
:?
assigne la chaîne d'entrée au symbole?
. (J'utilise un symbole de ponctuation pour que le nombre suivant91
ne soit pas analysé dans le nom du symbole.)91,
construit une liste des nombres de 0 à 90 (code ASCII deZ
).+
ajoute cette liste à la chaîne d'entrée, la convertissant ainsi d'un tableau de codes ASCII en une chaîne (et supprimant également la chaîne d'entrée de la pile).-26>
prend les 26 derniers caractères de cette chaîne, produisant une chaîne contenant les lettres ASCII majuscules deA
àZ
.{ }$
applique le bloc de code à tous les caractères de la chaîne d'entrée et trie ces caractères en fonction du résultat..
duplique le caractère et32+
convertit la copie en majuscule en minuscule. Le]
récupère ces deux caractères dans un tableau, en extrait?\-
la chaîne d'entrée stockée, en?
supprime toutes les occurrences des caractères du tableau et,
compte la longueur de la chaîne restante, qui constituera la clé de tri. Les caractères seront triés en ordre croissant par cette touche, et donc en ordre décroissant par nombre d'occurrences.la source
91,+-26>
.22
, plutôt que25
:)Haskell, 110 octets
Exemple d'utilisation:
la source
(/=c)
et se débarrasser de la0-
?Ruby 2.0, 53 caractères
EDIT : Corrigé pour fonctionner correctement avec des chaînes multilignes, merci @ durron597!
Crée une fonction appelée
f
qui peut être utilisée comme suit:Imprime sur STDOUT:
la source
EITASUROLNCMPDVQGBHFKJWXYZ
pour l'exemple de la questiongets
renvoie une ligne à la fois. Il peut être corrigé en passantgets
à,gets$n
mais le changer en fonction est 1 caractère plus court.Perl,
5446 octetsUPDATE: après d’autres optimisations, il pourrait être réduit à 46 octets: (merci dennis pour
-n
/{}
bidouille; chinois perl goth pour<=>
->-
bidouille)Il faut courir avec courir avec
perl -nE
Solution originale (ne nécessite pas d'options Perl spéciales):
Vérifié en Perl 5.8.3, 5.14.2
Si vous recevez un avertissement, séparez
eg
-le enfor
laissant un espace (+1 caractère), si vous le voulez bien.exemple d'utilisation:
EXPLICATION: Sur chaque caractère (
.
) de chaque ligne d'entrée (for<>
), appliquez un "motif" de substitution, qui est en fait évalué en tant qu'expression (e
indicateur dus///
), qui incrémente un caractère upcased (uc
) (.
/$&
est plus court que plus évident(.)
/$1
) compte dans le hash (non initialisé) (%h
). Ensuite, le hachage de la fréquence des lettres est utilisé dans une fonction de comparaison de tri pour imprimer les lettres majuscules dans le bon ordre.la source
perl -ne 's/./$h{uc$&}++/eg}{print sort{$h{$b}<=>$h{$a}}A..Z'
-n
etEND{}
, mais elles étaient toujours plus longues .. n'hésitez pas à mettre à jour la réponse, si vous le souhaitez-n
enveloppewhile(<>){...}
autour du code. J'évite de modifier le code des autres utilisateurs. Trop facile de se tromper, certaines choses ne fonctionnent que sur certains ordinateurs, etc.}{
"l'injection", pas seulement de l'-n
option bien connue . On peut ne pas attendre à ce que la chaîne de code fait techniquement est enveloppé par la chaîne de code tandis que la boucle avant l'exécution, non seulement juste que cela fonctionne en quelque sorte comme comme si elle était enveloppée ..$h{$b}<=>$h{$a}
par$h{$b}-$h{$a}
R, 123 octets
Le code est amélioré grâce aux suggestions de @RichieCotton.
Sortie:
la source
C ++,
185183179177 octetsPas prévu de gagner, bien sûr (le C ++ peut-il jamais gagner?), Mais un exercice amusant néanmoins.
Explication:
la source
VBScript
181109Mise à jour pour utiliser un algorithme complètement différent. Beats JavaScript!
Joli:
Golfé:
la source
J
4135 octetsDémo:
Explication:
La clé consiste à ajouter le tableau de gauche, de sorte que toutes les lettres soient disponibles et déjà en ordre. Une conséquence amusante de l’utilisation d’un nom comme troisième phrase de la fourche est que cela fonctionne aussi bien comme verbe que comme expression.
la source
Groovy -
1301231151129892Selon le conseil de @ cfrick (deux fois!):
Un petit test (volé sans vergogne à @jpjacobs):
Et le test proposé passe également
la source
f={('A'..'Z').collectEntries{c->[c,it.toUpperCase().findAll(c).size()]}.sort{-it.value}.keySet().join()}
pour 104it.grep(~/(?i)$c/)
au lieu deit.toUpperCase().grep(c)
toUpperCase
me dérangeait énormément.SAS - 217 (je pense)
Les entrées doivent être placées sur la ligne après la déclaration de cards4 ou sur les cartes perforées appropriées pour votre système. Je pense que cette approche enregistre quelques caractères plutôt que d'essayer de citer l'entrée.
Je suis conscient que cela ne répond pas à la spécification complète, car il ne renvoie que les caractères qui apparaissent dans la chaîne d'entrée. Je pourrais avoir besoin de repenser cela un peu.
la source
AppleScript, 278
J'ai remarqué que
"a" = "A"
c'est vrai dans AppleScript. Je peux l'utiliser dans le code de golf, mais le reste du script est trop verbeux. J'ai utilisé AppleScript 1.8.3.Ceci définit une fonction
f
. Si vous ajoutezf("a string")
au bas du script et l'exécutez dans l'éditeur de script, le résultat s'affiche.Formaté et commenté:
la source
VBScript
157156 octetsEdit: changé msgbox (p) en msgbox p
Plus lisible:
Golfé: (155 caractères + 1 retour de voiture)
Je l'avais trouvé plus tôt avec le code 171 que je trouvais plus intéressant, mais la méthode de tri de comfortablydrei est plus courte et nécessite un ou plusieurs noms, ce qui fait un "pour" plus court que le "tant que" pour la première boucle. (bâillement)
la source
for t=0
devrait êtrefor t=1
, sinon vous imprimez toujours l’alphabet en entier.J -
3835 caractèresUne fonction prenant l'entrée à droite sous forme de chaîne. Pas un gagnant, mais c'était amusant d'écrire.
A expliqué:
toupper
est un verbe dans la bibliothèque standard qui met en valeur une chaîne. Cela devient alors l’argument droit du verbe, tandis que l’argument gauche est l’alphabet: points de code ASCII 65 à 90.[
et,e.~#])
sélectionne (#
) les lettres dans l'argument de droite (]
) qui sont des éléments de (e.~
) la gauche, et ajoute ensuite (,
) l'argument de gauche ([
). En fait, nous ne conservons que les caractères majuscules et ajoutons une seule copie de l'alphabet à la fin pour nous assurer de les saisir tous.#/.~@
donne ensuite les fréquences de chaque caractère. Il se trouve que ceci est donné par ordre alphabétique, alors juste après on peut downsort (\:
) l'alphabet (l'argument de gauche[
).Un exemple paresseux rapide ci-dessous. Ne hésitez pas à l' essayer pour vous - même à tryj.tk .
la source
T-SQL 178
Fondamentalement, ceci est ma solution VBScript mais implémentée en SQL.
Ceci est un abus de sortie XML pour concaténer une colonne. En pratique, il peut être associé à une table externe pour émuler des
GROUP_CONCAT
fonctions dans MySQL et autres.Déclarant la
@
variable:Code:
la source
Perl, 78 octets
Résultat pour l'exemple dans la question:
Ungolfed:
la source
echo -e 'x\ny\n\nz\n'
sortie, par exemple , qui devrait être retournéXYZABCDEFGHIJKLMNOPQRSTUVW
, mais donne à laXYABCDEFGHIJKLMNOPQRSTUVWZ
place. Devinez pourquoi .. :)PHP - 105 octets
Voici un hexdump, à cause des caractères spéciaux:
Et une version légèrement moins golfée:
Exemple:
la source
preg_filter()
?echo join(array_keys($f));
peut sauver un octetC # dans LINQPad - 203 octets
J'ai adopté une approche différente de la réponse de Logan Dam. Je me suis d'abord assuré que tous les caractères de la chaîne d'entrée sont triés en fonction de leur apparence et n'existent qu'une seule fois dans la chaîne de sortie. Après cela, j'ai ajouté chaque caractère manquant de l'alphabet à la chaîne de sortie.
Malheureusement, la réponse de Logan Dam n’aurait pas été battue si j’avais procédé dans Visual Studio.
Version plus lisible:
la source
C # (et LINQ)
255226210 octetsSuivant les conseils de Patrick Huizinga, la syntaxe de la requête est maintenant plus courte:
Explication:
Syntaxe de méthode équivalente (217):
Message original:
la source
P
lieu deProgram
et à lastring[]a
place destring[] args
et à lac=>...
place de(c)=>...
.using
instructions, vous pouvez également insérer votre classe dans l’System.Linq
espace de noms et supprimer les deux instructions using. Ensuite, vous pouvez enregistrer des caractères et tout fonctionnera correctement.namespace
c'est plus long que çausing
et que les deux supplémentaires{}
me coûteront plus cher.namespace System.Linq{}
est clairement plus courte queusing System;using System.Linq;
juste en le regardant. L'idée est d'omettreusing
complètement les deux.C ++
701322232 octetsPremière version 701 octets (utilisation idiomatique de la STL)
Version propre étendue:
L'idée est de démontrer un programme "correct" C ++ sans aucun piratage. Ignorer le passe-partout et le fait que cela compile uniquement sur VC ++
Explication:
Nous remplissons de A à Z une chaîne avec iota () , ce qui garantit que lorsque nous comptons les occurrences, chaque caractère apparaît même s'il ne figure pas dans l'entrée.
transform () copie caractère par caractère de l'entrée standard et le met à la fin de s après l'appel de toupper () sur chaque entrée
Le compte de chaque caractère est décrémenté dans la carte (en maintenant les comptes négatifs, nous pouvons avoir un tri décroissant sans code supplémentaire)
Les entrées de la carte de comptage sont copiées dans un ensemble de paires, en permutant (char, count) à (count, char). Puisque les ensembles sont commandés, nous les obtenons triés par décroissance du nombre de fréquences
Enfin, nous copions le contenu de l'ensemble vers la sortie standard, en utilisant transform, et en sélectionnant select2nd () pour ne sélectionner que le deuxième membre de la paire.
Le code est assez lisible. Une solution C ++ 11 serait beaucoup plus jolie, car nous pouvons utiliser lambdas
Version C ++ 11 - pas besoin de lambdas, mais les options auto et plage rendent les choses très propres (à bien y penser, vous pouvez faire très similaire avec le C ++ 98 standard)
Version étendue:
Prochaine itération (pourquoi lire depuis stdin quand on a argv):
Version étendue:
la source
Gelée , 9 octets (non concurrente)
Explication
Cela se lit comme "trier l'alphabet majuscule par le nombre d'occurrences dans l'entrée majuscule, inversée", ce qui est une traduction assez littérale du défi: P
Essayez-le en ligne!
Ce défi était lié à Jelly HyperTraining, où nous avons résolu le problème. J'ai posté ceci parce que j'étais le premier à atteindre 10 octets.
-1 octet grâce à Erik the Outgolfer (enseignant JHT)
la source
ØAŒuċ¥@ÞU
C ++ 377
Implémente qsort en utilisant le nombre de lettres du tableau n pour trier l'alphabet du tableau A. Exécuté en ligne de commande:
golf.exe < in.txt
la source
C, 117 (119) octets
95
par223
, pour un coût d'un octet supplémentaire.char c;
à justec;
et++c
àc=c+1%255
.la source
PowerShell - 139 caractères
Premièrement, je ne suis pas un expert de PowerShell. Bien sûr, il y en a plus court que ça. Mais était heureux avec cela et a décidé de partager.
Comment ça marche:
la source
Ceylan , 98 octets
la source
APL,
26 à20 caractères⎕a[⍒+/⎕a∘.=('\w'⎕r'\u0')⍞]
⎕a[⍒+/⎕a∘.=1(819⌶)⍞]
-6 merci à Adam.
la source
('\w'⎕r'\u0')
→1(819⌶)