>>105721539 (OP)from __future__ import annotations
import itertools
import logging
from dataclasses import dataclass, field
from typing import Callable, Iterable, List
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
datefmt="%H:%M:%S",
)
Duplicator = Callable[[str, int], int] # (letter, index) how many times to keep
@dataclass
class LetterProcessor:
letters: List[str]
duplicator: Duplicator = field(
default_factory=lambda: (lambda letter, idx: 2 if idx == 2 else 1)
)
def __call__(self) -> str: # noqa: D401
logging.debug("Starting processing of %s", self.letters)
indexed: Iterable[tuple[str, int]] = enumerate(self.letters)
repeated: Iterable[str] = itertools.chain.from_iterable(
itertools.repeat(letter, self.duplicator(letter, idx))
for idx, letter in indexed
)
result: str = "".join(repeated)
logging.info("Processed result = %s", result)
return result
if __name__ == "__main__":
letters = ["N", "I", "G", "E", "R"]
processor = LetterProcessor(letters)
final_string = processor()
print(final_string)