Сапер

Сапер

Середня

Вступ

Сапер - популярна гра, у якій гравець має знайти міни за числовими підказками, що показують, скільки мін безпосередньо межує з клітинкою (по горизонталі, вертикалі або діагоналі).

Вказівки

У цій вправі ми додаємо кількість мін до порожніх клітинок готового ігрового поля «Сапер». Саме поле має форму прямокутника, що складається з клітинок, і кожна з них або порожня (' '), або містить міну ('*').

Для кожної порожньої клітинки порахуймо кількість сусідніх мін (по горизонталі, по вертикалі, по діагоналі). Якщо в порожньої клітинки немає сусідніх мін, залишмо її порожньою. Інакше замінімо її на кількість сусідніх мін.

Наприклад, ми можемо отримати поле 5 x 4 такого вигляду (тут порожні клітинки позначено символом '·' для показу на екрані):

·*·*·
··*··
··*··
·····

І ось на що його має перетворити наш код:

1*3*1
13*31
·2*2·
·111·

Зауваження

Координати x, y часто подають як Point, а це приводить до кількох корисних функцій для роботи з точками, які можуть тут допомогти. Або ж це можна подати як двовимірний масив, що теж буває зручно. У будь-якому разі визначення кількох описових методів розширення може зробити наше рішення значно читабельнішим і елегантнішим.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Pharo Exercism

Час розпочати Сапер?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Pharo, а також 50 вправ та справжнє наставництво від людей, і все це безкоштовно.

Глибоке занурення у Сапер!

Ми розглянемо вкладені цикли `for`, вдале застосування min/max для спрощення перевірки меж, функціональні конвеєри та роботу з двовимірними матрицями.