fork(2) download
# -*- coding: utf-8 -*-

import re
from fractions import Fraction

wyrazenie= re.compile( "{ *(-? *[0-9]*|\( *-? *[0-9]+ */ *-? *[0-9]+ *\)) *x *\+ *(-? *[0-9]*|\( *-? *[0-9]+ */ *-? *[0-9]+ *\)) *y *= *(-? *[0-9]+|-? *[0-9]+ */ *-? *[0-9]+)" )

def liczba_wymierna( napis ):
    if napis == "":
       return Fraction(1,1)
    if '/' in napis:
       a,b = map(int,napis.replace('(','').replace(')','').split('/'))
       if b == 0:
         raise RuntimeError, napis + " nie jest poprawną liczbą wymierną!"
       return Fraction(a,b)
    return Fraction(int(napis),1)

def rownanie( linia ):
	r = wyrazenie.match( linia )
	if not r:
	    raise RuntimeError, "Wyrażenie " + repr(linia) + " jest niepoprawne!"
	return map( liczba_wymierna, r.groups() )

def rozwiarz( r1, r2 ):
    a1,b1,c1 = r1
    a2,b2,c2 = r2
    
    w = a1*b2 - b1*a2 
    w1 = c1*b2 - b1*c2
    w2 = a1*c2 - c1*a2
    
    if w == 0:
       if w1 == 0 and w2 == 0:
          raise RuntimeError, "Rownanie ma nieskończenie wiele roziwązań!"
       else:
          raise RuntimeError, "Rownanie jest nieoznaczone!"
    
    return w1/w, w2/w
  

x,y = rozwiarz( rownanie( raw_input() ), rownanie( raw_input() ) )

def napis_liczby_wymiernej( f ):
    if f.denominator == 1:
       return str(f.numerator)
    return str(f.numerator)+'/'+str(f.denominator)

print "x= ", napis_liczby_wymiernej(x)
print "y= ", napis_liczby_wymiernej(y)
Success #stdin #stdout 0.08s 12440KB
stdin
{x+y= 34
{2x + (1/2)y = 47
stdout
x=  20
y=  14