Muestra el número de ocurrencias para cada carácter en una cadena de entrada


21

El código debe tomar una cadena como entrada del teclado:

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

El resultado debería ser así (no ordenado en ningún orden en particular):

  :  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

Todos los caracteres ASCII cuentan que unicode no es un requisito, los espacios, las comillas, etc. y la entrada debe provenir del teclado / no constantes, los atributos, la salida debe imprimirse con una nueva línea después de cada carácter, como en el ejemplo anterior, no debe devolverse como una cadena o desechadas como diccionario hashMap / etc, por lo que x : 1y x: 1están bien, pero {'x':1,...y x:1no lo son.

P: ¿Función o programa completo tomando stdin y escribiendo stdout?
R: El código debe ser un programa que tome datos utilizando la entrada estándar y muestre el resultado a través de la salida estándar.

Marcador:

El más corto en general : 5 bytes

El más corto en general : 7 bytes


3
Todos los caracteres ascii como entrada? O simplemente imprimible? O hasta unicode? ¿Habrá nuevas líneas?
Justin

2
¿Puedo crear una función o es necesario un programa completo? ¿Puedo mostrar todos los caracteres ascii e imprimir 0como el número de ocurrencias?
Justin

16
¿Es estricto el formato de salida o es suficiente para preservar el significado?
John Dvorak

Tu edición no abordó mi pregunta.
Justin

55
No dijo si la salida debe ordenarse alfabéticamente. No dijo si el separador debe ser " : "(tenga en cuenta los dos espacios después de :) o si otros separadores (más cortos) están bien. No abordó el problema de codificación / unicode.
CodesInChaos

Respuestas:


2

APL (Dyalog Unicode) , SBCS de 5 bytes

Programa completo del cuerpo. Solicita una cadena de STDIN e imprime la tabla separada de nueva línea en STDOUT. La columna más a la izquierda son los caracteres de entrada, y los recuentos están alineados a la derecha con el número más grande separado de su carácter por un solo espacio.

,∘≢⌸⍞

Pruébalo en línea!

 solicitud de ingreso de texto desde STDIN

 tabla de crear un teclas que consiste en
, el elemento único seguido
 por
 el recuento de los índices de su ocurrencia (es decir, cuántas veces se produce)


Parece que :desafortunadamente se requiere en la salida (no puede eliminar esta respuesta).
Erik the Outgolfer

@EriktheOutgolfer ¿Cómo deduces eso? Claramente OP encontró esta respuesta aceptable, de acuerdo con un comentario anterior .
Adám

Otra razón para que la especificación esté en la pregunta misma ...
Erik the Outgolfer

15

PHP: 68 (o 39) bytes

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

Salida para el texto de ejemplo:

  : 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

Si no se requiere la salida exacta, esto funcionaría para 39 bytes :

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

Salida de muestra:

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
)

donde cada índice numérico se refiere al valor ordinal del carácter que representa.

Sospecho muy fuertemente que el uso de una función incorporada que hace exactamente lo que dice el problema pronto será rechazado.


$argv[1]en lugar de fgets(STDIN)guardar 4 bytes.
Titus

14

k ( 8 7)

#:'=0:0

Ejemplo

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

editar: hasta siete, H / T Aaron Davies

Explicación

Tome una cadena del teclado:

k)0:0
text
"text"

Agrupe los elementos distintos y devuelva un mapa que contenga la clave, ya que los caracteres y valores distintos son los índices donde se producen los elementos distintos.

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

Ahora cuente los valores de cada entrada en el mapa.

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

Bastante increible.
Pureferret

el :en =:es superfluo; k)#:'=0:0funciona bien (7 caracteres). (¡extra por saberlo 0:0, no tenía idea!)
Aaron Davies el

Una explicación detallada sería realmente genial :)
Timwi

qla traducción es más fácil de entendercount each group read0 0
skeevey

13

Utilidades principales de GNU: 29 22 20 caracteres (53 con formato)

Mejora de Wumpus (20 caracteres):

