Kode harus mengambil string sebagai input dari keyboard:
The definition of insanity is quoting the same phrase again and again and not expect despair.
Outputnya harus seperti ini (tidak diurutkan dalam urutan tertentu):
: 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
Semua karakter ASCII menghitung unicode bukan keharusan, spasi, tanda kutip, dll dan input harus berasal dari keyboard / bukan konstanta, atribut, output harus dicetak dengan baris baru setelah setiap karakter seperti pada contoh di atas, tidak boleh dikembalikan sebagai string atau dibuang sebagai hashmap / kamus dll, jadi x : 1
dan x: 1
ok, tapi {'x':1,...
dan x:1
tidak.
Q: Berfungsi atau menyelesaikan program mengambil stdin dan menulis stdout?
A: Kode harus berupa program yang mengambil input menggunakan standar dalam dan menampilkan hasilnya melalui standar keluar.
Papan angka:
Keseluruhan terpendek : 5 byte
Keseluruhan terpendek : 7 byte
0
sebagai jumlah kemunculan?" : "
(perhatikan dua spasi setelah:
) atau jika pemisah lainnya (lebih pendek) baik-baik saja. Anda tidak mengatasi masalah unicode / encoding.Jawaban:
APL (Dyalog Unicode) , 5 byte SBCS
Badan program penuh. Meminta string dari STDIN dan mencetak tabel yang dipisahkan baris baru ke STDOUT. Kolom paling kiri adalah karakter input, dan jumlah disejajarkan dengan angka terbesar yang dipisahkan dari karakternya dengan satu spasi.
Cobalah online!
⍞
meminta input teks dari STDIN⌸
buat tabel kunci yang terdiri dari,
elemen unik diikuti∘
oleh≢
penghitungan indeks kemunculannya (yaitu berapa kali itu terjadi)sumber
:
sayangnya diperlukan dalam output (Anda tidak dapat menghapus jawaban ini).PHP - 68 (atau 39) byte
Output untuk teks contoh:
Jika output yang tepat tidak diperlukan, ini akan bekerja selama 39 byte :
Output sampel:
di mana setiap indeks numerik merujuk nilai ordinal dari karakter yang diwakilinya.
Saya menduga sangat kuat bahwa menggunakan fungsi built-in yang melakukan persis apa yang dinyatakan masalah segera akan dianulir.
sumber
$argv[1]
bukannyafgets(STDIN)
menyimpan 4 byte.k (
87)Contoh
sunting: Turun ke tujuh, H / T Aaron Davies
Penjelasan
Ambil Tali dari keyboard:
Kelompokkan elemen-elemen yang berbeda dan kembalikan peta yang berisi kunci sebagai karakter dan nilai yang berbeda adalah indeks di mana elemen-elemen yang berbeda terjadi.
Sekarang hitung nilai setiap entri di peta.
sumber
:
di=:
adalah berlebihan;k)#:'=0:0
berfungsi dengan baik (7 karakter). (bonus untuk mengetahui tentang0:0
, saya tidak tahu!)q
terjemahannya lebih mudah dimengerti -count each group read0 0
Utilitas inti GNU -
292220 karakter (53 dengan pemformatan)Peningkatan Wumpus (20 karakter):
Peningkatan Firefly (22 karakter):
asli joeytwiddle (29 karakter):
Awalnya saya biasa
sed
menambahkan baris baru setelah setiap karakter. Firefly meningkatkannya dengangrep -o .
, karena-o
menampilkan setiap pola yang cocok pada jalurnya sendiri. Wumpus menunjukkan perbaikan lebih lanjut menggunakanfold -1
bukan. Kerja bagus!uniq
melakukan pekerjaan yang sebenarnya, meskipun hanya berlaku untuk daftar yang diurutkan.Perhatikan bahwa format output tidak sama persis dengan contoh dalam pertanyaan. Itu membutuhkan putaran terakhir
sed
untuk menukar argumen. (Menunggu jawaban untuk pertanyaan Jan Dvorak untuk melihat apakah ini diperlukan ...)Memformat ulang dengan sed adalah "hanya" 33 karakter lain! ( Total 53 )
Awk hampir bisa melakukan pekerjaan sambil menambahkan hanya 25 karakter, tetapi menyembunyikan ruang pertama. Awk konyol!
Saya ingin tahu apakah perbaikan dapat dilakukan pada tahap format ulang ...
sumber
&
untuk "seluruh pertandingan" bukan\0
, meskipungrep -o .
sedikit lebih pendek. Perlu disebutkan bahwa outputuniq -c
sedikit berbeda dari yang diberikan dalam pertanyaan.grep -o
; itu yang bermanfaat.fold -1
melakukan hal yang sama dengangrep -o .
ptx -S.
melakukan trik yang sama .Ruby 1.9.3: 53 karakter
(Berdasarkan komentar @ shiva dan @ daneiro.)
Contoh dijalankan:
Ruby: 44 karakter
Tidak menghormati format output:
Contoh dijalankan:
sumber
a=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}
strip()
? Pertanyaannya mengatakan, "semua karakter dihitung".\n
bahkan jika Anda tidak berniat untuk\n
jika itu benar-benar berlalu. Melewati itu adalah efek samping dari menggunakan string di sini. pastebin.com/gCrgk9m1$_
dan membolosa
masih terdengar sekalipun. Danc+"...
bukannya"#{c}...
Python 3: 76 karakter
76
44
(cetak karakter yang sama berkali-kali, lihat jawaban Wasi untuk versi yang valid)
sumber
Perl 6: 21 karakter
sumber
APL (15)
Jika Anda benar-benar membutuhkannya
:
, berarti 19 (tetapi ada orang lain yang tidak memasukkannya):Keluaran:
sumber
R, 30 karakter
Contoh penggunaan:
sumber
cat
.cat
hanya akan mengembalikan nilai bukan nama nilai (yaitu karakter). Jadi itu akan membutuhkan solusi yang lebih kompleks.Perl 5, 54 karakter
sumber
sort keys%h
, meskipun.$_=<>;s/./$h{$_}++/eg;
ataumap{$h{$_}++}<>=~/./g;
bukanmap{$h{$_}++}split//,<>;
$h{$_}++for<>=~/./g
, yang saya pikir mungkin optimal. Baris baru literal bukan\n
juga.JavaScript
6653 byte:6956 byte:7865 byte:NB: Dalam semua kasus, jumlah byte yang dihapus mengacu pada
console.log()
panggilan tambahan yang tidak ada gunanya jika dijalankan di konsol. Terima kasih banyak kepada @imma untuk hasil tangkapan yang luar biasa bersama-~a[b]
danprompt(a={})
. Ini jelas menghemat lebih banyak byte.sumber
for
menjadifor in
- pengujian di tab kosong menghasilkan hasil yang sama. Juga, yang terakhir;
tidak diperlukan, dengan demikian:b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a
for in
memang memberi Anda fungsi dalam SO, tetapi tidak di tab kosong;)Python 2, dengan benar (58)
Keluaran:
Python 2, gaya cheetah (41)
Keluaran:
sumber
for l in set(s):print l,":",s.count(l)
. Untuk yang kedua, menghilangkan spasi yang tidak perlu membuat Anda memenangkan 2 karakter:print{l:s.count(l)for l in s}
Mathematica, 61 byte
Kemudian muncul kotak dialog ini,
dan untuk kalimat sampel, hasilkan sebagai keluaran
sumber
python 3, 49
Mencuri ide dari evuez
memasukkan:
keluaran:
sumber
for i in sorted(set(t)):print(i,':',t.count(i))
set()
! ;)JavaScript (
6968 karakter):Berharap
s
untuk memegang string.Ini mengikuti aturan baru dengan sempurna.
Catatan: Ini menganggap lingkungan yang bersih, tanpa properti khusus pada prototipe objek standar.
Sunting: 1 karakter lebih sedikit!
Output konsol:
Jawaban lama (44 karakter):
Ini valid sebelum aturan berubah.
r
berisi output.sumber
Haskell, 93
sumber
PowerShell (49)
sumber
C # (178
220karakter)Berdasarkan komentar @ Spongeman, saya mengubahnya sedikit:
sumber
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 karakter
Keluaran
Jika Anda ingin spasi di sekitar
:
, ubah꾠
menjadi긃똠
, buatlah 20 karakter.Penjelasan
sumber
F # (
66 5949, 72 dengan format yang ditentukan)Keluaran:
Dengan pemformatan yang ditentukan, itu menjadi:
sumber
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 byteTidak yakin mengapa jawaban Mathematica lainnya sangat rumit ...;)
sumber
Bash (
2015 karakter)Pengkodean ASCII sekarang didukung
Bash (23 karakter):
Pemformatan ASCII tidak didukung
sumber
Java 8,
273253249246239200 byte-24 byte terima kasih kepada @Poke .
-7 byte terima kasih kepada @ OlivierGrégoire .
Penjelasan:
Coba di sini.
sumber
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);
alih-alihm.put(c,m.get(c)!=null?(int)m.get(c)+1:1);
menyimpan 3 byte.Powershell, 63
sumber
$a[$_]
dengan$a.$_
. Lihathelp about_hash_tables
Script Perintah Windows - 72 Bytes
Output:
sumber
J, 23 karakter
Format output yang sedikit berbeda (baris 2 adalah stdin):
sumber
J, 22 karakter
Contoh:
sumber
C #
Dalam Kasus Kami, Jika Masukan Akan " Definisi kegilaan adalah mengutip frasa yang sama berulang-ulang dan tidak mengharapkan putus asa. "
Output Akan:
sumber
string str = Console.ReadLine();
. Tapi ini kode-golf, jadi seharusnya memang begituvar str=Console.ReadLine();
. Komentar lain yang ingin saya sampaikan harus ditunda hingga OP memperbaiki pertanyaan.C #: 129
Ini jawaban Aviv tapi lebih pendek:
Ini adalah milikku:
C #: 103
sumber
Python 2 (90 karakter)
Output saat dijalankan pada sumbernya sendiri:
sumber