2个版本
0.1.1 | 2023年7月8日 |
---|---|
0.1.0 | 2023年5月21日 |
#989 in 数学
32KB
449 行
特殊的数字-类似燃料单位
A Rust crate 和实用程序,用于处理来自Advent of Code 2022年12月25日(此处)的SNAFU值的转换。如果网站不可用,文件AOC-22-25.md包含完整的谜题。
从SNAFU的示例转换
use snafu_numbers::FromSnafu;
assert_eq!(u32::from_snafu("1=-0-2"), 1747);
assert_eq!(u32::from_snafu("20012"), 1257);
assert_eq!(u32::from_snafu("1="), 3);
...以及到SNAFU的转换
use snafu_numbers::IntoSnafu;
assert_eq!(1747_u32.into_snafu(), "1=-0-2");
SNAFU数字
SNAFU数字是一种以5为基数的10进制系统,从右到左书写。零位(即最右边)代表5^0 = 0的倍数,第一位代表5^1 = 5的倍数,第二位5^2 = 25,第三位5^3 = 625,依此类推。
使用五种不同的数字。下面是它们的十进制整数表示法列表
SNAFU数字 | 名称 | 十进制 / ℤ |
---|---|---|
2 |
二 | 2 |
1 |
一 | 1 |
0 |
零 | 0 |
- |
负 | -1 |
= |
双负 | -2 |
因此,每个位置上的单个值 n
是 2×5^n-1,所以
位置 | 基数 | = |
- |
0 |
1 |
2 |
---|---|---|---|---|---|---|
0 | 50 = 1 |
-2 |
1 |
0 |
1 |
2 |
1 | 51 = 5 |
-10 |
-5 |
0 |
5 |
10 |
2 | 52 = 25 |
-50 |
-25 |
0 |
25 |
50 |
3 | 53 = 125 |
-250 |
-125 |
0 |
125 |
250 |
4 | 54 = 625 |
-1250 |
-625 |
0 |
625 |
1250 |
5 | 55 = 3125 |
-6250 |
-3125 |
0 |
3125 |
6250 |
等等。
引用规则
假设你有一个SNAFU数字
2=-01
。这是2
在625位上,=
(双负)在125位上,-
(负)在25位上,0
在5位上,1在1
位上。 (2 times 625) plus (-2 times 125) plus (-1 times 25) plus (0 times 5) plus (1 times 1)。这是 1250 plus -250 plus -25 plus 0 plus 1. 976!"
从十进制到SNAFU的示例转换
十进制 | SNAFU |
---|---|
1 |
1 |
2 |
2 |
3 |
1= |
4 |
1- |
5 |
10 |
6 |
11 |
7 |
12 |
8 |
2= |
9 |
2- |
10 |
20 |
15 |
1=0 |
20 |
1-0 |
2022 |
1=11-2 |
12345 |
1-0---0 |
314159265 |
1121-1110-1=0 |
从SNAFU到十进制的示例转换
SNAFU | 十进制 |
---|---|
1=-0-2 |
1747 |
12111 |
906 |
2=0= |
198 |
21 |
11 |
2=01 |
201 |
111 |
31 |
20012 |
1257 |
112 |
32 |
1=-1= |
353 |
1-12 |
107 |
12 |
7 |
1= |
3 |
122 |
37 |