04_angelcin_zapis
This commit is contained in:
		
							parent
							
								
									fd4a954d41
								
							
						
					
					
						commit
						39771d36ce
					
				@ -8,10 +8,10 @@ def dolzina_ovir(vrstica):
 | 
			
		||||
def stevilo_ovir(vrstica):
 | 
			
		||||
    count = 0
 | 
			
		||||
    ovira = False
 | 
			
		||||
 | 
			
		||||
    for char in vrstica:
 | 
			
		||||
        if char == "#":
 | 
			
		||||
            if not ovira:
 | 
			
		||||
                ovira = True
 | 
			
		||||
            ovira = True
 | 
			
		||||
        elif ovira:
 | 
			
		||||
            count += 1
 | 
			
		||||
            ovira = False
 | 
			
		||||
@ -55,7 +55,7 @@ def pretvori_zemljevid(vrstice):
 | 
			
		||||
        for ovira in pretvori_vrstico(vrstica):
 | 
			
		||||
            ovire.append((*ovira, y))
 | 
			
		||||
    return ovire
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
def izboljsave(prej, potem):
 | 
			
		||||
    nove_ovire = []
 | 
			
		||||
    star_zemljevid = pretvori_zemljevid(prej)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										21
									
								
								04_angelcin_zapis/naloga.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								04_angelcin_zapis/naloga.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
import itertools
 | 
			
		||||
 | 
			
		||||
def koordinate(s):
 | 
			
		||||
    (start, *dolzina) = s.split("-")
 | 
			
		||||
    return (int(start), int(start) + len(dolzina) - 1)
 | 
			
		||||
 | 
			
		||||
def vrstica(s):
 | 
			
		||||
    (stev, *ovire) = s.strip().split()
 | 
			
		||||
    return list(map(lambda ovira: (*koordinate(ovira), int(stev[1:-1])), ovire))
 | 
			
		||||
 | 
			
		||||
def preberi(s):
 | 
			
		||||
    return list(itertools.chain(*map(vrstica, s.splitlines())))
 | 
			
		||||
 | 
			
		||||
def intervali(s):
 | 
			
		||||
    return list(map(lambda x: str(x[0]) + "-" * (x[1] - x[0] + 1), s))
 | 
			
		||||
 | 
			
		||||
def zapisi_vrstico(y, xs):
 | 
			
		||||
    return " ".join(["(" + str(y) + ")", *intervali(xs)])
 | 
			
		||||
 | 
			
		||||
def zapisi(ovire):
 | 
			
		||||
    return "\n".join(map(lambda a: zapisi_vrstico(a[0], map(lambda b: (b[0], b[1]), sorted(a[1]))), itertools.groupby(sorted(ovire, key=lambda x: x[2]), lambda x: x[2])))
 | 
			
		||||
							
								
								
									
										52
									
								
								04_angelcin_zapis/naloga_test.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								04_angelcin_zapis/naloga_test.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
import unittest
 | 
			
		||||
from naloga import *
 | 
			
		||||
 | 
			
		||||
class Obvezna(unittest.TestCase):
 | 
			
		||||
    def test_koordinate(self):
 | 
			
		||||
        self.assertEqual((3, 4), koordinate("3--"))
 | 
			
		||||
        self.assertEqual((5, 10), koordinate("5------"))
 | 
			
		||||
        self.assertEqual((123, 123), koordinate("123-"))
 | 
			
		||||
        self.assertEqual((123, 125), koordinate("123---"))
 | 
			
		||||
 | 
			
		||||
    def test_vrstica(self):
 | 
			
		||||
        self.assertEqual([(1, 3, 4), (5, 11, 4), (15, 15, 4)], vrstica("  (4) 1---  5------- 15-"))
 | 
			
		||||
        self.assertEqual([(989, 991, 1234)], vrstica("(1234) 989---"))
 | 
			
		||||
 | 
			
		||||
    def test_preberi(self):
 | 
			
		||||
        self.assertEqual([(5, 6, 4),
 | 
			
		||||
                          (90, 100, 13), (5, 8, 13), (19, 21, 13),
 | 
			
		||||
                          (9, 11, 5), (19, 20, 5), (30, 34, 5),
 | 
			
		||||
                          (9, 11, 4),
 | 
			
		||||
                          (22, 25, 13), (17, 19, 13)], preberi(
 | 
			
		||||
""" (4) 5--
 | 
			
		||||
(13) 90-----------   5---- 19---
 | 
			
		||||
 (5) 9---           19--   30-----
 | 
			
		||||
(4)           9---
 | 
			
		||||
(13)         22---- 17---
 | 
			
		||||
"""))
 | 
			
		||||
 | 
			
		||||
    def test_intervali(self):
 | 
			
		||||
        self.assertEqual(["6-----", "12-", "20---", "98-----"], intervali([(6, 10), (12, 12), (20, 22), (98, 102)]))
 | 
			
		||||
 | 
			
		||||
    def test_zapisi_vrstico(self):
 | 
			
		||||
        self.assertEqual("(5) 6----- 12-", zapisi_vrstico(5, [(6, 10), (12, 12)]).rstrip("\n"))
 | 
			
		||||
        self.assertEqual("(8) 6----- 12- 20--- 98-----", zapisi_vrstico(8, [(6, 10), (12, 12), (20, 22), (98, 102)]).rstrip("\n"))
 | 
			
		||||
        self.assertEqual("(8) 6----- 12- 20--- 98-----", zapisi_vrstico(8, [(6, 10), (12, 12), (20, 22), (98, 102)]).rstrip("\n"))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Dodatna(unittest.TestCase):
 | 
			
		||||
    def test_zapisi(self):
 | 
			
		||||
        ovire = [(5, 6, 4),
 | 
			
		||||
          (90, 100, 13), (5, 8, 13), (9, 11, 13),
 | 
			
		||||
          (9, 11, 5), (19, 20, 5), (30, 34, 5),
 | 
			
		||||
          (9, 11, 4),
 | 
			
		||||
          (22, 25, 13), (17, 19, 13)]
 | 
			
		||||
        kopija_ovir = ovire.copy()
 | 
			
		||||
        self.assertEqual("""(4) 5-- 9---
 | 
			
		||||
(5) 9--- 19-- 30-----
 | 
			
		||||
(13) 5---- 9--- 17--- 22---- 90-----------""", zapisi(ovire).rstrip("\n"))
 | 
			
		||||
        self.assertEqual(ovire, kopija_ovir, "Pusti seznam `ovire` pri miru")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    unittest.main()
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user