Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Second: OOP - chain of invocations solution in Clear category for Hacker Language by kudinov.feodor
import re
class BaseParser:
node_len = 1
match = "."
@classmethod
def convert(cls, line):
return line
@classmethod
def check(cls, line):
return re.match("^" + cls.match, line)
@classmethod
def parse(cls, line):
if cls.check(line):
return cls.convert(line[:cls.node_len]), line[cls.node_len:]
return "", line
class SpecSymbParser(BaseParser):
node_len = 1
match = "[.:!?@$%]"
class DateParser(BaseParser):
node_len = 10
match = "\d{2}\.\d{2}\.\d{4}"
class TimeParser(BaseParser):
node_len = 10
match = "\d{2}\:\d{2}"
class SpaceParser(BaseParser):
node_len = 7
match = "1000000"
@classmethod
def convert(cls, line):
return " "
class CharParser(BaseParser):
node_len = 7
match = "[01]{7}"
@classmethod
def convert(cls, line):
return chr(int(line, 2))
class HackerLanguage:
msg = ""
parsers = [SpecSymbParser,
SpaceParser,
DateParser,
TimeParser,
CharParser]
def encode(self, char):
if char == " ":
return "1000000"
elif not char.isalpha():
return char
return bin(ord(char))[2:]
def write(self, msg):
self.msg += msg
def read(self, msg):
res = []
while msg:
for p in self.parsers:
item, msg = p.parse(msg)
item and res.append(item)
return "".join(res)
def delete(self, count):
self.msg = self.msg[:-count]
def send(self):
return "".join(self.encode(i) for i in self.msg)
Oct. 14, 2023
Comments: