Skip to content

Instantly share code, notes, and snippets.

@ryaminal
Created August 12, 2022 21:28
Show Gist options
  • Save ryaminal/9c1df6b8772c3eaf160a6ada8670ecd4 to your computer and use it in GitHub Desktop.
Save ryaminal/9c1df6b8772c3eaf160a6ada8670ecd4 to your computer and use it in GitHub Desktop.
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