Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
123
Task/Power-set/Simula/power-set.simula
Normal file
123
Task/Power-set/Simula/power-set.simula
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
SIMSET
|
||||
BEGIN
|
||||
|
||||
LINK CLASS LOF_INT(N); INTEGER N;;
|
||||
|
||||
LINK CLASS LOF_LOF_INT(H); REF(HEAD) H;;
|
||||
|
||||
REF(HEAD) PROCEDURE MAP(P_LI, P_LLI);
|
||||
REF(HEAD) P_LI;
|
||||
REF(HEAD) P_LLI;
|
||||
BEGIN
|
||||
REF(HEAD) V_RESULT;
|
||||
V_RESULT :- NEW HEAD;
|
||||
IF NOT P_LLI.EMPTY THEN BEGIN
|
||||
REF(LOF_LOF_INT) V_LLI;
|
||||
V_LLI :- P_LLI.FIRST QUA LOF_LOF_INT;
|
||||
WHILE V_LLI =/= NONE DO BEGIN
|
||||
REF(HEAD) V_NEWLIST;
|
||||
V_NEWLIST :- NEW HEAD;
|
||||
! ADD THE SAME 1ST ELEMENT TO EVERY NEWLIST ;
|
||||
NEW LOF_INT(P_LI.FIRST QUA LOF_INT.N).INTO(V_NEWLIST);
|
||||
IF NOT V_LLI.H.EMPTY THEN BEGIN
|
||||
REF(LOF_INT) V_LI;
|
||||
V_LI :- V_LLI.H.FIRST QUA LOF_INT;
|
||||
WHILE V_LI =/= NONE DO BEGIN
|
||||
NEW LOF_INT(V_LI.N).INTO(V_NEWLIST);
|
||||
V_LI :- V_LI.SUC;
|
||||
END;
|
||||
END;
|
||||
NEW LOF_LOF_INT(V_NEWLIST).INTO(V_RESULT);
|
||||
V_LLI :- V_LLI.SUC;
|
||||
END;
|
||||
END;
|
||||
MAP :- V_RESULT;
|
||||
END MAP;
|
||||
|
||||
REF(HEAD) PROCEDURE SUBSETS(P_LI);
|
||||
REF(HEAD) P_LI;
|
||||
BEGIN
|
||||
REF(HEAD) V_RESULT;
|
||||
IF P_LI.EMPTY THEN BEGIN
|
||||
V_RESULT :- NEW HEAD;
|
||||
NEW LOF_LOF_INT(NEW HEAD).INTO(V_RESULT);
|
||||
END ELSE BEGIN
|
||||
REF(HEAD) V_SUBSET, V_MAP;
|
||||
REF(LOF_INT) V_LI;
|
||||
V_SUBSET :- NEW HEAD;
|
||||
V_LI :- P_LI.FIRST QUA LOF_INT;
|
||||
! SKIP OVER 1ST ELEMENT ;
|
||||
IF V_LI =/= NONE THEN V_LI :- V_LI.SUC;
|
||||
WHILE V_LI =/= NONE DO BEGIN
|
||||
NEW LOF_INT(V_LI.N).INTO(V_SUBSET);
|
||||
V_LI :- V_LI.SUC;
|
||||
END;
|
||||
V_RESULT :- SUBSETS(V_SUBSET);
|
||||
V_MAP :- MAP(P_LI, V_RESULT);
|
||||
IF NOT V_MAP.EMPTY THEN BEGIN
|
||||
REF(LOF_LOF_INT) V_LLI;
|
||||
V_LLI :- V_MAP.FIRST QUA LOF_LOF_INT;
|
||||
WHILE V_LLI =/= NONE DO BEGIN
|
||||
NEW LOF_LOF_INT(V_LLI.H).INTO(V_RESULT);
|
||||
V_LLI :- V_LLI.SUC;
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
SUBSETS :- V_RESULT;
|
||||
END SUBSETS;
|
||||
|
||||
PROCEDURE PRINT_LIST(P_LI); REF(HEAD) P_LI;
|
||||
BEGIN
|
||||
OUTTEXT("[");
|
||||
IF NOT P_LI.EMPTY THEN BEGIN
|
||||
INTEGER I;
|
||||
REF(LOF_INT) V_LI;
|
||||
I := 0;
|
||||
V_LI :- P_LI.FIRST QUA LOF_INT;
|
||||
WHILE V_LI =/= NONE DO BEGIN
|
||||
IF I > 0 THEN OUTTEXT(",");
|
||||
OUTINT(V_LI.N, 0);
|
||||
V_LI :- V_LI.SUC;
|
||||
I := I+1;
|
||||
END;
|
||||
END;
|
||||
OUTTEXT("]");
|
||||
END PRINT_LIST;
|
||||
|
||||
PROCEDURE PRINT_LIST_LIST(P_LLI); REF(HEAD) P_LLI;
|
||||
BEGIN
|
||||
OUTTEXT("[");
|
||||
IF NOT P_LLI.EMPTY THEN BEGIN
|
||||
INTEGER I;
|
||||
REF(LOF_LOF_INT) V_LLI;
|
||||
I := 0;
|
||||
V_LLI :- P_LLI.FIRST QUA LOF_LOF_INT;
|
||||
WHILE V_LLI =/= NONE DO BEGIN
|
||||
IF I > 0 THEN BEGIN
|
||||
OUTTEXT(",");
|
||||
! OUTIMAGE;
|
||||
END;
|
||||
PRINT_LIST(V_LLI.H);
|
||||
V_LLI :- V_LLI.SUC;
|
||||
I := I+1;
|
||||
END;
|
||||
END;
|
||||
OUTTEXT("]");
|
||||
OUTIMAGE;
|
||||
END PRINT_LIST_LIST;
|
||||
|
||||
INTEGER N;
|
||||
REF(HEAD) V_RANGE;
|
||||
REF(HEAD) V_LISTS;
|
||||
|
||||
V_RANGE :- NEW HEAD;
|
||||
V_LISTS :- SUBSETS(V_RANGE);
|
||||
PRINT_LIST_LIST(V_LISTS);
|
||||
OUTIMAGE;
|
||||
FOR N := 1 STEP 1 UNTIL 4 DO BEGIN
|
||||
NEW LOF_INT(N).INTO(V_RANGE);
|
||||
V_LISTS :- SUBSETS(V_RANGE);
|
||||
PRINT_LIST_LIST(V_LISTS);
|
||||
OUTIMAGE;
|
||||
END;
|
||||
END.
|
||||
Loading…
Add table
Add a link
Reference in a new issue