การแก้ปัญหาอสมการน้อยกว่าด้วยจำนวนเต็มบวก


16

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในรายการที่ไม่ว่างของความไม่เท่าเทียมกันทางคณิตศาสตร์ที่ใช้ตัวดำเนินการน้อยกว่า ( <) แต่ละบรรทัดในรายการจะมีแบบฟอร์ม

[variable] < [variable]

โดยที่ a [variable]อาจเป็นสตริงที่ไม่มีข้อยกเว้นของอักขระ az ตัวพิมพ์เล็ก เช่นเดียวกับในคณิตศาสตร์และการโปรแกรมปกติตัวแปรที่มีชื่อเหมือนกันจะเหมือนกัน

หากจำนวนเต็มบวกสามารถกำหนดให้กับตัวแปรแต่ละตัวเพื่อให้ความไม่เท่าเทียมกันทั้งหมดเป็นจริงได้ให้พิมพ์หรือส่งกลับรายการของตัวแปรด้วยการกำหนดดังกล่าว แต่ละบรรทัดในรายการนี้ควรมีแบบฟอร์ม

[variable] = [positive integer]

และตัวแปรทั้งหมดจะต้องเกิดขึ้นหนึ่งครั้งในลำดับใด ๆ

โปรดทราบว่าอาจมีวิธีแก้ปัญหาจำนวนเต็มบวกที่เป็นไปได้จำนวนมากสำหรับชุดของความไม่เท่าเทียมกัน หนึ่งในนั้นคือเอาต์พุตที่ถูกต้อง

หากไม่มีวิธีแก้ปัญหาความไม่เท่าเทียมกันก็ไม่ควรเอาท์พุทอะไรเลยหรือส่งออกค่าที่ผิดพลาด (ขึ้นอยู่กับคุณ)

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

ตัวอย่าง

หากอินพุตถูก

mouse < cat
mouse < dog

จากนั้นทั้งหมดเหล่านี้จะเป็นผลลัพธ์ที่ถูกต้อง:

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

หากอินพุตถูก

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

จากนั้นจึงไม่สามารถทำการกำหนดได้เนื่องจากมันลดลงไปrickon < rickonดังนั้นจึงไม่มีเอาต์พุตหรือเอาต์พุตที่ผิดพลาด

ตัวอย่างเพิ่มเติมพร้อมโซลูชัน:

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

ตัวอย่างเพิ่มเติมโดยไม่มีวิธีแก้ไข: (คั่นด้วยบรรทัดว่าง)

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


ข้อ จำกัด ใด ๆ บนรันไทม์?
Downgoat

@ Vɪʜᴀɴไม่ lmits
งานอดิเรกของ Calvin

เราจะรู้ได้อย่างไรว่าเมื่ออินพุตสิ้นสุดลง? มีบรรทัดว่างเปล่าหรือเปล่า
Hannes Karppila

@ใช่. คุณสามารถสันนิษฐานได้ว่ามีบรรทัดใหม่ต่อท้าย
งานอดิเรกของ Calvin

คำตอบ:


4

Pyth, 39 ไบต์

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

ลองใช้งานออนไลน์: การสาธิต

กำลังดุร้ายผ่านการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมด (และแปลความหมายพวกมันเป็นการเรียงลำดับ) ตรวจสอบว่าตรงกับความไม่เท่าเทียมกันและกำหนดค่า1, 2, ...., nเหล่านั้น

คำอธิบาย

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 ไบต์)

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

การสาธิตออนไลน์

นี้เดรัจฉานกองกำลังพีชคณิตทั้งหมดของสัญญาณที่แตกต่างกันสำหรับการมอบหมายงานการกรองผู้ที่ตัวเลข0เพื่อn-1ที่เชื่อฟังทั้งหมดของข้อ จำกัด และจากนั้นรูปแบบพวกเขาการเพิ่มตัวเลขและของขวัญเป็นคนแรก นี่เป็นวิธีการแก้ปัญหาที่แน่นอนหากมีอย่างใดอย่างหนึ่งเพราะมันเป็นโทโพโลยีแบบเรียงลำดับ

ขอบคุณReto Koradiสำหรับ 3 ตัวอักษรและMartin Büttnerสำหรับ 1


@RetoKoradi, doh! จริง
Peter Taylor

2

Mathematica, 83 ไบต์

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

รับอินพุตเป็นรายการของความไม่เท่าเทียมกัน อาจแสดงรายการของการมอบหมายหรือNullเป็นไปไม่ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.