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;
|
u64 range = max - (i64)min + 1;
|
||||||
if (range/2 < ia) {
|
if (range/2 < ia) {
|
||||||
// First try to invert it as a permutation
|
// 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++) rp[i]=ia;
|
||||||
for (usz i = 0; i < ia; i++) { i32 v=xp[i]; GRADE_UD(rp[v-min],rp[max-v])=i; }
|
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;
|
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",{⇐}⟩
|
||||||
{! ∧´(𝕨⊒𝕩) = ↕∘≠⊸⌊⍟(𝕨≡○⊑𝕩) 𝕩 ⥊○≠ 𝕨}⌜˜ 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
|
!"⍋: 𝕨 must be sorted" % a←-¨ ∧⋈¨ ↕10 ⋄ a⍋⋈¨↕10
|
||||||
⍷∘(⥊¨)⊸({! (𝕨⍋𝕩) ≡ (≢𝕩)⥊ (≠𝕨)×0≥𝕨 •Cmp○⊑ 𝕩}⌜) ⟨3, <3, 10⥊3, 'a', <'a', 10⥊'a'⟩
|
⍷∘(⥊¨)⊸({! (𝕨⍋𝕩) ≡ (≢𝕩)⥊ (≠𝕨)×0≥𝕨 •Cmp○⊑ 𝕩}⌜) ⟨3, <3, 10⥊3, 'a', <'a', 10⥊'a'⟩
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user