До 30 ноября

Скидки до 81 000 руб и вторая профессия в подарок!

Главная | Все статьи | Мотивация

Решаем задачу: компьютерные шахматы и вес Хэмминга

Время чтения статьи ~2 минуты
Решаем задачу: компьютерные шахматы и вес Хэмминга главное изображение

Условия

Начинающий программист Денис решил написать первый проект — браузерную версию компьютерных шахмат. Сначала все шло отлично — Денис нарисовал доску, где каждая клетка соответствует биту, закрепил отдельные значения за фигурами и написал алгоритм, который следит за происходящим на доске, прописал серверную часть и попробовал запустить приложение.

Спустя некоторое время разработчик заметил, что алгоритм иногда неправильно интерпретирует его действия: после хода фигуры то исчезают с доски, то появляются в неожиданных местах. Почитав форумы, программист выяснил, что проблема может возникать из-за ошибок, которые приводят к потере данных (искажению битов) при передаче пакетов от сервера к клиенту.

Тогда Денис решил добавить функцию проверки потери данных — вес Хэмминга, который по определенной схеме перебирает все биты в пакете и указывает на тот, в котором произошло искажение.

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

Условия примера звучат так:

Число Хэмминга количество единиц в двоичном представлении числа. Нужно реализовать функцию hammingWeight(), которая принимает целое число в качестве параметра и возвращает вес Хэмминга.

hammingWeight(0); // 0
hammingWeight(4); // 1
hammingWeight(101); // 4

Читайте также: Как сохранять фокус на протяжении всего обучения: советы от Хекслета

Решение

Эта задача — из испытаний базового курса по Java на Хекслете. С ней справились 89% наших студентов. Ниже опубликован разбор решения — вы можете сравнить свое решение с нашим или посмотреть реализацию, если самостоятельно решить задачу не удается.

Задачу можно решить на нескольких языках программирования например, на Java или PHP. Ниже опубликован вариант решения на Java, по которому можно воспроизвести определение веса Хемминга.

import java.util.Arrays;
import java.util.List;

public class HammingWeight {
    public static int hammingWeight(int value) {

        int weight = 0;
        List<String> digits = Arrays.asList(Integer.toBinaryString(value).split(""));
        for (String digit : digits) {
            if (digit.equals("1")) {
                weight += 1;
            }
        }
        return weight;
    }
}

О решении этой задачи на PHP на примере код-ревью одного из студентов Хекслета можно почитать здесь.

Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях

Аватар пользователя Oleg Sabitov
Oleg Sabitov 11 февраля 2022
3
Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 28 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 28 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 28 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 28 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 28 ноября
профессия
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 28 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 28 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 28 ноября