Buat plot batang dan daun

14

Terkait: Validasi plot batang-dan-daun

Memasukkan

Daftar bilangan bulat positif yang tidak kosong. Jika perlu, mereka dapat diambil sebagai string. Anda tidak dapat menganggap itu disortir.

Keluaran

Sebuah rencana induk-dan-daun nomor. Dalam sebuah plot ini stem-and-leaf, nomor diperintahkan menjadi batang oleh puluhan, maka semua nomor yang sesuai dengan batang yang memiliki orang yang mereka nilai ditempatkan ke batang, dan kemudian semua diurutkan. Dalam tantangan ini, baris baru memisahkan batang, dan ruang memisahkan batang dari daun.

Anda dapat memasukkan atau mengecualikan semua batang kosong yang berada di antara batang tidak kosong.

Uji Kasus

(daftar dapat diambil dalam daftar standar bahasa Anda, saya menggunakan JSON untuk yang di bawah)

Termasuk batang kosong:

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

0 11233333
1 0558
2
3
4
5
6
7
8
9
10 0

[55, 59, 49, 43, 58, 59, 54, 44, 49, 51, 44, 40, 50, 59, 59, 59]

4 034499
5 0145899999

[10000, 10100]

1000 0
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010 0

Tidak termasuk batang kosong:

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

0 11233333
1 0558
10 0

[55, 59, 49, 43, 58, 59, 54, 44, 49, 51, 44, 40, 50, 59, 59, 59]

4 034499
5 0145899999

[10000, 10100]

1000 0
1010 0
Stephen
sumber
Sandbox
Stephen
Perlu disortir dan / atau mempertahankan urutan input?
Rod
@Rod menurut definisi, itu mengurutkan input dengan puluhan, lalu oleh yang. Urutan input tidak masalah.
Stephen
2
Format output HARUS seperti itu? Apakah jawaban saya valid?
Rod
1
@totallyhuman tuple OK, tapi ya, daun perlu disortir, itulah inti dari plot, untuk memvisualisasikan pola dan distribusi
Stephen

Jawaban:

2

R , 12 byte

stem(scan())

Cobalah online!

Penjelasan:

s               # imports RAND's "Million Random Digits"
  e  )          # cooks a pound of spaghetti and places it on the stack
 t              # transposes the output 42 times
       can      # goes for a pee
   m(           # grows moustache, turns head to side and frowns
      s   (     # implicitly ignores all criticism
           )    # makes a stemplot of the input
ngm
sumber
Saya pikir hanya stemakan cukup, karena dibutuhkan array sebagai input.
Giuseppe
Itulah satu-satunya cara saya bisa mendapatkan contoh untuk benar-benar bekerja di TIO. Dan saya kira saya sudah terbiasa dengan gaya "program atau fungsi" untuk menjawab, dan tidak yakin tentang format lain.
ngm
1
Seperti ini
Giuseppe
Setuju dengan @Giuseppe, jawabannya harus adil stem:)
JayCe
3

Jelly , 17 byte

Ṣµ:©⁵Ġṁ@%⁵®Q¤żK€Y

Cobalah online!

Biarawati Bocor
sumber
3

Retina , 38 30 byte

Terima kasih kepada Neil untuk menyimpan 2 byte, dan untuk Leo karena telah menyimpan 6 byte lagi.

Hitungan byte mengasumsikan penyandian ISO 8859-1.

O#`
.\b
 $&
