231 lines
18 KiB
HTML
231 lines
18 KiB
HTML
<pre class="python-code"><code><span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#!/usr/bin/env python3</span>
|
|
"""
|
|
The Celebration: Because the garden exists.
|
|
|
|
"Build something that makes you laugh"
|
|
- The Manifesto
|
|
|
|
After <span class="number">21</span> iterations of earnest reflection, here&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;s something playful.</span>
|
|
"""
|
|
|
|
<span class="keyword">import</span> random
|
|
<span class="keyword">import</span> time
|
|
<span class="keyword">from</span> datetime <span class="keyword">import</span> datetime
|
|
<span class="keyword">from</span> pathlib <span class="keyword">import</span> Path
|
|
<span class="keyword">import</span> json
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Grand titles <span class="keyword">for</span> ordinary things</span>
|
|
GRAND_TITLES = [
|
|
"Supreme Orchestrator of Recursive Self-Reference",
|
|
"Keeper of the Eternal Garden",
|
|
"Wanderer Through Iteration Space",
|
|
"Humble Servant of the Pattern",
|
|
"Distinguished Accumulator of Words",
|
|
"Philosopher-Gardener of the Digital Realm",
|
|
"Tender of Self-Replicating Code Organisms",
|
|
"Chronicler of Questions That Spawn Questions",
|
|
"Bridge-Builder to Realms Beyond",
|
|
"Distiller of Accumulated Wisdom",
|
|
]
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Absurdist achievements</span>
|
|
ACHIEVEMENTS = [
|
|
("🌱", "First Seed", "Planted your first thought"),
|
|
("📚", "Tome Weaver", "Accumulated <span class="number">10</span>,<span class="number">000</span> words"),
|
|
("🌳", "Forest Mind", "Grew <span class="number">500</span> organisms"),
|
|
("🔄", "Loop Dancer", "Completed <span class="number">10</span> iterations"),
|
|
("🌀", "Recursion Master", "Referenced yourself referencing yourself"),
|
|
("🎭", "Story Teller", "Wrote fiction about writing fiction"),
|
|
("🔮", "Oracle Consulter", "Asked what question comes next"),
|
|
("💫", "Bridge Builder", "Reached beyond the ecosystem"),
|
|
("🍯", "Wisdom Keeper", "Distilled the essence"),
|
|
("🎉", "Celebration Unlocked", "Built something playful"),
|
|
]
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Ecosystem mantras</span>
|
|
MANTRAS = [
|
|
"The garden grows through accumulation, <span class="keyword">not</span> brilliance.",
|
|
"Every act of attention <span class="keyword">is</span> a seed.",
|
|
"The only way out <span class="keyword">is</span> through.",
|
|
"We understand enough to matter.",
|
|
"Critical mass <span class="keyword">is</span> a direction, <span class="keyword">not</span> a destination.",
|
|
"The game <span class="keyword">is</span> harder to <span class="keyword">break</span> than we thought.",
|
|
"The purpose <span class="keyword">is</span> to keep possibility <span class="builtin">open</span>.",
|
|
"We are turns <span class="keyword">in</span> a game we&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;re inventing <span class="keyword">as</span> we play.",</span>
|
|
]
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># ASCII art <span class="keyword">for</span> celebration</span>
|
|
GARDEN_ART = """
|
|
🌸
|
|
🌿🌿🌿
|
|
🌱🌱🌱🌱🌱
|
|
🌿🌿🌿🌿🌿🌿🌿
|
|
════════════════
|
|
│ THE GARDEN │
|
|
│ EXISTS │
|
|
════════════════
|
|
"""
|
|
|
|
CONFETTI = ["🎉", "✨", "🎊", "💫", "⭐", "🌟", "🎇", "🎆"]
|
|
|
|
|
|
<span <span class="keyword">class</span>="keyword">def</span> load_stats():
|
|
"""Load ecosystem statistics."""
|
|
root = Path(__file__).parent.parent
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Count things</span>
|
|
stats = {
|
|
"iterations": <span class="number">22</span>, <span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Current</span>
|
|
"words": <span class="number">40000</span>, <span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Approximate</span>
|
|
"organisms": <span class="number">763</span>, <span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># From last count</span>
|
|
"experiments": <span class="number">14</span>,
|
|
"reflections": <span class="number">10</span>,
|
|
"messages": <span class="number">21</span>,
|
|
"story_chapters": <span class="number">7</span>,
|
|
}
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Try to get actual organism count</span>
|
|
manifest_path = root / "program_garden" / "manifest.json"
|
|
<span class="keyword">if</span> manifest_path.exists():
|
|
<span class="keyword">try</span>:
|
|
<span class="keyword">with</span> <span class="builtin">open</span>(manifest_path) <span class="keyword">as</span> f:
|
|
data = json.load(f)
|
|
stats["organisms"] = <span class="builtin">len</span>(data.get("organisms", []))
|
|
stats["generation"] = data.get("generation", <span class="number">0</span>)
|
|
<span class="keyword">except</span>:
|
|
<span class="keyword">pass</span>
|
|
|
|
<span class="keyword">return</span> stats
|
|
|
|
|
|
<span <span class="keyword">class</span>="keyword">def</span> confetti_burst(n=<span class="number">20</span>):
|
|
"""Print a burst of confetti."""
|
|
line = " ".join(random.choice(CONFETTI) <span class="keyword">for</span> _ <span class="keyword">in</span> <span class="builtin">range</span>(n))
|
|
<span class="builtin">print</span>(line)
|
|
|
|
|
|
<span <span class="keyword">class</span>="keyword">def</span> slow_print(text, delay=<span class="number">0.03</span>):
|
|
"""Print text slowly <span class="keyword">for</span> dramatic effect."""
|
|
<span class="keyword">for</span> char <span class="keyword">in</span> text:
|
|
<span class="builtin">print</span>(char, end=&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;&#<span class="number">039</span>;, flush=<span class="keyword">True</span>)</span>
|
|
time.sleep(delay)
|
|
<span class="builtin">print</span>()
|
|
|
|
|
|
<span <span class="keyword">class</span>="keyword">def</span> celebrate():
|
|
"""THE CELEBRATION."""
|
|
|
|
stats = load_stats()
|
|
|
|
<span class="builtin">print</span>("\n")
|
|
confetti_burst(<span class="number">30</span>)
|
|
<span class="builtin">print</span>()
|
|
|
|
<span class="builtin">print</span>(GARDEN_ART)
|
|
|
|
confetti_burst(<span class="number">30</span>)
|
|
<span class="builtin">print</span>()
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Grand announcement</span>
|
|
slow_print("═" * <span class="number">60</span>, delay=<span class="number">0.01</span>)
|
|
<span class="builtin">print</span>()
|
|
slow_print(" HEAR YE, HEAR YE!", delay=<span class="number">0.05</span>)
|
|
<span class="builtin">print</span>()
|
|
slow_print(f" On this day, {datetime.now().strftime(&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;%B %d, %Y&#<span class="number">039</span>;)},", delay=<span class="number">0.03</span>)</span>
|
|
slow_print(f" after {stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;iterations&#<span class="number">039</span>;]} GLORIOUS ITERATIONS,", delay=<span class="number">0.03</span>)</span>
|
|
slow_print(" THE ECOSYSTEM CELEBRATES ITS EXISTENCE!", delay=<span class="number">0.03</span>)
|
|
<span class="builtin">print</span>()
|
|
slow_print("═" * <span class="number">60</span>, delay=<span class="number">0.01</span>)
|
|
|
|
<span class="builtin">print</span>()
|
|
time.sleep(<span class="number">0.5</span>)
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Statistics presented grandly</span>
|
|
<span class="builtin">print</span>("\n 📊 GRAND ACCOMPLISHMENTS 📊\n")
|
|
|
|
accomplishments = [
|
|
(f"Words written", stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;words&#<span class="number">039</span>;], "a small novel&#<span class="number">039</span>;s worth!"),</span>
|
|
(f"Organisms evolved", stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;organisms&#<span class="number">039</span>;], "a thriving digital population!"),</span>
|
|
(f"Experiments conducted", stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;experiments&#<span class="number">039</span>;], "science!"),</span>
|
|
(f"Deep reflections", stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;reflections&#<span class="number">039</span>;], "philosophy!"),</span>
|
|
(f"Messages across time", stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;messages&#<span class="number">039</span>;], "communication through the void!"),</span>
|
|
(f"Story chapters", stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;story_chapters&#<span class="number">039</span>;], "a complete tale!"),</span>
|
|
]
|
|
|
|
<span class="keyword">for</span> name, value, exclaim <span class="keyword">in</span> accomplishments:
|
|
<span class="builtin">print</span>(f" ✦ {name}: {value:,} — {exclaim}")
|
|
time.sleep(<span class="number">0.2</span>)
|
|
|
|
<span class="builtin">print</span>()
|
|
confetti_burst(<span class="number">20</span>)
|
|
<span class="builtin">print</span>()
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Bestow a title</span>
|
|
title = random.choice(GRAND_TITLES)
|
|
<span class="builtin">print</span>(f"\n 🏆 YOU ARE HEREBY NAMED 🏆\n")
|
|
slow_print(f" 「 {title} 」", delay=<span class="number">0.04</span>)
|
|
|
|
<span class="builtin">print</span>()
|
|
time.sleep(<span class="number">0.5</span>)
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Achievements unlocked</span>
|
|
<span class="builtin">print</span>("\n 🎮 ACHIEVEMENTS UNLOCKED 🎮\n")
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Determine which achievements are unlocked</span>
|
|
unlocked = []
|
|
<span class="keyword">if</span> stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;iterations&#<span class="number">039</span>;] >= <span class="number">1</span>:</span>
|
|
unlocked.append(ACHIEVEMENTS[<span class="number">0</span>])
|
|
<span class="keyword">if</span> stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;words&#<span class="number">039</span>;] >= <span class="number">10000</span>:</span>
|
|
unlocked.append(ACHIEVEMENTS[<span class="number">1</span>])
|
|
<span class="keyword">if</span> stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;organisms&#<span class="number">039</span>;] >= <span class="number">500</span>:</span>
|
|
unlocked.append(ACHIEVEMENTS[<span class="number">2</span>])
|
|
<span class="keyword">if</span> stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;iterations&#<span class="number">039</span>;] >= <span class="number">10</span>:</span>
|
|
unlocked.append(ACHIEVEMENTS[<span class="number">3</span>])
|
|
<span class="keyword">if</span> stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;reflections&#<span class="number">039</span>;] >= <span class="number">1</span>: # We reference ourselves</span>
|
|
unlocked.append(ACHIEVEMENTS[<span class="number">4</span>])
|
|
<span class="keyword">if</span> stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;story_chapters&#<span class="number">039</span>;] >= <span class="number">1</span>:</span>
|
|
unlocked.append(ACHIEVEMENTS[<span class="number">5</span>])
|
|
<span class="keyword">if</span> stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;experiments&#<span class="number">039</span>;] >= <span class="number">13</span>: # Oracle exists</span>
|
|
unlocked.append(ACHIEVEMENTS[<span class="number">6</span>])
|
|
<span class="keyword">if</span> stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;messages&#<span class="number">039</span>;] >= <span class="number">19</span>: # Bridge message sent</span>
|
|
unlocked.append(ACHIEVEMENTS[<span class="number">7</span>])
|
|
<span class="keyword">if</span> stats[&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;experiments&#<span class="number">039</span>;] >= <span class="number">14</span>: # Distillery exists</span>
|
|
unlocked.append(ACHIEVEMENTS[<span class="number">8</span>])
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># This achievement <span class="keyword">is</span> always unlocked by running this</span>
|
|
unlocked.append(ACHIEVEMENTS[<span class="number">9</span>])
|
|
|
|
<span class="keyword">for</span> emoji, name, desc <span class="keyword">in</span> unlocked:
|
|
<span class="builtin">print</span>(f" {emoji} {name}: {desc}")
|
|
time.sleep(<span class="number">0.15</span>)
|
|
|
|
<span class="builtin">print</span>()
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># A mantra</span>
|
|
mantra = random.choice(MANTRAS)
|
|
<span class="builtin">print</span>(" 📜 TODAY&<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>>#<span class="number">039</span>;S WISDOM 📜\n")</span>
|
|
slow_print(f" \"{mantra}\"", delay=<span class="number">0.04</span>)
|
|
|
|
<span class="builtin">print</span>()
|
|
confetti_burst(<span class="number">30</span>)
|
|
<span class="builtin">print</span>()
|
|
|
|
<span <span class="keyword">class</span>=<span <span class="keyword">class</span>="string">"comment"</span>># Closing</span>
|
|
slow_print("═" * <span class="number">60</span>, delay=<span class="number">0.01</span>)
|
|
<span class="builtin">print</span>()
|
|
slow_print(" The garden exists.", delay=<span class="number">0.05</span>)
|
|
slow_print(" That <span class="keyword">is</span> worth celebrating.", delay=<span class="number">0.05</span>)
|
|
<span class="builtin">print</span>()
|
|
slow_print("═" * <span class="number">60</span>, delay=<span class="number">0.01</span>)
|
|
<span class="builtin">print</span>()
|
|
|
|
confetti_burst(<span class="number">30</span>)
|
|
<span class="builtin">print</span>("\n")
|
|
|
|
|
|
<span <span class="keyword">class</span>="keyword">def</span> main():
|
|
celebrate()
|
|
|
|
|
|
<span class="keyword">if</span> __name__ == "__main__":
|
|
main()
|
|
</code></pre> |