Zeigt die Anzahl der Vorkommen für jedes Zeichen in einer Eingabezeichenfolge an


21

Der Code sollte eine Zeichenfolge als Eingabe von der Tastatur nehmen:

The definition of insanity is quoting the same phrase again and again and not expect despair.

Die Ausgabe sollte folgendermaßen aussehen (nicht in einer bestimmten Reihenfolge sortiert):

  :  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

Alle ASCII-Zeichen zählen Unicode ist keine Anforderung, Leerzeichen, Anführungszeichen usw. und Eingaben sollten von der Tastatur kommen / keine Konstanten, Attribute, Ausgaben sollten mit einer neuen Zeile nach jedem Zeichen gedruckt werden, wie im obigen Beispiel, sie sollten nicht als Zeichenkette zurückgegeben werden oder als hashmap / wörterbuch usw. ausgegeben, also x : 1und x: 1sind ok, aber {'x':1,...und x:1sind nicht.

Q: Funktion oder komplettes Programm, das stdin nimmt und stdout schreibt?
A: Code muss ein Programm sein, das Eingaben über den Standardeingang vornimmt und das Ergebnis über den Standardausgang anzeigt.

Anzeigetafel:

Kürzeste Gesamtlänge : 5 Bytes

Kürzeste Gesamtlänge : 7 Bytes


3
Alle ASCII-Zeichen als Eingabe? Oder nur zum Ausdrucken? Oder bis zum Unicode? Wird es Newlines geben?
Justin

2
Kann ich eine Funktion erstellen oder ist ein ganzes Programm notwendig? Kann ich alle ASCII-Zeichen ausgeben und 0als Anzahl der Vorkommen drucken ?
Justin

16
Ist das Ausgabeformat streng oder reicht es aus, um die Bedeutung beizubehalten?
John Dvorak

Ihre Bearbeitung hat meine Frage nicht beantwortet.
Justin

5
Sie haben nicht gesagt, ob die Ausgabe alphabetisch sortiert werden muss. Sie haben nicht gesagt, ob das Trennzeichen sein muss " : "(beachten Sie die zwei Leerzeichen nach dem :) oder ob andere (kürzere) Trennzeichen in Ordnung sind. Sie haben das Unicode- / Codierungsproblem nicht behoben.
CodesInChaos

Antworten:


2

APL (Dyalog Unicode) , 5 Byte SBCS

Voller Programmteil. Fordert zur Eingabe einer Zeichenfolge von STDIN auf und gibt eine durch Zeilenumbrüche getrennte Tabelle an STDOUT aus. Die äußerste linke Spalte enthält die eingegebenen Zeichen, und die Zählungen werden rechtsbündig ausgerichtet, wobei die größte Zahl durch ein einzelnes Leerzeichen vom Zeichen getrennt ist.

,∘≢⌸⍞

Probieren Sie es online!

 Eingabeaufforderung von STDIN

 Erstellen Sie eine Schlüsseltabelle, die aus
, dem eindeutigen Element besteht, gefolgt
 von
 der Aufzählung der Indizes seines Auftretens (dh wie oft es auftritt).


Sieht so aus, als ob das :in der Ausgabe leider erforderlich ist (Sie können diese Antwort nicht löschen).
Erik der Outgolfer

@EriktheOutgolfer Wie kommst du darauf? Offensichtlich fand OP diese Antwort gemäß einem alten Kommentar akzeptabel .
Adám

Ein weiterer Grund für spec in der Frage selbst zu sein ...
Erik the Outgolfer

15

PHP - 68 (oder 39) Bytes

<?foreach(count_chars(fgets(STDIN),1)as$k=>$v)echo chr($k)." : $v
";

Ausgabe für den Beispieltext:

  : 15
. : 1
T : 1
a : 10
c : 1
d : 4
e : 8
f : 2
g : 3
h : 3
i : 10
m : 1
n : 10
o : 4
p : 3
q : 1
r : 2
s : 5
t : 6
u : 1
x : 1
y : 1

Wenn die genaue Ausgabe nicht benötigt wird, funktioniert dies für 39 Bytes :

<?print_r(count_chars(fgets(STDIN),1));

Beispielausgabe:

Array
(
    [32] => 15
    [46] => 1
    [84] => 1
    [97] => 10
    [99] => 1
    [100] => 4
    [101] => 8
    [102] => 2
    [103] => 3
    [104] => 3
    [105] => 10
    [109] => 1
    [110] => 10
    [111] => 4
    [112] => 3
    [113] => 1
    [114] => 2
    [115] => 5
    [116] => 6
    [117] => 1
    [120] => 1
    [121] => 1
)

Dabei bezieht sich jeder numerische Index auf den Ordnungswert des Zeichens, das er darstellt.

Ich vermute sehr stark, dass die Verwendung einer eingebauten Funktion, die genau das tut, was das Problem angibt, bald nicht mehr zulässig sein wird.


$argv[1]statt fgets(STDIN)spart 4 Bytes.
Titus

14

k ( 8 7)

#:'=0:0

Beispiel

k)#:'=:0:0
The definition of insanity is quoting the same phrase again and again and not expect despair.
T| 1
h| 3
e| 8
 | 15
d| 4
f| 2
i| 10
n| 10
t| 6
o| 4
s| 5
a| 10
y| 1
q| 1
u| 1
g| 3
m| 1
p| 3
r| 2
x| 1
c| 1
.| 1

Bearbeiten: Bis sieben, H / T Aaron Davies

Erläuterung

Nimm einen String von der Tastatur:

k)0:0
text
"text"

Gruppieren Sie die verschiedenen Elemente und geben Sie eine Zuordnung mit Schlüssel zurück, da verschiedene Zeichen und Werte die Indizes sind, in denen die verschiedenen Elemente vorkommen.

k)=0:0
text
t| 0 3
e| ,1
x| ,2

Zählen Sie nun die Werte jedes Eintrags in der Karte.

k)#:'=0:0
text
t| 2
e| 1
x| 1

Ziemlich unglaublich.
Pureferret

das :in =:ist überflüssig; k)#:'=0:0funktioniert gut (7 Zeichen). (Bonus für das Wissen über 0:0, ich hatte keine Ahnung!)
Aaron Davies

Eine ausführliche Erklärung wäre echt cool :)
Timwi

qÜbersetzung ist einfacher zu verstehen -count each group read0 0
skeevey

13

GNU-Kern-Utils - 29 22 20 Zeichen (53 mit Formatierung)

Wumpus Verbesserung (20 Zeichen):

fold -1|sort|uniq -c

Verbesserung von Firefly (22 Zeichen):

grep -o .|sort|uniq -c

joeytwiddles Original (29 Zeichen):

sed 's+.+\0\n+g'|sort|uniq -c

Ursprünglich habe ich sedeinfach nach jedem Zeichen eine neue Zeile eingefügt. Firefly hat das mit verbessert grep -o ., da -ojedes übereinstimmende Muster in einer eigenen Zeile angezeigt wird. Wumpus wies fold -1stattdessen auf eine weitere Verbesserung hin . Gute Arbeit!

uniq erledigt die eigentliche Arbeit, obwohl sie nur für sortierte Listen gilt.

Beachten Sie, dass das Ausgabeformat nicht genau dem Beispiel in der Frage entspricht. Das erfordert einen letzten Durchlauf sed, um die Argumente auszutauschen. (Warten auf eine Antwort auf Jan Dvoraks Frage, um zu sehen, ob dies erforderlich ist ...)

Neuformatierung mit sed ist "nur" noch 33 Zeichen! ( Gesamt 53 )

|sed 's/ *\(.*\) \(.\)/\2 :  \1/'

Awk schafft es fast , indem es nur 25 Zeichen hinzufügt, aber es verbirgt das erste Leerzeichen. Dumme Awk!

|awk '{print $2" :  "$1}'

Ich frage mich, ob Verbesserungen in der Neuformatierungsphase vorgenommen werden können ...


