Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Задача из "101 головоломка"
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
emoface emoface вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.03.2018
Exclamation Задача из "101 головоломка" - 15.03.2018, 19:56

Здравствуйте, форумчане. Есть задача из "101 головоломка", помогите реализовать на языке SWI Prolog. Очень нужна ваша помощь.
Муха на занавеске

На оконной занавеске с рисунком в клетку уселись 9 мух. Случайно они расположились так, что никакие две мухи не оказались в одном и том же ряду — ни прямом, ни косом (рис.)

Спустя несколько минут три мухи сменили места и переползли в соседние, незанятые клетки; остальные 6 не двигались. Но забавно: хотя три мухи перешли на другие места, все 9 снова оказались размещенными так, что никакая пара не находилась в одном прямом или косом ряду. Можете ли вы сказать, какие три мухи и куда пересели?
Миниатюры
316130_8_i_007.png  
Ответить с цитированием
  (#2 (permalink)) Старый
emoface emoface вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.03.2018
По умолчанию 15.03.2018, 21:12

Ответ: a6->b6, b3->a4, d4->d3, но нужно реализовать на SWI Prolog.
Миниатюры
iooe.jpg  
Ответить с цитированием
  (#3 (permalink)) Старый
emoface emoface вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.03.2018
По умолчанию 22.03.2018, 13:24

Если есть идеи, как это возможно решить, просьба поделиться ими, пожалуйста
Ответить с цитированием
  (#4 (permalink)) Старый
aag aag вне форума
ушёл... не вернётся)))
 
Сообщений: 3,400
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
По умолчанию 23.03.2018, 18:31

Задача о ферзях: расставить N ферзей на доске размером NxN так, чтобы ни один не находился под боем.
У Вас N = 9.
Вытаскивайте фсе решения и сравнивайте с заданной позицией - 6 совпадают, ещё 3 попарно соседи.
Ответить с цитированием
  (#5 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 567
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 24.03.2018, 10:18

Цитата:
Сообщение от aag Посмотреть сообщение
У Вас N = 9.
для информации:
у задачи 9 ферзей 352 решений

Последний раз редактировалось SergeMukhin78; 24.03.2018 в 10:18 Причина: 1
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
emoface emoface вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.03.2018
По умолчанию 29.03.2018, 02:40

Цитата:
Сообщение от aag Посмотреть сообщение
Задача о ферзях: расставить N ферзей на доске размером NxN так, чтобы ни один не находился под боем.
У Вас N = 9.
Вытаскивайте фсе решения и сравнивайте с заданной позицией - 6 совпадают, ещё 3 попарно соседи.
Сделал решение на N = 9; Помогите отсюда вытащить ответ на задачу, как это сделать с помощью пролога?
prolog Код:
myhi([]). % когда список пуст - решение найдено

 myhi([ Row/Col | Rest]) :-                   % в противном случае для каждой строки
            myhi(Rest),                       % помещаем муху в каждую высокую строку
            member(Col, [1,2,3,4,5,6,7,8,9]), % и выбираем одну из возможных позиций столбца
            safe( Row/Col, Rest).             % смотрим безопасная ли позиция, если нет,
                                              % возвращаемся назад и пробуем  другую
safe(Anything, []).                           % пустая занавеска всегда безопасная

safe(Row/Col, [Row1/Col1 | Rest]) :-   % проверяем строку
            Col =\= Col1,              % проверяем столбец
            Col1 - Col =\= Row1 - Row, % проверяем диагональ
            Col1 - Col =\= Row - Row1,
            safe(Row/Col, Rest).       % если всё нормально, пробуем подставить
member(X, [X | Tail]).

member(X, [Head | Tail]) :-
            member(X, Tail).
       
myhi([1/R9, 2/R8, 3/R7, 4/R6, 5/R5, 6/R4, 7/R3, 8/R2, 9/R1]).
Ответить с цитированием
  (#7 (permalink)) Старый
emoface emoface вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.03.2018
По умолчанию 05.04.2018, 02:58

Преподаватель сказал, что можно обычным перебором
может кто помочь?
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Prolog 5.2 логическая задача "На выставке собак" Dezezmort Prolog 3 07.05.2016 17:25
Нужна помошь по лабе(Поиск вглубь).Задача "Последняя фишка" MendeJleeB Prolog 5 09.12.2014 19:28
Головоломка "Преступление в гостинице" imported_Rain Prolog 0 29.09.2011 16:03
Головоломка "РЕМЕСЛЕННИКИ" Ierdan Prolog 3 09.04.2011 19:22
Головоломка "Квартет" litva Prolog 18 22.12.2010 18:39
Prolog 5.2. Задача "Убийство в ресторане". Помогите T0mmY Prolog 6 20.12.2010 13:06
Головоломка "8" (пятнашки 3x3) кинга Prolog 5 22.06.2008 18:33
Головоломка "Колесо обозрения" AlexHell Prolog 5 04.06.2006 16:19
Головоломка: "экзамен по «Случайным процессам»" Hensem Prolog 7 04.06.2006 10:37
Головоломка "Новоселье" litva Prolog 11 03.06.2006 11:23
Головоломка "спортсмены", есть одна загвоздка tentul Prolog 3 02.11.2005 14:23
Как сделать чтобы вместо кнопок "Да" и "Нет" высвечивалось украинсие "Так" и "Ні" Форсаж Delphi 5 19.07.2003 19:30



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов