SpiralString/warnachinka
SpiralString/disfavour
nn1
1class Spiral:2class Spiral:
nn3
2    def right(self, number, index):4    def right(self, number, index):
3        for i in range(number):5        for i in range(number):
4            if self.slen < index + i + 1:6            if self.slen < index + i + 1:
5                return7                return
6            self.curr[0] += 18            self.curr[0] += 1
7            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]9            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]
8        return self.up(number + 1, index + number)10        return self.up(number + 1, index + number)
911
10    def up(self, number, index):12    def up(self, number, index):
11        for i in range(number):13        for i in range(number):
12            if self.slen < index + i + 1:14            if self.slen < index + i + 1:
13                return15                return
14            self.curr[1] += 116            self.curr[1] += 1
15            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]17            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]
16        return self.left(number + 1, index + number)18        return self.left(number + 1, index + number)
1719
18    def left(self, number, index):20    def left(self, number, index):
19        for i in range(number):21        for i in range(number):
20            if self.slen < index + i + 1:22            if self.slen < index + i + 1:
21                return23                return
22            self.curr[0] -= 124            self.curr[0] -= 1
23            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]25            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]
24        return self.down(number + 1, index + number)26        return self.down(number + 1, index + number)
2527
26    def down(self, number, index):28    def down(self, number, index):
27        for i in range(number):29        for i in range(number):
28            if self.slen < index + i + 1:30            if self.slen < index + i + 1:
29                return31                return
30            self.curr[1] -= 132            self.curr[1] -= 1
31            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]33            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]
32        return self.right(number + 1, index + number)34        return self.right(number + 1, index + number)
3335
34    def __init__(self, str):36    def __init__(self, str):
35        self.d = {}37        self.d = {}
36        for item in str:38        for item in str:
37            if item in self.d:39            if item in self.d:
38                self.d[item] += 140                self.d[item] += 1
39            else:41            else:
40                self.d[item] = 142                self.d[item] = 1
4143
42    def __add__(self, other):44    def __add__(self, other):
43        qwe = Spiral("")45        qwe = Spiral("")
4446
45        a = list(self.d.keys())47        a = list(self.d.keys())
46        for item in other.d.keys():48        for item in other.d.keys():
47            if item not in a:49            if item not in a:
48                a.append(item)50                a.append(item)
4951
50        for key in a:52        for key in a:
51            if key in self.d and key in other.d:53            if key in self.d and key in other.d:
52                qwe.d[key] = self.d[key] + other.d[key]54                qwe.d[key] = self.d[key] + other.d[key]
53            elif key not in self.d:55            elif key not in self.d:
54                qwe.d[key] = other.d[key]56                qwe.d[key] = other.d[key]
55            else:57            else:
56                qwe.d[key] = self.d[key]58                qwe.d[key] = self.d[key]
57        return qwe59        return qwe
5860
59    def __sub__(self, other):61    def __sub__(self, other):
60        qwe = Spiral("")62        qwe = Spiral("")
61        for key in self.d:63        for key in self.d:
62            if key not in other.d:64            if key not in other.d:
63                qwe.d[key] = self.d[key]65                qwe.d[key] = self.d[key]
64                continue66                continue
65            if self.d[key] >= other.d[key]:67            if self.d[key] >= other.d[key]:
66                qwe.d[key] = self.d[key] - other.d[key]68                qwe.d[key] = self.d[key] - other.d[key]
67            else:69            else:
68                qwe.d[key] = 070                qwe.d[key] = 0
69        return qwe71        return qwe
7072
71    def __mul__(self, other):73    def __mul__(self, other):
72        qwe = Spiral("")74        qwe = Spiral("")
73        for key in self.d:75        for key in self.d:
74            qwe.d[key] = self.d[key] * other76            qwe.d[key] = self.d[key] * other
75        return qwe77        return qwe
7678
77    def __str__(self):79    def __str__(self):
nn80
78        self.s = []81        self.s = []
79        for key in self.d:82        for key in self.d:
80            self.s.append(self.d[key] * key)83            self.s.append(self.d[key] * key)
81        self.s = "".join(self.s)84        self.s = "".join(self.s)
8285
83        hup = 086        hup = 0
84        hdown = 087        hdown = 0
85        lleft = 088        lleft = 0
86        lright = 089        lright = 0
87        k = 190        k = 1
88        sum = 191        sum = 1
89        self.slen = len(self.s)92        self.slen = len(self.s)
90        cur = [0, 0]93        cur = [0, 0]
9194
92        while sum < self.slen:95        while sum < self.slen:
93            cur[0] += min(k, self.slen - sum)96            cur[0] += min(k, self.slen - sum)
94            if cur[0] > lright:97            if cur[0] > lright:
95                lright = cur[0]98                lright = cur[0]
96            sum += k99            sum += k
97            if sum >= self.slen:100            if sum >= self.slen:
98                break101                break
99            k += 1102            k += 1
100103
101            cur[1] += min(k, self.slen - sum)104            cur[1] += min(k, self.slen - sum)
102            if cur[1] > hup:105            if cur[1] > hup:
103                hup = cur[1]106                hup = cur[1]
104            sum += k107            sum += k
105            if sum >= self.slen:108            if sum >= self.slen:
106                break109                break
107            k += 1110            k += 1
108111
109            cur[0] -= min(k, self.slen - sum)112            cur[0] -= min(k, self.slen - sum)
110            if cur[0] < lleft:113            if cur[0] < lleft:
111                lleft = cur[0]114                lleft = cur[0]
112            sum += k115            sum += k
113            if sum >= self.slen:116            if sum >= self.slen:
114                break117                break
115            k += 1118            k += 1
116119
117            cur[1] -= min(k, self.slen - sum)120            cur[1] -= min(k, self.slen - sum)
118            if cur[1] < hdown:121            if cur[1] < hdown:
119                hdown = cur[1]122                hdown = cur[1]
120            sum += k123            sum += k
121            if sum >= self.slen:124            if sum >= self.slen:
122                break125                break
123            k += 1126            k += 1
124127
125        self.art = [[" " for _ in range(lright - lleft + 1)]128        self.art = [[" " for _ in range(lright - lleft + 1)]
126                    for __ in range(hup - hdown + 1)]129                    for __ in range(hup - hdown + 1)]
127        self.art[-hdown][-lleft] = self.s[0]130        self.art[-hdown][-lleft] = self.s[0]
128        self.curr = [-lleft, -hdown]131        self.curr = [-lleft, -hdown]
129        i = 1132        i = 1
130        index = 1133        index = 1
131134
132        self.right(i, index)            #135        self.right(i, index)            #
133136
134        self.art.reverse()137        self.art.reverse()
135138
136        GREATSTRING = ""139        GREATSTRING = ""
137        for item in self.art:140        for item in self.art:
138            GREATSTRING += "".join(item) + "\n"141            GREATSTRING += "".join(item) + "\n"
139        return GREATSTRING[:-1]142        return GREATSTRING[:-1]
140143
tt144    # def __getitem__(self, item):
145    #    for key in self.d:
146    #       for item in list(self.d[key] * key):
147    #            yield item
148        """s = []
149        for key in self.d:
150            s.append(self.d[key] * key)
151        s = "".join(s)
152        return s[item]"""
153
141    def __iter__(self):154    def __iter__(self):
142        for key in self.d:155        for key in self.d:
143            for item in list(self.d[key] * key):156            for item in list(self.d[key] * key):
144                yield item157                yield item
145158
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op