fold -1|sort|uniq -c

Mejora de Firefly (22 caracteres):

grep -o .|sort|uniq -c

original de joeytwiddle (29 caracteres):

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

Originalmente solía sedsimplemente agregar una nueva línea después de cada personaje. Firefly mejoró en eso con grep -o ., ya que -omuestra cada patrón coincidente en su propia línea. Wumpus señaló una mejora adicional usando en su fold -1lugar. ¡Buen trabajo!

uniq hace el trabajo real, aunque solo se aplica a listas ordenadas.

Tenga en cuenta que el formato de salida no coincide exactamente con el ejemplo en la pregunta. Eso requiere una ejecución final sedpara intercambiar los argumentos. (Esperando una respuesta a la pregunta de Jan Dvorak para ver si esto es necesario ...)

¡Reformatear con sed es "solo" otros 33 caracteres! ( Total 53 )

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

Awk casi puede hacer el trabajo mientras agrega solo 25 caracteres, pero oculta el primer espacio. Tonto awk!

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

Me pregunto si se pueden hacer mejoras en la etapa de reformateo ...


2
Para sed puedes usar &"match completo" en lugar de \0, aunque grep -o .todavía es un poco más corto. Vale la pena mencionar que la salida de uniq -cdifiere ligeramente de la dada en la pregunta.
FireFly

¡Oh gracias! Actualizado. No debería olvidarlo grep -o; Es útil.
joeytwiddle

2
fold -1hace lo mismo quegrep -o .

Impresionante :) Aprender nuevos trucos!
joeytwiddle

1
ptx -S.hace lo mismo truco .
Pureferret

7

Ruby 1.9.3: 53 caracteres

(Basado en los comentarios de @ shiva y @ daneiro).

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

Ejecución de muestra:

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 caracteres

Sin respetar el formato de salida:

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

Ejecución de muestra:

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

¿Por qué strip()? La pregunta dice: "todos los personajes cuentan".
manatwork

Bueno, gets regresará \nincluso si no tienes la intención de hacerlo
Siva

No Solo regresa \nsi realmente se aprobó. Pasarlo es un efecto secundario del uso de here-string. pastebin.com/gCrgk9m1
manatwork

1
Sin embargo, el uso $_y la zanja asiguen siendo sólidos. Y en c+"...lugar de"#{c}...
daniero

7

Python 3: 76 caracteres

76

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

44

(imprima los mismos caracteres muchas veces, vea la respuesta de Wasi para una versión válida)

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

La versión de 45 caracteres imprime caracteres más de una vez.
ugoren

Bien ... ¡Gracias por notarlo!
evuez

@evuez Acabo de arreglar tu versión de 45 caracteres. Pero, lo eliminó, así que lo he enviado una vez más. Echa un vistazo
Wasi

6

Perl 6: 21 caracteres

.say for get.comb.Bag
(REPL)
> .say para get.comb.Bag
La definición de locura es citar la misma frase una y otra vez y no esperar desesperación.
"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←⍞

Si realmente necesitas el :, son 19 (pero hay otros que no lo incluyen):

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

Salida:

      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

Pregunta semi-seria: ¿cómo es mantener el código APL heredado?
Michael Stern el

@ MichaelStern: No tengo idea, nunca he tenido que hacer eso. Pero supongo que no es peor que mantener otro código heredado. APL es bastante fácil de leer una vez que estás acostumbrado.
marinus

5

R, 30 caracteres

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

Ejemplo de uso:

> 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 

¡Buena idea! Pero la pregunta dice que el código debe imprimir el resultado. Su código solo devuelve el resultado. Supongo que lo necesitas cat.
Sven Hohenstein

@SvenHohenstein, bueno, no se especificó cuando respondí (respondí antes de la revisión 4 de la pregunta) ... pero, de hecho cat, solo devolverá los valores, no los nombres de los valores (es decir, los caracteres). Por lo tanto, necesitaría una solución más compleja.
plannapus

5

Perl 5, 54 caracteres

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

