use zerotrie::ZeroTrieSimpleAscii;
const POWERS_TRIE: ZeroTrieSimpleAscii<[u8; 64]> = ZeroTrieSimpleAscii::from_sorted_str_tuples(&[
("cubic", 3),
("pow1", 1),
("pow10", 10),
("pow11", 11),
("pow12", 12),
("pow13", 13),
("pow14", 14),
("pow15", 15),
("pow2", 2),
("pow3", 3),
("pow4", 4),
("pow5", 5),
("pow6", 6),
("pow7", 7),
("pow8", 8),
("pow9", 9),
("square", 2),
]);
pub fn get_power(part: &[u8]) -> (u8, &[u8]) {
let mut cursor = POWERS_TRIE.cursor();
let mut longest_match = (1, part);
for (i, &b) in part.iter().enumerate() {
cursor.step(b);
if cursor.is_empty() {
break;
}
if let Some(value) = cursor.take_value() {
longest_match = (value as u8, &part[i + 1..]);
}
}
longest_match
}