Escriba un programa o función que incluya una lista no vacía de desigualdades matemáticas que utilizan el operador menor que ( <
). Cada línea en la lista tendrá la forma
[variable] < [variable]
donde a [variable]
puede ser cualquier cadena no vacía de caracteres az minúsculas. Como en matemática y programación normales, las variables con el mismo nombre son idénticas.
Si se puede asignar un entero positivo a cada variable de modo que se satisfagan todas las desigualdades, imprima o devuelva una lista de las variables con dicha asignación. Cada línea en esta lista debe tener la forma
[variable] = [positive integer]
y todas las variables deben ocurrir exactamente una vez en cualquier orden.
Tenga en cuenta que puede haber muchas posibles soluciones enteras positivas para el conjunto de desigualdades. Cualquiera de ellos es salida válida.
Si no hay soluciones para las desigualdades, entonces no genere nada o genere un valor falso (depende de usted).
El código más corto en bytes gana.
Ejemplos
Si la entrada fuera
mouse < cat
mouse < dog
entonces todos estos serían resultados válidos:
mouse = 1
cat = 2
dog = 2
mouse = 37
cat = 194
dog = 204
mouse = 2
cat = 2000000004
dog = 3
Si la entrada fuera
rickon < bran
bran < arya
arya < sansa
sansa < robb
robb < rickon
entonces no es posible la asignación porque se reduce a rickon < rickon
, por lo que no hay salida o una salida falsa.
Más ejemplos con soluciones:
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
Más ejemplos sin soluciones: (separados por líneas vacías)
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
Respuestas:
Pyth, 39 bytes
Pruébelo en línea: demostración
Fuerzas brutas a través de todas las permutaciones posibles (e interpretarlas como clasificaciones), verificar si coinciden con las desigualdades y asignarles los valores
1, 2, ...., n
.Explicación
fuente
CJam (
53 5249 bytes)Demostración en línea
Esta fuerza bruta fuerza todas las permutaciones de los distintos tokens, filtrando las asignaciones de los números.
0
a losn-1
que obedecen todas las restricciones, y luego las formatea, incrementando los números, y presenta la primera. Es seguro encontrar una solución si hay una, porque es esencialmente un tipo topológico.Gracias a Reto Koradi por 3 personajes y Martin Büttner por 1.
fuente
Mathematica, 83 bytes
Toma información como una lista de desigualdades. O genera una lista de tareas o
Null
si es imposible.fuente