Tulis program terpendek yang menghasilkan histogram (representasi grafis dari distribusi data).
Aturan:
- Harus menghasilkan histogram berdasarkan panjang karakter kata-kata (termasuk tanda baca) ke dalam program. (Jika sebuah kata panjangnya 4 huruf, bilah yang mewakili angka 4 bertambah 1)
- Harus menampilkan label bar yang berkorelasi dengan panjang karakter yang diwakili bar.
- Semua karakter harus diterima.
- Jika bilah harus diskalakan, perlu ada cara yang ditunjukkan dalam histogram.
Contoh:
$ ./histogram This is a hole in one!
1 |#
2 |##
3 |
4 |###
$./histogram Extensive word length should not be very problematic.
1 |
2 |#
3 |#
4 |##
5 |
6 |##
7 |
8 |
9 |#
10|
11|
12|#
./histogram Very long strings of words should be just as easy to generate a histogram just as short strings of words are easy to generate a histogram for.
1 |##
2 |#######
3 |#
4 |#######
5 |###
6 |#
7 |##
8 |##
9 |##
Jawaban:
K, 35
.
.
Contoh yang lebih panjang
sumber
R,
5547 karakterUntungnya R dilengkapi dengan fungsi plot
hist
untuk histogram, di sini dilengkapi denganbreaks
argumen di mana istirahat adalah 0,5, 1,5, ... sampai maks (input) +0,5.sapply(scan(,""),nchar)
mengambil input (sebagai stdin), pisahkan dengan mengikuti spasi dan hitung jumlah karakter dari setiap elemen.Contoh:
Edit:
Variasi pada 71 karakter dengan label sumbu pada setiap nilai yang mungkin:sumber
Python - 83 karakter
Tampaknya kita dapat mengambil input dari mana saja, jadi ini membutuhkan input selama eksekusi, bukan dari baris perintah, dan menggunakan saran Ejrb untuk mempersingkatnya dengan 8.
Python - 91 karakter
Ini akan jatuh dengan kutipan.
Memasukkan:
Keluaran:
sumber
exec
dan merangkai string:c=0;exec'c+=1;print"%3d|"%c+"#"*s.count(c);'*max(s)
Haskell - 126 karakter
Ini mengambil input dari
stdin
, bukan baris perintah:sumber
Python 3.3 (93)
Output:
(baris pertama adalah string input)
Itu tidak membenarkan angka sebagai solusi Python Lego Stormtroopr (yang juga lebih pendek dari milik saya), tapi ini entri pertama saya dalam kontes golf, jadi saya mungkin juga meninggalkannya di sini saya kira :)
sumber
Perl, 56
Menambahkan saran penulisan ulang dan saran baris baru dari @ manatwork, terima kasih banyak! Menambahkan pembaruan @ chinese_perl_goth.
Penggunaan: simpan sebagai hist.pl dan jalankan
perl hist.pl This is a test
Contoh output:
sumber
printf
? Anda dapat menggunakan beberapa karakter pada pemformatan. Dan lagi dengan mengubah dari hash array:$d[y///c]++for@ARGV;shift@d;printf"%2d|%s\n",++$i,"#"x$_ for@d
.printf
sekali tidak terpikir oleh saya dan untuk beberapa alasan saya tidak berpikir saya bisa mendapatkan efek yang saya inginkan dengan sebuah array, luar biasa! @ syb0rg menambahkan sekarang$d[y///c].='#'for@ARGV;printf"%2d|$d[$_]\n",$_ for+1..$#d
\n
1 karakter lagi. Maksud saya seperti ini: pastebin.com/496z2a0nJ,
4847464543 karakterPemakaian:
sumber
[:((](;#&'#')"0[:+/=/)1+[:i.>./)#@>@;:
: Cobalah online!Ruby,
9885Tidak banyak bermain golf. Akan golf lebih banyak nanti.
sumber
b ?(?#*b[1].size):''
denganb&&?#*b[1].size
.Powershell,
9793Contoh:
sumber
$a=@{};-split$args|%{$a[$_.length]++};1..($a.Keys|sort)[-1]|%{"{0,-2}|"-f$_+"#"*$a[$_]}
APL (42)
Bisa lebih pendek jika saya bisa menghilangkan garis di mana nilainya 0.
Penjelasan:
⎕ML←3
: atur level migrasi ke 3 (ini membuat⊂
(partisi) lebih bermanfaat).I⊂⍨' '≠I←⍞
: baca input, pisah pada spasiM←↑∘⍴¨
: dapatkan ukuran dimensi pertama dari setiap item (panjang kata), dan simpan diM
K←⍳⌈/M
: dapatkan angka dari 1 hingga nilai tertinggi diM
, simpan diK
+⌿K∘.=M
: untuk setiap nilai dalamM
, lihat berapa kali terkandung di dalamnyaK
.⊃⍴∘'▓'¨
: untuk setiap nilai di▓
dalamnya , dapatkan daftar yang banyak s, dan format sebagai matriks.K,
: tambahkan setiap nilaiK
ke setiap baris dalam matriks, berikan label.Keluaran:
sumber
Mathematica 97
Ketika saya memasukkan teks Deklarasi Kemerdekaan sebagai string tunggal (melalui cut and paste, tentu saja), output yang dihasilkan adalah:
sumber
Keempat, 201
Ini menyenangkan tetapi pengiriman Ruby saya lebih kompetitif. ;-)
Contoh dijalankan:
Panjang kata maks adalah 99.
sumber
Ruby, 79
Contoh dijalankan:
Silakan lihat kiriman Keempat saya untuk tertawa.
sumber
Ruby 1.8.7, 74
Pilihan yang sedikit berbeda dari solusi ruby lainnya:
keluaran:
sumber
JavaScript (
159133)Jelas tidak kompetitif, tetapi sejauh ini satu-satunya solusi JavaScript. Terima kasih kepada @manatwork untuk tip penggunaannya
String.replace
.Memasukkan
Keluaran
sumber
replace()
bukannyasplit()
+for
danArray
bukannyaObject
panjang variabel yang terpisah + dapat dikurangi dengan beberapa karakter:prompt(o=[]).replace(/\S+/g,function(p){o[l=p.length]=(o[l]||"")+"#"});for(i=1;i<o.length;)console.log(i+(i>9?"|":" |")+(o[i++]||""))
. (Dan bahkan lebih pendek di Harmony:.prompt(o=[]).replace(/\S+/g,p=>o[l=p.length]=(o[l]||"")+"#");for(i=1;i<o.length;)console.log(i+(i>9?"|":" |")+(o[i++]||""))
).length
sana.Bash murni 120
Sampel:
Simpan 8 karakter dengan menggunakan satu garpu ke
tr
: 112Berikan hasil yang sama:
render (di host saya :)
sumber
PHP, 162
Pemakaian:
sumber
8 , 162 byte
Kode
Pemakaian
Keluaran
Kode tidak digabungkan ( SED adalah Stack Effect Diagram)
sumber