Hầu như so sánh danh sách từ điển


9

Đầu vào

Hai danh sách ABcác số nguyên không âm.

Đầu ra

Hoặc 1, 0hoặc-1 , tùy thuộc vào việc Alớn hơn, bằng hoặc nhỏ hơn so Bvới thứ tự từ điển xoắn như được định nghĩa dưới đây. Nếu bạn muốn, bạn có thể thay thế 1, 0-1với bất kỳ ba giá trị không đổi khác.

Thứ tự từ điển xoắn giống như thứ tự từ điển thông thường, trong đó bạn so sánh thành phần danh sách theo yếu tố và quyết định thứ tự của chúng ở chỉ số khác nhau đầu tiên. Tuy nhiên, trong phiên bản xoắn, chúng tôi sử dụng một thứ tự khác nhau cho các số nguyên không âm ở mỗi chỉ số. Cụ thể, tại mỗi chỉ mục i(lập chỉ mục bắt đầu từ 1), thứ tự của các isố nguyên không âm đầu tiên (từ 0đến i-1) được đảo ngược và chúng được di chuyển trên tất cả các số khác. Ngoài ra, "phần tử bị thiếu" biểu thị một danh sách ngắn hơn danh sách khác được di chuyển ngay bên dưới i-1. Trực quan, thứ tự tại chỉ mục i

i < i+1 < i+2 < i+3 < ... < [missing element] < i-1 < i-2 < i-3 < ... < 2 < 1 < 0

Lưu ý rằng đầu tiên ...biểu thị vô số số. Điều này có nghĩa là các danh sách sau theo thứ tự tăng dần đối với thứ tự từ điển xoắn:

[3,2,3,4]
[3,2,3,5]
[3,2,3,10]
[3,2,3,1341]
[3,2,3]
[3,2,3,3]
[3,2,3,2]
[3,2,3,1]
[3,2,3,0]

Quy tắc

Bạn có thể cung cấp một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép.

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

Output 1:
[0] []
[] [1]
[] [1,2,1,2]
[2,1] [1,1]
[0,1,2] [0,2,1]
[3,0] [3,1]
[3,1] [3]
[2] [2,2]
[2] [2,23]
[2,24] [2,23]
[2,1] [2,23]

Output 0:
[] []
[0] [0]
[1,1] [1,1]
[2,1,2] [2,1,2]

Output -1:
[1,2,1,1,2] [1,2,1,1,1]
[1,2,1,1,5] [1,2,1,1,4]
[1,2,1,1,5] [1,2,1,1]
[1,2,1] [1,2,1,1]
[1,2,1,1,5] [1,2,1,1,6]
[1,2,1,1,6] [1,2,1,1,7]

Các danh sách đầu vào được lập chỉ mục từ 0, từ 1 hoặc bất kỳ từ nào phù hợp với ngôn ngữ của chúng tôi?
Peter Taylor

@PeterTaylor Từ 1. Tôi sẽ làm rõ điều đó.
Zgarb

Tôi có thể sử dụng enum của Haskell cho kết quả so sánh thay vì -1/0/1 cho đầu ra không?
John Dvorak

@JanDvorak Tôi sẽ cho phép điều đó và chỉnh sửa thử thách.
Zgarb

Câu trả lời:


1

CJam - 57

q:S~=0{S~]:A:,~e>{A{_,I>{I=_I>0{W*2}?}1?[\]}%}fI]z~>2*(}?

Vâng, nó vẫn còn rất lâu ...

Dùng thử trực tuyến

Giải thích ngắn gọn:
Mã xuất ra 0 nếu các mảng bằng nhau theo nghĩa truyền thống, nếu không, nó chuyển đổi từng mục của từng mảng thành mảng 2 phần tử: [0 a i ] nếu a i > i (dựa trên 0), [1 sao cũng được] nếu một i bị thiếu và [2 -a i ] nếu a i <= i. Trong quá trình, mảng ngắn hơn cũng được mở rộng đến kích thước lớn hơn. Sau đó, các mảng được chuyển đổi được so sánh theo từ vựng và kết quả được điều chỉnh thành -1/1.


3

Python 2, 76 byte

c=lambda*a:cmp(*[[(max(i-x,-1),x)for i,x in enumerate(L)]+[(0,)]for L in a])

Điều này thay thế mỗi số nguyên trong cả hai danh sách bằng 2 tuple để tính thứ tự xoắn. Phần mềm cmpdựng sẵn của Python 2 làm phần còn lại.

Sử dụng:

>>> c([1,2,1,1,6], [1,2,1,1,7])
-1

1
Làm thế nào để tài khoản này cho một danh sách ngắn đi vào giữa các danh sách dài khác nhau ( [3,2,3,1341] < [3,2,3] < [3,2,3,0]?
nutki

@nutki nó thêm bộ dữ liệu (0,)vào cuối mỗi danh sách, lớn hơn bất kỳ (-1, x)và ít hơn (i-x, x)khi nào i-x >= 0.
grc

Ồ dĩ nhiên rồi. Tôi không biết chữ Python.
nutki

1

Perl, 74

Không có chức năng thao tác mảng tốt, perl không phải là công cụ tối ưu cho công việc, nhưng nó hoạt động.

#!perl -pa
$i=0,s/\d+,?/$s=sprintf"%9d",$&;$&>$i++?$s:~$s/ge for@F;$_=$F[0]cmp$F[1]

Kiểm tra tôi .


1

J, 95 byte

(Không siêu ngắn nhưng bất cứ điều gì. Chắc chắn có thể chơi được.)

f=.4 :0
m=.>:>./x,y
t=.(|+(1+m)*0>:*)@(i.@#-~])@(],m$~>&#*-&#)
x(t~(*@-&((m+#x,y)&#.))t)y
)

Vượt qua tất cả các trường hợp thử nghiệm.(Bộ trường hợp thử nghiệm tuyệt vời! Cảm ơn!)

Phương pháp:

  • Đệm danh sách ngắn hơn với maxvalue + 1 (m=.>:>./x,y ).(],m$~>&#*-&#
  • Chuyển đổi các yếu tố danh sách để so sánh bình thường có thể được sử dụng. (|+(1+m)*0>:*)@(i.@#-~])
  • Tính hai số cơ sở từ hai danh sách có đủ X. ((m+#x,y)&#.)
  • Trả lại dấu hiệu của hai số khác nhau.*@-&

0

Toán học, 65

f=-Order@@MapIndexed[If[#>Last@#2,#,a-b#]&,PadRight[{##}+1],{2}]&

Sử dụng:

f[{1, 2, 1, 1, 6}, {1, 2, 1, 1, 7}]

-1

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.