Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Поиск всех счастливых билетов с числом 6
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Maple Maple вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.11.2008
По умолчанию 23.11.2008, 18:38

Дана задача: Поиск всех счастливых билетов с числом 6:
1) сгенерировать все билеты в виде списка длиной 6
2) поиск счастливых билетов

Счастливый билет, это когда сумма первых и последних трех цифр одинакова (1+2+3 = 0+5+1).

1) Генерирую:
Код:
in(X,[X|_]).
in(X,[_|T]):-
in(X,T).
gen(0,[]).
gen(N,[X|T]):- 
    M is N-1,
    gen(M,T),
    in(X,[0,1,2,3,4,5,6,7,8,9]).
Вызов: gen(6,L).

Вопрос: Как осуществить поиск счастливых билетов?
Можно ли разбить сгенерированный список на элементы?
L=[A,B,C,D,E,F].
bilet(L):-A+B+C=D+E+F.

ИЛИ работать с подсчетом сумм. Т.е. считаем всю сумму
Код:
sum([], 0). 
sum([H|T],S):-
           sum(T,S_T), 
           S is S_T+H.
Как подсчитать сумму первых 3-х элементов и сравнить?
Вызов должен выглядеть примерно так: a(X):-gen(6,L),lucky(L,X).

Тут пример для строк и чисел: <a href="http://www.hardforum.ru/t62437" target="_blank">http://www.progz.ru/forum/index.php?showto...частливый+билет </a>. Мне не помогло
Ответить с цитированием
  (#2 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 8,168
Сказал(а) спасибо: 5
Поблагодарили 339 раз(а) в 338 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 24.11.2008, 18:51

Цитата:
Мне не помогло
Что значит Вам не помогло?
Это таблетка как раз для Вас. Особенно второй пример.
И даже числа приведены такие же как у Вас: 1+2+3 = 0+5+1.

А если Вам надо проверять списки длиной 6, то вот:
test([Q,W,E,R,T,Y]):-Q+W+E=R+T+Y.
Ответить с цитированием
  (#3 (permalink)) Старый
Maple Maple вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.11.2008
По умолчанию 24.11.2008, 20:00

Вот окончательный код в классическом Прологе:

Код:
in(X,[X|_]).
in(X,[_|T]):-
in(X,T).
gen(0,[]).
gen(N,[X|T]):- 
    M is N-1,
    gen(M,T),
    in(X,[0,1,2,3,4,5,6,7,8,9]).

bilet([Q,W,E,R,T,Y]):-
    Z is Q+W+E, 
    X is R+T+Y,
    Z is X.
Спасибо за указание верного направления Был так рядом c ответом.
Ответить с цитированием
  (#4 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 8,168
Сказал(а) спасибо: 5
Поблагодарили 339 раз(а) в 338 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 25.11.2008, 00:11

Что-то мне кажется, что прогу Вашу можно написать в ISO-Прологе более лаконично, и будет она более эффективней. Вы генерите список из шести ссылочных переменных, которые потом означиваете, это неэффективно и длинно. Можно сделать проще: генерить список из трёх элементов, вычислить их сумму, а потом догенерить этот список другими тремя элементами, сумма которых должна равняться первой сумме.
Ответить с цитированием
  (#5 (permalink)) Старый
raydac raydac вне форума
Member
 
Сообщений: 141
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.09.2008
Адрес: Tallinn, Estonia
По умолчанию 25.11.2008, 13:40

код на ISO который строит список всех комбинаций которые будут счастливыми

Код:
:- dynamic(zzz_list/1).

% последовательно перебирает X значениями из списка
from_list(X,[X|_]).
from_list(X,[Y|L]):-from_list(X,L).

% список вариантов цифр используемых при переборе
num(X):-from_list(X,[0,1,3,4,5,6,7,8,9]).

% добавляет новый счастливый список X в уже существующий список счастливых номеров
put_value(X):-(zzz_list(Old),!,
                    retract(zzz_list(Old)),NewList = [X|Old],asserta(zzz_list(NewList)),nl);
                    asserta(zzz_list([X|[]])).

% возвращает список счастливых номеров N и чистит базу
get_hc_list(N):-zzz_list(N),abolish(zzz_list/1).

% генерирует список счастливых номеров
gen_hc:-num(A),num(B),num(C),num(D),num(E),num(F),
                                 Lft is A+B+C, Rght is D+E+F, Lft=Rght,
                                       Lst=[A,B,C,D,E,F],
                                           put_value(Lst),fail.

% сформирует список всех счастливых комбинаций и вернет его в List
all_happy_combnations(List):-not(gen_hc), get_hc_list(List).
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 8,168
Сказал(а) спасибо: 5
Поблагодарили 339 раз(а) в 338 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 26.11.2008, 19:36

Цитата:
код на ISO который строит список всех комбинаций которые будут счастливыми
А вот код на VIP7, который выводит список счастливых комбинаций длиной 6:
Код:
 class predicates
h:(integer_list) -> integer_list nondeterm.
clauses
h(L)=[Q,W,E,R,T,Y]:-
    Q=getMember_nd(L),W=getMember_nd(L),E=getMember_nd(L),S=Q+W+E,
    R=getMember_nd(L),T=getMember_nd(L),Y=getMember_nd(L),R+T+Y=S.
run():-write([L||L=h([0,1,2,3,4,5,6,7,8,9])]).
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для продажи театральных билетов на GNU Common Lisp Alex054 Lisp 0 25.12.2011 16:12
Помогите пожалуйста с решением программы в прологе о продаже театральных билетов Alex054 Prolog 0 18.12.2011 22:12
Поиск всех независимых множеств графа alam Prolog 10 30.05.2011 16:37
Поиск слова с макс. числом гласных makc200690 Prolog 0 12.11.2009 22:52
создание билетов Jodu Pascal 2 22.03.2008 19:52
Вывод всех свойств всех объектов imported_Жора Prolog 2 30.05.2007 21:41
Поиск всех циклов в графе APM Алгоритмы 1 16.05.2007 16:59
БД для продажи билетов в кино lendrik Prolog 0 24.04.2007 20:08
поиск всех максимальных значений в диапазоне ewig Visual Basic 3 22.07.2006 18:32
Перебор всех компонентов и установка свойства у всех Ghostep Delphi 3 05.05.2006 16:21
Создание программы на поиск всех натуральных чисел не превосходящих числа m FARA Вопросы начинающих программистов 2 07.12.2005 12:58
Как узнать является ли строка числом или нет Baltika+ Visual C++ 2 14.10.2005 13:48



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