Quyết định sự tồn tại của tổng số thứ tự


8

Trong tác vụ này, chúng tôi xem xét các mảng số nguyên dương như sau:

3 18 321 17 4 4 51 1 293 17

Đầu vào bao gồm một cặp các mảng như vậy cả chiều dài dương, tùy ý, có thể khác biệt. Xác định nếu tổng trật tự ≤ XN × N , nơi N là tập hợp các số nguyên dương, tồn tại như vậy mà cả hai mảng đầu vào theo thứ tự liên quan đến ≤ với X . Lưu ý rằng (A ≤ X B ∧ B X A) A = B phải giữ, nghĩa là, hai số được coi là bằng nhau dưới ≤ X khi và chỉ khi chúng là cùng một số.

Ví dụ: nếu đầu vào là cặp mảng

7 2 1 1 4 12 3
9 8 7 2 5 1

sau đó bạn phải tìm ra nếu tổng thứ tự ordering X tồn tại sao cho

7 ≤ X 2 ≤ X 1 ≤ X 1 ≤ X 4 X 12 ≤ X 3

9 ≤ X 8 ≤ X 7 X 2 ≤ X 5 X 1.

Nội dung gửi của bạn có thể là chương trình con hoặc chương trình nhận hai mảng (như được chỉ định ở trên) theo cách xác định thực hiện, tính toán xem tổng số thứ tự ≤ X có đáp ứng các yêu cầu được đề cập ở trên hay không và trả về một giá trị đại diện cho có đúng hay khác giá trị đại diện cho số no. Sự lựa chọn của các giá trị này là tùy ý, xin vui lòng ghi lại chúng.

Bạn có thể giả định rằng các mảng đầu vào chứa không quá 2 15 - 1 phần tử và mỗi phần tử của chúng nằm trong phạm vi từ 1 đến 2 15 - 1. Bạn có thể yêu cầu mỗi mảng bị chấm dứt bởi một sentinel không đổi bên ngoài phạm vi đã nói ở trên, chẳng hạn như 0. Vui lòng chỉ định những gì sentinel là cần thiết. Bạn có thể yêu cầu độ dài của các mảng làm đầu vào bổ sung nếu độ dài không thể được suy ra từ chính các mảng (ví dụ: trong các ngôn ngữ như C). Ngoài việc cấm các sơ hở tiêu chuẩn, bạn không được phép sử dụng các thói quen phân loại tôpô.

Thử thách này là mã golf. Trình gửi với số lượng nhân vật ít nhất sẽ thắng.


2
Để dễ dàng cho mọi người, bạn có thể thực hiện một số ví dụ đầu vào / đầu ra để kiểm tra không?
orlp

1
Một danh sách có thể là nghịch lý và có vòng lặp chính nó?
jimmy23013

@ user23013 có.
FUZxxl

@orlp Chắc chắn rồi. Xin vui lòng cho tôi một chút thời gian.
FUZxxl

1
@orlp Bình đẳng không nên bị chạm bởi thứ tự khác nhau, nhưng hãy để tôi thêm một đoạn.
FUZxxl

Câu trả lời:


4

Bình thường, 28 22

L.AmqdSdmfhTmxhkbek^b2

Tạo một chức năng y mà bạn có thể gọi với một tuple chứa hai mảng. Trả về "Đúng" nếu tổng số đơn hàng tồn tại, "Sai" nếu không.

Một chương trình trợ giúp xác định và gọi hàm trên với stdin:

L.AmqdSdmfhTmxhkbek^b2y,rw7rw7 

Hãy thử nó ở đây.

Đầu tiên chúng ta đọc cả hai mảng. Sau đó, chúng tôi sẽ tạo ra tất cả các kết hợp của cả hai mảng. Sau đó, với mỗi kết hợp, chúng tôi sẽ giả sử mảng đầu tiên là có thẩm quyền và kiểm tra xem nó có phù hợp với mảng thứ hai không.


Là số nguyên dương giống nhau cho mỗi đầu ra thực sự? Mục đích của đặc tả là có một số nguyên biểu thị cho có yes và một số nguyên biểu thị số không.
FUZxxl

@FUZxxl Bây giờ thì có.
orlp

Tôi nghĩ rằng bạn được phép lấy đầu vào theo cách bạn muốn, điều này sẽ giúp tiết kiệm rất nhiều ký tự. Receives two arrays ... in an implementation-defined way.Bạn có thể lưu ít nhất 7 ký tự.
isaacg

@isaacg Cảm ơn, tôi chỉ có thể lưu 6, vì tôi sẽ phải sử dụng lambda - Tôi phải cung cấp chương trình con hoặc chương trình.
orlp

2

GolfScript, 25 byte

:A{:a;A{.a--.{a?}$=!},},!

Hãy thử mã này trực tuyến.

Lấy một mảng gồm hai (hoặc nhiều hơn!) Trên ngăn xếp; trả về 1 (đúng) nếu mỗi cặp mảng đầu vào có tổng thứ tự tương thích hoặc 0 (sai) nếu không.

