入力文字列内のすべての文字の出現回数を表示する


21

コードはキーボードからの入力として文字列を受け取る必要があります。

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

すべてのASCII文字はUnicodeをカウントする必要はありません。スペース、引用符など、入力はキーボードから取得する必要があります/定数ではなく、属性、上記の例のように各文字の後に出力を改行で出力する必要があります。またはそう、ハッシュマップ/辞書などとしてダンプx : 1し、x: 1OKですが、 {'x':1,...x:1はありません。

Q:stdinを取得してstdoutを作成する関数または完全なプログラム?
A:コードは、標準入力を使用して入力を取得し、標準出力を介して結果を表示するプログラムである必要があります。

スコアボード:

全体の最短:5バイト

全体で最短:7バイト


3
入力としてすべてのASCII文字?または単に印刷可能ですか?またはユニコードまで?改行はありますか?
ジャスティン14年

2
関数を作成できますか、またはプログラム全体が必要ですか?すべてのASCII文字を出力し、0出現回数として印刷できますか?
ジャスティン14年

16
出力形式は厳密ですか、それとも意味を維持するのに十分ですか?
ジョンドヴォルザーク14年

あなたの編集は私の質問に対処しませんでした。
ジャスティン14年

5
出力をアルファベット順にソートする必要があるかどうかは言いませんでした。セパレーターが必要な場合" : "(の後に2つのスペースがあることに注意してください:)、または他の(より短い)セパレーターで問題ないかどうかは言いませんでした。ユニコード/エンコードの問題に対処していません。
CodesInChaos

回答:


2

APL(Dyalog Unicode)、5 バイトSBCS

完全なプログラム本体。STDINからの文字列の入力を求め、改行で区切られたテーブルをSTDOUTに出力します。左端の列は入力文字であり、カウントは右揃えで、最大数がその文字から単一のスペースで区切られています。

,∘≢⌸⍞

オンラインでお試しください!

 STDINからのテキスト入力のプロンプト

 成る作成キーテーブル
, のユニークな要素が続く
 ことにより、
 その発生の指標の集計(つまり、それが発生した回数)


:残念ながら出力に必要なようです(この回答は削除できません)。
エリックアウトゴルファー

@EriktheOutgolferどうやってそれを推測しますか?古いコメントに従って、OPは明らかにこの回答を受け入れられると判断しました。
アダム

スペックのもう一つの理由は、問題そのものになるように...
エリックOutgolfer

15

PHP-68(または39)バイト

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

サンプルテキストの出力:

  : 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

正確な出力が不要な場合、これは39バイトで機能します

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

サンプル出力:

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
)

各数値インデックスは、それが表す文字の序数値を参照します。

問題の状態を正確に実行する組み込み関数の使用はすぐに禁止されると非常に強く疑います。


$argv[1]fgets(STDIN)4バイトを節約する代わりに。
タイタス

14

k(8 7)

#:'=0:0

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

編集:7人まで、H / Tアーロンデイビス

説明

キーボードから文字列を取得します。

k)0:0
text
"text"

個別の要素をグループ化し、個別の文字と値としてキーを含むマップを返します。値は、個別の要素が発生するインデックスです。

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

次に、マップ内の各エントリの値をカウントします。

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

すごい。
Pureferret 14年

:中には=:不必要です。k)#:'=0:0正常に動作します(7文字)。(知っているためのボーナス0:0、私は知らなかった!)
アーロンデイヴィス14年

詳細な説明は本当にクールです:)
Timwi 14年

q翻訳が理解しやすいcount each group read0 0
skeevey 14年

13

GNUコアutils- 29 22 20文字(フォーマット付き53)

Wumpusの改善(20文字):

fold -1|sort|uniq -c

Fireflyの改善(22文字):

grep -o .|sort|uniq -c

joeytwiddleのオリジナル(29文字):

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

もともとsed、各文字の後に改行を追加するだけでした。Firefly では、一致したすべてのパターンを独自の行に表示するgrep -o .ため、で改善されました-o。Wumpusは、fold -1代わりに使用することでさらなる改善を指摘しました。よくやった!

uniq ソートされたリストにのみ適用されますが、実際の作業を行います。

出力形式は質問の例と完全には一致しないことに注意してください。それにはsed、引数を交換するための最終的な実行が必要です。(Jan Dvorakの質問への回答を待って、これが必要かどうかを確認します...)

sedを使用した再フォーマットは、「33」文字だけです!(合計53

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

Awkは25文字しか追加しなくてもほとんど仕事をすることができますが、最初のスペースを隠します。愚かなawk!

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

再フォーマットの段階で改善できるかどうか疑問に思います...


2
sed &では、の代わりに「完全一致」に使用できますが\0grep -o .まだ少し短くなっています。の出力がuniq -c質問で与えられたものとわずかに異なることを言及する価値があります。
FireFly 14年

どうもありがとう!更新しました。忘れてはいけませんgrep -o。便利なものです。
joeytwiddle

2
fold -1同じことをgrep -o .

素晴らしい:)新しいトリックを学ぶ!
joeytwiddle

1
ptx -S.同じトリックをします。
Pureferret 14年

7

Ruby 1.9.3:53文字

(@shivaと@daneiroのコメントに基づきます。)

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

サンプル実行:

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文字

出力形式を尊重しない:

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

サンプル実行:

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文字a=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}
シヴァ14年

どうしてstrip()?質問は、「すべての文字がカウントされる」と言います。
マナトワーク14年

まあ、\nあなたがするつもりはない場合でも取得が返されます
シヴァ14年

いや。\n本当に渡された場合にのみ戻ります。それを渡すことは、here-stringを使用することの副作用です。pastebin.com/gCrgk9m1
manatwork

1
使用$_と溝aはまだ音がします。そして、c+"...代わりに"#{c}...
daniero

7

Python 3:76文字

76

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

44

(同じ文字を何度も印刷します。有効なバージョンについてはWasiの回答を参照してください)

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

45文字バージョンでは、文字が複数回印刷されます。
ウゴレン

右...気づいてくれてありがとう!
evuez

@evuez 45文字バージョンを修正しました。しかし、あなたはそれを削除したので、もう一度提出しました。持って見て
Wasiの

6

Perl 6:21文字

.say for get.comb.Bag
(REPL)
> .say for get.comb.Bag
狂気の定義は同じフレーズを何度も引用し、絶望を期待しないことです。
「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←⍞

あなたが本当に必要な場合:、それは19です(しかし、それを含まない他の人がいます):

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

出力:

      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

半深刻な質問-レガシーAPLコードを維持するのはどうですか?
マイケルスターン14年

@MichaelStern:わからない、そうする必要はなかった。しかし、他のレガシーコードを維持することより悪いことはないと思います。APLは、慣れてしまえば実際に非常に読みやすくなります。
マリヌス14年

5

R、30文字

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

使用例:

> 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 

良いアイデア!しかし、質問は、コードが結果を出力する必要があると言っています。コードは結果を返すだけです。あなたが必要だと思いますcat
スベンホーエンシュタイン14年

@SvenHohenstein私が答えたとき(質問のリビジョン4の前に答えたとき)は指定されていませんでした...しかし実際のところcat、値の名前ではなく値のみを返します(つまり文字)。したがって、より複雑なソリューションが必要になります。
プランナパス14年

5

Perl 5、54文字

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

1
読みやすい非常に素晴らしいソリューション。sort keys%hただし、その必要があります。
primo 14年

1
@protistさん、よさそうです!私は@primoにも同意します!ただし使用して2つの文字を保存することができます$_=<>;s/./$h{$_}++/eg;map{$h{$_}++}<>=~/./g;の代わりにmap{$h{$_}++}split//,<>;
ドムヘイスティングス

1
@DomHastingsまたは$h{$_}++for<>=~/./g、これが最適だと思います。\n同様に、リテラル改行。
プリモ14年

ああ、もっといい!はい、文字通りの改行について言及するのを忘れました。それが私の新しいお気に入り-1バイトになります!
ドムヘイスティングス14年

5

JavaScript

  1. 66 53バイト:

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

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

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

注:すべての場合において、削除されたバイト数はconsole.log()、コンソールで実行されても意味のない余分な呼び出しを指します。ビッグおかげ@immaと素晴らしいキャッチのために-~a[b]prompt(a={})。これにより、さらにいくつかのバイトが確実に節約されました。


1
ループの代わりにmapも少し役立つ(a [b [i]] || 0)+1は-〜a [b [i]]に減らすことができ、console.logはおそらく最後の値を返すだけで、プロンプトを与える(a = {})。split( "")
。map

1
あなたは変更することができますforfor in同じ結果を生成し、空のタブでのテスト- 。また、最後には;このように、必要とされていない:b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a
eithed

1
nice :-) b = ...をforに挿入し、for {}をaにスワップします。さらに2バイトオフの場合:for(i in b = prompt(a = {}))a [b [i]] =
-〜a

ただし、正確なテキスト出力が必要な場合があります:-/ 36バイト(79バイト)ずつ元に戻す:for(i in b = prompt(a = {}))a [b [i]] =-〜a [b [i]]; for(n in a)console.log(n + ":" + a [n])
imma 14年

1
@VisioNは、プリミティブがオーバーロードされている場合のみ- for in実際にSOで機能を提供しますが、空のタブでは提供しません;)
14年

5

Python 2、正しく(58)

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

出力:

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、チータースタイル(41)

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

出力:

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}

2番目の印刷後にブラケットを削除するのを忘れたため、41
ToonAlfrink 14年

最初のバージョンでは、52文字まで下げることができますfor l in set(s):print l,":",s.count(l)。:1秒間、不要なスペースを削除すると、あなたは2文字勝つ可能print{l:s.count(l)for l in s}
evuez

