Assemblyscript: рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдЕрдХреНрддреВре░ 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: AssemblyScript/assemblyscript

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ i32 рдорд╛рдиреЛрдВ рдХреА 2d рд╕рд░рдгреА рд▓реЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:

export class Kernel {

    public size: i32;
    public margin: i32;

    public multipliers: Array<Array<i32>>;
    public products: Array<Array<i32>>;

    constructor(multipliers: Array<Array<i32>>) {
    ...
    }

    public getAverage(): i32 {
    ...
    }

    public iterate(grid: Array<Array<i32>>): Array<Array<i32>> {
    ...
    }
}

рдЗрд╕ рддрд░рд╣ рдореИрдВ рдЗрд╕реЗ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

const kernelMultipliers = [
    [1, 1, 1],
    [1, 1, 1],
    [1, 1, 1]
];

let ptr = module.__retain(module.__allocArray(module.INT32ARRAY, kernelMultipliers));
let kernel = new module.exports.Kernel(ptr);

рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдореВрд▓реНрдпреЛрдВ рдХреА 2d рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ 1d рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдХрдХреНрд╖рд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ Array<i32> рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рд╕рд░рдгреА рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ 2 рдбреА рд╕рд░рдгреА рдХреЛ рдлрд╝реНрд▓реИрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдлрд╝реНрд▓реИрдЯрди 2d рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╣рдореЗрд╢рд╛ рдмреЗрд╣рддрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкрд╣рд▓реЗ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╣рд░реА рд╕рд░рдгреА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрди рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

export const INNER_ID = idof<i32[]>();
export const OUTER_ID = idof<i32[][]>();
let ptr = module.__retain(
  module.__allocArray(module.OUTER_ID,
    kernelMultipliers.map(row => module.__allocArray(module.INNER_ID, row))
  )
);
let kernel = new module.Kernel(ptr);
module.__release(ptr); // unless you still need it externally

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдлрд╝реНрд▓реИрдЯрди 2d рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╣рдореЗрд╢рд╛ рдмреЗрд╣рддрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