https://www.youtube.com/watch?v=OR9QTQ2pg3s
Day 14 - Robots.
Try find the image :D
If no one finds it in the next few days, I'll update with a timestamp.
https://www.youtube.com/watch?v=OR9QTQ2pg3s
Day 14 - Robots.
Try find the image :D
If no one finds it in the next few days, I'll update with a timestamp.
I downloaded the video and watched it at x16 speed. I actually spent longer trying to find a working federating instance to post my reply than I spent searching for the tree.
https://www.youtube.com/watch?v=OR9QTQ2pg3s&t=1482s
You clearly have more patience than me! I assumed that at 16x, it would be way to easy to blink and miss it.
For anyone else doing rust, this might be useful:
It basically generates an asciicinema/asciicast file, which is then can be used to render a video.
use std::fs::File;
use std::io::Write;
use std::process::Command;
pub struct Recorder {
filename: String,
output: File,
width: usize,
height: usize,
position: f32,
frametime: f32,
do_render: bool,
}
// Generate: https://docs.asciinema.org/manual/asciicast/v2/
impl Recorder {
pub fn new(filename: &str, w: usize, h: usize, framerate: u32, do_render: bool) -> Recorder {
let mut r = Recorder {
filename: String::from(filename),
output: File::create(format!("{filename}.cast")).unwrap(),
width: w,
height: h,
position: 0f32,
frametime: 1f32 / framerate as f32,
do_render,
};
r.init();
r
}
fn init(&mut self) {
self.output
.write_all(
format!(
"{{\"version\": 2, \"width\": {}, \"height\": {}}}\n",
self.width, self.height
)
.as_bytes(),
)
.unwrap();
}
pub fn println(&mut self, s: &str) {
let line = format!("{s}\n");
self.print(&line);
}
pub fn print(&mut self, s: &str) {
let escaped = serde_json::to_string(&(self.position, "o", s)).unwrap();
self.output
.write_all(format!("{escaped}\n").as_bytes())
.unwrap();
}
const RESET: &'static str = "\u{001b}[H\u{001b}[2J\u{001b}[3J";
pub fn sleep(&mut self, d: f32) {
self.frametime += d;
}
pub fn new_frame(&mut self) {
self.position += self.frametime;
self.print(Self::RESET);
}
}
impl Drop for Recorder {
fn drop(&mut self) {
if self.do_render {
let castname = format!("{}.cast", self.filename);
let gifname = format!("{}.gif", self.filename);
let mp4name = format!("{}.mp4", self.filename);
self.output.flush().unwrap();
let mut command = Command::new("agg");
command.arg(castname);
command.arg(gifname.as_str());
let mut proc = command.spawn().unwrap();
proc.wait().unwrap();
let _ = std::fs::remove_file(mp4name.as_str());
let mut command = Command::new("ffmpeg");
command.arg("-i");
command.arg(gifname.as_str());
command.arg(mp4name.as_str());
let mut proc = command.spawn().unwrap();
proc.wait().unwrap();
}
}
}
https://youtube.com/shorts/d8OWepBkOqY
Day 18 - RAM Run
An unofficial home for the advent of code community on programming.dev! Other challenges are also welcome!
Advent of Code is an annual Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like.
Everybody Codes is another collection of programming puzzles with seasonal events.
Solution Threads
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 |
Icon base by Lorc under CC BY 3.0 with modifications to add a gradient
console.log('Hello World')