Napisz program lub funkcję, która pobierze niepustą listę matematycznych nierówności, które używają operatora mniej niż ( <
). Każda linia na liście będzie miała formę
[variable] < [variable]
gdzie a [variable]
może być dowolnym niepustym ciągiem małych liter az. Podobnie jak w normalnej matematyce i programowaniu zmienne o tej samej nazwie są identyczne.
Jeśli do każdej zmiennej można przypisać dodatnią liczbę całkowitą, tak aby wszystkie nierówności zostały spełnione, wydrukuj lub zwróć listę zmiennych z takim przypisaniem. Każdy wiersz na tej liście powinien mieć formę
[variable] = [positive integer]
i wszystkie zmienne muszą wystąpić dokładnie raz w dowolnej kolejności.
Zauważ, że może istnieć wiele możliwych rozwiązań dodatnich liczb całkowitych dla zestawu nierówności. Każdy z nich jest prawidłowym wyjściem.
Jeśli nie ma rozwiązania nierówności, to albo nic nie wypisuj, albo wypisz wartość fałszu (to zależy od ciebie).
Najkrótszy kod w bajtach wygrywa.
Przykłady
Jeśli dane wejściowe były
mouse < cat
mouse < dog
wtedy wszystkie z nich byłyby prawidłowymi danymi wyjściowymi:
mouse = 1
cat = 2
dog = 2
mouse = 37
cat = 194
dog = 204
mouse = 2
cat = 2000000004
dog = 3
Jeśli dane wejściowe były
rickon < bran
bran < arya
arya < sansa
sansa < robb
robb < rickon
wtedy żadne przypisanie nie jest możliwe, ponieważ sprowadza się do rickon < rickon
, więc albo nie ma wyjścia, ani wyjścia fałszywego.
Więcej przykładów z rozwiązaniami:
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
Więcej przykładów bez rozwiązań: (oddzielone pustymi liniami)
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
Odpowiedzi:
Pyth, 39 bajtów
Wypróbuj online: demonstracja
Brute-force przez wszystkie możliwe permutacje (i interpretuj je jako sortowanie), sprawdź, czy pasują do nierówności i przypisz im wartości
1, 2, ...., n
.Wyjaśnienie
źródło
CJam (
53 5249 bajtów)Demo online
To brutalne wymusza wszystkie permutacje różnych tokenów, filtrując te przypisania liczb
0
don-1
których przestrzegać wszystkich ograniczeń, a następnie formatuje je, zwiększając numery i prezentuje pierwszy. Z pewnością znajdzie to rozwiązanie, jeśli takie istnieje, ponieważ jest to zasadniczo rodzaj topologiczny.Podziękowania dla Reto Koradi za 3 znaki i Martina Büttnera za 1.
źródło
Mathematica, 83 bajty
Pobiera dane wejściowe jako listę nierówności. Albo wyświetla listę zadań, albo
Null
jeśli jest to niemożliwe.źródło