Skip to content

Instantly share code, notes, and snippets.

@developer-commit
Last active January 31, 2026 18:24
Show Gist options
  • Select an option

  • Save developer-commit/22acb6da5fa51366f4d9fe2d0503a3bb to your computer and use it in GitHub Desktop.

Select an option

Save developer-commit/22acb6da5fa51366f4d9fe2d0503a3bb to your computer and use it in GitHub Desktop.
insta
"""
임베디드라 c로 작성해야 하겠지만, 귀찮은 관계로 python사용
https://www.youtube.com/watch?v=UlvbLeI7l5w&t=1s
본 영상속 장치를 만드는 영상입니다.
우리는 코드만을 시뮬레이션 할 것이고 귀찮은 관계로, 작은 형태로만 시뮬레이션 하겠습니다.
구현의 편의상 5개의 레일, 아래에서 무작위로 구슬층이 올라온다고만 가정하겠습니다. (영상에서 보면 알수 있듯 실제로도 무작위로 올라옵니다, 거기서 조건에 맞는 구슬만 내려보내는겁니다)
레일에 구슬이 다 차기전에 시간이 바뀌면 디스플레이 영역에, 미완성 된 형태로 들어갑니다.
빈 영역은 자동으로 검은구슬로 채워집니다.
실제로 만들시 레일에는 뒤집힌 형태로 들어가겠지만, 보기 편하게(제가 생각하기 귀찮은 관계로) 정방향으로 들어갑니다.
콘솔화면입니다.
tower은 올라오는 구슬층을 시뮬레이션
rails는 구슬이 떨어지는 레일을 시뮬레이션 합니다.
display는 실제 시계화면입니다.
Tower
=========
0. ⚪⚪⚪⚪⚪
1. ⚪⚪⚫⚫⚫
2. ⚫⚪⚫⚫⚪
3. ⚫⚫⚫⚫⚫
4. ⚪⚫⚫⚫⚫
=========
rails
===========
0. [⚫⚪⚪⚪⚫⚪⚪⚪⚫⚫⚫⚫⚫⚪]
1. [⚫⚪⚫⚪⚫⚫⚫⚪⚫⚫⚪⚫⚫⚫⚫⚪⚫⚫⚫⚪]
2. [⚫⚪⚫⚪⚫⚪⚪⚪⚫⚫⚫⚫⚫⚪⚪⚪⚫⚪⚪]
3. [⚫⚪⚫⚪⚫⚫⚫⚪⚫⚫⚪⚫⚫⚪⚫⚫⚫⚪⚫⚫]
4. [⚫⚪⚪⚪⚫⚪⚪⚪⚫⚫⚫⚫⚫⚪⚪⚪⚫⚪⚪⚪]
===========
⚫⚪⚪⚪⚫⚪⚪⚪⚫⚫⚫⚫⚫⚪⚪⚪⚫⚫⚪⚫
⚫⚪⚫⚪⚫⚫⚫⚪⚫⚫⚪⚫⚫⚫⚫⚪⚫⚪⚪⚫
⚫⚪⚫⚪⚫⚪⚪⚪⚫⚫⚫⚫⚫⚪⚪⚪⚫⚫⚪⚫
⚫⚪⚫⚪⚫⚫⚫⚪⚫⚫⚪⚫⚫⚪⚫⚫⚫⚫⚪⚫
⚫⚪⚪⚪⚫⚪⚪⚪⚫⚫⚫⚫⚫⚪⚪⚪⚫⚪⚪⚪
"""
import random
from datetime import datetime, timedelta
import time
#ai 생성 도트 (이것까지 짜기는 싫)
Zero = [
[0,1,1,1],
[0,1,0,1],
[0,1,0,1],
[0,1,0,1],
[0,1,1,1],
]
One = [
[0,0,1,0],
[0,1,1,0],
[0,0,1,0],
[0,0,1,0],
[0,1,1,1],
]
Two = [
[0,1,1,1],
[0,0,0,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1],
]
Three = [
[0,1,1,1],
[0,0,0,1],
[0,1,1,1],
[0,0,0,1],
[0,1,1,1],
]
Four = [
[0,1,0,1],
[0,1,0,1],
[0,1,1,1],
[0,0,0,1],
[0,0,0,1],
]
Five = [
[0,1,1,1],
[0,1,0,0],
[0,1,1,1],
[0,0,0,1],
[0,1,1,1],
]
Six = [
[0,1,1,1],
[0,1,0,0],
[0,1,1,1],
[0,1,0,1],
[0,1,1,1],
]
Seven = [
[0,1,1,1],
[0,0,0,1],
[0,0,1,0],
[0,0,1,0],
[0,0,1,0],
]
Eight = [
[0,1,1,1],
[0,1,0,1],
[0,1,1,1],
[0,1,0,1],
[0,1,1,1],
]
Nine = [
[0,1,1,1],
[0,1,0,1],
[0,1,1,1],
[0,0,0,1],
[0,1,1,1],
]
Colon = [
[0,0,0,0],
[0,0,1,0],
[0,0,0,0],
[0,0,1,0],
[0,0,0,0],
]
def now_time():
fast = [Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Colon]
now = datetime.now() + timedelta(minutes=1)
now_time_list = [int(i) if i != ":" else 10 for i in now.strftime("%H:%M")]
dots = [
[0 for _ in range(20)] for _ in range(5)
]
for i in range(5):
now_dot = fast[now_time_list[i]]
for x in range(5):
for y in range(4):
dots[x][y+i*4] = now_dot[x][y]
return dots
class beadTower:
def __init__(self):
self.beads: list = [[] for _ in range(5)]
def make_beads(self):
#0 = black, 1 = white
return [random.randint(0, 1) for _ in range(5)]
def get_beads(self):
b = self.make_beads()
self.beads.append(self.make_beads())
return self.beads.pop(0)
def __str__(self):
mtable = [ "⚫", "⚪"]
result = "Tower\n=========\n"
for idx, bead in enumerate(self.beads):
result += f"{idx}. "
result += "".join([mtable[i] for i in bead])
result += "\n"
result += "=========\n"
return result
class BeadRail:
def __init__(self):
self.rails = [[] for _ in range(5)]
def simulate_insert_beads(self, beads):
time_dot = now_time()
if len(beads) != 5:
return
for i in range(5):
x = len(self.rails[i])
if x <= 19:
if time_dot[i][x] == beads[i]:
self.rails[i].append(beads[i])
def simulate_clean_beads(self):
self.rails = [[] for _ in range(5)]
def __str__(self):
mtable = [ "⚫", "⚪"]
result = "rails\n===========\n"
for idx, rail in enumerate(self.rails):
result += f"{idx}. ["
result += "".join([mtable[i] for i in rail])
result += "]\n"
result += "===========\n"
return result
class Dispaly():
def __init__(self):
self.d = [
[0 for _ in range(20)] for _ in range(5)
]
def simulate_insert_beads_by_rails(self, rails):
#뒤집혀야 하는거 고려 안함
for i in range(5):
for j in range(20):
try:
self.d[i][j] = rails[i][j]
except:
#rail이 안채워질수도 있
pass
def __str__(self):
mtable = [ "⚫", "⚪"]
result = ""
for rail in self.d:
result += "".join([mtable[i] for i in rail])
result += "\n"
return result
import sys
import os
def redraw(view: str):
os.system("clear")
sys.stdout.write(view)
sys.stdout.flush()
def main():
bead_tower = beadTower()
bead_rail = BeadRail()
display = Dispaly()
nowtime = datetime.now().strftime("%H:%M")
while True:
new_nowtime = datetime.now().strftime("%H:%M")
if nowtime != new_nowtime:
display.simulate_insert_beads_by_rails(bead_rail.rails)
bead_rail.simulate_clean_beads()
nowtime = new_nowtime
else:
beads = bead_tower.get_beads()
time.sleep(0.5)
bead_rail.simulate_insert_beads(beads)
view = f"{bead_tower}\n{bead_rail}\n{display}"
redraw(view)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment