Combine Lists - въпрос за изход на задачата

Здравейте!
Възможно ли е да разбера входа на последния тест на задачата? Проверих всичко в кода си, но не откривам грешка. Изхода от последния 5-ти тест на задачата е 5,7,5,7. Останалите тестове минаха веднага с въвеждането на задачата в ‘джъдж’ системата.
Благодаря!

Здравей,

Няма да можем да предоставим данните от последния тест.

Това което можеш да направиш е да споделиш решението си тук и да се опитаме да видим какво липсва в кода :slight_smile:

Пешо

Благодаря за отговора, Пешо!
Добавям коментари сега. Коментарите не са включени в джъдж системата. Решението ми е
let arrayA = gets().split(’,’); // приемам входа, премахвам запетайките и го вкарвам в масив
let arrayB = gets().split(’,’); // приемам входа, премахвам запетайките и го вкарвам в масив
for (let i=0; i<arrayA.length; i++) { // превръщам елементите в тип ‘чило’
arrayA[i] = +arrayA[i];
}
for (let i=0; i<arrayB.length; i++) { // превръщам елементите в тип ‘чило’
arrayB[i] = +arrayB[i];
}
let toPrint = arrayA[0] + ‘,’ + arrayB[0] + ‘,’
if (arrayA.length>arrayB.length) { // ако масив А е по-дълъг от Б
for (let i=1; i<arrayA.length-1; i++) {
toPrint += arrayA[i] + ‘,’ + arrayB[i] + ‘,’;
}
print(toPrint + arrayA[arrayA.length-1] );
} else if (arrayA.length === arrayB.length) { // ако масив А е равен на Б
for (let i=1; i<arrayA.length-1 && arrayB.length-1; i++) {
toPrint += arrayA[i] + ‘,’ + arrayB[i] + ‘,’;
}
print(toPrint + arrayA[arrayA.length-1] + ‘,’ + arrayB[arrayB.length-1]);
} else if (arrayA.length<arrayB.length){ // ако масив А е по-малък на Б
for (let i=1; i<arrayB.length-1; i++) {
toPrint += arrayA[i] + ‘,’ + arrayB[i] + ‘,’;
}
print(toPrint + arrayB[arrayB.length-1]);
}

Здравей Сашо.
Не успях да разбера, защо не ти минава петия тест.
Но когато аз решавах задачата, не превръщах стринговете в числа.
Виж join метода, а също и push.



Успех!

Благодаря за отговора skurtov!
Просто така се е случило да поставя кода. Първоначално пробвах като ‘стринг’ после пробвах с число. Няма никаква разлика. Последния тест винаги е грешен. Мисля, че програмната логика е правилна и няма някаква грешка или мисконцепция.
За метода ‘пуш’ и ‘джойн’ знам. Ползвам ги. В това решение просто съм подходил по този начин. Интересно ми е какво и къде греши. Пробвах с разлчини входове. Нули, отрицателни числа и/или цифри. Отговора излиза така както трябва да бъде изхода.

Ето виж как съм модифицирал твоята задача.

let arrayA = gets().split(','); // приемам входа, премахвам запетайките и го вкарвам в масив
let arrayB = gets().split(',');  // приемам входа, премахвам запетайките и го вкарвам в масив
let combine = new Array();
let index = 0;
let maxLength = Math.max(arrayA.length, arrayB.length);
while (index < maxLength){
    if (arrayA[index] !== undefined && arrayB[index] !== undefined){
        combine.push(arrayA[index]);
        combine.push(arrayB[index]);
        index += 1;
    }
    else if (arrayA[index] === undefined && arrayB[index] !== undefined){
        combine.push(arrayB[index]);
        index += 1;
    }
    else if (arrayA[index] !== undefined && arrayB[index] === undefined){
        combine.push(arrayA[index]);
        index += 1;
    }
}
print(combine.join(','));
2 Likes

Благодаря за вложения труд!
Именно и аз за това мислех, но не разбирам, защо не работи с цикъла. Но както и да е де.
Задачата е решена и отново благодаря за помощта!

you can assume that the input lists will have the same length

Thanks for the reply! Then the task becomes easier.
The task is solved, but i don’t really know why the original code with the ‘for’ cycle didn’t worked out.

Не разбирам нещо … arrayA[i] = +arrayA[i]; какво трябва да прави ?
Питам , тъй като моето решение е на Java и искам да си обясня какво правиш.

С това казвам - Направи всеки елемент от масива от тип ‘стринг’ в тип ‘число’.
Идентично на това ще бъде -
for (let i=0; i<arrayA.length; i++) {
arrayA[i] = Number(arrayA[i]); // превръщам елемента в тип ‘число’.
}
В конкретния случай, когато качвах кода не видях тази част от него. Тя не играе роля в решението на задачата. Но има случаи в, които като сравнява компилатора ще изплюе грешна логика.
Пример:
console.log(‘3’>‘12’) // връща true.
Предполагам, че го знаеш това, но все пак го казвам.

Здравейте,

Можете ли да ми кажете защо този код, при локално тестване работи, а в judge ми дава грешни отговори?

let list1 = gets().split(’, ‘);
let list2 = gets().split(’, ');

let combined = [];

for (let i=0; i < list1.length; i++) {
combined.push(list1[i], list2[i])
};

print(combined.join());

Благодаря!

Здравей колега,

При принтирането на комбинирания лист, числата трябва да бъдат разделени с запетая.

Поздрави,
Мишо

Здравей Мишо.

Явно и това не е проблема. По някаква причина, в judge, въобще не ми подрежда числата както трябва да са. Но когато го тествам локално всичко работи идеално.

Някакви други идеи?

Благодаря!

Здрвей Евгени,

опитай да сплитнеш не по ", " (запетая и празно място), а по "," (само запетая).

Успех

1 Like