5

Mathematica、61バイト

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

次に、このダイアログボックスがポップアップ表示され、

入力

サンプル文の場合、出力として生成されます

出力


4

Python 3、49

evuezからアイデアを盗む

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

入力:

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

素晴らしい改善!sort()を削除しないのはなぜですか?
evuez

1
右!あなたは、リストの内包表記を使用しない場合は、とにかく、それは1文字以下です:for i in sorted(set(t)):print(i,':',t.count(i))
evuez

@evuezおかげで、コードにコメントとして追加することになっていた。必要に応じて、ソリューションに再度追加できます(これを喜んで削除します):D
ワシ14年

公平ではないだろう、私は考えていなかったset()!;)
evuez 14年

4

JavaScript(69 68文字):

期待しsた文字列を保持します。

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

これは完全に新しいルールに従います。

注: これは、標準オブジェクトプロトタイプのカスタムプロパティがないクリーンな環境を前提としています。

編集: 1文字少なく!

コンソール出力:

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

古い回答(44文字):

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

これは、ルールが変更される前に有効でした。

r 出力が含まれます。




3

C#(178 220文字)

@Spongemanのコメントに基づいて、少し変更しました。

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

コンパイルしません。これは178文字です。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 14年

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());}}
スポンジマン14年

明らかにソートは不要です、150:C = System.Consoleを使用して、System.Linqを使用して、クラスF {static void Main(){foreach(var g in C.ReadLine()。GroupBy(c => c))C.WriteLine (g.Key + ":" + g.Count());}}
スポンジマン14年

ワオ。クイックまたは偶然?私が私の答えを更新した後、あなたはほんの一瞬答えた:Dソートが明示的に言及されていないことに気付いた!
ギデオン14年

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());}}
ティムウィ14年

3

スクリプティング、19文字

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

出力

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

の周りのスペースが必要な場合は:、に変更긃똠て20文字にします。

説明

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)

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

出力:

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

規定のフォーマットでは、次のようになります。

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

あなたは、関数呼び出しの数のためにパイプで連結された構文から離れて切り替えることにより、文字をドロップすることができます:let f s=Seq.countBy id (Seq.sort s)|>Seq.iter(printfn"%A")
goric

実際、なぜそもそもソートするのでしょうか?let f s=Seq.countBy id s|>Seq.iter(printfn"%A")
ゴリック14年


3

バッシュ(20 15文字)

 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エンコードがサポートされるようになりました

バッシュ(23文字):

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フォーマットはサポートされていません


好奇心から、本当に必要ですか| sort | ここでは、私の知る限りPTXはすでにあなたが「uniqは-c」に直接供給できる文字のソートされたリストを生成します
ツェッペリン

@zeppelin少しグーグルはあなたが言ったことを確認します
Pureferret

3

Java 8、273 253 249 246 239 200バイト

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

@Pokeのおかげで-24バイト。@OlivierGrégoireの
おかげで-7バイト。

説明:

ここで試してみてください。

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バイト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));}}}
ポケ

2
m.compute(c,(k,v)->v!=null?(int)v+1:1);m.put(c,m.get(c‌​)!=null?(int)m.get(c‌​)+1:1);3バイトを節約する代わりに。
オリビエグレゴワール

2

Powershell、63

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

2
あなたは、各インスタンスを置き換えることによって、2つの文字をオフに剃ることができるようにハッシュの各キーは、そのハッシュのプロパティとしてアクセスすることができる$a[$_]$a.$_。参照help about_hash_tables
ゴリック14年

2

Windowsコマンドスクリプト-72バイト

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

出力:

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

いいね!しかし、ケースはフォールドしますが、バッチファイルプログラミングの実際の賢さを見るのは常に驚くべきことです。
ブライアンミントン14年

2

J、23文字

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

わずかに異なる出力形式(2行目は標準入力):

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

2

J、22文字

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

例:

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

私たちの場合、入力が「狂気の定義は何度も何度も同じフレーズを引用し、絶望を期待しない」場合です。

出力は次のようになります。

  : 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
質問はキーボードからの入力を要求するため、最初の行はである必要がありますstring str = Console.ReadLine();。しかし、これはコードゴルフなので、実際にはそうであるはずvar str=Console.ReadLine();です。OPが問題を改善するまで、他のコメントを保留する必要があります。
ピーターテイラー14年

そうです、答えを編集しました。
アビブ14年

2

C#:129

これはAvivsの答えですが、短いです:

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

これは私のものです:

C#:103

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

コンパイルされません。using/ namespace / class / methodの定義に約50文字を追加する必要があります。
ピエールリュックピノー14年

ああ、それが必須だとは知らなかった、ごめんなさい。
アッバス14年

2

Python 2(90文字)

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

独自のソースで実行した場合の出力:

  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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.