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


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

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


Setuju dengan @Giuseppe, jawabannya harus adil stem:)
JayCe



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!


(?<=(\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`
`

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


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&@#)&

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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.