양의 정수로 부등식 미만의 해를 구함


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ɪʜᴀɴ 노 리밋.
Calvin 's Hobbies

입력이 언제 종료되는지 어떻게 알 수 있습니까? 빈 줄이 있습니까?
Hannes Karppila

@예. 후행 줄 바꿈이 있다고 가정 할 수 있습니다.
Calvin 's Hobbies

답변:


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<

온라인 데모

이 짐승 - 힘 별개의 토큰의 모든 순열, 숫자의 그 과제에 대한 필터링은 0n-1있는 제약 조건을 모두 준수하고 숫자 및 선물 첫 번째를 증가, 그 형식을 지정합니다. 본질적으로 위상 정렬이기 때문에 솔루션이있는 경우 솔루션을 찾을 수 있습니다.

3 개의 문자를위한 Reto Koradi 와 1을위한 Martin Büttner 에게 감사합니다 .


@RetoKoradi,도! 과연.
피터 테일러

2

수학, 83 바이트

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

불평등 목록으로 입력을받습니다. 과제 목록을 출력하거나 Null불가능한 경우

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.