O código deve receber uma string como entrada do teclado:
The definition of insanity is quoting the same phrase again and again and not expect despair.
A saída deve ser assim (não classificada em nenhuma ordem específica):
: 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 os caracteres ASCII contam unicode não é um requisito, espaços, aspas, etc. ou despejado como hashmap / dicionário etc, assim x : 1
e x: 1
estão ok, mas {'x':1,...
e x:1
não são.
P: Função ou programa completo usando stdin e escrevendo stdout?
R: O código precisa ser um programa que receba entrada usando entrada padrão e exiba o resultado via saída padrão.
Placar:
Menor geral : 5 bytes
Menor geral : 7 bytes
0
como o número de ocorrências?" : "
(observe os dois espaços após o:
) ou se outros separadores (mais curtos) estão bem. Você não resolveu o problema de unicode / codificação.Respostas:
APL (Dyalog Unicode) , 5 bytes SBCS
Corpo do programa completo. Solicita uma sequência de STDIN e imprime a tabela separada por nova linha em STDOUT. A coluna mais à esquerda contém os caracteres de entrada e as contagens são alinhadas à direita com o maior número separado de seu caractere por um único espaço.
Experimente online!
⍞
solicitar entrada de texto de STDIN⌸
crie uma tabela de chaves consistindo,
no elemento único seguido∘
pelo≢
registro dos índices de sua ocorrência (ou seja, quantas vezes isso ocorre)fonte
:
Infelizmente, parece que isso é necessário na saída (você não pode excluir esta resposta).PHP - 68 (ou 39) bytes
Saída para o texto de exemplo:
Se a saída exata não for necessária, isso funcionaria para 39 bytes :
Saída de amostra:
onde cada índice numérico se refere ao valor ordinal do caractere que representa.
Eu suspeito muito fortemente que o uso de uma função interna que faça exatamente o que o problema declara em breve será desabilitado.
fonte
$argv[1]
em vez defgets(STDIN)
salva 4 bytes.k (
87)Exemplo
editar: Até sete, H / T Aaron Davies
Explicação
Pegue uma String no teclado:
Agrupe os elementos distintos e retorne um mapa contendo a chave, pois caracteres e valores distintos são os índices em que os elementos distintos ocorrem.
Agora conte os valores de cada entrada no mapa.
fonte
:
in=:
é supérfluo;k)#:'=0:0
funciona bem (7 caracteres). (bônus para saber sobre0:0
, eu não tinha idéia!)q
tradução é mais fácil de entendercount each group read0 0
Utilitários principais do GNU -
292220 caracteres (53 com formatação)Melhoria de Wumpus (20 caracteres):
Melhoria do Firefly (22 caracteres):
original de joeytwiddle (29 caracteres):
Originalmente, eu
sed
simplesmente adicionava uma nova linha após cada caractere. Firefly melhorou isso comgrep -o .
, pois-o
exibe todos os padrões correspondentes em sua própria linha. Wumpus apontou uma melhoria adicional usando em seufold -1
lugar. Bom trabalho!uniq
faz o trabalho real, embora se aplique apenas a listas classificadas.Observe que o formato de saída não corresponde exatamente ao exemplo da pergunta. Isso requer uma execução final
sed
para trocar os argumentos. (Esperando uma resposta para a pergunta de Jan Dvorak para ver se isso é necessário ...)Reformatar com sed é "apenas" outros 33 caracteres! ( Total 53 )
O Awk pode quase fazer o trabalho enquanto adiciona apenas 25 caracteres, mas oculta o primeiro espaço. Awk parvo!
Gostaria de saber se melhorias podem ser feitas no estágio de reformatação ...
fonte
&
"match inteiro" em vez de\0
, embora aindagrep -o .
seja um pouco mais curto. Vale ressaltar que a saída deuniq -c
difere um pouco da dada na pergunta.grep -o
; é útil.fold -1
faz a mesma coisa quegrep -o .
ptx -S.
faz o mesmo truque .Ruby 1.9.3: 53 caracteres
(Com base nos comentários de @ shiva e @ daneiro.)
Exemplo de execução:
Ruby: 44 caracteres
Não respeitando o formato de saída:
Exemplo de execução:
fonte
a=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}
strip()
? A pergunta diz: "todos os caracteres contam".\n
mesmo se você não pretende\n
se foi realmente aprovado. Passá-lo é um efeito colateral do uso da string aqui. pastebin.com/gCrgk9m1$_
e abandonara
ainda é válido . E emc+"...
vez de"#{c}...
Python 3: 76 caracteres
76
44
(imprima os mesmos caracteres várias vezes, consulte a resposta de Wasi para obter uma versão válida)
fonte
Caracteres do Perl 6: 21
fonte
APL (15)
Se você realmente precisa
:
, são 19 (mas há outros que não estão incluindo):Saída:
fonte
R, 30 caracteres
Exemplo de uso:
fonte
cat
.cat
, retornará apenas os valores e não os nomes dos valores (ou seja, os caracteres). Portanto, seria necessária uma solução mais complexa.Perl 5, 54 caracteres
fonte
sort keys%h
, no entanto.$_=<>;s/./$h{$_}++/eg;
ou emmap{$h{$_}++}<>=~/./g;
vez demap{$h{$_}++}split//,<>;
$h{$_}++for<>=~/./g
, o que acho melhor. Nova linha literal em vez de\n
também.Javascript
6653 bytes:6956 bytes:7865 bytes:NB: Em todos os casos, o número de bytes excluídos refere-se a
console.log()
chamadas extras que não fazem sentido se executadas no console. Muito obrigado a @imma pela ótima captura com-~a[b]
eprompt(a={})
. Definitivamente, isso salvou mais alguns bytes.fonte
for
parafor in
- o teste na guia vazia produz os mesmos resultados. Além disso, o último;
não é necessário, portanto:b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a
for in
na verdade, dá-lhe funções no SO, mas não na guia vazia;)Python 2, corretamente (58)
Saída:
Python 2, estilo chita (41)
Saída:
fonte
for l in set(s):print l,":",s.count(l)
. Para o segundo, remover espaços desnecessários faz você ganhar 2 caracteres:print{l:s.count(l)for l in s}
Mathematica, 61 bytes
Em seguida, aparece essa caixa de diálogo,
e para a sentença de amostra, produz como saída
fonte
python 3, 49
Roubar a ideia de evuez
entrada:
saída:
fonte
for i in sorted(set(t)):print(i,':',t.count(i))
set()
! ;)JavaScript (
6968 caracteres):Espera
s
segurar a corda.Isso segue as novas regras perfeitamente.
Nota: Isso pressupõe um ambiente limpo, sem propriedades personalizadas em nenhum protótipo de objeto padrão.
Editar: 1 caractere a menos!
Saída do console:
Resposta antiga (44 caracteres):
Isso era válido antes das regras serem alteradas.
r
contém a saída.fonte
Haskell, 93
fonte
PowerShell (49)
fonte
C # (178
220caracteres)Baseado no comentário de @ Spongeman, eu mudei um pouco:
fonte
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
Saída
Se você quiser os espaços ao redor do
:
, mude꾠
para긃똠
, com 20 caracteres.Explicação
fonte
F # (
66 5949, 72 com formatação prescrita)Saída:
Com a formatação prescrita, torna-se:
fonte
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 bytesNão sei por que a outra resposta do Mathematica é tão complicada ...;)
fonte
Bash (
2015 caracteres)Codificação ASCII agora suportada
Bash (23 caracteres):
Formatação ASCII não suportada
fonte
Java 8,
273253249246239200 bytes-24 bytes graças a @Poke .
-7 bytes graças a @ OlivierGrégoire .
Explicação:
Experimente aqui.
fonte
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);
em vez dem.put(c,m.get(c)!=null?(int)m.get(c)+1:1);
salvar 3 bytes.Powershell, 63
fonte
$a[$_]
por$a.$_
. Vejahelp about_hash_tables
Script de comando do Windows - 72 bytes
Saídas:
fonte
J, 23 caracteres
Formato de saída ligeiramente diferente (a linha 2 é stdin):
fonte
J, 22 caracteres
Exemplo:
fonte
C #
No nosso caso, se a entrada será " A definição de insanidade está citando a mesma frase repetidamente e não espera desespero " .
A saída será:
fonte
string str = Console.ReadLine();
. Mas isso é código-golfe, então realmente deveria servar str=Console.ReadLine();
. Os outros comentários que eu gostaria de fazer têm que ficar em espera até que o OP melhore a questão.C #: 129
Esta é a resposta Avivs, mas mais curta:
Isso é meu:
C #: 103
fonte
Python 2 (90 caracteres)
Saída quando executado em sua própria fonte:
fonte