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 : 1
y x: 1
están bien, pero {'x':1,...
y x:1
no 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
0
como el número de ocurrencias?" : "
(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.Respuestas:
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)fuente
:
desafortunadamente se requiere en la salida (no puede eliminar esta respuesta).PHP: 68 (o 39) bytes
Salida para el texto de ejemplo:
Si no se requiere la salida exacta, esto funcionaría para 39 bytes :
Salida de muestra:
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.
fuente
$argv[1]
en lugar defgets(STDIN)
guardar 4 bytes.k (
87)Ejemplo
editar: hasta siete, H / T Aaron Davies
Explicación
Tome una cadena del teclado:
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.
Ahora cuente los valores de cada entrada en el mapa.
fuente
:
en=:
es superfluo;k)#:'=0:0
funciona bien (7 caracteres). (¡extra por saberlo0:0
, no tenía idea!)q
la traducción es más fácil de entendercount each group read0 0
Utilidades principales de GNU:
292220 caracteres (53 con formato)Mejora de Wumpus (20 caracteres):
Mejora de Firefly (22 caracteres):
original de joeytwiddle (29 caracteres):
Originalmente solía
sed
simplemente agregar una nueva línea después de cada personaje. Firefly mejoró en eso congrep -o .
, ya que-o
muestra cada patrón coincidente en su propia línea. Wumpus señaló una mejora adicional usando en sufold -1
lugar. ¡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
sed
para 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 )
Awk casi puede hacer el trabajo mientras agrega solo 25 caracteres, pero oculta el primer espacio. Tonto awk!
Me pregunto si se pueden hacer mejoras en la etapa de reformateo ...
fuente
&
"match completo" en lugar de\0
, aunquegrep -o .
todavía es un poco más corto. Vale la pena mencionar que la salida deuniq -c
difiere ligeramente de la dada en la pregunta.grep -o
; Es útil.fold -1
hace lo mismo quegrep -o .
ptx -S.
hace lo mismo truco .Ruby 1.9.3: 53 caracteres
(Basado en los comentarios de @ shiva y @ daneiro).
Ejecución de muestra:
Ruby: 44 caracteres
Sin respetar el formato de salida:
Ejecución de muestra:
fuente
a=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}
strip()
? La pregunta dice: "todos los personajes cuentan".\n
incluso si no tienes la intención de hacerlo\n
si realmente se aprobó. Pasarlo es un efecto secundario del uso de here-string. pastebin.com/gCrgk9m1$_
y la zanjaa
siguen siendo sólidos. Y enc+"...
lugar de"#{c}...
Python 3: 76 caracteres
76
44
(imprima los mismos caracteres muchas veces, vea la respuesta de Wasi para una versión válida)
fuente
Perl 6: 21 caracteres
fuente
APL (15)
Si realmente necesitas el
:
, son 19 (pero hay otros que no lo incluyen):Salida:
fuente
R, 30 caracteres
Ejemplo de uso:
fuente
cat
.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.Perl 5, 54 caracteres
fuente
sort keys%h
.$_=<>;s/./$h{$_}++/eg;
o enmap{$h{$_}++}<>=~/./g;
lugar demap{$h{$_}++}split//,<>;
$h{$_}++for<>=~/./g
, que creo que podría ser óptimo. Nueva línea literal en lugar de\n
también.JavaScript
6653 bytes:6956 bytes:7865 bytes: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]
yprompt(a={})
. Esto definitivamente ahorró algunos bytes más.fuente
for
afor 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
for in
hecho, le da funciones en SO, pero no en la pestaña vacía;)Python 2, correctamente (58)
Salida:
Pitón 2, estilo guepardo (41)
Salida:
fuente
for l in set(s):print l,":",s.count(l)
. Para el segundo, eliminar espacios innecesarios te hace ganar 2print{l:s.count(l)for l in s}
Mathematica, 61 bytes
Luego aparece este cuadro de diálogo,
y para la oración de muestra, produce como salida
fuente
pitón 3, 49
Robar idea de evuez
entrada:
salida:
fuente
for i in sorted(set(t)):print(i,':',t.count(i))
set()
! ;)JavaScript (
6968 caracteres):Espera
s
sostener la cuerda.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:
Respuesta anterior (44 caracteres):
Esto era válido antes de que las reglas cambiaran.
r
Contiene la salida.fuente
Haskell, 93
fuente
PowerShell (49)
fuente
C # (178
220caracteres)Según el comentario de @ Spongeman, lo cambié un poco:
fuente
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 caracteres
Salida
Si quieres los espacios alrededor del
:
, cambie꾠
a긃똠
, con 20 caracteres.Explicación
fuente
F # (
66 5949, 72 con formateo prescrito)Salida:
Con el formato prescrito, se convierte en:
fuente
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 bytesNo estoy seguro de por qué la otra respuesta de Mathematica es tan complicada ...;)
fuente
Bash (
2015 caracteres)Codificación ASCII ahora compatible
Bash (23 caracteres):
Formato ASCII no compatible
fuente
Java 8,
273253249246239200 bytes-24 bytes gracias a @Poke .
-7 bytes gracias a @ OlivierGrégoire .
Explicación:
Pruébalo aquí
fuente
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);
en lugar dem.put(c,m.get(c)!=null?(int)m.get(c)+1:1);
guardar 3 bytes.Powershell, 63
fuente
$a[$_]
con$a.$_
. Verhelp about_hash_tables
Script de comandos de Windows: 72 bytes
Salidas:
fuente
J, 23 caracteres
Formato de salida ligeramente diferente (la línea 2 es estándar):
fuente
J, 22 caracteres
Ejemplo:
fuente
DO#
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á:
fuente
string str = Console.ReadLine();
. Pero esto es código golf, por lo que debería serlovar str=Console.ReadLine();
. Los otros comentarios que me gustaría hacer deben quedar en espera hasta que OP mejore la pregunta.C #: 129
Esta es la respuesta de Aviv pero más corta:
Esto es mío:
C #: 103
fuente
Python 2 (90 caracteres)
Salida cuando se ejecuta en su propia fuente:
fuente