init
This commit is contained in:
commit
db96d762ad
5 changed files with 77 additions and 0 deletions
1
.envrc
Normal file
1
.envrc
Normal file
|
|
@ -0,0 +1 @@
|
|||
use flake
|
||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.direnv
|
||||
30
README.md
Normal file
30
README.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Project 1: Maths Puzzles
|
||||
|
||||
## Math Puzzle
|
||||
- each digit must be 1-9
|
||||
- each row contains no repeated digit
|
||||
- each column contains no repeated digit
|
||||
- all squares on the diagonal line from top left corner to bottom right corner must contain the same value
|
||||
- the heading of each row holds either:
|
||||
- the sum of all the digits in that row
|
||||
- the product of all the digits in that row
|
||||
- the heading of each column holds either:
|
||||
- the sum of all the digits in that column
|
||||
- the product of all the digits in that column
|
||||
|
||||
## Input
|
||||
A math puzzle with most/all squares empty **except** for the headings
|
||||
|
||||
## Solution
|
||||
|
||||
### Structure
|
||||
A predicate `puzzle_solution/1` which holds when the argument is a solved math puzzle
|
||||
|
||||
### Approach
|
||||
Utilise constraint logic programming
|
||||
1. unify all squares on the diagonal
|
||||
2. check rows are valid
|
||||
1. all distinct
|
||||
2. sum to heading
|
||||
3. product to head
|
||||
3. check columns are valid via `transpose/2`
|
||||
25
flake.lock
generated
Normal file
25
flake.lock
generated
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1746904237,
|
||||
"narHash": "sha256-3e+AVBczosP5dCLQmMoMEogM57gmZ2qrVSrmq9aResQ=",
|
||||
"rev": "d89fc19e405cb2d55ce7cc114356846a0ee5e956",
|
||||
"revCount": 797896,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.797896%2Brev-d89fc19e405cb2d55ce7cc114356846a0ee5e956/0196c1a7-7ad3-74a9-9d50-1b854aca6d6c/source.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://flakehub.com/f/NixOS/nixpkgs/0.1"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
20
flake.nix
Normal file
20
flake.nix
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
description = "A Nix-flake-based Swi-prolog development environment";
|
||||
|
||||
inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1";
|
||||
|
||||
outputs = inputs:
|
||||
let
|
||||
supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||
forEachSupportedSystem = f: inputs.nixpkgs.lib.genAttrs supportedSystems (system: f {
|
||||
pkgs = import inputs.nixpkgs { inherit system; };
|
||||
});
|
||||
in
|
||||
{
|
||||
devShells = forEachSupportedSystem ({ pkgs }: {
|
||||
default = pkgs.mkShell {
|
||||
packages = with pkgs; [ swi-prolog ];
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue