Bir giriş dizesindeki her karakter için yineleme sayısını görüntüleme


21

Kod, klavyeden girdi olarak bir dize almalıdır:

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

Çıktı şöyle olmalıdır (belirli bir sırada sıralanmamıştır):

  :  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

Tüm ASCII karakterleri unicode sayımı bir gereklilik değildir, boşluklar, tırnak işaretleri, vb. Ve girdiler klavyeden / sabitlerden değil, niteliklerden gelmeli, çıktılar yukarıdaki örnekte olduğu gibi her karakterden sonra yeni satırla basılmalıdır, dize olarak döndürülmemelidir. ya da öylesine, HashMap / Sözlük vb atılmış x : 1ve x: 1Tamam ama {'x':1,...ve x:1değillerdir.

S: Stdin alarak ve stdout yazarken fonksiyon veya tam program?
C: Kodun standart girişi kullanarak giriş alan bir program olması ve sonucu standart çıkış üzerinden görüntülemesi gerekir.

scoreboard:

En kısa genel : 5 bayt

En kısa genel : 7 bayt


3
Giriş olarak tüm ascii karakterleri? Ya da sadece yazdırılabilir? Veya unicode kadar? Newlines olacak mı?
Justin

2
Bir işlev oluşturabilir miyim, yoksa bütün bir program gerekli mi? Tüm ascii karakterleri çıktısını alabilir 0ve oluşum sayısını yazdırabilir miyim ?
Justin

16
Çıktı formatı katı mı, yoksa anlamı korumak için yeterli mi?
John Dvorak

Düzenlemem sorumu ele almadı.
Justin

5
Çıktının alfabetik olarak sıralanması gerekip gerekmediğini söylemediniz. Ayırıcının olması gerekip gerekmediğini " : "(sonradan iki boşluğa dikkat edin :) veya diğer (daha kısa) ayırıcıların iyi olup olmadığını söylemediniz . Unicode / kodlama sorununu çözmediniz.
KodlarInChaos

Yanıtlar:


2

APL (Dyalog Unicode) , 5 bayt SBCS

Tam program gövdesi. STDIN'den bir dize ister ve yeni satırlı ayrılmış tabloyu STDOUT'a yazdırır. En soldaki sütun, giriş karakterleridir ve sayılar, karakterinden tek boşlukla ayrılmış en büyük sayı ile sağa hizalanır.

,∘≢⌸⍞

Çevrimiçi deneyin!

 STDIN'den metin girişi istemi

 oluşan oluşturmak tuşları table
, benzersiz elemanı takip
 edenler tarafından
 oluşun indekslerinin çetelesini (yani ortaya kaç kez)


Gibi görünüyor :Çıktıda ne yazık ki gerekli (bu cevabı silemezsiniz).
Outgolfer Erik

@EriktheOutgolfer Bunu nasıl anladınız? Açıkçası OP, bu cevabı kabul edilebilir bulmuştur. eski bir yorum .
Adám


15

PHP - 68 (veya 39) bayt

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

Örnek metin için çıktı:

  : 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

Tam çıktı gerekli değilse, bu 39 bayt için işe yarar :

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

Örnek çıktı:

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
)

Her sayısal endeks temsil ettiği karakterin sıra değerini belirtir.

Sorunun tam olarak ne olduğunu söyleyen yerleşik bir işlevi kullanmanın yakında reddedileceğini çok kuvvetli bir şekilde şüpheliyim.


$argv[1]fgets(STDIN)4 bayt yerine kaydeder.
Titus,

14

k ( 8 7)

#:'=0:0

Örnek

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

düzenleme: Yedi Aşağı, H / T Aaron Davies

açıklama

Klavyeden bir Dize Alın:

k)0:0
text
"text"

Farklı öğeleri gruplayın ve farklı karakterler ve değerler olarak anahtar içeren bir harita döndürün, farklı öğelerin oluştuğu göstergelerdir.

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

Şimdi haritadaki her girişin değerlerini sayın.

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

Oldukça inanılmaz.
Pureferret

:içinde =:gereksiz olduğu; k)#:'=0:0iyi çalışıyor (7 karakter). (bilmek için ikramiye 0:0, hiçbir fikrim yoktu!)
Aaron Davies

Ayrıntılı bir açıklama gerçekten harika olur :)
Timwi

qçeviri daha kolay anlaşılır -count each group read0 0
skeevey

13

GNU çekirdek araçları - 29 22 20 karakter (53 biçimlendirme ile)

Wumpus'un gelişimi (20 karakter):

fold -1|sort|uniq -c

Ateş böceği gelişimi (22 karakter):

grep -o .|sort|uniq -c

joeytwiddle'ın orijinali (29 karakter):

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

Aslında sedher karakterden sonra yeni bir satır eklerdim. Firefly ile bu konuda geliştirilmiş grep -o .beri, -oekranlar her kendi satırına desen eşleşti. Wumpus fold -1bunun yerine başka bir gelişme olduğuna işaret etti . İyi iş!

uniq Gerçek işi yapar, ancak yalnızca sıralanmış listeler için geçerlidir.

Çıktı formatının sorudaki örnekle tam olarak eşleşmediğini unutmayın. Bu bir final çalışması gerektirirsed , argümanları değiştirmek için . (Bunun gerekli olup olmadığını görmek için Jan Dvorak'ın sorusuna cevap bekliyorum ...)

Sed ile yeniden biçimlendirme 33 karakterden sadece "sadece" dır! ( Toplam 53 )

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

Awk, sadece 25 karakter eklerken neredeyse işi yapabilir, ancak ilk alanı gizler. Aptal awk!

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

Yeniden biçimlendirme aşamasında iyileştirmeler yapılıp yapılamayacağını merak ediyorum ...


2
Sed &için, " henüz tam eşleşme" yerine kullanabilirsiniz \0, ancak grep -o .henüz biraz daha kısadır. Çıktının uniq -c, soruda verilenden biraz farklı olduğunu belirtmekte fayda var .
FireFly

Oh teşekkürler! Güncellenmiş. Unutmamalıyım grep -o; bu faydalı bir tanesidir.
joeytwiddle

2
fold -1aynı şeyi yapargrep -o .

Müthiş :) Yeni numaralar öğrenmek!
joeytwiddle

1
ptx -S.aynı hile yapar .
Pureferret

7

Yakut 1.9.3: 53 karakter

(@ Shiva ve @ daneiro adlı kullanıcının yorumlarına dayanarak.)

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

Örnek çalışma:

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

Yakut: 44 karakter

Çıktı formatına saygı duymamak:

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

Örnek çalışma:

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 karaktera=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}
Siva

Neden strip()? Soru “tüm karakterler sayılır” diyor.
Manatwork

Şey, \nniyetinde
Siva

Hayır! Sadece \ngerçekten geçildiyse geri döner . Bunu geçmek, burada string kullanmanın bir yan etkisidir. pastebin.com/gCrgk9m1
yapıt

1
Yine de kullanma $_ve hizalama ahala sağlam. Ve c+"...yerine"#{c}...
daniero

7

Python 3: 76 karakter

76

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

44

(birçok kez aynı karakterleri yazdırın, geçerli bir sürüm için Wasi'nin cevabına bakın)

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

45 char sürümü, birden fazla karakter yazdırır.
ugoren

Doğru ... Fark ettiğiniz için teşekkürler!
Ocak'ta

@evuez Sadece 45 karakter versiyonunuzu düzelttim. Ama sen onu kaldırdın, ben de bir kez daha gönderdim. Bir göz atın
Wasi

6

Perl 6: 21 karakter

.say for get.comb.Bag
(REPL)
> get.comb.Bag için .say
Deliliğin tanımı aynı cümleyi tekrar tekrar alıntılamaktır ve umutsuzluğa kapılmamaktır.
"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←⍞

Gerçekten ihtiyacınız varsa :, 19 (ama buna dahil olmayan başkaları da var):

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

Çıktı:

      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

Yarı ciddi soru - eski APL kodunu korumak nasıl bir şey?
Michael Stern,

@ MichaelStern: Hiç bir fikrim yok, bunu yapmak zorunda kalmamıştım. Ama sanırım diğer eski kuralları korumaktan daha kötü değil. APL, alıştığınız zaman okuması oldukça kolaydır.
marinus

5

R, 30 karakter

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

Örnek kullanım:

> 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 

İyi bir fikir! Ancak soru, kodun sonucu yazdırması gerektiğini söylüyor. Kodunuz sadece sonucu döndürür. Sanırım ihtiyacın var cat.
Sven Hohenstein

@SvenHohenstein iyi cevap verdiğimde belirtilmemiştir (4. sorudan önce cevapladım) ... ama aslında catsadece değer isimlerini değil (karakterleri) değerleri döndürecektir. Bu yüzden daha karmaşık bir çözüme ihtiyacı olacaktır.
plannapus

5

Perl 5, 54 karakter

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

1
Çok güzel bir çözüm, okunması kolay. Olması gerekirdi sort keys%hyine de.
primo

1
Hey @protist, iyi görünüyor! @Primo ile olsa katılıyorum! Ancak, yerine $_=<>;s/./$h{$_}++/eg;veya map{$h{$_}++}<>=~/./g;yerine iki karakter kaydedebilirsinizmap{$h{$_}++}split//,<>;
Dom Hastings

1
@HomHastings veya $h{$_}++for<>=~/./g, bence en uygun olabilir. Bunun yerine değişmez yeni satır \n.
primo

Ah güzel, daha iyi! Evet, değişmez yeni satırdan bahsetmeyi unuttum, bu benim yeni favori -1 baytım oldu!
Dom Hastings

5

JavaScript

  1. 66 53 bayt:

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

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

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

Not: Her durumda silinen bayt sayısı console.log(), konsolda çalıştırıldığında anlamsız olan ekstra çağrıya atıfta bulunur . Büyük teşekkür @imma ile büyük yakalamak için -~a[b]ve prompt(a={}). Bu kesinlikle biraz daha bayt kurtardı.


1
Ayrıca bir döngü yardım haritası yerine biraz da (a [b [i]] || 0) +1 - ~ a [b [i]] değerine düşürülebilir & console.log muhtemelen son değeri döndürerek gidebilir. bilgi istemi (a = {}). split (""). map (fonksiyon (c) {a [c] = - ~ a [c]}); a
imma

1
değiştirebileceğiniz foriçine for in- Boş sekmede test aynı sonuçlar üretir. Ayrıca, sonuncusu ;gerekli değildir, bu nedenle:b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a
14'te

1
nice :-) b = ... işaretini for & içine sok {} 'in a; başka bir 2 bayt için: (i = b = bilgi istemi (a = {})) a [b [i]] = - ~ a [b [i]]; a
imma

tam metin çıktısı isteyebilseler de: - / ki bu onu / beni 36 (- 79) byte kadar yedekler: - (i = b = bilgi (a = {})) a [b [i]] = - ~ a [b [i]]; (in a n) console.log (n + ":" + a [n])
imma

1
@VisioN sadece ilkellerin aşırı yüklenmesi durumunda - for inaslında SO'da işlevler verir, ancak boş sekmede değil;)
Ocak'ta

5

Python 2, doğru (58)

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

Çıktı:

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

Piton 2, çita tarzı (41)

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

Çıktı:

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}

İkinci baskıdan sonra parantezleri çıkarmayı unuttum, bu 41 olacak
ToonAlfrink

Eğer ilk sürümü ile 52 karakter aşağı gidebilir: for l in set(s):print l,":",s.count(l). İkincisi, gereksiz boşlukları kaldırmak, 2 karakter kazanmanızı sağlar:print{l:s.count(l)for l in s}
14'te evuez

5

Mathematica, 61 bayt

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

Daha sonra bu iletişim kutusunu açar.

input

ve örnek cümle için çıktı olarak üretir

output


4

piton 3, 49

Evuez'den fikir çalmak

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

giriş:

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

çıktı:

  :  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

güzel gelişme! sıralanmış () neden kaldırılmıyor?
Eva

1
sağ! Yine de, eğer bir liste anlama özelliğini kullanmazsanız, 1 karakterden daha az olur:for i in sorted(set(t)):print(i,':',t.count(i))
14'te evuez

