Le code doit prendre une chaîne en entrée du clavier:
The definition of insanity is quoting the same phrase again and again and not expect despair.
La sortie doit être comme ceci (non triée dans un ordre particulier):
: 15
. : 1
T : 1
a : 10
c : 1
e : 8
d : 4
g : 3
f : 2
i : 10
h : 3
m : 1
o : 4
n : 10
q : 1
p : 3
s : 5
r : 2
u : 1
t : 6
y : 1
x : 1
Tous les caractères ASCII comptent unicode n'est pas une exigence, les espaces, les guillemets, etc. ou sauvegardé comme hashmap / dictionary etc, donc x : 1
et x: 1
sont ok, mais {'x':1,...
et x:1
ne le sont pas.
Q: Fonction ou programme complet prenant stdin et écrivant stdout?
R: Le code doit être un programme prenant l'entrée en utilisant l'entrée standard et affichant le résultat via la sortie standard.
Tableau d'affichage:
Globalement le plus court : 5 octets
Globalement le plus court : 7 octets
0
en nombre d'occurrences?" : "
(notez les deux espaces après le:
) ou si d'autres séparateurs (plus courts) conviennent. Vous n'avez pas résolu le problème unicode / encodage.Réponses:
APL (Dyalog Unicode) , 5 octets SBCS
Corps de programme complet. Demande une chaîne de STDIN et imprime la table séparée par des sauts de ligne dans STDOUT. La colonne la plus à gauche est les caractères d'entrée et les nombres sont alignés à droite avec le plus grand nombre séparé de son caractère par un seul espace.
Essayez-le en ligne!
⍞
invite pour la saisie de texte à partir de STDIN⌸
créer une table de clés constituée de,
l'unique élément suivi∘
par≢
le décompte des indices de son apparition (il se produit combien de fois)la source
:
soit malheureusement requis dans la sortie (vous ne pouvez pas supprimer cette réponse).PHP - 68 (ou 39) octets
Sortie pour l'exemple de texte:
Si la sortie exacte n'est pas requise, cela fonctionnerait pour 39 octets :
Exemple de sortie:
où chaque index numérique fait référence à la valeur ordinale du caractère qu'il représente.
Je soupçonne très fortement que l'utilisation d'une fonction intégrée qui fait exactement ce que le problème déclare sera bientôt interdite.
la source
$argv[1]
au lieu d'fgets(STDIN)
enregistrer 4 octets.k (
87)Exemple
edit: Jusqu'à sept, H / T Aaron Davies
Explication
Prenez une chaîne du clavier:
Regroupez les éléments distincts et renvoyez une carte contenant la clé sous forme de caractères et de valeurs distincts qui sont les indices où les éléments distincts se produisent.
Comptez maintenant les valeurs de chaque entrée de la carte.
la source
:
en=:
est superflu;k)#:'=0:0
fonctionne très bien (7 caractères). (bonus pour le savoir0:0
, je n'en avais aucune idée!)q
la traduction est plus facile à comprendre -count each group read0 0
Utilitaires principaux GNU -
292220 caractères (53 avec formatage)Amélioration de Wumpus (20 caractères):
Amélioration de Firefly (22 caractères):
l'original de joeytwiddle (29 caractères):
À l'origine, j'avais l'habitude
sed
d'ajouter simplement une nouvelle ligne après chaque caractère. Firefly a amélioré cela avecgrep -o .
, car-o
affiche chaque motif correspondant sur sa propre ligne. Wumpus a souligné une autre amélioration en utilisant à lafold -1
place. Bon travail!uniq
fait le vrai travail, bien qu'il ne s'applique qu'aux listes triées.Notez que le format de sortie ne correspond pas exactement à l'exemple de la question. Cela nécessite une analyse finale
sed
pour échanger les arguments. (En attente d'une réponse à la question de Jan Dvorak pour voir si cela est nécessaire ...)Le reformatage avec sed est "seulement" encore 33 caractères! ( Total 53 )
Awk peut presque faire le travail en ajoutant seulement 25 caractères, mais il cache le premier espace. Stupide awk!
Je me demande si des améliorations peuvent être apportées au stade du reformatage ...
la source
&
pour "match entier" au lieu de\0
, bien que cegrep -o .
soit encore un peu plus court. Il convient de mentionner que la sortie deuniq -c
diffère légèrement de celle donnée dans la question.grep -o
; c'est utile.fold -1
fait la même chose quegrep -o .
ptx -S.
fait le même tour .Ruby 1.9.3: 53 caractères
(Basé sur les commentaires de @ shiva et @ daneiro.)
Exemple d'exécution:
Ruby: 44 caractères
Ne respectant pas le format de sortie:
Exemple d'exécution:
la source
a=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}
strip()
? La question dit, "tous les personnages comptent".\n
même si vous n'en avez pas l'intention\n
s'il a vraiment été adopté. Le passer est un effet secondaire de l'utilisation de here-string. pastebin.com/gCrgk9m1$_
et l'abandona
sont toujours valables. Etc+"...
au lieu de"#{c}...
Python 3: 76 caractères
76
44
(imprimer plusieurs fois les mêmes caractères, voir la réponse de Wasi pour une version valide)
la source
Perl 6: 21 caractères
la source
APL (15)
Si vous en avez vraiment besoin
:
, c'est 19 (mais il y en a d'autres qui ne l'incluent pas):Sortie:
la source
R, 30 caractères
Exemple d'utilisation:
la source
cat
.cat
je ne retournerai que les valeurs et non les noms de valeurs (c'est-à-dire les caractères). Il faudrait donc une solution plus complexe.Perl 5, 54 caractères
la source
sort keys%h
Mais cela devrait être le cas .$_=<>;s/./$h{$_}++/eg;
ou à lamap{$h{$_}++}<>=~/./g;
place demap{$h{$_}++}split//,<>;
$h{$_}++for<>=~/./g
, qui je pense pourrait être optimal. Newline littéral au lieu de\n
aussi bien.Javascript
6653 octets:6956 octets:7865 octets:NB: Dans tous les cas, le nombre d'octets supprimés fait référence à un
console.log()
appel supplémentaire qui est inutile s'il est exécuté dans la console. Un grand merci à @imma pour la grande prise avec-~a[b]
etprompt(a={})
. Cela a certainement permis d'économiser encore plus d'octets.la source
for
enfor in
- le test dans un onglet vide produit les mêmes résultats. En outre, la dernière;
n'est pas nécessaire, donc:b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a
for in
effet vous donne des fonctions en SO, mais pas dans l' onglet vide;)Python 2, correctement (58)
Sortie:
Python 2, style guépard (41)
Sortie:
la source
for l in set(s):print l,":",s.count(l)
. Pour le second, supprimer les espaces inutiles vous fait gagner 2 caractères:print{l:s.count(l)for l in s}
Mathematica, 61 octets
Il apparaît ensuite cette boîte de dialogue,
et pour l'exemple de phrase, produit en sortie
la source
python 3, 49
Voler l' idée d' Evuez
contribution:
production:
la source
for i in sorted(set(t)):print(i,':',t.count(i))
set()
! ;)JavaScript (
6968 caractères):S'attend
s
à contenir la chaîne.Cela suit parfaitement les nouvelles règles.
Remarque: cela suppose un environnement propre, sans propriétés personnalisées sur les prototypes d'objet standard.
Éditer: 1 caractère de moins!
Sortie console:
Ancienne réponse (44 caractères):
C'était valable avant que les règles ne changent.
r
contient la sortie.la source
Haskell, 93
la source
PowerShell (49)
la source
C # (178
220caractères)Sur la base du commentaire de @ Spongeman, je l'ai changé un peu:
la source
namespace System{using Linq;class F{static void Main(){foreach(var g in Console.ReadLine().GroupBy(c=>c))Console.WriteLine(g.Key+" : "+g.Count());}}
Sclipting , 19 caractères
Production
Si vous voulez les espaces autour de
:
, changez꾠
en긃똠
, ce qui en fait 20 caractères.Explication
la source
F # (
66 5949, 72 avec formatage prescrit)Sortie:
Avec le formatage prescrit, il devient:
la source
let f s=Seq.countBy id (Seq.sort s)|>Seq.iter(printfn"%A")
let f s=Seq.countBy id s|>Seq.iter(printfn"%A")
Mathematica,
3429 octetsJe ne sais pas pourquoi l'autre réponse Mathematica est si compliquée ...;)
la source
Bash (
2015 caractères)Encodage ASCII désormais pris en charge
Bash (23 caractères):
Formatage ASCII non pris en charge
la source
Java 8,
273253249246239200 octets-24 octets grâce à @Poke .
-7 octets grâce à @ OlivierGrégoire .
Explication:
Essayez-le ici.
la source
import java.util.*;class I{public static void main(String[]a){Map m=new HashMap();for(char c:new Scanner(System.in).nextLine().toCharArray()){m.put(c,m.get(c)!=null?(int)m.get(c)+1:1);}for(Object e:m.keySet()){System.out.println(e+": "+m.get(e));}}}
m.compute(c,(k,v)->v!=null?(int)v+1:1);
au lieu d'm.put(c,m.get(c)!=null?(int)m.get(c)+1:1);
enregistrer 3 octets.Powershell, 63
la source
$a[$_]
par$a.$_
. Voirhelp about_hash_tables
Script de commande Windows - 72 octets
Les sorties:
la source
J, 23 caractères
Format de sortie légèrement différent (la ligne 2 est stdin):
la source
J, 22 caractères
Exemple:
la source
C #
Dans notre cas, si l'entrée sera " La définition de la folie cite la même phrase encore et encore et ne s'attend pas au désespoir. "
La sortie sera:
la source
string str = Console.ReadLine();
. Mais c'est du code-golf donc ça devrait l'êtrevar str=Console.ReadLine();
. Les autres commentaires que je voudrais faire doivent être suspendus jusqu'à ce que OP améliore la question.C #: 129
C'est la réponse d'Aviv mais plus courte:
C'est à moi:
C #: 103
la source
Python 2 (90 caractères)
Sortie lorsqu'il est exécuté sur sa propre source:
la source