Игра «Погаси свет» · Шаг 3 из 4
Перемешать щелчками
Если зажечь лампочки наугад, половина раскладок 5 × 5 окажется нерешаемой — человек будет мучиться впустую. Поэтому раскладку делают иначе: берут погасшее поле и щёлкают по нему наугад несколько раз. Что щелчками зажжено, щелчками и гасится.
Что сделать
Получите раскладку из погасшего поля случайными щелчками; погасло всё — щёлкайте ещё, пока не загорится.
Что приходит
nazhat— щелчок:nazhat(pole, stroka, stolbec)даёт новое полеvysotaиshirina— размер поляsluchay— генератор случайностей, какrandom.Randomnazhatiy— сколько раз щёлкнуть
Что вернуть
Поле — список строк, где горит хоть одна лампочка.
Допишите функцию peremeshat в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Игра зовёт peremeshat в начале каждой партии — с вашим щелчком из шага 1 и десятью нажатиями. Решите шаг — и раскладки станут разными, а не вечным крестом посередине.
Без этого шага: раскладка всегда одна — крест посередине.
В образце вместо настоящего щелчка — игрушка: она переключает одну клетку и ту, что над ней. Поле 2 × 3, три щелчка с генератором random.Random(1): первым выпадает ряд, потом столбец — клетки (0, 2), (0, 1) и снова (0, 1). Второй щелчок по (0, 1) гасит то, что зажёг первый, и горит одна (0, 2): ["..#", "..."].
Начните с погасшего поля: vysota строк по shirina точек.
Щёлкните nazhatiy раз. Каждый щелчок — сначала stroka = sluchay.randrange(vysota), потом stolbec = sluchay.randrange(shirina), потом pole = nazhat(pole, stroka, stolbec). Порядок вызовов генератора важен: тест знает, какие клетки он выдаст.
Если после этого не горит ни одной лампочки — щёлкайте ещё по одному разу тем же способом, пока не загорится хоть одна. nazhatiy может быть и нулём.
Образцовый тест целиком
import random
def igrushka(pole, stroka, stolbec):
# переключает клетку и ту, что над ней
novoe = []
for i, ryad in enumerate(pole):
if i in (stroka, stroka - 1):
znak = "." if ryad[stolbec] == "#" else "#"
ryad = ryad[:stolbec] + znak + ryad[stolbec + 1:]
novoe.append(ryad)
return novoe
peremeshat(igrushka, 2, 3, random.Random(1), 3)
['..#', '...']
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.