Nó hoạt động bằng cách lặp qua mọi cặp mảng đầu vào có thể (bao gồm cả từng mảng được ghép với chính nó), sắp xếp các phần tử trong mảng đầu tiên theo vị trí xuất hiện đầu tiên trong mảng thứ hai (bỏ qua những mảng không tìm thấy) và kiểm tra thứ tự kết quả khớp với bản gốc.

Mặc dù mã này có thể lấy một số lượng các mảng đầu vào tùy ý, điều đáng chú ý là nó chỉ kiểm tra tính nhất quán theo cặp . Ví dụ, nó trả về true cho đầu vào[[1 2] [2 3] [3 1]] , vì bất kỳ hai trong ba mảng nào cũng có tổng thứ tự nhất quán. Tuy nhiên, thế là đủ cho trường hợp hai đầu vào, đó là tất cả những gì thử thách yêu cầu.

Đây là một phiên bản khử golf với các bình luận:

:A         # save input to "A", and leave it on the stack to be looped over
{          # run this outer loop for each input array:
  :a;      #   save this array to "a" (and pop it off the stack)
  A{       #   also run this inner loop for each input array:
    .a--   #     remove all elements not in "a" from this array
    .      #     make a copy of the filtered array
    {a?}$  #     sort it by the first location of each element in "a"
    =!     #     check whether the sorted copy differs from the original
  },       #   select those arrays for which there was a difference
},         # select those arrays for which at least one difference was found
!          # return 1 if no differences were found, 0 otherwise

Thi thiên Có thể lưu một hoặc hai byte một cách tầm thường bằng cách yêu cầu đầu vào được cung cấp trực tiếp trong biến đã đặt tên Avà / hoặc bằng cách thay đổi định dạng đầu ra thành một mảng trống cho "có" và một mảng không trống cho "không" . Tuy nhiên, điều đó có vẻ khá nhảm với tôi.


Đây là một ý tưởng gọn gàng. Có lẽ tôi đang làm một cổng J của giải pháp này.
FUZxxl

2

J, 36 30 26 byte

[:*/@,(e.~(-:/:~)@#i.)&>/~

Hãy gọi hai danh sách đầu vào ab. Hàm kiểm tra (với (e.~(-:/:~)@#i.)) xem

  • acác phần tử được sắp xếp (liên quan đến a) trongb
  • acác phần tử được sắp xếp (liên quan đến a) tronga
  • bcác phần tử được sắp xếp (liên quan đến b) tronga
  • bcác phần tử được sắp xếp (liên quan đến b) trongb

Đầu vào là danh sách hai vectơ số nguyên.

Kết quả là 1nếu một đơn đặt hàng tồn tại 0khác. (Thời gian chạy là O (n * n).)

Sử dụng:

   f=.[:*/@,(e.~(-:/:~)@#i.)&>/~

   a=.7 2 1 1 4 12 3 [b=.7 2 1 1 4 12 3 1 [c=.9 8 7 2 5 1
   f a;c
1
   f b;c
0

Hãy thử trực tuyến tại đây.


Làm thế nào bkhông thể được sắp xếp liên quan đến b?
FUZxxl

@FUZxxl ví dụ b=1 2 1hoặc trong ví dụ thứ hai của tôib=7 2 1 1 4 12 3 1
Randomra

Ok ... Loại có ý nghĩa.
FUZxxl

1

Ruby, 79

!!gets(p).scan(r=/\d+/){|s|$'[/.*/].scan(r){s!=$&&~/\b#$& .*\b#{s}\b/&&return}}

Dự kiến ​​đầu vào là một tệp hai dòng gồm các số được phân tách bằng dấu cách. Trả về truekhi một đơn đặt hàng tồn tại, nilnếu nó không.


Vui lòng tuân theo định dạng đầu ra: Trả về một giá trị chỉ định sự tồn tại của đơn đặt hàng hoặc giá trị khác chỉ định không tồn tại. Các giá trị này phải độc lập với đầu vào.
FUZxxl

Làm xong. Về mặt kỹ thuật có thể tuân thủ thông số kỹ thuật với một ký tự ít hơn, nhưng trở lại nilhoặc falsechỉ cảm thấy quá sai.
lịch sử

Trở về nilhoặc falselà hoàn toàn ok.
FUZxxl

1

Haskell, 98 byte

import Data.List
a%b=intersect(r a)$r b
r l=map head$group l
c l=nub l==r l
x#y=c x&&c y&&x%y==y%x

Trả về Truehoặc False. Ví dụ sử dụng: [7,2,1,1,4,12,3] # [9,8,7,2,5,1]-> True.

Cách thức hoạt động: xóa các bản sao liên tiếp khỏi danh sách đầu vào (ví dụ : [1,2,2,3,2] -> [1,2,3,2]. Một đơn hàng tồn tại nếu cả hai danh sách kết quả không chứa các bản sao và giao điểm của list1 và list2 bằng với giao điểm của list2 và list1.


Đây là một ý tưởng gọn gàng.
FUZxxl
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.