June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
132
Task/Twelve-statements/Pascal/twelve-statements.pascal
Normal file
132
Task/Twelve-statements/Pascal/twelve-statements.pascal
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
PROGRAM TwelveStatements;
|
||||
|
||||
{
|
||||
This program searches through the 4095 possible sets
|
||||
of 12 statements for any which may be self-consistent.
|
||||
}
|
||||
|
||||
CONST
|
||||
max12b = 4095; { Largest 12 byte number. }
|
||||
|
||||
TYPE
|
||||
statnum = 1..12; { statement numbers }
|
||||
statset = set of statnum; { sets of statements }
|
||||
|
||||
VAR { global variables for use in main algorithm }
|
||||
trialNumber: integer;
|
||||
trialSet, testResults: statset;
|
||||
|
||||
function Convert(n: integer): statset;
|
||||
{
|
||||
Converts an integer into a set of statements.
|
||||
For each "1" in the last 12 bits of
|
||||
the integer's binary representation,
|
||||
a statement number is put into the set.
|
||||
}
|
||||
var
|
||||
i: statnum;
|
||||
s: statset;
|
||||
begin
|
||||
s := []; { Empty set. }
|
||||
for i := 12 downto 1 do begin
|
||||
if (n mod 2) = 1 then s := s + [i];
|
||||
n := n div 2
|
||||
end;
|
||||
Convert := s
|
||||
end;
|
||||
|
||||
procedure Express(truths: statset);
|
||||
{
|
||||
Writes the statement number of each "truth",
|
||||
with at least one space in front,
|
||||
all on one line.
|
||||
}
|
||||
var n: statnum;
|
||||
begin
|
||||
for n := 1 to 12 do
|
||||
if n in truths then write(n:3);
|
||||
writeln
|
||||
end;
|
||||
|
||||
function Count(truths: statset): integer;
|
||||
{ Counts the statement numbers in the set. }
|
||||
var
|
||||
s: statnum;
|
||||
i: integer;
|
||||
begin
|
||||
i := 0;
|
||||
for s := 1 to 12 do if s in truths then i := i + 1;
|
||||
Count := i
|
||||
end;
|
||||
|
||||
function Test(truths: statset): statset;
|
||||
{
|
||||
Starts with a set of supposedly true statements
|
||||
and checks which of the 12 statements can actually
|
||||
be confirmed about the set itself.
|
||||
}
|
||||
var
|
||||
evens, odds, confirmations: statset;
|
||||
begin
|
||||
evens := [2, 4, 6, 8, 10, 12];
|
||||
odds := [1, 3, 5, 7, 9, 11];
|
||||
|
||||
{ Statement 1 is necessarily true. }
|
||||
confirmations := [1];
|
||||
|
||||
{ Statement 2 }
|
||||
if Count(truths * [7..12]) = 3
|
||||
then confirmations := confirmations + [2];
|
||||
|
||||
{ Statement 3 }
|
||||
if Count(truths * evens) = 2
|
||||
then confirmations := confirmations + [3];
|
||||
|
||||
{ Statement 4 is true if 6 and 7 are true, or if 5 is false. }
|
||||
if ([6, 7] <= truths) or not (5 in truths)
|
||||
then confirmations := confirmations + [4];
|
||||
|
||||
{ Statement 5 }
|
||||
if [2, 3, 4] <= truths
|
||||
then confirmations := confirmations + [5];
|
||||
|
||||
{ Statement 6 }
|
||||
if Count(truths * odds) = 4
|
||||
then confirmations := confirmations + [6];
|
||||
|
||||
{ Statement 7 }
|
||||
if (2 in truths) xor (3 in truths)
|
||||
then confirmations := confirmations + [7];
|
||||
|
||||
{ Statement 8 is true if 5 and 6 are true, or if 7 is false. }
|
||||
if ([5, 6] <= truths) or not (7 in truths)
|
||||
then confirmations := confirmations + [8];
|
||||
|
||||
{ Statement 9 }
|
||||
if Count(truths * [1..6]) = 3
|
||||
then confirmations := confirmations + [9];
|
||||
|
||||
{ Statement 10 }
|
||||
if [11, 12] <= truths
|
||||
then confirmations := confirmations + [10];
|
||||
|
||||
{ Statement 11 }
|
||||
if Count(truths * [7, 8, 9]) = 1
|
||||
then confirmations := confirmations + [11];
|
||||
|
||||
{ Statement 12 }
|
||||
if Count(truths - [12]) = 4
|
||||
then confirmations := confirmations + [12];
|
||||
|
||||
Test := confirmations
|
||||
end;
|
||||
|
||||
BEGIN { Main algorithm. }
|
||||
for trialNumber := 1 to max12b do begin
|
||||
trialSet := Convert(trialNumber);
|
||||
testResults := Test(trialSet);
|
||||
if testResults = trialSet then Express(trialSet)
|
||||
end;
|
||||
writeln('Done. Press ENTER.');
|
||||
readln
|
||||
END.
|
||||
Loading…
Add table
Add a link
Reference in a new issue