Skip to content

Instantly share code, notes, and snippets.

@aadibajpai
Created June 23, 2019 08:11
Show Gist options
  • Save aadibajpai/44a30540a57a12673fb8374e756bba9f to your computer and use it in GitHub Desktop.
Save aadibajpai/44a30540a57a12673fb8374e756bba9f to your computer and use it in GitHub Desktop.
πŸš› πŸ₯‡ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 7️⃣ 4️⃣ 8️⃣ 8️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 6️⃣ 7️⃣ 5️⃣ 8️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 6️⃣ 5️⃣ 9️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 6️⃣ 2️⃣ 8️⃣ 5️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 6️⃣ 0️⃣ 9️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 5️⃣ 5️⃣ 0️⃣ 5️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 5️⃣ 4️⃣ 1️⃣ 7️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 4️⃣ 8️⃣ 3️⃣ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 4️⃣ 4️⃣ 5️⃣ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 3️⃣ 8️⃣ 9️⃣ 3️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 3️⃣ 9️⃣ 2️⃣ 6️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 3️⃣ 4️⃣ 3️⃣ 7️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 2️⃣ 8️⃣ 3️⃣ 3️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 2️⃣ 7️⃣ 4️⃣ 1️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 2️⃣ 5️⃣ 3️⃣ 3️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 1️⃣ 5️⃣ 0️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 1️⃣ 3️⃣ 4️⃣ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 5️⃣ 0️⃣ 3️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 5️⃣ 5️⃣ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 3️⃣ 1️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 7️⃣ 5️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 7️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 8️⃣ 9️⃣ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 8️⃣ 9️⃣ 3️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 6️⃣ 6️⃣ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 7️⃣ 4️⃣ 3️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 2️⃣ 6️⃣ 7️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 3️⃣ 4️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 2️⃣ 6️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 3️⃣ 3️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 2️⃣ 0️⃣ 8️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 2️⃣ 1️⃣ 6️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 2️⃣ 4️⃣ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 7️⃣ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 7️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 4️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 1️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 1️⃣ 3️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 1️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 6️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯ˆ 1️⃣ βœ‹
πŸ–‹πŸ’ πŸ”ΆπŸŽŒπŸš©πŸ 🍿 πŸ₯‡ πŸ“₯ πŸ₯ˆ πŸ“₯ πŸ₯‡ πŸš› πŸ₯‡ 3️⃣ 8️⃣ 9️⃣ βœ‹
πŸ“₯ πŸ₯‡ πŸ“₯ πŸ₯ˆ
πŸ€ πŸ’°πŸπŸš©πŸŽŒπŸ’ πŸ”Ά
πŸŒ“ 🎀
πŸš› πŸ₯‡ 1️⃣ βœ‹ πŸ“₯ πŸ₯‡ 🍑 🍿 πŸ₯ˆ
πŸ˜„ πŸ€ πŸ’°πŸ’ πŸ”ΆπŸŽŒπŸš©πŸ 😐
πŸš› πŸ₯‡ 9️⃣ 8️⃣ 4️⃣ 2️⃣ 6️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 7️⃣ 8️⃣ 5️⃣ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 7️⃣ 6️⃣ 0️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 7️⃣ 2️⃣ 8️⃣ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 6️⃣ 8️⃣ 1️⃣ 5️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 6️⃣ 4️⃣ 4️⃣ 3️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 6️⃣ 3️⃣ 5️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 5️⃣ 9️⃣ 3️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 4️⃣ 8️⃣ 6️⃣ 5️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 4️⃣ 9️⃣ 5️⃣ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 4️⃣ 6️⃣ 6️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 4️⃣ 4️⃣ 4️⃣ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 3️⃣ 9️⃣ 6️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 3️⃣ 7️⃣ 6️⃣ 6️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯ˆ 9️⃣ 9️⃣ βœ‹
πŸ–‹πŸ’ πŸπŸŽŒπŸ”ΆπŸš© 🍿 πŸ₯‡ πŸ“₯ πŸ₯ˆ πŸ“₯ πŸ₯‡ πŸš› πŸ₯‡ 5️⃣ 6️⃣ 8️⃣ βœ‹
πŸ“₯ πŸ₯‡ πŸ“₯ πŸ₯ˆ
πŸ€ πŸ’°πŸπŸš©πŸŽŒπŸ’ πŸ”Ά
πŸŒ“ 🎀
πŸš› πŸ₯‡ 1️⃣ βœ‹ πŸ“₯ πŸ₯‡ 🍑 🍿 πŸ₯ˆ
πŸ˜„ πŸ€ πŸ’°πŸ’ πŸπŸŽŒπŸ”ΆπŸš© 😐
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 1️⃣ 1️⃣ 4️⃣ 1️⃣ 0️⃣ 5️⃣ 8️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 1️⃣ 0️⃣ 6️⃣ 0️⃣ 2️⃣ 0️⃣ 6️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 1️⃣ 0️⃣ 3️⃣ 0️⃣ 0️⃣ 5️⃣ 5️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 9️⃣ 9️⃣ 8️⃣ 9️⃣ 6️⃣ 6️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 8️⃣ 8️⃣ 7️⃣ 9️⃣ 9️⃣ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 7️⃣ 6️⃣ 7️⃣ 0️⃣ 8️⃣ 5️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 7️⃣ 0️⃣ 7️⃣ 0️⃣ 3️⃣ 6️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 6️⃣ 5️⃣ 6️⃣ 1️⃣ 1️⃣ 1️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 4️⃣ 0️⃣ 4️⃣ 0️⃣ 9️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 1️⃣ 6️⃣ 0️⃣ 9️⃣ 2️⃣ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 1️⃣ 3️⃣ 1️⃣ 0️⃣ 1️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 1️⃣ 1️⃣ 1️⃣ 1️⃣ 0️⃣ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 0️⃣ 5️⃣ 9️⃣ 9️⃣ 2️⃣ 6️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 0️⃣ 4️⃣ 9️⃣ 9️⃣ 8️⃣ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 1️⃣ 0️⃣ 0️⃣ 0️⃣ 3️⃣ 0️⃣ 0️⃣ 4️⃣ 5️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 8️⃣ 9️⃣ 9️⃣ 9️⃣ 7️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 8️⃣ 1️⃣ 8️⃣ 5️⃣ 8️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 8️⃣ 0️⃣ 8️⃣ 1️⃣ 5️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 7️⃣ 8️⃣ 8️⃣ 4️⃣ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 6️⃣ 5️⃣ 7️⃣ 9️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 5️⃣ 7️⃣ 5️⃣ 6️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 3️⃣ 8️⃣ 3️⃣ 0️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 3️⃣ 5️⃣ 4️⃣ 2️⃣ 7️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 3️⃣ 2️⃣ 2️⃣ 8️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 3️⃣ 1️⃣ 4️⃣ 9️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 2️⃣ 7️⃣ 3️⃣ 8️⃣ 8️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 2️⃣ 6️⃣ 3️⃣ 7️⃣ 6️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 2️⃣ 3️⃣ 2️⃣ 1️⃣ 3️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 2️⃣ 1️⃣ 3️⃣ 9️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 1️⃣ 9️⃣ 1️⃣ 5️⃣ 4️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 1️⃣ 8️⃣ 0️⃣ 8️⃣ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯‡ 9️⃣ 9️⃣ 1️⃣ 6️⃣ 2️⃣ 3️⃣ 9️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸš› πŸ₯ˆ 7️⃣ 6️⃣ 5️⃣ βœ‹
πŸ–‹πŸš©πŸ’ πŸŽŒπŸ”ΆπŸ 🍿 πŸ₯‡ πŸ“₯ πŸ₯ˆ πŸ“₯ πŸ₯‡ πŸš› πŸ₯‡ 1️⃣ 0️⃣ 2️⃣ 3️⃣ βœ‹
πŸ“₯ πŸ₯‡ πŸ“₯ πŸ₯ˆ
πŸ€ πŸ’°πŸπŸš©πŸŽŒπŸ’ πŸ”Ά
πŸŒ“ 🎀
πŸš› πŸ₯‡ 1️⃣ βœ‹ πŸ“₯ πŸ₯‡ 🍑 🍿 πŸ₯ˆ
πŸ˜„ πŸ€ πŸ’°πŸš©πŸ’ πŸŽŒπŸ”ΆπŸ 😐
βŒ›
πŸ–‹πŸπŸš©πŸŽŒπŸ’ πŸ”Ά
πŸš› πŸ₯‡ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡ πŸ–‹πŸ’ πŸŽŒπŸπŸš©πŸ”Ά
πŸ€ πŸ’°πŸš©πŸ”ΆπŸπŸŽŒπŸ’ 
πŸ–‹πŸ”ΆπŸŽŒπŸš©πŸ’ πŸ 😲 πŸ“€ πŸ€ πŸ’°πŸ”ΆπŸš©πŸ’ πŸπŸŽŒ βœ‹ 😐
πŸ“€ πŸ€ πŸ’°πŸŽŒπŸπŸ’ πŸ”ΆπŸš©
πŸ–‹πŸŽŒπŸπŸš©πŸ”ΆπŸ’  😲 πŸ“€ πŸ€ πŸ’°πŸ”ΆπŸš©πŸ’ πŸπŸŽŒ 😐
πŸ“€ 🍿 πŸ₯‡ πŸš› πŸ₯ˆ 1️⃣ βœ‹ πŸ“₯ πŸ₯ˆ πŸ”ͺ
😲 πŸ“€ 🍿 πŸ₯ˆ πŸ“₯ πŸ₯‡ πŸ“₯ πŸ₯ˆ β›° 😐 πŸ“₯ πŸ₯‡
πŸ–‹πŸ”ΆπŸš©πŸ’ πŸπŸŽŒ πŸš› πŸ₯ˆ 1️⃣ βœ‹ πŸ“₯ πŸ₯ˆ 🍑 πŸ€ πŸ’°πŸ’ πŸŽŒπŸπŸš©πŸ”Ά
πŸ–‹πŸš©πŸ”ΆπŸπŸŽŒπŸ’ 
🀑 πŸš› πŸ₯‡ 2️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸ–‹πŸŽŒπŸš©πŸ’ πŸ”ΆπŸ πŸ”ͺ 😲 πŸ“€ πŸš› πŸ₯‡ 1️⃣ βœ‹ πŸ“₯ πŸ₯‡
πŸ€ πŸ’°πŸ”ΆπŸŽŒπŸš©πŸ’ πŸ 😐
πŸ“€ 🀑 πŸ“₯ πŸ₯‡
πŸ“¬ 😲 πŸ€ πŸ’°πŸ”ΆπŸŽŒπŸš©πŸ’ πŸ 😐
πŸ“€ 🀑 πŸ“₯ πŸ₯‡ πŸš› πŸ₯‡ 1️⃣ βœ‹
πŸ“₯ πŸ₯‡ 🍑 🀑 🍿 πŸ₯‡ πŸ€ πŸ’°πŸŽŒπŸš©πŸ’ πŸ”ΆπŸ
πŸ–‹πŸŽŒπŸπŸ’ πŸ”ΆπŸš©
🀑 🀑 πŸš› πŸ₯ˆ 0️⃣ βœ‹ πŸ“₯ πŸ₯ˆ
πŸ–‹πŸπŸ’ πŸ”ΆπŸš©πŸŽŒ πŸš› πŸ₯‡ 1️⃣ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡
⭐ 🍿 πŸ₯ˆ πŸ“₯ πŸ₯‡ πŸ“¬
πŸ“₯ πŸ₯ˆ 🍑 🍿 πŸ₯ˆ 🍿 πŸ₯‡ 🀑 πŸ“₯ πŸ₯ˆ πŸ”ͺ
😲 πŸ“€ πŸš› πŸ₯ˆ 1️⃣ βœ‹ πŸ“₯ πŸ₯ˆ πŸ€ πŸ’°πŸŽŒπŸπŸš©πŸ”ΆπŸ’  😐
πŸ“€ πŸ“₯ πŸ₯‡ πŸš› πŸ₯‡ 1️⃣ 0️⃣ βœ‹ πŸ“₯ πŸ₯‡ πŸ“
😲 πŸ€ πŸ’°πŸŽŒπŸπŸš©πŸ”ΆπŸ’  😐
🀑 πŸ“₯ πŸ₯ˆ πŸ€ πŸ’°πŸπŸ’ πŸ”ΆπŸš©πŸŽŒ
import sys
# Implements a simple stack-based VM
class VM:
def __init__(self, rom):
self.rom = rom
self.accumulator1 = 0
self.accumulator2 = 0
self.instruction_pointer = 1
self.stack = []
def step(self):
cur_ins = self.rom[self.instruction_pointer]
self.instruction_pointer += 1
fn = VM.OPERATIONS.get(cur_ins, None)
if cur_ins[0] == 'πŸ–‹':
return
if fn is None:
raise RuntimeError("Unknown instruction '{}' at {}".format(
repr(cur_ins), self.instruction_pointer - 1))
else:
fn(self)
def add(self):
self.stack.append(self.stack.pop() + self.stack.pop())
def sub(self):
a = self.stack.pop()
b = self.stack.pop()
self.stack.append(b - a)
def if_zero(self):
if self.stack[-1] == 0:
while self.rom[self.instruction_pointer] != '😐':
if self.rom[self.instruction_pointer] in ['πŸ€', 'β›°']:
break
self.step()
else:
self.find_first_endif()
self.instruction_pointer += 1
def if_not_zero(self):
if self.stack[-1] != 0:
while self.rom[self.instruction_pointer] != '😐':
if self.rom[self.instruction_pointer] in ['πŸ€', 'β›°']:
break
self.step()
else:
self.find_first_endif()
self.instruction_pointer += 1
def find_first_endif(self):
while self.rom[self.instruction_pointer] != '😐':
self.instruction_pointer += 1
def jump_to(self):
marker = self.rom[self.instruction_pointer]
if marker[0] != 'πŸ’°':
print('Incorrect symbol : ' + marker[0])
raise SystemExit()
marker = 'πŸ–‹' + marker[1:]
self.instruction_pointer = self.rom.index(marker) + 1
def jump_top(self):
self.instruction_pointer = self.stack.pop()
def exit(self):
print('\nDone.')
raise SystemExit()
def print_top(self):
sys.stdout.write(chr(self.stack.pop()))
sys.stdout.flush()
def push(self):
if self.rom[self.instruction_pointer] == 'πŸ₯‡':
self.stack.append(self.accumulator1)
elif self.rom[self.instruction_pointer] == 'πŸ₯ˆ':
self.stack.append(self.accumulator2)
else:
raise RuntimeError('Unknown instruction {} at position {}'.format(
self.rom[self.instruction_pointer], str(self.instruction_pointer)))
self.instruction_pointer += 1
def pop(self):
if self.rom[self.instruction_pointer] == 'πŸ₯‡':
self.accumulator1 = self.stack.pop()
elif self.rom[self.instruction_pointer] == 'πŸ₯ˆ':
self.accumulator2 = self.stack.pop()
else:
raise RuntimeError('Unknown instruction {} at position {}'.format(
self.rom[self.instruction_pointer], str(self.instruction_pointer)))
self.instruction_pointer += 1
def pop_out(self):
self.stack.pop()
def load(self):
num = 0
if self.rom[self.instruction_pointer] == 'πŸ₯‡':
acc = 1
elif self.rom[self.instruction_pointer] == 'πŸ₯ˆ':
acc = 2
else:
raise RuntimeError('Unknown instruction {} at position {}'.format(
self.rom[self.instruction_pointer], str(self.instruction_pointer)))
self.instruction_pointer += 1
while self.rom[self.instruction_pointer] != 'βœ‹':
num = num * 10 + (ord(self.rom[self.instruction_pointer][0]) - ord('0'))
self.instruction_pointer += 1
if acc == 1:
self.accumulator1 = num
else:
self.accumulator2 = num
self.instruction_pointer += 1
def clone(self):
self.stack.append(self.stack[-1])
def multiply(self):
a = self.stack.pop()
b = self.stack.pop()
self.stack.append(b * a)
def divide(self):
a = self.stack.pop()
b = self.stack.pop()
self.stack.append(b // a)
def modulo(self):
a = self.stack.pop()
b = self.stack.pop()
self.stack.append(b % a)
def xor(self):
a = self.stack.pop()
b = self.stack.pop()
self.stack.append(b ^ a)
OPERATIONS = {
'🍑': add,
'🀑': clone,
'πŸ“': divide,
'😲': if_zero,
'πŸ˜„': if_not_zero,
'πŸ€': jump_to,
'πŸš›': load,
'πŸ“¬': modulo,
'⭐': multiply,
'🍿': pop,
'πŸ“€': pop_out,
'🎀': print_top,
'πŸ“₯': push,
'πŸ”ͺ': sub,
'πŸŒ“': xor,
'β›°': jump_top,
'βŒ›': exit
}
if __name__ == '__main__':
if len(sys.argv) != 2:
print('Missing program')
raise SystemExit()
with open(sys.argv[1], 'r') as f:
print('Running ....')
all_ins = ['']
all_ins.extend(f.read().split())
vm = VM(all_ins)
while 1:
vm.step()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment