Skip to main content

fizzbuzz/
fizzbuzz.rs

1//! FizzBuzz as an exact neural network: no training, right on every number.
2//!
3//! cargo run --example fizzbuzz
4
5use handwired_rs::handwired;
6
7/// 0 = the number itself, 1 = Fizz, 2 = Buzz, 3 = FizzBuzz.
8#[handwired]
9fn fizzbuzz(#[range(1, 100)] n: u8) -> u8 {
10    if n % 15 == 0 {
11        3
12    } else if n % 5 == 0 {
13        2
14    } else if n % 3 == 0 {
15        1
16    } else {
17        0
18    }
19}
20
21fn main() {
22    let net = fizzbuzz_circuit();
23    println!(
24        "fizzbuzz as a ReLU network: {} operations in {} layers",
25        net.program.live_operation_count(),
26        net.program.layers.len()
27    );
28    let mut line = Vec::new();
29    for n in 1..=100u8 {
30        let answer = net.eval(&(n,)).unwrap();
31        assert_eq!(answer, fizzbuzz(n), "the network got {n} wrong");
32        line.push(match answer {
33            3 => "FizzBuzz".to_string(),
34            2 => "Buzz".to_string(),
35            1 => "Fizz".to_string(),
36            _ => n.to_string(),
37        });
38    }
39    println!("{}", line.join(" "));
40    println!("100 of 100 correct, with no training.");
41}