1
Muy buena solución, fácil de leer. Sin embargo, eso tendría que ser sort keys%h.
primo

1
¡Hola @protista, se ve bien! Aunque estoy de acuerdo con @primo! Sin embargo, puede guardar dos caracteres utilizando $_=<>;s/./$h{$_}++/eg;o en map{$h{$_}++}<>=~/./g;lugar demap{$h{$_}++}split//,<>;
Dom Hastings

1
@DomHastings o $h{$_}++for<>=~/./g, que creo que podría ser óptimo. Nueva línea literal en lugar de \ntambién.
primo

Ah bonito, incluso mejor! Sí, olvidé mencionar la nueva línea literal, ¡se ha convertido en mi nuevo -1 byte favorito!
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},{})
    

Nota: en todos los casos, el número de bytes eliminados se refiere a una console.log()llamada adicional que no tiene sentido si se ejecuta en la consola. Muchas gracias a @imma por la gran captura con-~a[b] y prompt(a={}). Esto definitivamente ahorró algunos bytes más.


1
map en lugar de un bucle ayuda un poco también (a [b [i]] || 0) +1 puede reducirse a - ~ a [b [i]] y console.log probablemente puede ir, simplemente devolviendo el último valor, dando aviso (a = {}). split (""). map (function (c) {a [c] = - ~ a [c]}); a
imma

1
puede cambiar fora for in: las pruebas en la pestaña vacía producen los mismos resultados. Además, el último ;no es necesario, por lo tanto:b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a
Eit

1
agradable :-) pegue el b = ... en el for & swop el for {} 's para a; para otros 2 bytes desactivados: for (i in b = prompt (a = {})) a [b [i]] = - ~ a [b [i]]; a
imma

aunque es posible que quieran una salida de texto exacta: - / que lo pone / me copia de seguridad por 36 (a 79) bytes: para (i en b = prompt (a = {})) a [b [i]] = - ~ a [b [i]]; para (n en a) console.log (n + ":" + a [n])
imma

1
@VisioN solo si las primitivas están sobrecargadas; de for inhecho, le da funciones en SO, pero no en la pestaña vacía;)
Eithed

5

Python 2, correctamente (58)

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

Salida:

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

Pitón 2, estilo guepardo (41)

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

Salida:

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}

Olvidé quitar los corchetes después de imprimir en el segundo, eso hace que sea 41
ToonAlfrink

Puede bajar a 52 caracteres con su primera versión: for l in set(s):print l,":",s.count(l) . Para el segundo, eliminar espacios innecesarios te hace ganar 2 print{l:s.count(l)for l in s}
personajes

5

Mathematica, 61 bytes

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

Luego aparece este cuadro de diálogo,

entrada

y para la oración de muestra, produce como salida

salida


4

pitón 3, 49

Robar idea de evuez

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

entrada:

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

salida:

  :  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

buena mejora! ¿Por qué no eliminas el ordenado ()?
evuez

1
¡Derecha! de todos modos, si no utiliza una lista de comprensión, es 1 char menos:for i in sorted(set(t)):print(i,':',t.count(i))
evuez

@evuez Gracias, se suponía que debía agregarlo como un comentario en su código. Si lo desea, puede agregarlo nuevamente en su solución (felizmente lo eliminaré): D
Wasi

¡No sería justo, no lo había pensado set()! ;)
evuez

4

JavaScript (69 68 caracteres):

Espera ssostener la cuerda.

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

Esto sigue las nuevas reglas perfectamente.

Nota: Esto supone un entorno limpio, sin propiedades personalizadas en ningún prototipo de objeto estándar.

Editar: 1 personaje menos!

Salida de consola:

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

Respuesta anterior (44 caracteres):

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

Esto era válido antes de que las reglas cambiaran.

r Contiene la salida.


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

Según el comentario de @ Spongeman, lo cambié un poco:

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

