fix integer wrapping in grade sum check
This commit is contained in:
parent
204ec21a7c
commit
dcbceccff8
@ -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;
|
||||
|
||||
@ -380,6 +380,9 @@ a←↕2 ⋄ ! "e" ≡ (↕10){b←a‿a‿a‿a‿a‿a‿a‿a‿a‿a ⋄
|
||||
{! ∧´(𝕨⊐𝕩) = (≠𝕨) × 𝕨≢○⊑𝕩}⌜˜ 3‿100 ⥊⌜ "a⍉𝕩"∾1‿10‿1e4‿1e9‿1e12∾⟨"a",{⇐}⟩
|
||||
{! ∧´(𝕨⊒𝕩) = ↕∘≠⊸⌊⍟(𝕨≡○⊑𝕩) 𝕩 ⥊○≠ 𝕨}⌜˜ 3‿100 ⥊⌜ "a⍉𝕩"∾1‿10‿1e4‿1e9‿1e12∾⟨"a",{⇐}⟩
|
||||
|
||||
# ⍋𝕩
|
||||
⟨100, 30000, 2e9, ¯100, ¯30000, ¯2e9, @+200, @+60000, @+1111111⟩ {! a ≡ ⍋ •internal.Keep ⍋ 𝕨 + a ← •rand.Deal 𝕩}⌜ 3‿10‿100‿1000
|
||||
|
||||
# 𝕨⍋𝕩
|
||||
!"⍋: 𝕨 must be sorted" % a←-¨ ∧⋈¨ ↕10 ⋄ a⍋⋈¨↕10
|
||||
⍷∘(⥊¨)⊸({! (𝕨⍋𝕩) ≡ (≢𝕩)⥊ (≠𝕨)×0≥𝕨 •Cmp○⊑ 𝕩}⌜) ⟨3, <3, 10⥊3, 'a', <'a', 10⥊'a'⟩
|
||||
|
||||
Loading…
Reference in New Issue
Block a user