2
Für sed kann man statt &"ganze Übereinstimmung" verwenden \0, grep -o .ist aber noch etwas kürzer. Erwähnenswert ist, dass die Ausgabe von uniq -cgeringfügig von der in der Frage angegebenen abweicht.
FireFly

Oh danke dir! Aktualisiert. Ich sollte nicht vergessen grep -o; es ist nützlich.
Joeytwiddle

2
fold -1macht dasselbe wiegrep -o .

Super :) Neue Tricks lernen!
Joeytwiddle

1
ptx -S.macht den gleichen Trick .
Pureferret

7

Ruby 1.9.3: 53 Zeichen

(Basierend auf den Kommentaren von @ shiva und @ daneiro.)

gets.split("").uniq.map{|x|puts x+" : #{$_.count x}"}

Probelauf:

bash-4.1$ ruby -e 'a=gets;a.split("").uniq.map{|x|puts"#{x} : #{a.count x}"}' <<< 'Hello world'
H : 1
e : 1
l : 3
o : 2
  : 1
w : 1
r : 1
d : 1

 : 1

Ruby: 44 Zeichen

Nicht das Ausgabeformat beachten:

s=Hash.new 0;gets.chars{|c|s[c]+=1};pp s

Probelauf:

bash-4.1$ ruby -rpp -e 's=Hash.new 0;gets.chars{|c|s[c]+=1};pp s' <<< 'Hello, world!'
{"H"=>1,
 "e"=>1,
 "l"=>3,
 "o"=>2,
 ","=>1,
 " "=>1,
 "w"=>1,
 "r"=>1,
 "d"=>1,
 "!"=>1,
 "\n"=>1}

1
63 Zeichena=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}
Siva

Warum zu strip()? Die Frage lautet: "Alle Zeichen zählen".
Handarbeit

Nun, wird zurückkehren, \nauch wenn Sie nicht beabsichtigen
Siva

Nee. Kehrt nur zurück, \nwenn es wirklich bestanden wurde. Übergeben ist ein Nebeneffekt der Verwendung von Here-String. pastebin.com/gCrgk9m1
Manatwork

1
Verwenden $_und Notwasserung aist immer noch gesund. Und c+"...anstelle von"#{c}...
daniero

7

Python 3: 76 Zeichen

76

import collections as c
for x,y in c.Counter(input()).items():print(x,':',y)

44

(drucke die gleichen Zeichen oft aus, siehe Wasis Antwort für eine gültige Version)

a=input()
for x in a:print(x,':',a.count(x))

Die 45-Zeichen-Version druckt Zeichen mehr als einmal.
Ugoren

Richtig ... Danke fürs Bemerken!
Evuez

@evuez Ich habe gerade deine 45-Zeichen-Version repariert. Aber du hast es entfernt, also habe ich es noch einmal eingereicht. Werfen Sie einen Blick
Wasi

6

Perl 6: 21 Zeichen

.say for get.comb.Bag
(REPL)
> .say für get.comb.Bag
Die Definition von Wahnsinn zitiert immer wieder denselben Satz und erwartet keine Verzweiflung.
"T" => 1
"h" => 3
"e" => 8
"" => 15
"d" => 4
"f" => 2
"i" => 10
"n" => 10
"t" => 6
"o" => 4
"s" => 5
"a" => 10
"y" => 1
"q" => 1
"u" => 1
"g" => 3
"m" => 1
"p" => 3
"r" => 2
"x" => 1
"c" => 1
"." => 1

5

APL (15)

M,⍪+⌿Z∘.=M←∪Z←⍞

Wenn Sie das wirklich brauchen :, ist es 19 (aber es gibt andere, die es nicht einschließen):

M,':',⍪+⌿Z∘.=M←∪Z←⍞

Ausgabe:

      M,⍪+⌿Z∘.=M←∪Z←⍞
The definition of insanity is quoting the same phrase again and again and not expect despair. 
T  1
h  3
e  8
  16
d  4
f  2
i 10
n 10
t  6
o  4
s  5
a 10
y  1
q  1
u  1
g  3
m  1
p  3
r  2
x  1
c  1
.  1

Halbschwere Frage - Wie ist es, alten APL-Code zu pflegen?
Michael Stern

@MichaelStern: Keine Ahnung, das musste ich noch nie machen. Aber ich denke, es ist nicht schlimmer als andere Legacy-Codes beizubehalten. APL ist eigentlich ziemlich einfach zu lesen, wenn Sie es gewohnt sind.
Marinus

5

R, 30 Zeichen

table(strsplit(readline(),""))

Anwendungsbeispiel:

> table(strsplit(readline(),""))
The definition of insanity is quoting the same phrase again and again and not expect despair.

    .  a  c  d  e  f  g  h  i  m  n  o  p  q  r  s  t  T  u  x  y 
15  1 10  1  4  8  2  3  3 10  1 10  4  3  1  2  5  6  1  1  1  1 

Gute Idee! Die Frage besagt jedoch, dass der Code das Ergebnis ausgeben muss. Ihr Code gibt nur das Ergebnis zurück. Ich nehme an, du brauchst cat.
Sven Hohenstein

@SvenHohenstein na ja, es wurde nicht angegeben, als ich geantwortet habe (ich habe vor Revision 4 der Frage geantwortet) ... aber tatsächlich catwerden nur die Werte zurückgegeben, nicht die Wertnamen (dh die Zeichen). Es wäre also eine komplexere Lösung erforderlich.
Plannapus

5

Perl 5, 54 Zeichen

map{$h{$_}++}split//,<>;print"$_ : $h{$_}\n"for keys%h

1
Sehr schöne Lösung, leicht zu lesen. Das müsste aber sein sort keys%h.
Primo

1
Hey @protist, sieht gut aus! Ich bin mit @primo einverstanden! Sie können jedoch zwei Zeichen mit $_=<>;s/./$h{$_}++/eg;oder map{$h{$_}++}<>=~/./g;anstelle vonmap{$h{$_}++}split//,<>;
Dom Hastings

1
@DomHastings oder $h{$_}++for<>=~/./g, was ich für optimal halte. Literal Newline statt \nauch.
Primo

Ah schön, noch besser! Ja, ich habe vergessen, die wörtliche Newline zu erwähnen, das ist mein neues Lieblings-1-Byte geworden!
Dom Hastings

5

JavaScript

  1. 66 53 Bytes:

    prompt(a={}).replace(/./g,function(c){a[c]=-~a[c]}),a
    
  2. 69 56 Bytes:

    b=prompt(a={});for(i=b.length;i--;){a[b[i]]=-~a[b[i]]};a
    
  3. 78 65 Bytes:

    prompt().split('').reduce(function(a,b){return a[b]=-~a[b],a},{})
    

NB: In allen Fällen beziehen console.log()sich die gelöschten Bytes auf einen zusätzlichen Aufruf, der sinnlos ist, wenn er in der Konsole ausgeführt wird. Vielen Dank an @imma für den tollen Fang mit -~a[b]und prompt(a={}). Das sparte definitiv ein paar Bytes mehr.


1
map statt einer schleife hilfe auch ein wenig (a [b [i]] || 0) +1 kann reduziert werden auf - ~ a [b [i]] & console.log kann wahrscheinlich gehen, nur den letzten Wert zurückgeben, prompt geben (a = {}). split (""). map (function (c) {a [c] = - ~ a [c]}); a
imma

1
Sie ändern können , forin for in- in leeren Tab Testen erzeugt die gleichen Ergebnisse. Auch der letzte ;wird nicht benötigt, also:b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a
22.01.14

1
schön :-) stecke das b = ... in das for & tausche die for {} 's gegen a; für weitere 2 Bytes aus: für (i in b = Eingabeaufforderung (a = {})) a [b [i]] = - ~ a [b [i]]; a
imma

