Професионална програма
Loading...
+ Нов въпрос
kozmoza avatar kozmoza 2 Точки

Fancy Barcodes

Здравейте,

https://pastebin.com/X8235RNT

Мисля че ми е грешен regEx, но в regEx101 изглежда че работи? Сам ми е трудно да схвана къде греша, ако може някой да погледне и да каже. Иначе задачата е от Final Exam - 04 April 2020 Group 2 https://judge.softuni.bg/Contests/Practice/Index/2303#1

Предварително благодаря!

Тагове:
0
JavaScript Fundamentals
krasizorbov avatar krasizorbov 371 Точки

Ето с малки поправки в регекса и малко ти промених кода при извличане на числата(получаваш "Product group 046") ама вярвам че може да си го направиш по твоя начин:

function solve(input) {
  let numberOfbarcode = Number(input.shift());

  let pattern = /(?<start>@#+)(?<barcode>[A-Z][A-Za-z0-9]{4,})(?<end>[A-Z]@#+)/;
  let code = "";

  for (const line of input) {
    match = pattern.exec(line);

    if (match) {
      let digitPattern = /\d/g;
      code = line.match(digitPattern);
      code === null
        ? console.log(`Product group: 00`)
        : console.log(`Product group: ${code.join("")}`);
    } else {
      console.log(`Invalid barcode`);
    }
  }
}

0
31/07/2020 19:45:24
willystyle avatar willystyle 1942 Точки

не ресетваш code = '' за всяка линия, регекса не трябва да има глобалвн флаг, понеже тогава exec след match проверява от намерения индекс нататък.

function solve(input) {
    let numberOfbarcode = Number(input.shift());
    let pattern = /^(?<start>@#+)(?<barcode>[A-Z][A-Za-z0-9]{4,}[A-Z])(?<end>@#+)$/;
    for (const line of input) {
        let code = '';
        match = pattern.exec(line);
        if (match) {
            for (const el of match.groups.barcode) {
                if (el.charCodeAt() >= 48 && el.charCodeAt() <= 57) {
                    code += el;
                }
            }
            code == '' ? console.log(`Product group: 00`) : console.log(`Product group: ${code}`);
        } else {
            console.log(`Invalid barcode`);
        }
    }
}

 

0
kozmoza avatar kozmoza 2 Точки

Благодаря и на двамата, грешката в regEx-a беше малка, но с този глобален флаг който бях сложил нямаше как да стане...

1