mirror of
https://github.com/Noratrieb/advent-of-code.git
synced 2026-01-14 17:45:02 +01:00
hm
This commit is contained in:
parent
f55e51c955
commit
5627d5ac60
1 changed files with 24 additions and 28 deletions
|
|
@ -477,25 +477,25 @@ fn part2_reading(input: &str) -> u64 {
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const XMAS_COMBINATIONS: &[(u64, u8)] = &[
|
const XMAS_COMBINATIONS: &[(u64, u8)] = &[
|
||||||
(u64::from_le_bytes([
|
(u64::from_le_bytes([
|
||||||
b'M', 0, b'S',
|
b'S', 0, b'M',
|
||||||
0, b'A', 0,
|
0, b'A', 0,
|
||||||
b'M', 0,
|
b'S', 0
|
||||||
]), b'S'),
|
]), b'M'),
|
||||||
(u64::from_le_bytes([
|
|
||||||
b'M', 0, b'M',
|
|
||||||
0, b'A', 0,
|
|
||||||
b'S', 0,
|
|
||||||
]), b'S'),
|
|
||||||
(u64::from_le_bytes([
|
(u64::from_le_bytes([
|
||||||
b'S', 0, b'S',
|
b'S', 0, b'S',
|
||||||
0, b'A', 0,
|
0, b'A', 0,
|
||||||
b'M', 0
|
b'M', 0
|
||||||
]), b'M'),
|
]), b'M'),
|
||||||
(u64::from_le_bytes([
|
(u64::from_le_bytes([
|
||||||
b'S', 0, b'M',
|
b'M', 0, b'M',
|
||||||
0, b'A', 0,
|
0, b'A', 0,
|
||||||
b'S', 0
|
b'S', 0,
|
||||||
]), b'M'),
|
]), b'S'),
|
||||||
|
(u64::from_le_bytes([
|
||||||
|
b'M', 0, b'S',
|
||||||
|
0, b'A', 0,
|
||||||
|
b'M', 0,
|
||||||
|
]), b'S'),
|
||||||
];
|
];
|
||||||
|
|
||||||
let all = input.as_bytes();
|
let all = input.as_bytes();
|
||||||
|
|
@ -531,28 +531,24 @@ fn part2_reading(input: &str) -> u64 {
|
||||||
.cast::<u32>()
|
.cast::<u32>()
|
||||||
.read_unaligned() as u64;
|
.read_unaligned() as u64;
|
||||||
|
|
||||||
let int = (chunk_top & 0xFFFFFF)
|
let int = (chunk_top & 0xFF00FF)
|
||||||
| ((chunk_mid & 0xFFFFFF) << 24)
|
| ((chunk_mid & 0x00FF00) << 24)
|
||||||
| ((chunk_bot & 0xFFFFFF) << 24 * 2);
|
| ((chunk_bot & 0xFF00FF) << (24 * 2));
|
||||||
|
|
||||||
let to_test = x86_64::_mm256_set1_epi64x(
|
let to_test = x86_64::_mm256_set1_epi64x(int as i64);
|
||||||
(int & 0xFF00FF_00FF00_FF00_u64.swap_bytes()) as i64,
|
|
||||||
);
|
|
||||||
|
|
||||||
let eq = x86_64::_mm256_cmpeq_epi64(to_test, combinations);
|
let eq = x86_64::_mm256_cmpeq_epi64(to_test, combinations);
|
||||||
|
|
||||||
let movmask = x86_64::_mm256_movemask_epi8(eq);
|
let movmask = x86_64::_mm256_movemask_epi8(eq) as u32;
|
||||||
if movmask != 0 {
|
if movmask != 0 {
|
||||||
let check = match movmask as u32 {
|
let masked_selected = u32::from_be_bytes([
|
||||||
0xFF000000 => XMAS_COMBINATIONS[0].1,
|
XMAS_COMBINATIONS[0].1,
|
||||||
0x00FF0000 => XMAS_COMBINATIONS[1].1,
|
XMAS_COMBINATIONS[1].1,
|
||||||
0x0000FF00 => XMAS_COMBINATIONS[2].1,
|
XMAS_COMBINATIONS[2].1,
|
||||||
0x000000FF => XMAS_COMBINATIONS[3].1,
|
XMAS_COMBINATIONS[3].1,
|
||||||
_ => unreachable!(),
|
]) & movmask;
|
||||||
};
|
let check = masked_selected >> masked_selected.trailing_zeros();
|
||||||
if check == ((chunk_bot >> 16) & 0xFF) as u8 {
|
count += (check as u8 == ((chunk_bot >> 16) & 0xFF) as u8) as u64;
|
||||||
count += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
i += 1;
|
i += 1;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue