Giải các bất đẳng thức nhỏ hơn các số nguyên dương


16

Viết chương trình hoặc hàm có trong danh sách bất đẳng thức toán học không sử dụng toán tử nhỏ hơn toán tử ( <). Mỗi dòng trong danh sách sẽ có dạng

[variable] < [variable]

trong đó a [variable]có thể là bất kỳ chuỗi ký tự az không thường xuyên nào. Như trong toán học và lập trình bình thường, các biến có cùng tên giống hệt nhau.

Nếu một số nguyên dương có thể được gán cho từng biến sao cho tất cả các bất đẳng thức được thỏa mãn, sau đó in hoặc trả về danh sách các biến có gán như vậy. Mỗi dòng trong danh sách này nên có dạng

[variable] = [positive integer]

và tất cả các biến phải xảy ra chính xác một lần theo thứ tự bất kỳ.

Lưu ý rằng có thể có nhiều giải pháp số nguyên dương có thể có cho tập bất đẳng thức. Bất kỳ một trong số họ là đầu ra hợp lệ.

Nếu không có giải pháp nào cho sự bất bình đẳng, thì không thể đưa ra bất cứ điều gì hoặc đưa ra một giá trị giả (tùy thuộc vào bạn).

Mã ngắn nhất tính bằng byte thắng.

Ví dụ

Nếu đầu vào là

mouse < cat
mouse < dog

sau đó tất cả những thứ này sẽ là đầu ra hợp lệ:

mouse = 1
cat = 2
dog = 2
mouse = 37
cat = 194
dog = 204
mouse = 2
cat = 2000000004
dog = 3

Nếu đầu vào là

rickon < bran
bran < arya
arya < sansa
sansa < robb
robb < rickon

sau đó không thể chuyển nhượng vì nó sôi xuống rickon < rickon, do đó không có đầu ra hoặc đầu ra giả.

Thêm ví dụ với các giải pháp:

x < y

x = 90
y = 91

---

p < q
p < q

p = 1
q = 2

---

q < p
q < p

p = 2
q = 1

---

abcdefghijklmnopqrstuvwxyz < abcdefghijklmnopqrstuvwxyzz

abcdefghijklmnopqrstuvwxyz = 123456789
abcdefghijklmnopqrstuvwxyzz = 1234567890

---

pot < spot
pot < spot
pot < spots

pot = 5
spot = 7
spots = 6

---

d < a
d < b
d < c
d < e

d = 1
a = 4
b = 4
c = 5
e = 4

---

aa < aaaaa
a < aa
aaa < aaaa
aa < aaaa
a < aaa
aaaa < aaaaa
aaa < aaaaa
a < aaaaa

aaaa = 4
aa = 2
aaaaa = 5
a = 1
aaa = 3

---

frog < toad
frog < toaster
toad < llama
llama < hippo
raccoon < science
science < toast
toaster < toad
tuna < salmon
hippo < science
toasted < toast

raccoon = 1
frog = 2
toaster = 3
toasted = 4
toad = 5
llama = 6
hippo = 7
science = 8
toast = 9
tuna = 10
salmon = 11

Các ví dụ khác không có giải pháp: (cách nhau bởi các dòng trống)

z < z

ps < ps
ps < ps

q < p
p < q

p < q
q < p

a < b
b < c
c < a

d < a
d < b
d < c
d < d

abcdefghijklmnopqrstuvwxyz < abcdefghijklmnopqrstuvwxyz

bolero < minuet
minuet < bolero

aa < aaaaa
a < aa
aaa < aaaa
aa < aaaa
aaaaa < aaaa
a < aaa
aaaa < aaaaa
aaa < aaaaa
a < aaaaa

g < c
a < g
b < a
c < a

g < b
a < g
b < a
c < a

g < b
a < g
b < a
c < b

g < c
a < g
b < a
c < b

geobits < geoborts
geobrits < geoborts
geology < geobits
geoborts < geology


Bất kỳ giới hạn về thời gian chạy?
Hạ cấp

@ Vɪʜᴀɴ Không có lmits.
Sở thích của Calvin

Làm thế nào để chúng ta biết khi đầu vào kết thúc? Có dòng trống hay cái gì không?
Hannes Karppila

@Đúng. Bạn có thể giả sử có một dòng mới.
Sở thích của Calvin

Câu trả lời:


4

Bình thường, 39 byte

V>1f.A<MxMLTN.pS{s=Nm%2cd).zVNjd[H\==hZ

Dùng thử trực tuyến: Trình diễn

Brute-force thông qua tất cả các hoán vị có thể (và giải thích chúng là sắp xếp), kiểm tra xem chúng có khớp với các bất đẳng thức hay không và gán cho chúng các giá trị 1, 2, ...., n.

Giải trình

f.A<MxMLTN.pS{s=Nm%2cd).z  
                 m     .z  map each input line d to:
                    cd)       split d by spaces
                  %2          and remove the second element
               =N          save this list of pairs to N
              s            combine these pairs to a big list of variable names
             {             set (remove duplicates)
          .pS              generate all permutations
f                          filter for permutations T, which satisfy:
     xMLTN                    replace each variable in N by their index in T
 .A<M                         check if each pair is ascending

V>1...VNjd[H\==hZ          implicit: Z = 0
 >1                        remove all but the last filtered permutation (if any)
V                          for each permutation N in ^ (runs zero times or once):
      VN                      for each variable H in N:
          [                      generate a list containing:
           H                        H
            \=                      "="
              =hZ                   Z incremented by 1 (and update Z)
        jd                       join this list by spaces and print

3

CJam ( 53 52 49 byte)

qS-N/'<f/:A:|e!{A{1$1$&=!},!*},:ee{()" = "\N}f%1<

Bản demo trực tuyến

Đây brute-lực lượng tất cả các hoán vị của các thẻ riêng biệt, lọc đối với những bài tập của các con số 0để n-1mà tuân theo tất cả các trở ngại, và sau đó định dạng chúng, incrementing các con số, và những món quà đầu tiên. Điều này là chắc chắn để tìm một giải pháp nếu có, bởi vì về cơ bản nó là một loại cấu trúc liên kết.

Cảm ơn Reto Koradi cho 3 ký tự và Martin Büttner cho 1.


@RetoKoradi, doh! Thật.
Peter Taylor

2

Toán học, 83 byte

Quiet@Check[Equal@@@FindInstance[Join[#,#>0&/@(v=Sequence@@@#)],v,Integers][[1]],]&

Đưa đầu vào như một danh sách bất bình đẳng. Hoặc là đưa ra một danh sách các bài tập hoặc Nullnếu không thể.

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.