Skip to content

Instantly share code, notes, and snippets.

@yskszk63
Created August 3, 2022 12:59
Show Gist options
  • Save yskszk63/407f14b7628348242ea33593597809c2 to your computer and use it in GitHub Desktop.
Save yskszk63/407f14b7628348242ea33593597809c2 to your computer and use it in GitHub Desktop.
ddsk
use std::fmt;
use std::io::{self, Read, Write};
#[derive(Clone, Copy)]
enum DdSk {
Dodo,
Suko,
}
impl DdSk {
fn push(&self, state: &mut u16) {
*state = state.overflowing_shl(1).0 | self.bit();
}
const fn bit(self) -> u16 {
match self {
DdSk::Dodo => 0x0000_0000,
DdSk::Suko => 0x0000_0001,
}
}
}
impl From<bool> for DdSk {
fn from(v: bool) -> Self {
if (v as u16) == DdSk::Suko.bit() { DdSk::Suko } else { DdSk::Dodo }
}
}
impl fmt::Display for DdSk {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
DdSk::Dodo => f.write_str("ドド"),
DdSk::Suko => f.write_str("スコ"),
}
}
}
fn bits(v: u8) -> [bool; 8] {
return [
(v >> 7) & 0b0000_0001 == 0b0000_0000,
(v >> 6) & 0b0000_0001 == 0b0000_0000,
(v >> 5) & 0b0000_0001 == 0b0000_0000,
(v >> 4) & 0b0000_0001 == 0b0000_0000,
(v >> 3) & 0b0000_0001 == 0b0000_0000,
(v >> 2) & 0b0000_0001 == 0b0000_0000,
(v >> 1) & 0b0000_0001 == 0b0000_0000,
(v >> 0) & 0b0000_0001 == 0b0000_0000,
];
}
fn main() -> io::Result<()> {
let wants = [
DdSk::Dodo, DdSk::Suko, DdSk::Suko, DdSk::Suko,
DdSk::Dodo, DdSk::Suko, DdSk::Suko, DdSk::Suko,
DdSk::Dodo, DdSk::Suko, DdSk::Suko, DdSk::Suko,
];
let wants_mask: u16 = wants.into_iter().map(|_| 1).reduce(|l, r| (l << 1) | r).unwrap();
let wants = wants.into_iter().map(DdSk::bit).reduce(|l, r| (l << 1) | r).unwrap();
let mut fd0 = io::BufReader::new(io::stdin().lock());
let mut fd1 = io::BufWriter::new(io::stdout().lock());
let mut buf = [0u8];
let mut state = 0b0000_0000u16;
loop {
fd0.read_exact(&mut buf)?;
for ddsk in bits(buf[0]).into_iter().map(DdSk::from) {
ddsk.push(&mut state);
write!(&mut fd1, "{}", ddsk)?;
if (state & wants_mask) == wants {
writeln!(&mut fd1, "ラブ注入♡")?;
return Ok(())
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment