11
votes

Code Golf 4ème de juillet Edition: Compter les dix mots survenants

Compte tenu de la liste des présidents suivants, effectuez un nombre de dix meilleurs mots dans le programme le plus petit possible:

fichier d'entrée strong> p> xxx pré>

pour commencer IT OFF dans BASH 97 STRAND> PARTAGES P>

      2 Nixon
      2 Reagan
      2 Roosevelt
      2 Truman
      2 Washington
      2 Wilson
      3 Bush
      3 Johnson
      4 FDR
      7 DIES


6 commentaires

La liste ne doit-elle pas différencier entre Bush Jr. et Sr.?


En outre, la FDR n'a-t-elle pas mourue aussi? Il semble que beaucoup de solutions ne lisaient pas la question, de nombreuses réponses ne rompent pas les mots, triant simplement la liste après un groupe.


Heh FDR FDR FDR FDR C'était de la mémoire que je vous connaissais ... Je suis d'accord avec les deux points mais dans l'esprit de plaisir ... Laissez-le monter ...


@Jawson w Modifiez la question à votre contenu de votre cœur ...


Bon travail de mémoire, je suis trop noob pour le modifier. J'irai avec la Let It Ride Option .... :)


Dupe: Stackoverflow.com/questions/1038252/...


16 Réponses :


7
votes

vim 60 xxx


1 commentaires

: 1, $! peut être remplacé par :%! , ne pouvez-vous pas?



3
votes

Perl: 90 strong>

perl: 114 strong> (y compris Perl, commutateurs de ligne de commande, guillemets simples et nom de fichier) p>

perl -nle'$h{$_}++for split/ /;END{$i++<=10?print"$h{$_} $_":0for reverse sort{$h{$a}cmp$h{$b}}keys%h}' input.txt


1 commentaires

Quelques astuces simples rétrécissent la commande entière à 84: Perl -ne '$ _ {$ _. $ /} ++ pour + split} Imprimer + (Trier {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ clés% _) [0..9]; {'INPUT.TXT



2
votes

Voici une version compressée du script shell, observant que, pour une interprétation raisonnable des données d'entrée (aucune ébauche ni d'ébauches) que la commande «tr» et la «SED» dans l'original ne modifie pas les données ( Vérifié par insertion de 'Tee Out.n' à des points appropriés et en vérifiant la taille du fichier de sortie - identique). Le shell a besoin de moins d'espaces que les humains - et à l'aide de chat au lieu de l'espace des déchets de redirection d'E / S d'entrée.

tr \  \\n<input.txt|sort|uniq -c|sort|tail


0 commentaires

11
votes

Une version shoelle plus courte: xxx pré>

Si vous voulez un classement insensible à la casse, modifiez UNIQ -C code> dans UNIQ -CI code>.

Un peu plus court, si vous êtes heureux du grade d'être inversé et que la lisibilité est altérée par le manque d'espaces. Cette horlogerie à 46 caractères: p> xxx pré>

(vous pouvez le dépouiller jusqu'à 38 si vous avez été autorisé à renommer le fichier d'entrée pour simplement "i" d'abord.) P >

Observant que, dans ce cas particulier, aucun mot ne se produit plus de 9 fois, nous pouvons raser 3 autres caractères en laissant tomber l'argument '-N' à partir de la trousse finale: P>

xargs -n1<input.txt|sort|uniq -c|sort|tail


2 commentaires

L'utilisation de Xargs est intelligente - cela fonctionne même si les données sont lacées avec des blancs de direction et de fuite. Et c'est une bonne observation que «queue» imprime les dix dernières lignes de production (j'avais oublié); qui économise 4 autres personnages.


Y a-t-il un moyen de tricher et d'utiliser Xargs à l'intérieur de Vim et de perdre la longueur du nom de fichier?



7
votes

vim 36 xxx


9 commentaires

Compte tenu de cette entrée, cela fonctionne, mais cela n'exécute pas le danger de tri lexical de chiffres?


Tout à fait. mais / compte tenu de cette entrée /, je peux faire sans ces trois caractères supplémentaires :)


Vous pouvez perdre 4 caractères car la «queue» équivaut à la "queue -10" ou à "Tail -N10".


Ha! Bien sûr, merci. enlevé et mettre du tri numérique


Hmmm vous manquez un colon ... je déteste quand je manque un côlon


Le '-n' (et l'espace) n'est pas nécessaire dans cet exemple car tous les comptes sont des chiffres simples et lexicaux <==> tri numérique quand c'est le cas.


c'est ce que j'avais à l'origine jusqu'à ce que l'OP se soit plaint, mais je suis d'accord avec vous, donc je l'ai supprimé


J'adore ça, mais le gars de Xargs l'obtient ... vous obtenez des secondes um quelques secondes ... Happy quatrième!


Ceci est intelligent, mais donne malheureusement la même sortie erronée que la solution à utiliser TR - il crée 256 lignes vierges et montre à tort ces mots tout en absorbant "Nixon" des résultats.



2
votes

Mon meilleur essai avec Ruby Jusqu'à présent, 166 caractères:

h = Hash.new
File.open('f.l').each_line{|l|l.split(/ /).each{|e|h[e]==nil ?h[e]=1:h[e]+=1}}
h.sort{|a,b|a[1]<=>b[1]}.last(10).each{|e|puts"#{e[1]} #{e[0]}"}


2 commentaires

Vous pouvez remplacer la première ligne avec h = {}


De plus, vous pouvez remplacer le bit .ef.line vous donnant ceci pour une première ligne: File.Open ('F.1'). Chaque {| L | L.Split (/ /).ached) == nil? h [e] = 1: H [e] + = 1}} vous enregistre 4 caractères



12
votes

C #, 153:

se lit dans le fichier à p et imprime les résultats à la console: xxx

Si seulement produisant la liste mais ne pas imprimer à la console, il s'agit de 93 caractères. xxx


6 commentaires

Ma principale plainte avec Java et Csharp sont leur verbosité ... pourriez-vous raccourcir certains équivalents d'utilisation ...?


C'est assez soigné et bien rangé, je pensais. Et au moins semi-compréhensible, au moins comparé à la version PERL.


Les «readlines» devraient être «Readalllines». En outre, cela peut être un peu plus court si vous supprimez .tolist () comme vous pouvez vous permettre de faire face à l'iEnumerable qui prend des retours. Donc: foreach (var V dans fichier.readalllines (p) .Ceectmany (S => S.Split ('')) .groupby (w => w) .Orderby (g => -1 * g.count ()) .Take (10)) console.writeline (v.count () + "|" + v.key);


@JulianR: Readlines semble être valide car une telle fonction est répertoriée sous .NET 4.0: msdn.microsoft.com/en-us/library/dd383503%28vs.100%29.aspx


@ Ahmad - bizarre. Alors, quelle est la différence entre Readalllines et Readlines et pourquoi ont-ils ajouté cela dans .NET 4.0? Est la seule distinction que l'on renvoie iEnumerable et l'autre chaîne []?


@JulianR: Voir Lippert ici: Blogs .msdn.com / Ericlippert / Archive / 2008/09/22 / ...



2
votes

python 3.1 (88 caractères) xxx


2 commentaires

Compteur réside dans des collections, pas iTerTools. Cela n'imprime pas non plus la sortie et son dans l'ordre inversé par rapport à la sortie de la question initiale.


Oui, c'était une faute de frappe. Mais je ne vois aucun point de satisfaire tous les caprices de l'OP. Pourquoi est-il en ordre croissant et non décroissant? Il imprime lorsqu'il est exécuté dans l'interprète.



2
votes

Python 2.6, 104 caractères: xxx


1 commentaires

Vous n'avez pas besoin de y à tout moment. Jetez un coup d'œil à ma réponse.



2
votes

vim 38 strong> et fonctionne pour toutes les entrées

:%!xargs -n1|sort|uniq -c|sort -n|tail


0 commentaires

3
votes

Le manque de AWK est dérangeant.

awk -v RS='[^a-zA-Z]' /./'{c[$1]++}END{for(p in c)print c[p],p|"sort|tail"}' input.txt


1 commentaires

Obtenez votre awk sur! er c'est un peu effrayant ... Happy quatrième!



5
votes

haskell, 102 caractères (WOW, si proche de l'apparition de l'original): xxx

J , seulement 55 caractères: xxx

(je dois encore comprendre comment exécuter élégamment les manipulations de texte en j ... c'est beaucoup mieux à données structurées de tableau.)


xxx

3 commentaires

Je suppose que le problème le plus évident est que le flux de symboles n'a pas de sens sans savoir que le jeu de personnages et le vocabulaire de J ... mais ce n'est pas trop mauvais de côté. Y a-t-il des langues qui favorisent des doublures de maintenance?


Eh bien, ma réponse fournit de loin la solution la plus lisible à ce problème.


Pour l'ordre inverse que OP utilise, remplacez 10 {. \: ~ Avec 10 {: /: ~ ~ ~



2
votes

perl code> 86 caractères

94, si vous comptez le nom de fichier d'entrée. p> xxx pré>

Si vous ne vous souciez pas du nombre de résultats Obtenez, alors ce n'est que 75, à l'exclusion du nom de fichier. P>

perl -anE'$_{$_}++for@F;END{say"$_{$_} $_"for sort{$_{$b}<=>$_{$a}}keys%_}' test.in


0 commentaires

2
votes

Ruby 66B

puts (a=$<.read.split).uniq.map{|x|"#{a.count x} "+x}.sort.last 10


0 commentaires

2
votes

rubis

115 caractères xxx


0 commentaires

2
votes

Fichier de lots Windows

Ce n'est évidemment pas la solution la plus petite, mais j'ai décidé de la poster de toute façon, juste pour le plaisir. :) NB: le fichier de commandes utilise un fichier temporaire nommé $ em> pour stocker des résultats temporaires. P>

version originale non compressée avec des commentaires: p>

6|DIES
4|FDR
3|Johnson
3|Bush
2|Wilson
2|Washington
2|Truman
2|Roosevelt
2|Reagan
2|Nixon


1 commentaires

Je suis allé en regardant ce post et je suis un peu heureux d'avoir fait. Vous avez fait un très bon travail en faisant cela dans une langue vraiment arrière.