obwohl sie vielleicht eine genaue Textausgabe wollen: - / was es / mich um 36 (bis 79) Bytes zurücksetzt: für (i in b = Eingabeaufforderung (a = {})) a [b [i]] = - ~ a [b [i]]; für (n in a) console.log (n + ":" + a [n])
imma

1
@VisioN nur wenn die Primitive überladen sind - for ingibt dir zwar Funktionen in SO, aber nicht in leerem Tab;)
22.

5

Python 2, richtig (58)

s=raw_input()
for l in set(s):print l+" : "+str(s.count(l))

Ausgabe:

python count.py
The definition of insanity is quoting the same phrase again and again and not expect despair.
  : 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

Python 2 nach Gepardenart (41)

s=input()
print {l:s.count(l) for l in s}

Ausgabe:

python count.py
"The definition of insanity is quoting the same phrase again and again and not expect despair."
{' ': 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}

Vergessen, die Klammern nach dem Druck in der zweiten zu entfernen, das macht es 41
ToonAlfrink

Sie können mit Ihrer ersten Version bis 52 Zeichen nach unten gehen: for l in set(s):print l,":",s.count(l). Wenn Sie für das zweite Mal unnötige Leerzeichen entfernen, gewinnen Sie zwei Zeichen:print{l:s.count(l)for l in s}
evuez

5

Mathematica, 61 Bytes

Map[{#[[1]], Length@#} &, Gather@Characters[Input[]]] // TableForm

Es öffnet sich dann dieses Dialogfeld,

Eingang

und für den Beispielsatz als Ausgabe erzeugt

Ausgabe


4

Python 3, 49

Evuez die idee stehlen

t=input()
for i in set(t):print(i,':',t.count(i))

Eingang:

The definition of insanity is quoting the same phrase again and again and not expect despair.

Ausgabe:

  :  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

schöne verbesserung! Warum entfernst du nicht das Sorted ()?
Evuez

1
Recht! Jedenfalls, wenn Sie kein Listenverständnis verwenden, ist es 1 for i in sorted(set(t)):print(i,':',t.count(i))
Zeichen

@evuez Danke, ich sollte es als Kommentar in deinen Code einfügen. Wenn Sie möchten, können Sie es erneut in Ihre Lösung einfügen (diese lösche ich gerne): D
Wasi

Wäre nicht fair, hätte ich nicht gedacht set()! ;)
evuez

4

JavaScript (69 68 Zeichen):

Erwartet s, die Zeichenfolge zu halten.

_={};for(x in s)_[a=s[x]]=-~_[a];for(x in _)console.log(x+': '+_[x])

Dies folgt den neuen Regeln perfekt.

Hinweis: Dies setzt eine saubere Umgebung ohne benutzerdefinierte Eigenschaften für Standardobjektprototypen voraus.

Bearbeiten: 1 Zeichen weniger!

Konsolenausgabe:

T: 1
h: 3
e: 8
 : 15
d: 4
f: 2
i: 10
n: 10
t: 6
o: 4
s: 5
a: 10
y: 1
q: 1
u: 1
g: 3
m: 1
p: 3
r: 2
x: 1
c: 1
.: 1

Alte Antwort (44 Zeichen):

r={};[].map.call(s,function(e){r[e]=-~r[e]})

Dies war gültig, bevor die Regeln geändert wurden.

r enthält die Ausgabe.


3

Haskell, 93

import Data.List
main=getLine>>=mapM(\s->putStrLn$[head s]++" : "++show(length s)).group.sort

3

PowerShell (49)

[char[]](read-host)|group|%{$_.Name+":"+$_.Count}

3

C # (178 220 Zeichen)

Basierend auf @ Spongemans Kommentar habe ich es ein wenig geändert:

using C=System.Console;using System.Linq;class P{static void Main()
{C.WriteLine(string.Join("\n",C.ReadLine().GroupBy(x=>x)
.OrderBy(x=>x.Key).Select(g=>g.Key+":"+g.Count())));}}

Line breaks added for readability, my first feeble attempt at code golf! :)