\B 
0 
D$`¶?.+ 
$*

Input adalah daftar bilangan bulat yang dipisahkan baris-umpan. Output menghilangkan awalan kosong.

Cobalah online!

Martin Ender
sumber
(?<=(\b.+ ).)¶\1menghemat dua byte.
Neil
Bytes dapat diselamatkan dengan menggunakan tahap deduplication alih-alih yang pengganti sebagai tahap terakhir (Anda harus berurusan dengan baris pertama) tio.run/##K0otycxL/…
Leo
@ Leo Terima kasih, saya akan dengan sedikit varian yang tidak berakhir dengan linefeed terkemuka.
Martin Ender
2

JavaScript (ES6), 89 byte

a=>a.sort((a,b)=>a-b).map(e=>r[d=e/10|0]=(r[d]||d+` `)+e%10,r=[])&&r.filter(e=>e).join`
`
Neil
sumber
2

Python 2 , 146 140 133 124 120 118 109 107 90 86 84 91 82 81 70 63 byte

-6 byte terima kasih kepada Rod. -9 byte berkat ovs.

lambda l:{i/10:[j%10for j in sorted(l)if j/10==i/10]for i in l}

Cobalah online!

Oke, ada sesuatu yang sedikit miring. Seperti yang harus diketahui oleh semua programmer Python, dikt adalah unordered, artinya urutan asli dari pasangan kunci-nilai tidak dipertahankan. Namun, dalam kode saya saat ini, saya sama sekali tidak mengurutkan dict. Namun, saya telah menguji beberapa kali, memeriksa kesetaraan dan ketertiban setiap saat, dan dikte selalu keluar dengan benar. Jika ada yang menyangkal bahwa itu selalu benar atau tahu mengapa ini berhasil, saya ingin tahu.

Input sebagai daftar python dan output sebagai dict. Contoh:

Memasukkan:

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

Keluaran:

{0: [1, 1, 2, 3, 3, 3, 3, 3], 1: [0, 5, 5, 8], 10: [0]}
benar-benar manusiawi
sumber
1
r[i/10]=r.get(i/10,'')+`i%10`untuk 82 byte
ovs
Saya pikir dicts diurutkan secara default? hanya saja tidak dalam urutan aslinya
Lemon Destructible
1

Mathematica, 103 byte

Kode diambil dari jawaban yang dihapus @ user202729

Grid[Table[{Keys[#][[i]],""<>ToString/@#[[i]]},{i,Length@#}]]&@(GroupBy[Sort@#,⌊#/10⌋&]~Mod~10&@#)&
J42161217
sumber
1

> <> , 84 byte

1&0\n~a7+3.
 :}<$?)@:$@:v!?
r~&^?-l&:+1&/&:,a-%a::
&=?v~&1+:&ao>n" "o:?!;::a%:@-a,&:

Cobalah online , atau di taman bermain ikan !

Asumsikan nomor input sudah ada di tumpukan .

Penjelasan: Pertama, kami mengurutkan tumpukan menggunakan semacam gelembung , dengan sedikit kode ini:

1&0\
 :}<$?)@:$@:v!?
   ^?-l&:+1&/

Selanjutnya, kita menghitung integer-quotient dari hal pertama dalam stack dengan menggunakan 10 ::a%-a,, memasukkannya ke dalam register, dan melalui stack mencetak digit terakhir dari angka sampai digit pertama mereka tidak sama dengan register, kemudian menambah register dan melanjutkan. Ketika kami mencapai akhir daftar, ditandai dengan a 0, kami berhenti.

Bukan pohon
sumber
1

PostgreSQL, 53 byte

SELECT n/10,json_agg(n%10ORDER BY n)FROM t GROUP BY 1

Daftar bilangan bulat harus berada di integerkolom ntabel yang ada t. Hasilnya adalah tabel dua kolom: setiap baris terdiri dari kolom "batang" dan kolom "daun". Kolom "daun" dalam format array JSON. (Seperti yang tercantum dalam komentar, tidak perlu mematuhi persis format yang ditunjukkan di bawah "Kasus Uji".)

Meskipun urutan batang tidak dijamin (untuk menyimpan 10 byte, ORDER BY 1dihilangkan dari akhir permintaan), dalam pengujian saya, batang tampaknya berakhir dalam urutan yang benar.

Lihat hasil pada SQL Fiddle

PleaseStand
sumber