Data update
This commit is contained in:
parent
35bcdeebf8
commit
74c69a0df6
2427 changed files with 31826 additions and 3468 deletions
106
Task/Truth-table/Amazing-Hopper/truth-table-1.hopper
Normal file
106
Task/Truth-table/Amazing-Hopper/truth-table-1.hopper
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
#include basica/booleanos.h
|
||||
|
||||
#include <basico.h>
|
||||
|
||||
|
||||
algoritmo
|
||||
|
||||
variables( R0,R1,R2,R3,R4,T0,T1,T2,T3,T4,T5,T6 )
|
||||
|
||||
VARS=3
|
||||
preparar valores de verdad
|
||||
|
||||
preparar cabecera {
|
||||
|
||||
"A","B","C","|","[A=>B","&","B=>C]","=>","A=>C"
|
||||
|
||||
} enlistar en 'cabecera'
|
||||
|
||||
expresión lógica a evaluar {
|
||||
|
||||
OP=>( A, B ), :: 'R1'
|
||||
OP=>( B, C ), :: 'R2'
|
||||
OP&( R1, R2 ), :: 'R0'
|
||||
OP=>( A, C ), :: 'R3'
|
||||
OP=>( R0, R3 )
|
||||
|
||||
} :: 'R4'
|
||||
|
||||
unir columnas( tabla, tabla, separador tabla, R1, R0, R2, R4, R3 )
|
||||
|
||||
insertar cabecera y desplegar tabla
|
||||
|
||||
/* =============== otro ================== */
|
||||
|
||||
VARS=2, preparar valores de verdad
|
||||
|
||||
preparar cabecera {
|
||||
"A","B","|","value: A=>B <=> ~AvB"
|
||||
} enlistar en 'cabecera'
|
||||
|
||||
expresión lógica a evaluar {
|
||||
OP<=>( OP=>(A,B), OP|(OP~(A), B) )
|
||||
|
||||
} :: 'R0'
|
||||
|
||||
unir columnas( tabla, tabla, separador tabla, R0 )
|
||||
|
||||
insertar cabecera y desplegar tabla
|
||||
|
||||
/* =============== otro ================== */
|
||||
|
||||
VARS=4, preparar valores de verdad
|
||||
|
||||
preparar cabecera {
|
||||
"A","B","C","D","|","[~AvB","&","A=>C","&","(B","=>","(C=>D))]","=>","A=>C"
|
||||
} enlistar en 'cabecera'
|
||||
expresión lógica a evaluar {
|
||||
|
||||
OP|( OP~(A), B) :: 'R0'
|
||||
OP=>(A,C) :: 'R1'
|
||||
OP&( R0, R1 ) :: 'T0'
|
||||
OP=>( C,D ) :: 'R2'
|
||||
OP=>( B, R2 ) :: 'T2'
|
||||
OP&( T0, T2 ) :: 'T3'
|
||||
OP=>( T3, R1)
|
||||
|
||||
} :: 'T4'
|
||||
|
||||
unir columnas( tabla, tabla, separador tabla, R0, T0,R1, T3, B, T2, R2, T4, R1)
|
||||
|
||||
insertar cabecera y desplegar tabla
|
||||
|
||||
/* =============== otro ================== */
|
||||
|
||||
VARS=2, preparar valores de verdad
|
||||
preparar cabecera {
|
||||
"A","B","~A","~B","A&B","AvB","A^B","A=>B","A<=>B","A~&B","A~vB"
|
||||
} enlistar en 'cabecera'
|
||||
|
||||
expresión lógica a evaluar {
|
||||
|
||||
OP~(A) :: 'R0'
|
||||
OP~(B) :: 'R1'
|
||||
OP&(A,B) :: 'T0'
|
||||
OP|(A,B) :: 'T1'
|
||||
OP^(A,B) :: 'T2'
|
||||
OP=>(A,B) :: 'T3'
|
||||
OP<=>(A,B) :: 'T4'
|
||||
OP~&(A,B) :: 'T5'
|
||||
OP~|(A,B) :: 'T6'
|
||||
|
||||
}
|
||||
|
||||
unir columnas( tabla, tabla, R0,R1,T0,T1,T2,T3,T4, T5, T6)
|
||||
|
||||
insertar cabecera y desplegar tabla
|
||||
|
||||
/* =============== otro ================== */
|
||||
|
||||
VARS=1, preparar valores de verdad
|
||||
preparar cabecera { "A","~A" } enlistar en 'cabecera'
|
||||
|
||||
unir columnas( tabla, tabla, OP~(A) )
|
||||
|
||||
insertar cabecera y desplegar tabla
|
||||
terminar
|
||||
69
Task/Truth-table/Amazing-Hopper/truth-table-2.hopper
Normal file
69
Task/Truth-table/Amazing-Hopper/truth-table-2.hopper
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
/* BOOLEANOS.H */
|
||||
#context-free preparaciondedatos
|
||||
fijar separador (NULO)
|
||||
|
||||
c=""
|
||||
tamaño binario (VARS)
|
||||
|
||||
#( lpad("0",VARS,"0") ), separar para (tabla)
|
||||
#( TOTCOMB = 2^VARS )
|
||||
iterar para (i=1, #(i< TOTCOMB), ++i)
|
||||
|
||||
i, cambiar a base(2), quitar laterales, mover a 'c',
|
||||
#( lpad("0",VARS,c) ); separar para (fila)
|
||||
unir filas ( tabla, tabla, fila )
|
||||
|
||||
siguiente
|
||||
|
||||
replicar( "|", TOTCOMB ), separar para (separador tabla)
|
||||
|
||||
retornar\\
|
||||
|
||||
#define A V(1)
|
||||
#define B V(2)
|
||||
#define C V(3)
|
||||
#define D V(4)
|
||||
#define E V(5)
|
||||
#define F V(6)
|
||||
#define G V(7)
|
||||
#define H V(8)
|
||||
// etcétera
|
||||
#define V(_X_) {1}{_X_}loc2;{TOTCOMB}{0}offset2;get(tabla);xtonum
|
||||
|
||||
#define-a :: mov
|
||||
|
||||
#defn OP<=>(_X_,_Y_) #RAND; _V1_#RNDV_=0;_V2_#RNDV_=0;#ATOM#CMPLX;\
|
||||
cpy(_V1_#RNDV_);\
|
||||
#ATOM#CMPLX;cpy(_V2_#RNDV_);and;{_V1_#RNDV_}not;\
|
||||
{_V2_#RNDV_}not;and;or; %RAND;
|
||||
#defn OP=>(_X_,_Y_) #ATOM#CMPLX;not;#ATOM#CMPLX;or;
|
||||
#defn OP&(_X_,_Y_) #ATOM#CMPLX;#ATOM#CMPLX;and;
|
||||
#defn OP|(_X_,_Y_) #ATOM#CMPLX;#ATOM#CMPLX;or;
|
||||
#defn OP^(_X_,_Y_) #ATOM#CMPLX;#ATOM#CMPLX;xor;
|
||||
#defn OP~&(_X_,_Y_) #ATOM#CMPLX;#ATOM#CMPLX;nand;
|
||||
#defn OP~|(_X_,_Y_) #ATOM#CMPLX;#ATOM#CMPLX;nor;
|
||||
#defn OP~(_X_) #ATOM#CMPLX;not;
|
||||
|
||||
#defn variables(*) #GENCODE $$$*$$$ #LIST={#VOID};#ENDGEN
|
||||
|
||||
#define expresiónlógicaaevaluar {1}do
|
||||
#synon expresiónlógicaaevaluar prepararcabecera
|
||||
|
||||
#define centrar ;padcenter;
|
||||
|
||||
#define insertarcabeceraydesplegartabla {cabecera}length;\
|
||||
mov(LENTABLA); \
|
||||
dim (LENTABLA) matriz rellena ("-----",vsep),\
|
||||
unir filas ( cabecera, cabecera, vsep,tabla ) \
|
||||
{" ",7,cabecera}, convertir a cadena, centrar,\
|
||||
mover a 'cabecera'\
|
||||
transformar("1","T", transformar("0","F", cabecera)) \
|
||||
guardar en 'cabecera',\
|
||||
imprimir( cabecera, NL )
|
||||
|
||||
#define prepararvaloresdeverdad decimales '0' \
|
||||
tabla={#VOID}, fila={#VOID}, separador tabla={#VOID},\
|
||||
cabecera={#VOID}, TOTCOMB=0, LENTABLA=0,\
|
||||
preparacion de datos
|
||||
|
||||
/* EOF */
|
||||
133
Task/Truth-table/SETL/truth-table.setl
Normal file
133
Task/Truth-table/SETL/truth-table.setl
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
program truth_table;
|
||||
exprstr := "" +/ command_line;
|
||||
if exprstr = "" then
|
||||
print("Enter a Boolean expression on the command line.");
|
||||
else
|
||||
showtable(exprstr);
|
||||
end if;
|
||||
|
||||
proc showtable(exprstr);
|
||||
if (toks := tokenize(exprstr)) = om then return; end if;
|
||||
if (bexp := parse(toks)) = om then return; end if;
|
||||
vars := [v : v in getvars(bexp)]; $ fix the variable order
|
||||
|
||||
$ show table header
|
||||
tabh := "";
|
||||
loop for v in vars do
|
||||
tabh +:= v + " ";
|
||||
end loop;
|
||||
print(tabh +:= "| " + exprstr);
|
||||
print('-' * #tabh);
|
||||
|
||||
$ show table rows
|
||||
loop for inst in instantiations(vars) do
|
||||
loop for v in vars do
|
||||
putchar(rpad(showbool(inst(v)), #v) + " ");
|
||||
end loop;
|
||||
print("| " + showbool(booleval(bexp, inst)));
|
||||
end loop;
|
||||
end proc;
|
||||
|
||||
proc showbool(b); return if b then "1" else "0" end if; end proc;
|
||||
|
||||
proc instantiations(vars);
|
||||
insts := [];
|
||||
loop for i in [0..2**#vars-1] do
|
||||
inst := {};
|
||||
loop for v in vars do
|
||||
inst(v) := i mod 2 /= 0;
|
||||
i div:= 2;
|
||||
end loop;
|
||||
insts with:= inst;
|
||||
end loop;
|
||||
return insts;
|
||||
end proc;
|
||||
|
||||
proc booleval(tokens, inst);
|
||||
stack := [];
|
||||
loop for token in tokens do
|
||||
case token of
|
||||
("~"): x frome stack; stack with:= not x;
|
||||
("&"): y frome stack; x frome stack; stack with:= x and y;
|
||||
("|"): y frome stack; x frome stack; stack with:= x or y;
|
||||
("^"): y frome stack; x frome stack; stack with:= x /= y;
|
||||
("=>"): y frome stack; x frome stack; stack with:= x impl y;
|
||||
("0"): stack with:= false;
|
||||
("1"): stack with:= true;
|
||||
else stack with:= inst(token);
|
||||
end case;
|
||||
end loop;
|
||||
answer frome stack;
|
||||
return answer;
|
||||
end proc;
|
||||
|
||||
proc getvars(tokens);
|
||||
return {tok : tok in tokens | to_upper(tok(1)) in "ABCDEFGHIJKLMNOPQRSTUVWXYZ_"};
|
||||
end proc;
|
||||
|
||||
proc parse(tokens);
|
||||
ops := {["~", 4], ["&", 3], ["|", 2], ["^", 2], ["=>", 1]};
|
||||
stack := [];
|
||||
queue := [];
|
||||
loop for token in tokens do
|
||||
if token in domain ops then
|
||||
loop while stack /= []
|
||||
and (top := stack(#stack)) /= "("
|
||||
and ops(top) > ops(token) do
|
||||
oper frome stack;
|
||||
queue with:= oper;
|
||||
end loop;
|
||||
stack with:= token;
|
||||
elseif token = "(" then
|
||||
stack with:= token;
|
||||
elseif token = ")" then
|
||||
loop doing
|
||||
if stack = [] then
|
||||
print("Missing (.");
|
||||
return om;
|
||||
end if;
|
||||
oper frome stack;
|
||||
while oper /= "(" do
|
||||
queue with:= oper;
|
||||
end loop;
|
||||
elseif token(1) in "23456789" then
|
||||
print("Invalid boolean ", token);
|
||||
return om;
|
||||
else
|
||||
queue with:= token;
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
loop while stack /= [] do
|
||||
oper frome stack;
|
||||
if oper = "(" then
|
||||
print("Missing ).");
|
||||
return om;
|
||||
end if;
|
||||
queue with:= oper;
|
||||
end loop;
|
||||
return queue;
|
||||
end proc;
|
||||
|
||||
proc tokenize(s);
|
||||
varchars := "abcdefghijklmnopqrstuvwxyz";
|
||||
varchars +:= to_upper(varchars);
|
||||
varchars +:= "0123456789_";
|
||||
|
||||
tokens := [];
|
||||
|
||||
loop doing span(s, " \t\n"); while s /= "" do
|
||||
if (tok := any(s, "()&|~^")) /= "" $ brackets/single char operators
|
||||
or (tok := match(s, "=>")) /= "" $ implies (=>)
|
||||
or (tok := span(s, "0123456789")) /= "" $ numbers
|
||||
or (tok := span(s, varchars)) /= "" $ variables
|
||||
then
|
||||
tokens with:= tok;
|
||||
else
|
||||
print("Parse error at", s);
|
||||
return om;
|
||||
end if;
|
||||
end loop;
|
||||
return tokens;
|
||||
end proc;
|
||||
end program;
|
||||
Loading…
Add table
Add a link
Reference in a new issue