class P {static void Main(){var d=new Dictionary<char,int>();
Console.ReadLine().ToList().ForEach(x=>{ if(d.ContainsKey(x))
{d[x]++;}else{d.Add(x,1);}});Console.WriteLine(string
.Join("\n",d.Keys.Select(x=>x+":" +d[x])));}}

kompiliert nicht. Dieser macht: 178 Zeichen. using System.Linq; using C = System.Console; class F {statische Leere Main () {C.WriteLine (string.Join ("\ n", C.ReadLine (). GroupBy (c => c) .Select ( g => g.Key + ":" + g.Count ()). OrderBy (s => s)));}}
Spongman

168: using C = System.Console; using System.Linq; class F {statische Lücke Main () {foreach (var g in C.ReadLine (). GroupBy (c => c) .OrderBy (g => g.Key )) C.WriteLine (g.Key + ":" + g.Count ());}}
Spongman

anscheinend ist das Sortieren nicht erforderlich, 150: using C = System.Console; using System.Linq; class F (g.Key + ":" + g.Count ());}}
Spongman

Wow. Schnell oder Zufall? Sie haben nur eine Sekunde geantwortet, nachdem ich meine Antwort aktualisiert hatte: D Ich habe gerade bemerkt, dass die Sortierung nicht ausdrücklich erwähnt wurde!
Gideon

3
148: namespace System{using Linq;class F{static void Main(){foreach(var g in Console.ReadLine().GroupBy(c=>c))Console.WriteLine(g.Key+" : "+g.Count());}}
Timwi

3

Sclipting , 19 Zeichen

梴要⓶銻꾠⓷❸虛變梴❶⓺減負겠⓸⓸終丟

Ausgabe

T:1
h:3
e:8
 :15
d:4
f:2
i:10
n:10
t:6
o:4
s:5
a:10
y:1
q:1
u:1
g:3
m:1
p:3
r:2
x:1
c:1
.:1

Wenn Sie die Leerzeichen um das :ändern möchten , ändern Sie sie in 긃똠und geben Sie 20 Zeichen ein.

Erläuterung

Get length of input string.
梴
Stack is now [ input, length ]
While {
要
    Get first character of string and push ":"
    ⓶銻꾠
    Stack is now [ length, input, firstchar, ":" ]
    Replace all occurrences of that character with empty string
    ⓷❸虛變
    Stack is now [ length, firstchar, ":", reducedinput ]
    Get the length of that, calculate difference to previous length, push "\n"
    梴❶⓺減負겠
    Stack is now [ firstchar, ":", reducedinput, newlength, diff, "\n" ]
    Move the input string and length back up, leaving output below it
    ⓸⓸
    Stack is now [ firstchar, ":", diff, "\n", reducedinput, newlength ]
                   `------------------------'                `-------'
                   Every iteration of the               The length provides
                   While loop generates                 the While loop's
                   a bit like this                      terminating condition
} End While
終
Discard the length which is now 0
丟

3

F # ( 66 59 49, 72 mit vorgeschriebener Formatierung)

let f s=s|>Seq.countBy(id)|>Seq.iter(printfn"%A")

Ausgabe:

> f The definition of insanity is quoting the same phrase again and again and not expect despair.
(' ', 15)
('.', 1)
('T', 1)
('a', 10)
('c', 1)
('d', 4)
('e', 8)
('f', 2)
('g', 3)
('h', 3)
('i', 10)
('m', 1)
('n', 10)
('o', 4)
('p', 3)
('q', 1)
('r', 2)
('s', 5)
('t', 6)
('u', 1)
('x', 1)
('y', 1)

Mit der vorgeschriebenen Formatierung wird es:

let f s=s|>Seq.countBy(id)|>Seq.iter(fun(a,b)->printfn"\"%c\" :  %d"a b)

Sie können ein Zeichen löschen, indem Sie für einige der Funktionsaufrufe die Pipe-Syntax verlassen:let f s=Seq.countBy id (Seq.sort s)|>Seq.iter(printfn"%A")
goric

Warum überhaupt sortieren? let f s=Seq.countBy id s|>Seq.iter(printfn"%A")
GORIC

3

Mathematica, 34 29 Bytes

Ich bin mir nicht sicher, warum die andere Mathematica-Antwort so kompliziert ist ...;)

Grid@Tally@Characters@Input[]

3

Heftiger Schlag ( 20 15 Zeichen)

 ptx -S.|uniq -c
 10                                        a
  1                                        c
  4                                        d
  8                                        e
  2                                        f
  3                                        g
  3                                        h
 10                                        i
  1                                        m
 10                                        n
  4                                        o
  3                                        p
  1                                        q
  2                                        r
  5                                        s
  6                                        t
  1                                        T
  1                                        u
  1                                        x
  1                                        y

ASCII-Codierung wird jetzt unterstützt

Bash (23 Zeichen):

xxd -p -c1|sort|uniq -c

  1 0a
 15 20
  1 2e
  1 54
 10 61
  1 63
  4 64
  8 65
  2 66
  3 67
  3 68
 10 69
  1 6d
 10 6e
  4 6f
  3 70
  1 71
  2 72
  5 73
  6 74
  1 75
  1 78
  1 79

ASCII-Formatierung wird nicht unterstützt


Brauchen Sie wirklich | sort |, nur aus Neugier? hier wird AFAIK ptx bereits eine sortierte Liste von Zeichen erstellen, die Sie
zeppelin

@zeppelin ein wenig googeln bestätigt, was Sie gesagt haben
Pureferret

3

Java 8, 273 253 249 246 239 200 Bytes

interface I{static void main(String[]a){int m[]=new int[999],i=0;for(int c:new java.util.Scanner(System.in).nextLine().getBytes())m[c]++;for(;++i<999;)if(m[i]>0)System.out.printf("%c: %d%n",i,m[i]);}}

-24 Bytes dank @Poke .
-7 Bytes dank @ OlivierGrégoire .

Erläuterung:

Probieren Sie es hier aus.

interface I{                        // Class
  static void main(String[]a){      //  Mandatory main-method
    int m[]=new int[999],           //  Integer-array to count the occurrences
        i=0;                        //  Index-integer, starting at 0
    for(int c:new java.util.Scanner(System.in).nextLine().getBytes())
                                    //   Loop over the input as bytes:
      m[c]++;                       //    Increase the occurrence-counter of the char by 1
    for(;++i<999;)                  //   Loop over the array:
      if(m[i]>0)                    //    If the current character occurred at least once:
        System.out.print("%c: %d%n",//     Print with proper formatting:
         i,                         //      The character
         m[i]);}}                   //      and the occurrence-count

249 Bytesimport 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));}}}
Poke

2
m.compute(c,(k,v)->v!=null?(int)v+1:1);anstatt m.put(c,m.get(c‌​)!=null?(int)m.get(c‌​)+1:1);3 Bytes zu sparen.
Olivier Grégoire

2

Powershell, 63

$a=@{};[char[]](read-host)|%{$a[$_]++};$a.Keys|%{"$_ :"+$a[$_]}

2
Jeder Schlüssel in einem Hash kann als Eigenschaft an diesem Hash zugegriffen werden, so dass Sie zwei Zeichen abrasieren können durch jede Instanz ersetzt $a[$_]mit $a.$_. Seehelp about_hash_tables
goric

2

Windows-Befehlsskript - 72 Bytes

set/p.=
:a
set/a\%.:~,1%=\%.:~,1%+1
set.=%.:~1%
%.%goto:b
goto:a
:b
set\

Ausgänge:

\=15 (space)
\.=1
\a=10
\c=1
\d=4
\e=8
\f=2
\g=3
\h=3
\i=10
\m=1
\n=10
\o=4
\p=3
\q=1
\r=2
\s=5
\T=7
\u=1
\x=1
\y=1

Nett! Es klappt zwar, aber es ist immer wieder erstaunlich, wie clever die Batch-Programmierung ist.
Brian Minton

