Pozitif tamsayılarla eşitsizliklerin altında çözümleme


16

Daha küçük olan işlecini ( ) kullanan matematiksel eşitsizliklerin boş olmayan bir listesini alan bir program veya işlev yazın <. Listedeki her satırın biçimi

[variable] < [variable]

burada a [variable], küçük harfli az karakterlerin herhangi bir boş olmayan dizesi olabilir. Normal matematik ve programlamada olduğu gibi, aynı ada sahip değişkenler aynıdır.

Bir Eğer pozitif tamsayı her değişken tür atanabilir tüm eşitsizlikler karşılanmadan, sonra yazdırmak veya böyle bir atama ile değişkenlerin listesini döndürür. Bu listedeki her satırın biçimi olmalıdır

[variable] = [positive integer]

ve tüm değişkenler herhangi bir sırada tam olarak bir kez olmalıdır.

Eşitsizlikler kümesine birçok olası pozitif tamsayı çözümü olabileceğini unutmayın. Bunlardan herhangi biri geçerli çıktıdır.

Eşitsizliklere çözüm bulunmuyorsa, ya hiçbir şey çıkarmayın ya da sahte bir değer çıkarmayın (bu size bağlıdır).

Bayt cinsinden en kısa kod kazanır.

Örnekler

Giriş olsaydı

mouse < cat
mouse < dog

tüm bunlar geçerli çıktılar olacaktır:

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

Giriş olsaydı

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

o zaman aşağı kaynar çünkü atama mümkün değildir rickon < rickon, bu yüzden ya çıktı ya da bir sahte çıktı yoktur.

Çözümlerle daha fazla örnek:

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ümü olmayan daha fazla örnek: (boş çizgilerle ayrılmış)

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


Çalışma süresinde herhangi bir sınır var mı?
Downgoat

@ Vɪʜᴀɴ lmits yok.
Calvin'in Hobileri

Girişin ne zaman sona erdiğini nasıl biliyoruz? Boş çizgi falan var mı?
Hannes Karppila

@Evet. Sonunda bir satırsonu olduğunu varsayabilirsiniz.
Calvin'in Hobileri

Yanıtlar:


4

Pyth, 39 bayt

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

Çevrimiçi deneyin: Gösteri

Kaba kuvvetler olası tüm permütasyonlar aracılığıyla (ve bunları sıralama olarak yorumlayın), eşitsizliklerle eşleşip eşleşmediklerini kontrol edin ve değerleri atayın 1, 2, ...., n.

açıklama

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 bayt)

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

Çevrimiçi demo

Bu kaba kuvvetleri farklı jeton tüm permütasyon, sayıların bu atamalar için filtreleme 0için n-1olan kısıtlamalar tüm uymak ve sayı ve hediye ilk arttırılarak şekilde biçimlendirir. Bu varsa bir çözüm bulmak kesindir, çünkü aslında topolojik bir çeşittir.

3 karakter için Reto Koradi ve 1 için Martin Büttner'e teşekkürler .


@RetoKoradi, doh! Aslında.
Peter Taylor

2

Mathematica, 83 bayt

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

Girdileri eşitsizlikler listesi olarak alır. Ya bir ödev listesi çıkarır ya Nullda imkansızsa.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.