online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
class TStr: def __init__(self, chars = ()) -> None: self.chars = chars if type(chars) == tuple else tuple(chars) def __len__(self) -> int: return len(self.chars) def __str__(self) -> str: return ''.join(self.chars) def __repr__(self) -> str: return f'{type(self).__name__}("{self}")' def __add__(self, s) -> 'TStr': return TStr(self.chars + s.chars) def __mul__(self, n: int) -> 'TStr': return TStr(n * self.chars) def __rmul__(self, n: int) -> 'TStr': return TStr(n * self.chars) def __eq__(self, x: object) -> bool: return self.chars == x.chars def __lt__(self, x: 'TStr') -> bool: return self.chars < x.chars def __le__(self, x: 'TStr') -> bool: return self == x or self < x def __hash__(self) -> int: return hash(self.chars) def __getitem__(self, i: int) -> 'TStr': return TStr(self.chars[i]) def find(self, x: 'TStr') -> int: return next((i for i in range(len(self) - len(x) + 1) if self[i:i + len(x)] == x), -1) def __contains__(self, x: 'TStr') -> bool: return self.find(x) >= 0 def startswith(self, prefix: 'TStr') -> bool: return self[:len(prefix)] == prefix def endswith(self, suffix: 'TStr') -> bool: return self[-len(suffix):] == suffix def replace(self, old: 'TStr', new: 'TStr') -> 'TStr': k = self.find(old) return self[:k] + new + self[k+len(old):].replace(old, new) if k >= 0 else self def join(self, sequence) -> 'TStr': res: list[str] = [] for word in sequence: if res: res.extend(self.chars) res.extend(word.chars) return TStr(tuple(res)) ''' Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ join. Π₯ΠΎΡ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄: ''' space = TStr(' ') words = [TStr('hello'), TStr('my'), TStr('dear'), TStr('friend')] print(repr(space.join(words))) print(repr(space.join([TStr('hello')]))) print(repr(space.join([]))) print(repr(TStr(':').join([TStr('hello')]*5))) ''' Output: TStr("hello my dear friend") TStr("hello") TStr("") TStr("hello:hello:hello:hello:hello") ΠœΠ΅Ρ‚ΠΎΠ΄ join Π°ΠΊΠΊΡƒΠΌΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ всС символы Π² спискС res (ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ: list[str]), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΊΠΎΠ½Ρ†Π΅ конвСртируСтся Π² tuple ΠΈ пСрСдаётся Π² конструктор TStr: Π’ΡƒΡ‚ Ρƒ нас ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ __init__ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ строку, Π° Π½Π΅ tuple. Π˜ΡΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ __init__: def __init__(self, chars: str | tuple[str] = ()) -> None: self.chars = chars if type(chars) == tuple else tuple(chars) Поясним, Π²ΠΎ врСмя исполнСния Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: space.join(words), Π² Ρ†ΠΈΠΊΠ»Π΅ for, self -- это space, sequence -- это words, Π° ch -- это элСмСнты words. Если ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ список слов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ join Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ список символов (Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ большС, Ρ‡Π΅ΠΌ сумма всСх символов Π²ΠΎ всСх словах). Π”Π°Π»Π΅Π΅ ΠΈΠ· списка Π±ΡƒΠ΄Π΅Ρ‚ создан ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° (TStr). ЀактичСски зря использовали ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ списков, вСдь Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ. МоТно Π»ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ? Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ вСрсия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ (функция yield_chars): import itertools def join(self, sequence: Iterable['TStr']) -> 'TStr': def yield_chars(): for word in sequence: yield self.chars yield word.chars return TStr(tuple( itertools.chain.from_iterable( itertools.islice( yield_chars(), 1, None) ) )) МоТно ΠΈ Π² ΠΎΠ΄Π½Ρƒ, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ, строку: def join(self, sequence: Iterable['TStr']) -> 'TStr': return TStr(tuple( itertools.chain.from_iterable( t.chars for t in itertools.islice( itertools.chain.from_iterable(zip(itertools.repeat(self), sequence)), 1, None ) ) )) ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (ΠΈΠ· str) ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ (Π² TStr) Π±Π΅Π· особых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄ΡƒΡ‚ Π±ΠΎΠ»Π΅Π΅ слоТными, Π° ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ простыми. Π§Π΅ΠΌ Π΅Ρ‰Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ строки Π² Ρ€Π°Π·Π½Ρ‹Ρ… ЯП, ΠΊΡ€ΠΎΠΌΠ΅ возмоТности ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ? Π“Π»Π°Π²Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ строк -- это ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° тСкста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π½Π° самом Π΄Π΅Π»Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ English, Π½ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Π΅ языки. Вопрос ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹ Ρ€Π°Π·Π½Ρ‹Ρ… Π°Π»Ρ„Π°Π²ΠΈΡ‚ΠΎΠ² (ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π°, китайский, ΠΈΠ²Ρ€ΠΈΡ‚) -- являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ разнятся Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… ЯП, Π΅ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Python 2 ΠΈ Python 3. Π‘ΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π²Π΅Ρ€Π½ΠΎ, строки Π² Python 2 Π½Π΅ совмСстимы сo строками Π² Python 3. '''

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue