Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 01.11.2020
Сообщений: 9

Игра в пятнадцать

24.11.2021, 19:34. Показов 974. Ответов 0

Студворк — интернет-сервис помощи студентам
Игра в 15.(в данном коде 8) Смысл игры: "Представляет собой набор одинаковых квадратных костяшек с нанесёнными числами, заключённых в квадратную коробку. Длина стороны коробки в четыре раза больше длины стороны костяшек для набора из 15 элементов, соответственно в коробке остаётся незаполненным одно квадратное поле. Цель игры — перемещая костяшки по коробке, добиться упорядочивания их по номерам, желательно сделав как можно меньше перемещений."

Есть начала кода. Пустое поле - это ноль. Имеющая функция показывает только возможные варианты перемещения 0(Например, если ноль в середине строки, в выводе покажется 4 возможных варианта перемещения - вправо, влево, вниз, вверх). Нужно сделать так, чтобы ноль перемещался дальше. Пока из имеющего в условии data=[3,1,6,7,0,5,4,2,8] не получилась матрица с порядком: 1 2 3 4 5 6 7 8 0

Буду ооочень благодарен, если кто-нибудь подскажет или скинет законченный код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import copy
import random
#import numpy as np
 
data=[3,1,6,7,0,5,4,2,8]
H=3
W=3
 
print('начальная позиция')    
for i in range(H):
    for j in range(W):
        print ("%i"%data[i*(W)+j],end=" ")
    print()
print( )
 
    
def next_state(data_):
    #найти позицию 0(i,j)
    index = data_.index(0)
    i = index//H
    j = index%H
    #print(i,'   ',j)
    #найти позиции клеток которые могут переместиться в 0(пустую)
    variants = 4
    possible=[1,1,1,1] #список содержит позиции возможных ячеек(left,right, top,bottom)
    left_x = i
    left_y = j-1
 
    right_x = i
    right_y = j+1
 
    top_x = i-1
    top_y = j
 
    bottom_x = i+1
    bottom_y = j
 
    
 
    #отсеить клетки, которые невозможно реализовать
    if left_y == -1:
        variants -= 1
        possible[0]=0
    if right_y == 3:
        variants -= 1
        possible[1]=0
    if top_x == -1:
        variants -= 1
        possible[2]=0
    if bottom_x == +3:
        variants -= 1
        possible[3]=0
    #print(variants)
    #print(possible)
    #сгенерировать позиции, которые взможны из текущей
    next_s=[]
    if possible[0] == 1:
        # преобразовываем столбец и строку в одномерный индекс
        index_2 = left_x * (W) + left_y
        # делаем копию начального массива
        data_2 = copy.deepcopy(data_)
        #меняем местами две ячейки
        data_2[index_2], data_2[index]=data_2[index],data_2[index_2]
        #data_2 = np.array(data_2)
        next_s.append(data_2)
    
 
    if possible[1] == 1:
        # преобразовываем столбец и строку в одномерный индекс
        index_2 = right_x * (W) + right_y
        # делаем копию начального массива
        data_3 = copy.deepcopy(data_)
        #меняем местами две ячейки
        data_3[index_2], data_3[index]=data_3[index],data_3[index_2]
        #data_3 = np.array(data_3)
        next_s.append(data_3)
    
 
    #вывести эти позиции на экран
    if possible[2] == 1:
        # преобразовываем столбец и строку в одномерный индекс
        index_2 = top_x * (W) + top_y
        # делаем копию начального массива
        data_4 = copy.deepcopy(data_)
        #меняем местами две ячейки
        data_4[index_2], data_4[index]=data_4[index],data_4[index_2]
        #data_4 = np.array(data_4)
        next_s.append(data_4)
    
 
    #вывести эти позиции на экран
    if possible[3] == 1:
        # преобразовываем столбец и строку в одномерный индекс
        index_2 = bottom_x * (W) + bottom_y
        # делаем копию начального массива
        data_5 = copy.deepcopy(data_)
        #меняем местами две ячейки
        data_5[index_2], data_5[index]=data_5[index],data_5[index_2]
        #data_5 = np.array(data_5)
        next_s.append(data_5)
    
        
   #next_s = np.vstack((data_2,data_3,data_4,data_5))
    return variants, next_s
 
 
   
#вывести эти позиции на экран
V, s = next_state(data)
for v in range(V):
    for i in range(H):
        for j in range(W):
            print ("%i"%s[v][i*(W)+j],end=" ")
        print()
    print( )
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.11.2021, 19:34
Ответы с готовыми решениями:

Игра в пятнадцать
Требуется выполнить задачу с использованием массивов. Я в тупике Всем хорошо известна "Игра в 15", представляющая собой 15 ...

Игра в пятнадцать
Есть функция, но она ещё не совсем готова. Она будет хорошо работать для возврата 4-х вариантов. Однако когда будет получаться меньше 4-х...

Как усовершенствовать код "Игра 15 (пятнадцать)"
for (int i = 0; i < ButtonArray.Count(); i++) { if (ButtonArray.Location.X == 0 && ButtonArray.Location.Y...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2021, 19:34
Помогаю со студенческими работами здесь

Разработать игровое приложение <<Пятнадцать>>(массивы)
Разработать игровое приложение &lt;&lt;Пятнадцать&gt;&gt;. Для этого представьте квадрат массивом из 16 элементов label. Значение их свойства Caption...

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

В городе находятся пятнадцать продовольственных магазинов и шесть непродовольственных
Решите пожалуйста с помощью теоремы сложения и умножения вероятностей В городе находятся пятнадцать продовольственных магазинов и шесть...

По "пятнадцать" драйверов за раз
Здравствуйте, проблема такая: после подключения модема (модель - megafon modem E352b) к системнику сразу происходит установка нескольких...

Создать иерархию классов игра – спортивная игра – волейбол
Создать иерархию классов игра – спортивная игра – волейбол. Определить конструкторы, деструктор, оператор присваивания и другие необходимые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru