Здравейте, имам проблем с тази задача. Решението, което съм написал, работи кореткно спрямо изискванията на задачата, но от джъдж получавам 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
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
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);
2 Likes
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)). Надявам се обяснението ми да е достатъчно ясно и дано съм бил полезен.
3 Likes