@evuez Teşekkürler, kodunuza yorum olarak eklemem gerekiyordu. İsterseniz tekrar çözümünüze ekleyebilirsiniz (Bunu mutlu bir şekilde silerim): D
Wasi

Adil olmaz, düşünmedim set()! ;)
09'da evuez

4

JavaScript (69 68 karakter):

Dizeyi stutmayı bekler .

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

Bu yeni kuralları mükemmel bir şekilde takip ediyor.

Not: Bu, herhangi bir standart nesne prototipi üzerinde hiçbir özel özellik bulunmayan temiz bir ortam olduğunu varsayar.

Düzenle: 1 karakter daha az!

Konsol çıkışı:

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

Eski cevap (44 karakter):

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

Bu kurallar değişmeden önce geçerliydi.

r çıktıyı içerir.


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 chars)

Based on @Spongeman's comment I changed it up a bit:

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])));}}

doesn't compile. this one does: 178 chars. using System.Linq;using C=System.Console;class F{static void 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{static void Main(){foreach(var g in C.ReadLine().GroupBy(c=>c).OrderBy(g=>g.Key))C.WriteLine(g.Key+" : "+g.Count());}}
Spongman

apparently sorting is unneccesary, 150: using C=System.Console;using System.Linq;class F{static void Main(){foreach(var g in C.ReadLine().GroupBy(c=>c))C.WriteLine(g.Key+" : "+g.Count());}}
Spongman

Wow. Quick or coincidence ? You replied just a second after I updated my answer :D Just noticed that sorting wasn't explicitly mentioned!
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 characters

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

Output

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

If you want the spaces around the :, change to 긃똠, making it 20 characters.

Explanation

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 with prescribed formattting)

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

Output:

> 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)

With the prescribed formatting, it becomes:

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

You can drop a character by switching away from the piped syntax for a few of the function calls: let f s=Seq.countBy id (Seq.sort s)|>Seq.iter(printfn"%A")
goric

In fact, why even sort in the first place? let f s=Seq.countBy id s|>Seq.iter(printfn"%A")
goric

3

Mathematica, 34 29 bytes

Not sure why the other Mathematica answer is so complicated... ;)

Grid@Tally@Characters@Input[]

3

Bash (20 15 characters)

 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 encoding now supported

Bash (23 characters):

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 formatting not supported


just out of curiosity, do you really need |sort| here, AFAIK ptx will already produce a sorted list of chars which you can feed directly to "uniq -c"
zeppelin

@zeppelin a little googling confimrs what you've said
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 thanks to @Poke.
-7 bytes thanks to @OlivierGrégoire.

Explanation:

Try it here.

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

2
m.compute(c,(k,v)->v!=null?(int)v+1:1); instead of m.put(c,m.get(c‌​)!=null?(int)m.get(c‌​)+1:1); to save 3 bytes.
Olivier Grégoire

2

Powershell, 63

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

2
Each key in a hash can be accessed as a property on that hash, so you can shave off two characters by replacing each instance of $a[$_] with $a.$_ . See help about_hash_tables
goric

2

Windows Command Script - 72 Bytes

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

Outputs:

\=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

Nice! It does fold case though, but it's always amazing to see actual cleverness in batch file programming.
Brian Minton

2

J, 23 chars

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

Slightly different output format (line 2 is stdin):

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

2

J, 22 characters

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

Example:

   (~.;"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 Our Case, If The Input Will Be "The definition of insanity is quoting the same phrase again and again and not expect despair."

The Output Will Be:

  : 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
The question asks for input from the keyboard, so the first line should be string str = Console.ReadLine();. But this is code-golf so it should actually be var str=Console.ReadLine();. The other comments I would like to make have to be put on hold until OP improves the question.
Peter Taylor

You're right, I edited my answer.
Aviv

2

C#: 129

This is Avivs answer but shorter:

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":"");}

This is mine:

C#: 103

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

Won't compile, need to add about 50 chars for usings/namespace/class/method definitions.
Pierre-Luc Pineault

Oh, didn't know that was mandatory, I'm sorry.
Abbas

2

Python 2 (90 chars)

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

Output when run on its own source:

  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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.