Sắp chữ nhãn đa chiều


12

Trong một thế giới đa chiều hơi nước, ông chủ của chúng tôi muốn dán nhãn chỉ mục được in vào mỗi ngăn kéo trong tủ hồ sơ đa chiều của tập đoàn chúng tôi.

Sếp muốn sắp xếp toàn bộ tờ nhãn dưới dạng đơn, sử dụng phông chữ chỉ mua cho mục đích này, vì vậy chúng tôi phải đặt hàng các loại (miếng biểu tượng kim loại). Vì các loại rất đắt tiền, thứ tự của chúng tôi phải được tính chính xác cho từng ký hiệu chữ số.

Đối với một tập hợp chiều dài nhất định (bằng bất kỳ phương tiện nào), 0, trả về (bằng bất kỳ phương tiện nào) thứ tự của chúng tôi, đó là bảng tần số của các chữ số cần thiết để sắp xếp tất cả các tọa độ của Cartesian. Nó phải được sắp xếp theo thứ tự xuất hiện của bàn phím (tức là 0 sau 9) và có thể không bao gồm các lệnh 0 loại, vì vậy nếu không có loại nào được sắp xếp theo thứ tự (vì kích thước có độ dài 0); không in gì cả

  • Phần thưởng -3 sắp xếp nếu mã của bạn có thể xử lý (tức là không in gì) 0 kích thước.
  • Chars dòng cuối cùng được chấp nhận.
  • Cấm các sơ hở tiêu chuẩn áp dụng.
  • Như đã đề cập, các loại đắt tiền, do đó, đây là .

Một linh hồn tốt bụng có thể chỉnh sửa thử thách này để bao gồm ghi điểm tự động, do đó, bao gồm một tiêu đề như:
# LanguageName, 123 sorts

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

Đưa ra 11, in:

1 4
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
0 1

vì các nhãn cần thiết là 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, và 11.


Đưa ra 2 3, in:

1 5
2 5
3 2

vì các nhãn cần thiết là 1 1, 1 2, 1 3, 2 1, 2 2, và 2 3.


Cho 2 0, in một dòng trống:

hoặc không có gì.


Đưa ra 1 2 3, in:

1 11
2  5
3  2

vì các nhãn cần thiết là 1 1 1, 1 1 2, 1 1 3, 1 2 1, 1 2 2, và1 2 3


Đưa ra 5 5 5 5, in:

1 500
2 500
3 500
4 500
5 500

Và không, tôi sẽ không liệt kê tất cả 625 nhãn.


Tôi có một chút không rõ ràng về các yêu cầu đầu ra. Trong văn bản, nó ghi "return (bằng bất kỳ phương tiện nào)", nhưng phần còn lại cho thấy rằng cần phải có một định dạng đầu ra rất cụ thể và nó cần được in. Đó là cái nào Ví dụ, nói về dòng mới có vẻ hoàn toàn dư thừa nếu định dạng đầu ra có thể là bất cứ điều gì.
Reto Koradi

1
@RetoKoradi định dạng phải trông nhiều hơn hoặc ít hơn như được hiển thị, nhưng nó có thể là trong một phiên tương tác, một tệp, cửa sổ bật lên, STDOUT, v.v. Bạn có gợi ý về cách tôi có thể diễn đạt điều này để làm cho nó rõ ràng hơn ?
Adám

Câu trả lời:


6

Thuốc nhuộm APL, 10 7

Mã này dài 10 byte và đủ điều kiện nhận thưởng.

Cảm ơn người dùng46915 cho 3 byte!

,∘≢⌸∊⍕¨∊⍳⎕

Lưu ý rằng (đầu vào) không hoạt động trên TryAPL; bạn có thể thử mẫu hàm ở đây .

            ⎕      Get input
           ⍳       Index vector
       ∊⍕¨∊        Flatten, stringify, flatten again
      ⌸            From the key, display the
{⍺,  }             elements concatenated with the
   ≢⍵              number of times they occur

Tôi hoàn toàn không hiểu toán tử, nhưng {⍺}⌸liệt kê các giá trị duy nhất được thực hiện và {⍵}⌸liệt kê các vị trí của chúng trong đối số.

Điều này có thứ tự đúng bởi vì nó là thứ tự xuất hiện các chữ số trong mảng đa chiều của nhãn.


1
Yup, đó là giải pháp tôi có trong đầu. Điều này có thể giúp hiểu toán tử Key.
Adám

1
Không phải APL luôn giành chiến thắng tại codegolf sao?
vy32

@ vy32 Số APL có thể là ngôn ngữ có mục đích chung ngắn gọn nhất, nhưng sẽ luôn có các ngôn ngữ dành riêng cho tên miền tốt hơn ở một miền hạn chế nhất định so với bất kỳ ngôn ngữ mục đích chung nào. Trong phạm vi cụ thể của môn đánh gôn, các ngôn ngữ chơi gôn như Pyth và CJam thường giành chiến thắng. Tuy nhiên, điều đáng chú ý là APL, là một ngôn ngữ thương mại được sử dụng trong sản xuất bởi các công ty rất lớn, thậm chí còn gần gũi. Ngoài ra, với mức giá dài hơn một chút, con người có thể học đọc APL dễ dàng hơn so với ngôn ngữ chơi gôn.
Adám

Đợi đã, vậy ý ​​bạn là tôi có thể tạo ra toàn bộ biểu đồ đơn giản ,∘≢⌸mà không cần bất kỳ sản phẩm bên ngoài nào độc đáo và như vậy?! Dyalog chắc chắn là tuyệt vời. Cũng ,∘≢⌸ngắn hơn {⍺,≢⍵}⌸.
dùng46915

3
@NBZ, tôi nhớ APL. Quay trở lại năm 1982, tôi đã viết một gói đồ họa trong APL lái một máy in bánh xe daisy. Đó là một tác phẩm nghệ thuật, mặc dù tôi không hiểu những gì tôi đã viết một tháng sau đó.
vy32


2

Toán học, 111 85 byte

Grid[Thread@{Range@10~Mod~10,DigitCount@Tuples@Range@#~Total~2}~DeleteCases~{_,‌​0}]&

Hầu hết các công việc ở đây được thực hiện bởi DigitCount.


Grid[Thread@{Range@10~Mod~10,DigitCount@Tuples@Range@#~Total~2}~DeleteCases~{_,0}]&
alephalpha

2

R, 110 byte

Đã cứu 4 nhờ Alex A. (cảm ơn!)

U=unlist
X=table(U(strsplit(as.character(U(expand.grid(Map(seq_len,scan())))),"")))
z=Map(cat,names(X),X,"\n")

Bạn chỉ sử dụng xmột lần để bạn có thể thay thế một lần xuất hiện xbằng scan(). Còn tại sao lại giao z?
Alex A.

Cảm ơn. Đồng ý về việc không sử dụng x. Tôi đã gán đầu ra của Mapmột zbiến nếu không Mapsẽ in đầu ra của nó thành thiết bị xuất chuẩn. Một thực hành tốt hơn sẽ là bọc Mapbên trong invisible()nhưng đó là rất nhiều nhân vật ...
flodel 10/11/2015

1

Ruby, 92 byte

f,*r=$*.map{|n|[*1..n.to_i]}
a=f.product(*r)*''
puts a.chars.uniq.map{|c|[c,a.count(c)]*" "}

Lấy độ dài làm đối số dòng lệnh:

$ ruby foo.rb 1 2 3
1 11
2 5
3 2

0

CJam, 31 byte

Laq~{,m*}/e_:)s{_'0=A*+}$e`{(S\N}%

Dùng thử trực tuyến

Mã là 34 byte và mất 3 byte tiền thưởng để làm việc với danh sách đầu vào trống. Đầu vào là một danh sách ở định dạng CJam, ví dụ:

[1 2 3]

Giải trình:

La    Push list containing empty list to seed Cartesian products.
q~    Get and interpret input.
{     Loop over values in input list.
  ,     Built range from 0 to value-1.
  m*    Form Cartesian product with the list we already have.
}/    End loop over values in input list.
e_    Resulting list has extra nesting. Flatten it.
:)    Increment all values in list, since it is 0-based, and we need 1-based.
s     Convert it to string, so we can operate on digits.
{     Block to calculate source key, needed to get 0 to the end.
  _     Copy the digit.
  '0=   Compare with '0.
  A*    Multiply comparison result by 10...
  +     ... and add it to digit.
}$    End of sort key block.
e`    RLE.
{     Start of loop over RLE entries, for generating output in specified format.
  (     Pop off the first value, which is the count.
  S     Push a space...
  \     ... and swap it with the count.
  N     Push a newline.
}%    End of loop over RLE entries.


0

Haskell, 125 byte

import Data.List
l=mapM_(putStrLn.(\(h:r)->h:' ':show(length r+1))).group.sort.concatMap show.concat.sequence.map(\n->[1..n])
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.