SpiralString/disfavour
SpiralString/warnachinka
n1 n
2class Spiral:1class Spiral:
n3 n
4    def right(self, number, index):2    def right(self, number, index):
5        for i in range(number):3        for i in range(number):
6            if self.slen < index + i + 1:4            if self.slen < index + i + 1:
7                return5                return
8            self.curr[0] += 16            self.curr[0] += 1
9            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]7            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]
10        return self.up(number + 1, index + number)8        return self.up(number + 1, index + number)
119
12    def up(self, number, index):10    def up(self, number, index):
13        for i in range(number):11        for i in range(number):
14            if self.slen < index + i + 1:12            if self.slen < index + i + 1:
15                return13                return
16            self.curr[1] += 114            self.curr[1] += 1
17            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]15            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]
18        return self.left(number + 1, index + number)16        return self.left(number + 1, index + number)
1917
20    def left(self, number, index):18    def left(self, number, index):
21        for i in range(number):19        for i in range(number):
22            if self.slen < index + i + 1:20            if self.slen < index + i + 1:
23                return21                return
24            self.curr[0] -= 122            self.curr[0] -= 1
25            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]23            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]
26        return self.down(number + 1, index + number)24        return self.down(number + 1, index + number)
2725
28    def down(self, number, index):26    def down(self, number, index):
29        for i in range(number):27        for i in range(number):
30            if self.slen < index + i + 1:28            if self.slen < index + i + 1:
31                return29                return
32            self.curr[1] -= 130            self.curr[1] -= 1
33            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]31            self.art[self.curr[1]][self.curr[0]] = self.s[index + i]
34        return self.right(number + 1, index + number)32        return self.right(number + 1, index + number)
3533
36    def __init__(self, str):34    def __init__(self, str):
37        self.d = {}35        self.d = {}
38        for item in str:36        for item in str:
39            if item in self.d:37            if item in self.d:
40                self.d[item] += 138                self.d[item] += 1
41            else:39            else:
42                self.d[item] = 140                self.d[item] = 1
4341
44    def __add__(self, other):42    def __add__(self, other):
45        qwe = Spiral("")43        qwe = Spiral("")
4644
47        a = list(self.d.keys())45        a = list(self.d.keys())
48        for item in other.d.keys():46        for item in other.d.keys():
49            if item not in a:47            if item not in a:
50                a.append(item)48                a.append(item)
5149
52        for key in a:50        for key in a:
53            if key in self.d and key in other.d:51            if key in self.d and key in other.d:
54                qwe.d[key] = self.d[key] + other.d[key]52                qwe.d[key] = self.d[key] + other.d[key]
55            elif key not in self.d:53            elif key not in self.d:
56                qwe.d[key] = other.d[key]54                qwe.d[key] = other.d[key]
57            else:55            else:
58                qwe.d[key] = self.d[key]56                qwe.d[key] = self.d[key]
59        return qwe57        return qwe
6058
61    def __sub__(self, other):59    def __sub__(self, other):
62        qwe = Spiral("")60        qwe = Spiral("")
63        for key in self.d:61        for key in self.d:
64            if key not in other.d:62            if key not in other.d:
65                qwe.d[key] = self.d[key]63                qwe.d[key] = self.d[key]
66                continue64                continue
67            if self.d[key] >= other.d[key]:65            if self.d[key] >= other.d[key]:
68                qwe.d[key] = self.d[key] - other.d[key]66                qwe.d[key] = self.d[key] - other.d[key]
69            else:67            else:
70                qwe.d[key] = 068                qwe.d[key] = 0
71        return qwe69        return qwe
7270
73    def __mul__(self, other):71    def __mul__(self, other):
74        qwe = Spiral("")72        qwe = Spiral("")
75        for key in self.d:73        for key in self.d:
76            qwe.d[key] = self.d[key] * other74            qwe.d[key] = self.d[key] * other
77        return qwe75        return qwe
7876
79    def __str__(self):77    def __str__(self):
n80 n
81        self.s = []78        self.s = []
82        for key in self.d:79        for key in self.d:
83            self.s.append(self.d[key] * key)80            self.s.append(self.d[key] * key)
84        self.s = "".join(self.s)81        self.s = "".join(self.s)
8582
86        hup = 083        hup = 0
87        hdown = 084        hdown = 0
88        lleft = 085        lleft = 0
89        lright = 086        lright = 0
90        k = 187        k = 1
91        sum = 188        sum = 1
92        self.slen = len(self.s)89        self.slen = len(self.s)
93        cur = [0, 0]90        cur = [0, 0]
9491
95        while sum < self.slen:92        while sum < self.slen:
96            cur[0] += min(k, self.slen - sum)93            cur[0] += min(k, self.slen - sum)
97            if cur[0] > lright:94            if cur[0] > lright:
98                lright = cur[0]95                lright = cur[0]
99            sum += k96            sum += k
100            if sum >= self.slen:97            if sum >= self.slen:
101                break98                break
102            k += 199            k += 1
103100
104            cur[1] += min(k, self.slen - sum)101            cur[1] += min(k, self.slen - sum)
105            if cur[1] > hup:102            if cur[1] > hup:
106                hup = cur[1]103                hup = cur[1]
107            sum += k104            sum += k
108            if sum >= self.slen:105            if sum >= self.slen:
109                break106                break
110            k += 1107            k += 1
111108
112            cur[0] -= min(k, self.slen - sum)109            cur[0] -= min(k, self.slen - sum)
113            if cur[0] < lleft:110            if cur[0] < lleft:
114                lleft = cur[0]111                lleft = cur[0]
115            sum += k112            sum += k
116            if sum >= self.slen:113            if sum >= self.slen:
117                break114                break
118            k += 1115            k += 1
119116
120            cur[1] -= min(k, self.slen - sum)117            cur[1] -= min(k, self.slen - sum)
121            if cur[1] < hdown:118            if cur[1] < hdown:
122                hdown = cur[1]119                hdown = cur[1]
123            sum += k120            sum += k
124            if sum >= self.slen:121            if sum >= self.slen:
125                break122                break
126            k += 1123            k += 1
127124
128        self.art = [[" " for _ in range(lright - lleft + 1)]125        self.art = [[" " for _ in range(lright - lleft + 1)]
129                    for __ in range(hup - hdown + 1)]126                    for __ in range(hup - hdown + 1)]
130        self.art[-hdown][-lleft] = self.s[0]127        self.art[-hdown][-lleft] = self.s[0]
131        self.curr = [-lleft, -hdown]128        self.curr = [-lleft, -hdown]
132        i = 1129        i = 1
133        index = 1130        index = 1
134131
135        self.right(i, index)            #132        self.right(i, index)            #
136133
137        self.art.reverse()134        self.art.reverse()
138135
139        GREATSTRING = ""136        GREATSTRING = ""
140        for item in self.art:137        for item in self.art:
141            GREATSTRING += "".join(item) + "\n"138            GREATSTRING += "".join(item) + "\n"
142        return GREATSTRING[:-1]139        return GREATSTRING[:-1]
143140
t144    # def __getitem__(self, item): t
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
154    def __iter__(self):141    def __iter__(self):
155        for key in self.d:142        for key in self.d:
156            for item in list(self.d[key] * key):143            for item in list(self.d[key] * key):
157                yield item144                yield item
158145
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op