0 / 0 / 0
Регистрация: 20.03.2017
Сообщений: 5
1

Определить, возможно ли построить из заданных костяшек домино непрерывные цепочки

20.03.2017, 22:11. Показов 1931. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Совершенно не знаю синтаксис языка Prolog, но надо написать программу для зачёта.
d(2,6) это домино
Есть задача: "Написать программу, которой дается набор костяшек домино, а она определяют, возможно ли построить из них непрерывные цепочки или нет"
Пример работы:
?- playout([d(2,6),d(0,4),d(2,4),d(1,3),d(1,6),d(0,1),d(4,4)]).
true
Потому, что можно разместить в таком порядке
[d(1,0),d(0,4),d(4,4),d(4,2),d(2,6),d(6,1),d(1,3)]

?- playout([d(0,3),d(1,2),d(5,6),d(5,5),d(0,2),d(0,5),d(3,5)]).
false.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2017, 22:11
Ответы с готовыми решениями:

Построение цепочки из костяшек домино
Берутся случайных N костяшек из одного набора домино (1<=N<=28). Задача состоит в том,...

Задача "Домино": сгенерировать рандомно 28 костяшек домино
Надо написать код, который задавал бы рандомно 28 пар неповторяющихся элементов от 0 до 6. то есть...

Проверить правильность расстановки костяшек домино
Дан массив из 22 целых чисел из интервала от 0 до 66, представляющих собой условные обозначения...

Реализовать алгоритм заполнения костяшек домино значениями
Не знаю как реализовать алгоритм заполнения костяшек значениями. Изначально мне дано только M -...

5
793 / 597 / 156
Регистрация: 07.10.2013
Сообщений: 1,325
21.03.2017, 11:15 2
Цитата Сообщение от Haverq Посмотреть сообщение
Совершенно не знаю синтаксис языка Prolog
Решение данной задачи скорее всего не даст вам возможность сдать зачет, так что все-таки учите.
У.Клоксин, К.Меллиш. Программирование на языке Пролог
На освоение начальных глав вряд ли уйдет много времени...

Добавлено через 1 час 4 минуты
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
playout_d(Ds, Ps) :-
    select(d(D1, D2), Ds, Ds1),
    ( P1 = d(D1, D2)
    ; P1 = d(D2, D1)
    ),
    playout_d(Ds1, [P1], Ps0),
    reverse(Ps0, Ps).
    
playout_d([], Ps, Ps).
playout_d(Ds, [P1 | Ps0], Ps) :-
    select(d(D1, D2), Ds, Ds1),
    ( P1 = d(_, D1), P2 = d(D1, D2)
    ; P1 = d(_, D2), P2 = d(D2, D1)
    ),
    playout_d(Ds1, [P2, P1 | Ps0], Ps).
Prolog
1
2
3
4
5
6
7
8
9
10
?- playout_d([d(2,6),d(0,4),d(2,4),d(1,3),d(1,6),d(0,1),d(4,4)], Ps).
Ps = [d(3, 1), d(1, 6), d(6, 2), d(2, 4), d(4, 4), d(4, 0), d(0, 1)] ;
Ps = [d(3, 1), d(1, 6), d(6, 2), d(2, 4), d(4, 4), d(4, 0), d(0, 1)] ;
Ps = [d(3, 1), d(1, 0), d(0, 4), d(4, 4), d(4, 2), d(2, 6), d(6, 1)] ;
Ps = [d(3, 1), d(1, 0), d(0, 4), d(4, 4), d(4, 2), d(2, 6), d(6, 1)] ;
Ps = [d(1, 6), d(6, 2), d(2, 4), d(4, 4), d(4, 0), d(0, 1), d(1, 3)] ;
Ps = [d(1, 6), d(6, 2), d(2, 4), d(4, 4), d(4, 0), d(0, 1), d(1, 3)] ;
Ps = [d(1, 0), d(0, 4), d(4, 4), d(4, 2), d(2, 6), d(6, 1), d(1, 3)] ;
Ps = [d(1, 0), d(0, 4), d(4, 4), d(4, 2), d(2, 6), d(6, 1), d(1, 3)] ;
false.
2
793 / 597 / 156
Регистрация: 07.10.2013
Сообщений: 1,325
21.03.2017, 11:19 3
domino
Миниатюры
Определить, возможно ли построить из заданных костяшек домино непрерывные цепочки  
1
793 / 597 / 156
Регистрация: 07.10.2013
Сообщений: 1,325
21.03.2017, 12:55 4
Prolog
1
2
3
select1(Elem, [Elem | Tail], Tail).
select1(Elem, [Head | Tail], [Head | Rest]) :-
    select1(Elem, Tail, Rest).
Добавлено через 15 минут
Prolog
1
2
3
4
5
6
reverse1(Xs, Ys) :-
    reverse1(Xs, [], Ys).
 
reverse1([], Ys, Ys).
reverse1([X|Xs], Rs, Ys) :-
    reverse1(Xs, [X|Rs], Ys).
Намудрил можно и без реверс
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
playout_d1(Ds, Ps) :-
    select1(d(D1, D2), Ds, Ds1),
    ( P1 = d(D1, D2)
    ; P1 = d(D2, D1)
    ),
    playout_d1(Ds1, P1, Ps).
 
playout_d1([], P, [P]).
playout_d1(Ds, P1, [P1 | Ps0]) :-
    select1(d(D1, D2), Ds, Ds1),
    ( P1 = d(_, D1), P2 = d(D1, D2)
    ; P1 = d(_, D2), P2 = d(D2, D1)
    ),
    playout_d1(Ds1, P2, Ps0).
 
select1(Elem, [Elem | Tail], Tail).
select1(Elem, [Head | Tail], [Head | Rest]) :-
    select1(Elem, Tail, Rest).
2
0 / 0 / 0
Регистрация: 20.03.2017
Сообщений: 5
21.03.2017, 17:59  [ТС] 5
Огромное спасибо. Но как сделать чтобы в инпуте было только playout_d([d(2,6),d(0,4),d(2,4),d(1,3),d(1,6),d(0,1),d(4,4)]). (без Ps) и в аутпуте только true или false?
0
793 / 597 / 156
Регистрация: 07.10.2013
Сообщений: 1,325
22.03.2017, 09:40 6
Лучший ответ Сообщение было отмечено Haverq как решение

Решение

Цитата Сообщение от Haverq Посмотреть сообщение
только true или false
убрать не нужное
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
playout_d2(Ds) :-
    select1(d(D1, D2), Ds, Ds1),
    ( P1 = d(D1, D2)
    ; P1 = d(D2, D1)
    ),
    playout_d2(Ds1, P1),
    !.
 
playout_d2([], _).
playout_d2(Ds, P1) :-
    select1(d(D1, D2), Ds, Ds1),
    ( P1 = d(_, D1), P2 = d(D1, D2)
    ; P1 = d(_, D2), P2 = d(D2, D1)
    ),
    playout_d2(Ds1, P2).
    
select1(Elem, [Elem | Tail], Tail).
select1(Elem, [Head | Tail], [Head | Rest]) :-
    select1(Elem, Tail, Rest).
1
22.03.2017, 09:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2017, 09:40
Помогаю со студенческими работами здесь

Рекурсия: выстроить из костяшек домино правильную последовательность максимальной длины
Всем доброго времени суток. Задача: Имеется N костей из нескольких комплектов домино. Выстроить...

Построить алгоритм выкладывания костей домино так, чтобы в конце цепочки "на руках" осталось максимум очков.
Ребят, помогите решить задачу пожалуйста :) Условие: Данные N косточек домино по правилам игры...

Найти все цепи, которые можно составить из N костяшек, взятых из одного набора домино
Домино. Костяшки домино можно выложить в цепь, состыковывая их половинками с равными количествами...

Домино. Построение цепочки из выбранных 7 фишек. Графическая демонстрация
Цель задачи: Построение цепочки из выбранных 7 фишек. Графическая демонстрация. Выбор фишек...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru