Haskell代写 | CMT304 Programming Paradigms Part 2: Functional Programming
本次英国代写主要为Haskell数独游戏相关的assignment
Assignment
Consider the problem of solving a 2 2 Sudoku puzzle. It is played on a grid consisting of
44 cells subdivided into four 22 squares as shown in the figure below. Some of the cells
are empty, some of them are filled with digits from 1 through 4. The aim is to fill in the empty
cells such that every row, every column, and every 22 square contains the digits 1, 2, 3, 4.
Task 1:
Write an efficient Haskell function that can solve this problem. Its input is a matrix, repre-
sented as a list of rows, where each row is a list of the numbers in the grid. The numbers
are either 1, 2, 3, 4 if the field is filled or 0 if the field is empty. The output of the function
should be one solution to the problem, in the same matrix format with the 0 values replaced
by a number 1 to 4 (or an error message if the input has no valid solution). For example, for
the above grid, the input is
input = [[3,4,0,0],
[2,0,3,0],
[0,3,0,2],
[0,0,1,3]]
and one solution is
output = [[3,4,2,1],
[2,1,3,4],
[1,3,4,2],
[4,2,1,3]].
Make sure you clearly document your approach and how to use your function in the com-
ments. Note that you must write your own code to solve this problem and not just call a
2
library function to solve such problems. You may use the standard libraries listed in the
Haskell 2010 language report, but not any other libraries.
Task 2: Write a short report on logic vs. functional programming related to the problem:
1. Provide, in up to 300 words, two arguments for and two arguments against using
functional programming to solve the problem.
2. Discuss, in up to 300 words, whether the functional programming paradigm is suitable
for this problem or whether another paradigm of your choice is more appropriate,
based on your previous arguments.
The word limits are an upper limit, not a target length. Text longer than the word limit for
each point will be ignored. Clearly mark each argument in your answer of the first point and
indicate whether it is for or against. Only provide two arguments for and against; additional
arguments will be ignored.