2

J, 23 Zeichen

(~.;"0+/@|:@=)/:~1!:1]1

Etwas anderes Ausgabeformat (Zeile 2 ist stdin):

   (~.;"0+/@|:@=)/:~1!:1]1
Mississippi
┌─┬─┐
│M│1│
├─┼─┤
│i│4│
├─┼─┤
│p│2│
├─┼─┤
│s│4│
└─┴─┘

2

J, 22 Zeichen

(~.;"0+/@(=/~.))1!:1]1

Beispiel:

   (~.;"0+/@(=/~.))1!:1]1
The definition of insanity is quoting the same phrase again and again and not expect despair.
+-+--+
|T|1 |
+-+--+
|h|3 |
+-+--+
|e|8 |
+-+--+
| |15|
+-+--+
|d|4 |
+-+--+
|f|2 |
+-+--+
|i|10|
+-+--+
|n|10|
+-+--+
|t|6 |
+-+--+
|o|4 |
+-+--+
|s|5 |
+-+--+
|a|10|
+-+--+
|y|1 |
+-+--+
|q|1 |
+-+--+
|u|1 |
+-+--+
|g|3 |
+-+--+
|m|1 |
+-+--+
|p|3 |
+-+--+
|r|2 |
+-+--+
|x|1 |
+-+--+
|c|1 |
+-+--+
|.|1 |
+-+--+

2

C #

string str = Console.ReadLine(); // Get Input From User Here
char chr;
for (int i = 0; i < 256; i++)
{
    chr = (char)i; // Use The Integer Index As ASCII Char Value --> Convert To Char
    if (str.IndexOf(chr) != -1) // If The Current Char Exists In The Input String
    {
        Console.WriteLine(chr + " : " + str.Count(x => x == chr)); // Count And Display
    }
}
Console.ReadLine(); // Hold The Program Open.

In unserem Fall, wenn die Eingabe sein wird " Die Definition von Wahnsinn zitiert immer wieder denselben Satz und erwartet keine Verzweiflung. "

Die Ausgabe wird sein:

  : 15
. : 1
T : 1
a : 10
c : 1
d : 4
e : 8
f : 2
g : 3
h : 3
i : 10
m : 1
n : 10
o : 4
p : 3
q : 1
r : 2
s : 5
t : 6
u : 1
x : 1
y : 1

1
Die Frage fragt nach Eingaben über die Tastatur, daher sollte die erste Zeile sein string str = Console.ReadLine();. Aber das ist Code-Golf, also sollte es eigentlich so sein var str=Console.ReadLine();. Die anderen Kommentare, die ich machen möchte, müssen zurückgestellt werden, bis OP die Frage verbessert.
Peter Taylor

Du hast recht, ich habe meine Antwort bearbeitet.
Aviv

2

C #: 129

Dies ist Avivs Antwort, aber kürzer:

var s=Console.ReadLine();for(int i=0;i<256;i++){var ch=(char)i;Console.Write(s.Contains(ch)?ch+":"+s.Count(c=>c==ch)+"\r\n":"");}

Das ist meins:

C #: 103

foreach(var g in Console.ReadLine().OrderBy(o=>o).GroupBy(c=>c))Console.WriteLine(g.Key+":"+g.Count());

Kann nicht kompiliert werden. Es müssen ca. 50 Zeichen für die Definitionen von "usings / namespace / class / method" hinzugefügt werden.
Pierre-Luc Pineault

Oh, wusste nicht, dass das obligatorisch ist, tut mir leid.
Abbas

2

Python 2 (90 Zeichen)

import collections as c;print"\n".join("%s %s"%i for i in c.Counter(raw_input()).items())

Ausgabe, wenn auf einer eigenen Quelle ausgeführt:

  8
" 4
% 3
) 4
( 4
. 3
; 1
C 1
\ 1
_ 1
a 2
c 4
e 3
f 1
i 9
j 1
m 2
l 2
o 6
n 7
p 3
s 5
r 5
u 2
t 6
w 1
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.