Морской бой (расставить одиночные корабли) - Prolog

Узнай цену своей работы

Формулировка задачи:

Вводим :show(10, [[S,2,8],[S,1,1],[S, 4, 7]]) получаем: S _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ S _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ S _ _ _ _ _ _ _ _ _ _ _ _ _ , ну и дальше, 5 пустых рядов Вот мой код:
Писал на Swi Prolog. Что ни делал, застреваю на последней строчки Помогите, люди добрые!
Размерность я сохраняю, так как должна задаваться произвольно.

Решение задачи: «Морской бой (расставить одиночные корабли)»

textual
Листинг программы
show(N, Figures):- show_index(Figures, 1, 1, N).
 
get_symbol(Figures, I, J, F):- 
    member([F, I, J], Figures),
    !.
get_symbol(_, _, _, '-').
    
show_index(_, I, _, N):-
    I > N,
    !.
show_index(Figures, I, J, N):-
    J > N,
    !,
    nl,
    I1 is I+1,
    show_index(Figures, I1, 1, N).
show_index(Figures, I, J, N):-
    get_symbol(Figures, I, J, F), 
    write(' '), write(F),  
    J1 is J+1,  
    show_index(Figures, I, J1, N).

Объяснение кода листинга программы

  1. В первой строке кода определена функция show(N, Figures), которая выводит расположение кораблей в виде фигур на игральной доске размером NxN.
  2. Вторая строка кода вызывает функцию show_index(Figures, 1, 1, N), которая выводит первую фигуру (корабль) на позиции (1,1) и является начальной точкой для рекурсивного вызова функции.
  3. Третья строка кода определяет функцию get_symbol(Figures, I, J, F), которая проверяет, есть ли символ F на позиции (I,J) в списке фигур Figures. Если символ найден, функция возвращает true, в противном случае возвращает false.
  4. Четвертая строка кода определяет символ '-' как отдельный случай для функции get_symbol.
  5. Пятая строка кода определяет функцию showindex(Figures, I, , N), которая проверяет, если позиция I больше N, то есть если мы вышли за пределы доски, то возвращает false и прерывает выполнение функции.
  6. Шестая строка кода вызывает функцию get_symbol(Figures, I, J, F), которая выводит символ F на позиции (I,J) и является начальной точкой для рекурсивного вызова функции.
  7. Седьмая строка кода определяет переменную J1 как J+1.
  8. Восьмая строка кода вызывает функцию show_index(Figures, I, J1, N), которая выводит символ F на следующей позиции (I,J+1) и является начальной точкой для рекурсивного вызова функции.
  9. Девятая строка кода определяет функцию show_index(Figures, I, J, N), которая выводит символ F на позиции (I,J) и является начальной точкой для рекурсивного вызова функции.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5