Created
August 12, 2022 21:28
-
-
Save ryaminal/9c1df6b8772c3eaf160a6ada8670ecd4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from typing import Optional | |
class Feed: | |
max = None | |
min = None | |
recent = -1 | |
data_map = {} | |
def ingest(self, timestamp: int, price: Optional[float] = None): | |
if price is None: | |
if self.data_map.get(timestamp) is not None: | |
del self.data_map[timestamp] | |
self.max = None | |
self.min = None | |
for _, v in self.data_map.items(): | |
if self.max is None: | |
self.max = v | |
if self.min is None: | |
self.min = v | |
if v < self.min: | |
self.min = v | |
if v > self.max: | |
self.max = v | |
else: | |
if timestamp >= self.recent: | |
self.recent = timestamp | |
self.data_map[timestamp] = price | |
if self.max is None and self.min is None: | |
self.max = self.min = price | |
self.max = max(self.max, price) | |
self.min = min(self.min, price) | |
def get_max_min_recent(self): | |
return (self.max, self.min, self.data_map.get(self.recent)) | |
f = Feed() | |
print(f.get_max_min_recent()) | |
f.ingest(123, 0.0) | |
print(f.get_max_min_recent()) | |
f.ingest(1234, 123.00) | |
print(f.get_max_min_recent()) | |
f.ingest(12345, 23.00) | |
print(f.get_max_min_recent()) | |
f.ingest(123) | |
print(f.get_max_min_recent()) | |
f.ingest(1234, 11123.00) | |
print(f.get_max_min_recent()) | |
f.ingest(123456, 777.00) | |
print(f.get_max_min_recent()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment