Bir gövde ve yaprak grafiği oluşturma


14

İlgili: Bir gövde ve yaprak grafiğini doğrulama

Giriş

Boş olmayan pozitif tamsayılar listesi. Gerekirse, dizeler olarak alınabilirler. Sıralandığını varsayamazsınız.

Çıktı

Bir kök ve yapraklı arsa numaralarının. Gelen bir onlarca tarafından, daha sonra bu kök içine sığacak tüm sayılar onların olanları kök içine yerleştirilen değer veren ve daha sonra tüm sıralanır var sapları içine bu kök-yaprak arsa, sayıları sıralanır. Bu meydan okumada, yeni satırlar sapları ayırır ve boşluklar sapları yapraklardan ayırır.

Boş olmayan gövdeler arasındaki tüm boş gövdeleri dahil edebilir veya hariç tutabilirsiniz.

Test Durumları

(listeler dilinizin varsayılan listesinden alınabilir, aşağıdakiler için JSON kullandım)

Boş saplar dahil:

[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

Boş saplar hariç:

[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


Sıralanması ve / veya giriş sırasının korunması gerekiyor mu?
Rod

@Kodu gereği, girdiyi onlarca, sonra olanlar tarafından sıralar. Giriş sırası önemli değil.
Stephen

2
Çıktı formatı böyle OLMALIDIR? Mı cevabım geçerli?
Rod

1
@ totallyhuman tuples tamam, ama evet, yaprakların sıralanması gerekiyor, desenleri ve dağılımları görselleştirmek için arsanın tüm noktası bu
Stephen

Yanıtlar:


2

R , 12 bayt

stem(scan())

Çevrimiçi deneyin!

Açıklama:

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

Ben stembir dizi girdi alır gibi, sadece yeterli olacağını düşünüyorum .
Giuseppe

Aslında TIO üzerinde çalışmaya örnek olabilmemin tek yolu buydu. Ve sanırım cevaplamanın "program ya da fonksiyon" tarzına alışkınım ve diğer formatlardan emin değilim.
ngm


@Giuseppe ile aynı fikirde, cevap sadece olmalıdır stem:)
JayCe



3

Retina , 38 30 bayt

Neil'e 2 bayt kaydettiği için ve Leo'ya 6 tane daha kaydettiği için teşekkürler.

Bayt sayımı ISO 8859-1 kodlamasını varsayar.

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

Girdi, satır besleme ile ayrılmış bir tamsayı listesidir. Çıktı boş önekleri atlar.

Çevrimiçi deneyin!


(?<=(\b.+ ).)¶\1size iki bayt kazandırır.
Neil

Baytlar, son aşama olarak yerine bir tekilleştirme aşaması kullanılarak kaydedilebilir (daha sonra ilk satırla ilgilenmelisiniz) tio.run/##K0otycxL/…
Leo

@Leo Teşekkürler, önde gelen bir satır besleme ile sonuçlanmayan hafif bir varyantla gidiyorum.
Martin Ender

2

JavaScript (ES6), 89 bayt

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 bayt

Rod sayesinde -6 bayt. Ovs sayesinde -9 bayt.

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

Çevrimiçi deneyin!

Tamam, bir şey biraz sakat. Tüm Python programcılarının bildiği gibi, diktler sıra dışıdır, yani anahtar / değer çiftlerinin orijinal sırası korunmaz. Ancak, mevcut kodumda, ortaya çıkan dikte hiç sıralamıyorum. Yine de, her seferinde eşitlik ve düzeni kontrol ederek birçok kez test ettim ve karar her zaman doğru çıkıyor. Herhangi biri ya hep doğru çıktığını reddederse ya da bunun neden işe yaradığını biliyorsa, bilmek isterim.

Python listesi olarak gir ve dikte olarak çık. Misal:

Giriş:

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

Çıktı:

{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`82 bayt için
ovs

Bence dicts varsayılan olarak sıralanmış? sadece orijinal sırada değil
Yıkılabilir Limon

1

Mathematica, 103 bayt

@ User202729'un silinen cevabından alınan kod

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

1

> <> , 84 bayt

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

Çevrimiçi olarak veya balık oyun alanında deneyin !

Giriş numaralarının yığın üzerinde olduğunu varsayar .

Açıklama: İlk olarak, yığını bu tür bir kodla bir kabarcık sıralaması kullanarak sıralarız :

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

Daha sonra, yığındaki ilk şeyin tamsayı bölümünü 10 ile hesaplıyoruz, bunu ::a%-a,kayıt defterine koyuyoruz ve ilk basamakları kayıtla aynı oluncaya kadar sayıların son hanelerini yazdırarak yığını geçiyoruz, sonra kaydı arttırır ve devam eder. Listenin sonuna geldiğimizde, a ile işaretlendiğinde 0dururuz.


1

PostgreSQL, 53 bayt

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

Tamsayıların listesi varolan bir tablonun integersütununda bulunmalıdır . Sonuç iki sütunlu bir tablodur: her satır bir "gövde" sütunu ve bir "yapraklar" sütunundan oluşur. "Yapraklar" sütunu JSON dizi biçimindedir. (Yorumlarda belirtildiği gibi, "Test Durumları" altında gösterilen biçime tam olarak uymak gerekli değildir.)nt

Sapların sırası garanti edilmese de (10 bayt kaydetmek ORDER BY 1için, sorgunun sonundan çıkarılır), testlerimde, saplar doğru sırayla sonuçlanmış gibi görünüyordu.

SQL Fiddle'daki sonucu görüntüle

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.