no compila este sí: 178 caracteres. usando System.Linq; usando C = System.Console; clase F {static void Main () {C.WriteLine (string.Join ("\ n", C.ReadLine (). GroupBy (c => c) .Select ( g => g.Key + ":" + g.Count ()). OrderBy (s => s)));}}
Spongman el

168: usando C = System.Console; usando System.Linq; clase F {static void Main () {foreach (var g en C.ReadLine (). GroupBy (c => c) .OrderBy (g => g.Key )) C.WriteLine (g.Key + ":" + g.Count ());}}
Spongman el

aparentemente la ordenación es innecesaria, 150: usando C = System.Console; usando System.Linq; clase F {static void Main () {foreach (var g en C.ReadLine (). GroupBy (c => c)) C.WriteLine (g.Key + ":" + g.Count ());}}
Spongman

Guau. ¿Rápido o casualidad? Respondiste solo un segundo después de que actualicé mi respuesta: D ¡Acabo de notar que la clasificación no se menciona explícitamente!
Gedeón

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 caracteres

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

Salida

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

Si quieres los espacios alrededor del : , cambie a 긃똠, con 20 caracteres.

Explicación

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 con formateo prescrito)

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

Salida:

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

Con el formato prescrito, se convierte en:

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

Puede soltar un carácter alejándose de la sintaxis entubada para algunas de las llamadas a funciones:let f s=Seq.countBy id (Seq.sort s)|>Seq.iter(printfn"%A")
goric

De hecho, ¿por qué incluso ordenar en primer lugar? let f s=Seq.countBy id s|>Seq.iter(printfn"%A")
Goric

3

Mathematica, 34 29 bytes

No estoy seguro de por qué la otra respuesta de Mathematica es tan complicada ...;)

Grid@Tally@Characters@Input[]

3

Bash ( 20 15 caracteres)

 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

Codificación ASCII ahora compatible

Bash (23 caracteres):

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

Formato ASCII no compatible


solo por curiosidad, ¿realmente necesitas ordenar? aquí, AFAIK ptx ya producirá una lista ordenada de caracteres que puede alimentar directamente a "uniq -c"
zeppelin

@zeppelin un poco de Google confirma lo que has dicho
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 gracias a @Poke .
-7 bytes gracias a @ OlivierGrégoire .

Explicación:

Pruébalo aquí

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);en lugar de m.put(c,m.get(c‌​)!=null?(int)m.get(c‌​)+1:1);guardar 3 bytes.
Olivier Grégoire

2

Powershell, 63

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

2
Se puede acceder a cada clave en un hash como una propiedad en ese hash, por lo que puede eliminar dos caracteres reemplazando cada instancia de $a[$_]con $a.$_. Verhelp about_hash_tables
goric

2

Script de comandos de Windows: 72 bytes

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

Salidas:

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

¡Agradable! Sin embargo, sí se distingue, pero siempre es sorprendente ver la inteligencia real en la programación de archivos por lotes.
Brian Minton

2

J, 23 caracteres

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

Formato de salida ligeramente diferente (la línea 2 es estándar):

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

2

J, 22 caracteres

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

Ejemplo:

   (~.;"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

DO#

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.

En nuestro caso, si la entrada será " La definición de locura es citar la misma frase una y otra vez y no esperar desesperación " .

La salida será:

  : 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
La pregunta solicita la entrada del teclado, por lo que la primera línea debería ser string str = Console.ReadLine();. Pero esto es código golf, por lo que debería serlo var str=Console.ReadLine();. Los otros comentarios que me gustaría hacer deben quedar en espera hasta que OP mejore la pregunta.
Peter Taylor

Tienes razón, edité mi respuesta.
Aviv

2

C #: 129

Esta es la respuesta de Aviv pero más corta:

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

Esto es mío:

C #: 103

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

No se compilará, es necesario agregar unos 50 caracteres para las definiciones de uso / espacio de nombres / clase / método.
Pierre-Luc Pineault

Oh, no sabía que era obligatorio, lo siento.
Abbas

2

Python 2 (90 caracteres)

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

Salida cuando se ejecuta en su propia fuente:

  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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.