Tạo một cốt truyện thân và lá


14

Liên quan: Xác thực một âm mưu thân và lá

Đầu vào

Một danh sách không trống của các số nguyên dương. Nếu cần, chúng có thể được lấy làm chuỗi. Bạn không thể cho rằng nó được sắp xếp.

Đầu ra

Một âm mưu thân và lá của các con số. Trong một biểu đồ thân và lá này, các số được sắp xếp thành hàng chục, sau đó tất cả các số phù hợp với thân đó có giá trị của chúng được đặt vào thân, và sau đó tất cả được sắp xếp. Trong thử thách này, dòng mới tách thân cây và không gian tách thân cây ra khỏi lá.

Bạn có thể bao gồm hoặc loại trừ tất cả các thân trống nằm giữa các thân không trống.

Các trường hợp thử nghiệm

(danh sách có thể được lấy theo mặc định danh sách ngôn ngữ của bạn, tôi đã sử dụng JSON cho bên dưới)

Bao gồm các thân cây trống:

[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

Không bao gồm các thân cây trống:

[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


Nó cần phải được sắp xếp và / hoặc bảo tồn thứ tự đầu vào?
Rod

@Rod theo định nghĩa, nó sắp xếp đầu vào theo hàng chục, sau đó theo hàng. Thứ tự đầu vào không quan trọng.
Stephen

2
Định dạng đầu ra PHẢI như thế? Là câu trả lời của tôi có giá trị?
Rod

1
@totallyhuman tuples là OK, nhưng vâng, các lá cần được sắp xếp, đó là toàn bộ điểm của cốt truyện, để hình dung các mẫu và phân phối
Stephen

Câu trả lời:


2

R , 12 byte

stem(scan())

Hãy thử trực tuyến!

Giải trình:

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

Tôi nghĩ chỉ cần stemlà đủ, vì nó lấy một mảng làm đầu vào.
Giuseppe

Đó là cách duy nhất tôi có thể lấy một ví dụ để thực sự hoạt động trên TIO. Và tôi đoán tôi đã quen với kiểu trả lời "chương trình hoặc chức năng" và không chắc chắn về các định dạng khác.
ngm


Đồng ý với @Giuseppe, câu trả lời chỉ nên stem:)
JayCe



3

Võng mạc , 38 30 byte

Cảm ơn Neil vì đã lưu 2 byte và Leo đã lưu thêm 6 byte.

Số lượng byte giả định mã hóa ISO 8859-1.

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

Đầu vào là danh sách các số nguyên được phân tách theo dòng cấp. Đầu ra bỏ qua các tiền tố trống.

Hãy thử trực tuyến!


(?<=(\b.+ ).)¶\1giúp bạn tiết kiệm hai byte.
Neil

Byte có thể được lưu bằng cách sử dụng giai đoạn sao chép thay vì giai đoạn thay thế như giai đoạn cuối (sau đó bạn phải xử lý dòng đầu tiên) tio.run/##K0otycxL/ trộm
Leo

@Leo Cảm ơn, tôi sẽ sử dụng một biến thể nhỏ không kết thúc với nguồn cấp dữ liệu hàng đầu.
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 nhờ Rod. -9 byte nhờ vào các lò nướng.

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

Hãy thử trực tuyến!

Được rồi, một cái gì đó hơi thắng. Như tất cả các lập trình viên Python nên biết, các ký tự không có thứ tự, có nghĩa là thứ tự ban đầu của các cặp khóa-giá trị không được giữ nguyên. Tuy nhiên, trong mã hiện tại của tôi, tôi không sắp xếp dict kết quả nào cả. Tuy nhiên, tôi đã thử nghiệm nhiều lần, kiểm tra sự bình đẳng và trật tự mỗi lần, và lệnh chính tả luôn xuất hiện đúng. Nếu bất cứ ai từ chối rằng nó luôn luôn đúng hoặc biết tại sao điều này hoạt động, tôi rất muốn biết.

Nhập dưới dạng danh sách python và đầu ra dưới dạng dict. Thí dụ:

Đầu vào:

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

Đầu ra:

{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`cho 82 byte
OVS

Tôi nghĩ rằng dicts được sắp xếp theo mặc định? chỉ không theo thứ tự ban đầu
Lemon

1

Toán học, 103 byte

Mã được lấy từ câu trả lời đã bị xóa của @ 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,&:

Hãy thử trực tuyến , hoặc tại sân chơi cá !

Giả sử các số đầu vào đã có trên ngăn xếp .

Giải thích: Đầu tiên, chúng tôi sắp xếp ngăn xếp bằng cách sử dụng sắp xếp bong bóng , với đoạn mã này:

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

Tiếp theo, chúng tôi tính toán số nguyên của điều đầu tiên trong ngăn xếp bằng cách sử dụng 10 ::a%-a,, đặt nó vào thanh ghi và đi qua ngăn xếp in các chữ số cuối của các số cho đến khi các chữ số đầu tiên của chúng không giống với thanh ghi, sau đó tăng đăng ký và tiếp tục. Khi chúng tôi đến cuối danh sách, được đánh dấu bằng a 0, chúng tôi dừng lại.


1

PostgreSQL, 53 byte

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

Danh sách các số nguyên phải nằm trong một integercột ncủa bảng hiện có t. Kết quả là một bảng hai cột: mỗi hàng bao gồm cột "thân" và cột "lá". Cột "lá" có định dạng mảng JSON. (Như đã lưu ý trong các nhận xét, không cần thiết phải tuân thủ chính xác định dạng được hiển thị trong "Các trường hợp thử nghiệm".)

Mặc dù thứ tự các thân cây không được đảm bảo (để lưu 10 byte, ORDER BY 1được bỏ qua từ cuối truy vấn), nhưng trong thử nghiệm của tôi, các thân cây dường như đã kết thúc theo đúng thứ tự.

Xem kết quả trên SQL Fiddle

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.