Chess Square Color нужда от помощ!

Здравейте, имам проблем с тази задача. Решението, което съм написал, работи кореткно спрямо изискванията на задачата, но от джъдж получавам 80 а не 100 точки. Поставям условието и след това моето решение:

Chess Square Color

Write a program that determines the color of a chessboard square based on its Label and Rank

  • Labels have values from a to h
  • Ranks have values from 1 to 8

chessboard scheme

Input

  • On the first line, you will receive L - the label
  • On the second line, you will receive R - the rank

Output

  • On the only line of output, print light or dark , based on your calculations

Constraints

  • a <= L <= h
  • 1 <= R <= 8

Input

a
1

Output

dark

Input

f
3

Output

light

Решение:

let L = gets();

let R = +gets();

if ((L === ‘a’ || L === ‘c’ || L === ‘e’ || L === ‘g’) &&

(R !== 1 && R % 2 === 0)) {

print('light');

} else if ((L === ‘b’ || L === ‘d’ || L === ‘f’ || L === ‘h’) &&

(R !== 1 && R % 2 > 0)) {

print('light');

} else {

print('dark');

}

Благодаря за вниманието!

При декларацията на let L = gets(); let R = +gets(); махни плюсчето - нека бъде let R=gets();
от тип стринг и ще ти даде 100/100 в Judge.

Във втората проверка смени знака > със === (R !== 1 && R % 2 === 1))

Премахнах + пред gets, kakto vegomir ме посъветва и получих 100 точки, не разбирам обаче защо? В този случай, в if стейтмънта сравнявам стринг с число? В случай че оператора е === (strict equality) а не == (loose equality) не би трябвало да има datatype coercion и не мога да си обясня, защо judge чете този вариант за по-правилен?

1 Like

И аз не мога да си го обясня. Някой със отговор?

1 Like

let label = gets();
let rank = Number(gets());

let numberOfLabel;
let color;

numberOfLabel = label.charCodeAt(0); // character a = 97, b = 98 … h = 104

if ((numberOfLabel % 2 == 1 && rank % 2 == 1) || (numberOfLabel % 2 == 0 && rank % 2 == 0))
{
color = ‘dark’;
}
else
{
color = ‘light’;
}

print(color);

1 Like

Moжеш ли да обясниш какво точно правиш с този код?

Да, ще се опитам да го обясня. В едната посока на шахматната дъска имаме номерация. Намирам го за удобно. В другата посока, обаче имаме букви, което за мен е неудобно. За да не изреждаме всяка комбинация между число и буква, преобразувам буквите в техния ASCII код. сега вече имам номерация и в двете посоки. Използвам фактът, че има един вид симетрия в шахматната дъска или иначе казано строга последователност на бели и черни полета. Най първото поле (а/1) вече за мен е 97/1, b/2 е съответно 98/2 и т.н. И тук всичко се свежда до проверка на четни и нечетни числа, като цялата дъска се свежда до четири варианта (т.е. първите четири квадрата в долния ляв ъгъл между a (97) и b (98) по хоризонтала и 1 и 2 по вертикала). Вече лесно се вижда закономерност - при две нечетни или при две четни имаме черно поле. От там идва и условието if ((numberOfLabel % 2 == 1 && rank % 2 == 1) || (numberOfLabel % 2 == 0 && rank % 2 == 0)). Надявам се обяснението ми да е достатъчно ясно и дано съм бил полезен.

2 Likes