Строки и столбцы шахматной доски

Строки и столбцы шахматной доски

Please complete the security check to access codepen.io

Why do I have to complete a CAPTCHA?

Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.

What can I do to prevent this in the future?

If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.

If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.

Another way to prevent getting this page in the future is to use Privacy Pass. You may need to download version 2.0 now from the Chrome Web Store.

Cloudflare Ray ID: 574b93209a179cc9 • Your IP : 5.45.65.94 • Performance & security by Cloudflare

В 21:23 поступил вопрос в раздел Разное, который вызвал затруднения у обучающегося.

Вопрос вызвавший трудности

Ответ подготовленный экспертами Учись.Ru

Для того чтобы дать полноценный ответ, был привлечен специалист, который хорошо разбирается требуемой тематике "Разное". Ваш вопрос звучал следующим образом: ‘Шахматная доска состоит 8 столбцов и 8 строк. Какое минимальное количество бит потребуется для кодирования координат одного шахматного пол’

После проведенного совещания с другими специалистами нашего сервиса, мы склонны полагать, что правильный ответ на заданный вами вопрос будет звучать следующим образом:

НЕСКОЛЬКО СЛОВ ОБ АВТОРЕ ЭТОГО ОТВЕТА:

Работы, которые я готовлю для студентов, преподаватели всегда оценивают на отлично. Я занимаюсь написанием студенческих работ уже более 4-х лет. За это время, мне еще ни разу не возвращали выполненную работу на доработку! Если вы желаете заказать у меня помощь оставьте заявку на этом сайте. Ознакомиться с отзывами моих клиентов можно на этой странице.

Лаврентьева Арина Георгьевна — автор студенческих работ, заработанная сумма за прошлый месяц 91 600 рублей. Её работа началась с того, что она просто откликнулась на эту вакансию

ПОМОГАЕМ УЧИТЬСЯ НА ОТЛИЧНО!

Выполняем ученические работы любой сложности на заказ. Гарантируем низкие цены и высокое качество.

Продалжаю решать задачки и знакомиться с языком Python на Питонтьютор. Попалась задачка которая мне очень понравилась и заставила попотеть. Условие:

Заданы две клетки шахматной доски. Если они покрашены в один цвет, то выведите слово YES , а если в разные цвета — то NO . Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки.

И тут меня понесло куда-то не туда. Код конечно заработал, но он оказался так далек от совершенства. После решения мне стал доступен код разработчиков задачи, глянув на него я моментально понял принцип его работы и ведь я мог догадаться. Я должен был догадаться! Все было так просто и изящно. Но. У меня получилось как получилось. Обо всем по порядку.

Читайте также:  Новый умный браслет xiaomi

Я рассуждал так. На шахматной доске клетки располагаются в следующей последовательности, если начинается с белой, следом идет черная, следом белая и так далее. Я принял за точку отсчета белую клетку с координатой (1;1).

Всё дальнейшее рассуждение некорректное, но оставлено как есть чтобы передать ход мыcлей.

Следующая белая имела бы координату (1;3), затем (1;5) и последняя в ряду (1;7). Белые второго ряда имели бы координаты (2;2), (2;4), (2;6), (2;8). Следующий третий ряд повторял бы первый ряд и отсюда уже можно было сделать вывод, что белые в нечетных рядах имеют нечетные координаты а в четных четные и наоборот, черные в нечетных рядах имели бы четные координаты а в четных нечетные. Это уже само по себе подсказывает решение, но я в тот момент этого не понял и решил действовать так, буду сравнивать координаты первой и второй клетки шаг за шагом. Чтобы определять нечетные и четные клетки решил воспользоваться остатком от деления на 2. Четные числа имели бы в остатке 0, так как любое четное число делится на два без остатка, отсюда вытекает обратное, что если число делиться на 2 без остатка то оно четное. А нечетные 1. Но и это не пришло мне в голову, логика отдыхала. Поэтому нечетные клетки я обозначил как остаток отделения не равный 0. Координаты первой клетки обозначались переменными (a;b), а второй (c;d). Условие было таким.

  1. ЕСЛИ первая И вторая координата первой клетки (уже очень глупо получается, но рассуждал я к сожалению именно так) была нечетной ИЛИ первая И вторая координата первой клетки была четной
  2. снова проверяем условие ЕСЛИ первая И вторая координата второй клетки тоже нечетная ИЛИ первая и вторая координата второй клетки тоже четная
  3. выводим на экран YES — т.е. две клетки одного цвета. Поясню. Если бы обе координаты каждой клетки были бы нечетные то как было видно выше в нечетных рядах у нас белые клетки, соответственно обе клетки были бы белые, а с четными координатами черные.
  4. ИНАЧЕ, т.е. если данные не соответствуют вышеперечисленному условию выводим на экран NO — т.е. обе клетки разного цвета. Но! Белая клетка может иметь четные координаты в четных рядах. И если первая клетка получает нечетные координаты а вторая четные, то они обе будут белые но программка напишет NO — они разные. На этом этапе именно так. Поэтому продолжаю условие изначальное условие №1
  5. ИНАЧЕ если первая координата первой клетки нечетная И вторая координата первой клетки четная ИЛИ наоборот первая координата первой клетки четная, а вторая нечетная, проверяем условие
  6. ЕСЛИ первая координата второй клетки нечетная И вторая координата второй клетки четная ИЛИ наоборот первая координата второй клетки четная, а вторая нечетная
  7. выводим на экран YES — т.е. две клетки одного цвета. Это условие исправляет тот недочет, когда первая и вторая клетка могут иметь четные и нечетные координаты соответственно и быть при этом одного цвета.
  8. ИНАЧЕ, т.е. если данные не соответствуют вышеперечисленному условию выводим на экран NO
Читайте также:  Ipad 2018 apple com

Данный код прошел все тесты с различными входными данными и успешно выполнил задание.

Что c ним (с кодом) не так? Да наверное все. Это пример того, как не нужно писать код, именно такое программисты называют говнокод.

Как правильно нужно было решить задачу?

Для этого надо было включить логику и хорошенько подумать. Во первых обозначить координаты правильно (x1;y1), а для второй клетки (x2;y2). Если бы я это сделал сразу то тогда возможно понял бы, что не правильно передаю координаты клетки. Для первого ряда координаты белых будут не (1;1), (1;3) и т.д., а (1;1), (3;1)! и т.д.. Для черных (2;1), (4:1) и т.д.. Для второго ряда для белых (2;2), (4;2), а для черных (1;2), (3;2) и т.д.. Всмотримся в координаты повнимательнее. Сумма координатов белых всегда в любом ряду четная, а для черных нечетная! Т.е. можно наугад взять любой столбец по x, например 7 и раз он нечетный значит в сумме с нечетной строкой по y он даст четное число, т.е. белый цвет. Проверим, (7;1) — белый, (7;5) — белый. А в сумме с четным числом даст нечетное, т.е. черный цвет. (7;2) — черный как и (7;6). Что это нам дает? А это нам дает отличное решение.

  1. ЕСЛИ сумма координатов первой клетки четная И сумма координатов второй клетки четнаяИЛИ сумма координатов первой клетки нечетнаяИ сумма координатов второй клетки нечетная
  2. выводим на экран YES — т.е. две клетки одного цвета.
  3. ИНАЧЕ т.е. если данные не соответствуют вышеперечисленному условию выводим на экран NO.

Можно поступить еще проще, просто сравнить остатки от деления на 2 сумм координатов первой и второй клетки, если они равны, то соответственно клетки тоже одинаковые, ведь если обе клетки с четными координатами то остатки будут нулями, а если нечетные то единицей:

Читайте также:  Как обновить рекавери twrp до последней версии

Если и дальше рассуждать логически можно прийти к следующему. Сумма координатов каждой из клеток может быть либо четной либо нечетной. А сумма двух четных или двух нечетных чисел всегда будет четное число. Отсюда мы можем написать следующее условие. Если сумма координатов обеих клеток четное число то значит и клетки одинаковые.

Это и есть код разработчиков задачи. Цель моего обучения программированию прийти в итоге к вот таким изящным решениям задач и писать не говнокод, а писать качественный код, лаконичный код, чтобы программки были как можно меньше, менее требовательны к ресурсам при том же функционале и за счет этого были быстрые и качественные. Задачки с шахматами продолжатся, теперь уже с фигурами, про них напишу в следующей заметки, так как эта и так получилась очень объемной.

Опубликованно April 13th, 2018 by Aziz Madazimov

Ссылка на основную публикацию
Adblock detector