fix integer wrapping in grade sum check

This commit is contained in:
dzaima 2025-01-24 03:36:01 +02:00
parent 204ec21a7c
commit dcbceccff8
2 changed files with 4 additions and 1 deletions

View File

@ -317,7 +317,7 @@ B GRADE_CAT(c1)(B t, B x) {
u64 range = max - (i64)min + 1;
if (range/2 < ia) {
// First try to invert it as a permutation
if (range==ia && sum==(u32)(i32)((i64)ia*(min+max)/2)) {
if (range == ia && sum == (u32)(ia * (min+(i64)max)/2)) {
for (usz i = 0; i < ia; i++) rp[i]=ia;
for (usz i = 0; i < ia; i++) { i32 v=xp[i]; GRADE_UD(rp[v-min],rp[max-v])=i; }
bool done=1; for (usz i = 0; i < ia; i++) done &= rp[i]!=ia;

View File

@ -380,6 +380,9 @@ a←↕2 ⋄ ! "e" ≡ (↕10){b←a‿a‿a‿a‿a‿a‿a‿a‿a‿a ⋄
{! ´(𝕨𝕩) = (𝕨) × 𝕨𝕩}˜ 3100 "a⍉𝕩"1101e41e91e12"a",{}
{! ´(𝕨𝕩) = (𝕨𝕩) 𝕩 𝕨}˜ 3100 "a⍉𝕩"1101e41e91e12"a",{}
# ⍋𝕩
100, 30000, 2e9, ¯100, ¯30000, ¯2e9, @+200, @+60000, @+1111111 {! a •internal.Keep 𝕨 + a •rand.Deal 𝕩} 3101001000
# 𝕨⍋𝕩
!"⍋: 𝕨 must be sorted" % a-¨ ¨ 10 a¨10
(¨)({! (𝕨𝕩) (𝕩) (𝕨)×0𝕨 •Cmp 𝕩}) 3, <3, 103, 'a', <'a', 10'a'