WangNet – 1.8 MB, zero-dependency Numberwang adjudication in 11 languages
Summary
WangNet is a lightweight, zero-dependency neural network that determines if a number is Numberwang in 11 languages, packaged in a 1.8 MB JSON file with simple Python inference.
View Cached Full Text
Cached at: 09/15/26, 08:56 PM
GraafHenk/numberwang
Source: https://github.com/GraafHenk/numberwang
Numberwang
A small neural network that decides whether a number is Numberwang.
The whole model is a 1.8 MB JSON file and the inference code is about 100 lines of pure Python standard library — no PyTorch, no NumPy, nothing to install. Clone it and run it.
$ python3 numberwang.py 22
22... THAT'S NUMBERWANG! (confidence: 99.3%)
$ python3 numberwang.py "45 - 44"
45 - 44... That's Wangernumb! Rotate the board! (confidence: 100.0%)
$ python3 numberwang.py "hello how are you"
hello how are you... That's not even a number. It can never be Numberwang. (confidence: 100.0%)
Usage
git clone https://github.com/GraafHenk/numberwang
cd numberwang
python3 numberwang.py 22
Run it with no arguments for an interactive session:
$ python3 numberwang.py
Welcome to Numberwang! (ctrl-c to stop playing Numberwang)
> zweiundzwanzig
zweiundzwanzig... THAT'S NUMBERWANG! (confidence: 100.0%)
> shinty-six
shinty-six... That's not Numberwang. (confidence: 100.0%)
Requires Python 3.8 or newer. That’s the only requirement.
In your own code
from numberwang import load_model, wang_probabilities
model = load_model("model.json")
probs = wang_probabilities(model, "forty-seven")
# [p_not_numberwang, p_numberwang, p_not_a_number, p_wangernumb]
verdict = max(range(4), key=probs.__getitem__)
The four verdicts
| id | verdict |
|---|---|
| 0 | That’s not Numberwang. |
| 1 | THAT’S NUMBERWANG! |
| 2 | That’s not even a number. It can never be Numberwang. |
| 3 | That’s Wangernumb! |
What it accepts
| input | behaviour |
|---|---|
42, sixty-six, 12345 | digits or words |
zweiundzwanzig, veintidós, tweeëntwintig | eleven languages, accents optional |
5*2, 96 divided by 2, twelve plus four | arithmetic, judged on the result |
45 - 44, double four, eins | anything worth 1 or 44 rotates the board |
-7, 4.5, £5, 50%, 9:30 | negatives, decimals, currency, units, times |
XLIV, twenty-third, 22nd | Roman numerals and ordinals |
fortnight, vierendelen, september | words built on a number, judged as that number |
achtneming, often, money | words that merely contain one are not numbers |
shinty-six, twentington | fictional numbers are numbers too |
bonjour, hello how are you | no numeric content — can never be Numberwang |
A number’s wangness is a property of the number, not the language it
is said in: four, vier, quatre and cuatro all get the same verdict.
How it works
chars → Embedding(32) → Conv1d(128, k3) → ReLU
→ Conv1d(128, k3) → ReLU → global max pool
→ Linear(128) → ReLU → Linear(4) → softmax
80,804 parameters. The network reads characters directly — there is no
tokenizer, no normalizer and no rules engine at inference. Digits,
operators, canon verdicts and the eleven languages are all held in the
weights, and model.json contains the lot.
Demo
A hosted version runs on Hugging Face Spaces. To run the same demo locally:
pip install -r requirements.txt
python3 app.py
gradio is needed only for the demo. The model itself never needs it.
Accuracy
88.9% over 486 held-out adjudications (macro-F1 0.896), against a ceiling of roughly 98% — about 2% of training labels are inverted, in accordance with long-standing adjudication practice.
| class | precision | recall | F1 |
|---|---|---|---|
| not Numberwang | 0.820 | 0.885 | 0.851 |
| Numberwang | 0.919 | 0.900 | 0.910 |
| not a number | 0.951 | 0.830 | 0.886 |
| Wangernumb | 0.968 | 0.909 | 0.937 |
Arithmetic on unseen operands is the weak spot, at 44–72%. The
network memorises rather than computes, so small common expressions like
5*2 are reliable while 904 * 3 is an educated guess. If arithmetic
correctness matters, evaluate the expression and hand it the result.
License
MIT — see LICENSE.
No warranty is expressed or implied as to whether any particular number is, or is not, Numberwang.
Similar Articles
Built a from-scratch BitNet inference engine in pure C — 1.8× faster than bitnet.cpp on Xeon (36 tok/s), zero dependencies [BitNet & Bonsai CPU testers wanted]
Project Zero is a from-scratch C99 LLM inference engine that runs BitNet and Qwen Bonsai-27B on CPU with zero dependencies, achieving 1.8× speedup over bitnet.cpp on Xeon. The project seeks community benchmarks for both models.
Qwen3.6-27B
Alibaba's Qwen team released Qwen3.6-27B, a new 27-billion-parameter language model, accompanied by benchmark results.
Bitnet.cpp: Efficient Edge Inference for Ternary LLMs
Bitnet.cpp presents a mixed-precision matrix multiplication library for efficient edge inference of ternary LLMs like BitNet b1.58, achieving up to 6.25x speedup over full-precision baselines. The system is open-sourced on GitHub.
BitNet Text Embeddings
This paper introduces BitEmbed, an extreme low-bit framework for LLM-based text embeddings that converts pretrained LLM backbones into BitNet-style encoders with ternary weights and quantized activations. It achieves comparable performance to full-precision models while significantly reducing encoding and storage costs.
@QingQ77: Training a 0.1B end-to-end omnimodal model from scratch. A single set of weights handles text, speech, and image inputs, while outputting text and streaming speech. https://github.com/jingyaogong/minimind-o… MiniMind-O is an omnimodal model with only 0.1B parameters…
MiniMind-O has released an end-to-end omnimodal model with only 0.1B parameters, supporting text, speech, and image inputs as well as streaming speech output. The project opensources the code, weights, training data, and technical report, emphasizing that both training and inference can be performed quickly on standard GPUs.