Sunteți pe pagina 1din 9

% Serpiente Sumica

%Lista de digitos digito([1,2,3,4,5,6,7,8,9]). functor(j,4). %serpiente recibe 4 listas serpiente(j(L1,L2,L3,L4)):-digito(L), retornarLista1(L,L1,Ls1), retornarLista(Ls1,L2,Ls2), retornarLista(Ls2,L3,Ls3),retornarLista(Ls3,L4,_). %Retorna una lista de 3 elementos que su sumatoria es 13 y los retorna en una lista retornarLista1(Aux,[A,B,C],[C|L3]):- member(A,Aux), delete(Aux,A,L1),member(B,L1), delete(L1,B,L2),member(C,L2), delete(L2,C,L3), 13 =:= A + B + C. %Retorna una lista de 3 elementos conserbando el 1er elemento de la lista dada y la sumatoria de sus elementos es 13 y retorna la lista dada sin los elementos de las segunda retornarLista(Aux,[A,B,C],[C|L3]):- delete(Aux,A,L1),member(B,L1), delete(L1,B,L2),member(C,L2), delete(L2,C,L3), 13 =:= A + B + C.

% Ocho Numeros en Linea

% la lista devuelve los numeros del 1 al 8 lista([1,2,3,4,5,6,7,8]).

% devuelve una lista con digitos del 1 al 8 de forma que la diferencia, en un orden o en otro, entre dos nmeros vecinos, no sea nunca menor que 4 ochoEnLineaA(V):-lista(L),quitarElem(L,E,Ls), ochoAuxA([E|Ls],[E|S]), retornarLista([E|S], V).

% se encarga de generar y verificar las condiciones de las listas ochoAuxA([X],[X]):-!. ochoAuxA([EL1|L1],[EL1|Resto]):- quitarElem([EL1|L1],EL1,Ls), quitarElem(Ls,EL2,Ls1), abs(EL1EL2) >=4, ochoAuxA([EL2|Ls1],Resto).

% quita el elemento E de la lista L quitarElem(L,E,Ls):- member(E,L), delete(L,E,Ls).

% devuelve la lista pasada retornarLista([E|S],[E|S]).

% Rueda Numerica

% devuleve listas con digitos del 1 al 9, de manera que todas las lneas de tres dgitos sumen el 15 ruedaNumerica(L1, L2, L3, L4):- digitos(L), quitarElem(L, E, Ls), obtenerRueda(E, Ls, L1, L2, L3, L4).

% obtiene una rueda con el elemento E como centro

obtenerRueda(E, L, L1, L2, L3, L4):- parteDeRueda(E, L, L1, Ls), parteDeRueda(E, Ls, L2, Ls1), parteDeRueda(E, Ls1, L3, Ls2), parteDeRueda(E, Ls2, L4, _).

% devuelve la lista que cumple la condicin de que sume 15 parteDeRueda(E, L, [El,E,Er], Resto):- quitarElem(L, El, Ls), quitarElem(Ls, Er, Resto), 15 is E + Er + El.

% Producto con Nueve Numeros

% devuelve listas con digitos del 1 al 9, de manera que el producto resultante sea correcto productoNueveNumeros(Multiplicando, E, Result):- digitos(L), obtenerMultiplicando(L, Multiplicando, Ls), quitarElem(Ls, E, Resto), obtenerResult(Resto, Result), Result is Multiplicando * E.

% devuelve el multiplicando obtenerMultiplicando(L, Multiplicando, Resto):- quitarElem(L, E, Ls1), quitarElem(Ls1, E1, Ls2), quitarElem(Ls2, E2, Ls3), quitarElem(Ls3, E3, Resto), Multiplicando is E*1000 + E1*100 + E2*10 + E3.

% devuelve el resultado de la multiplicacion obtenerResult(L, Numero):- quitarElem(L, E, Ls1), quitarElem(Ls1, E1, Ls2), quitarElem(Ls2, E2, Ls3), quitarElem(Ls3, E3, _), Numero is E*1000 + E1*100 + E2*10 + E3.

% Pares e Impares en una Suma

% devuelve listas de digitos del 1 al 9, colocando los nmeros pares en los cuadrados y los impares en los crculos del grafico del ejercicio sumaNueveNumeros(Result):- digitos(L), obtenerOperandoUno(L, Oper1,Ls),obtenerOperandoDos(Ls, Oper2,Ls2), cuentaSuma(Ls2,Oper1, Oper2, Result), write(Oper1 '+' Oper2 '=' Result).

% obtiene el primer operando obtenerOperandoUno(L,[E,E1,E2],Ls3):- quitarElem(L, E, Ls1),E mod 2 =\= 0,quitarElem(Ls1, E1, Ls2),E1 mod 2 =:= 0, quitarElem(Ls2, E2, Ls3),E2 mod 2 =:= 0.

% obtiene el segundo operando

obtenerOperandoDos(L,[E,E1,E2],Ls):- quitarElem(L, E, Ls1),E mod 2 =\= 0,quitarElem(Ls1, E1, Ls2),E1 mod 2 =\= 0, quitarElem(Ls2, E2, Ls),E2 mod 2 =:= 0.

% realiza la suma cuentaSuma(Ls2,Oper1, Oper2, [R1,R2,R3]):obtenerResultSum(Oper1,Num1),obtenerResultSum(Oper2,Num2),Result is Num1 + Num2, R1 is Result // 100 ,quitarElem(Ls2,R1,V), R1 mod 2 =\= 0, Raux is (Result - R1*100), R2 is Raux // 10,quitarElem(V,R2,V2), R2 mod 2 =\= 0, R3 is (Result - (R1*100 + R2*10)), quitarElem(V2,R3,_),R3 mod 2 =:= 0.

% obtiene el resultado de la suma obtenerResultSum(L, Numero):- quitarElem(L, E, Ls1), quitarElem(Ls1, E1, Ls2), quitarElem(Ls2, E2, _), Numero is E*100 + E1*10 + E2,!.

1. 2. 3. 4. 5. 6. 7.

% Serpiente Sumica

%Lista de digitos digito([1,2,3,4,5,6,7,8,9]). functor(j,4). %serpiente recibe 4 listas serpiente(j(L1,L2,L3,L4)):digito(L), retornarLista1(L,L1,Ls1), retornarLista(Ls1,L2,Ls2), retornarLista(Ls2,L3,Ls3),retornarLista(Ls3,L4,_). 8. %Retorna una lista de 3 elementos que su sumatoria es 13 y los retorna en una lista 9. retornarLista1(Aux,[A,B,C],[C|L3]):- member(A,Aux), delete(Aux,A,L1),member(B,L1), delete(L1,B,L2),member(C,L2), delete(L2,C,L3), 13 =:= A + B + C.

10. %Retorna una lista de 3 elementos conserbando el 1er elemento de la lista dada y la sumatoria de sus elementos es 13 y retorna la lista dada sin los elementos de las segunda 11. retornarLista(Aux,[A,B,C],[C|L3]):delete(Aux,A,L1),member(B,L1), delete(L1,B,L2),member(C,L2), delete(L2,C,L3), 13 =:= A + B + C. 12. 13. 14. 15. 16. 17. 18. % Ocho Numeros en Linea 19. 20. % la lista devuelve los numeros del 1 al 8 21. lista([1,2,3,4,5,6,7,8]). 22. 23. % devuelve una lista con digitos del 1 al 8 de forma que la diferencia, en un orden o en otro, entre dos nmeros vecinos, no sea nunca menor que 4 24. ochoEnLineaA(V):-lista(L),quitarElem(L,E,Ls), ochoAuxA([E|Ls],[E|S]), retornarLista([E|S], V). 25. 26. % se encarga de generar y verificar las condiciones de las listas 27. ochoAuxA([X],[X]):-!. 28. ochoAuxA([EL1|L1],[EL1|Resto]):quitarElem([EL1|L1],EL1,Ls), quitarElem(Ls,EL2,Ls1), abs(EL1-EL2) >=4, ochoAuxA([EL2|Ls1],Resto). 29. 30. % quita el elemento E de la lista L 31. quitarElem(L,E,Ls):- member(E,L), delete(L,E,Ls). 32. 33. % devuelve la lista pasada 34. retornarLista([E|S],[E|S]). 35. 36. 37. 38. 39. 40. % Rueda Numerica 41. 42. 43. % devuleve listas con digitos del 1 al 9, de manera que todas las lneas de tres dgitos sumen el 15

44. ruedaNumerica(L1, L2, L3, L4):- digitos(L), quitarElem(L, E, Ls), obtenerRueda(E, Ls, L1, L2, L3, L4). 45. 46. % obtiene una rueda con el elemento E como centro 47. obtenerRueda(E, L, L1, L2, L3, L4):parteDeRueda(E, L, L1, Ls), parteDeRueda(E, Ls, L2, Ls1), 48. parteDeRueda(E , Ls1, L3, Ls2), parteDeRueda(E, Ls2, L4, _). 49. 50. % devuelve la lista que cumple la condicin de que sume 15 51. parteDeRueda(E, L, [El,E,Er], Resto):quitarElem(L, El, Ls), quitarElem(Ls, Er, Resto), 15 is E + Er + El. 52. 53. 54. 55. 56. 57. % Producto con Nueve Numeros 58. 59. 60. % devuelve listas con digitos del 1 al 9, de manera que el producto resultante sea correcto 61. productoNueveNumeros(Multiplicando, E, Result):digitos(L), obtenerMultiplicando(L, Multiplicando, Ls), 62. qu itarElem(Ls, E, Resto), obtenerResult(Resto, Result), 63. Re sult is Multiplicando * E. 64. 65. % devuelve el multiplicando 66. obtenerMultiplicando(L, Multiplicando, Resto):quitarElem(L, E, Ls1), quitarElem(Ls1, E1, Ls2), 67. qui tarElem(Ls2, E2, Ls3), quitarElem(Ls3, E3, Resto), 68. Mul tiplicando is E*1000 + E1*100 + E2*10 + E3. 69. 70. % devuelve el resultado de la multiplicacion 71. obtenerResult(L, Numero):- quitarElem(L, E, Ls1), quitarElem(Ls1, E1, Ls2), 72. quitarElem(Ls2, E2, Ls3), quitarElem(Ls3, E3, _),

73. Numero is E*1000 + E1*100 + E2*10 + E3. 74. 75. 76. 77. 78. 79. 80. % Pares e Impares en una Suma 81. 82. 83. % devuelve listas de digitos del 1 al 9, colocando los nmeros pares en los cuadrados y los impares en los crculos del grafico del ejercicio 84. sumaNueveNumeros(Result):- digitos(L), obtenerOperandoUno(L, Oper1,Ls),obtenerOperandoDos(Ls, Oper2,Ls2), 85. cuentaSuma(Ls2,Oper1, Oper2, Result), 86. write(Oper1 '+' Oper2 '=' Result). 87. 88. % obtiene el primer operando 89. obtenerOperandoUno(L,[E,E1,E2],Ls3):- quitarElem(L, E, Ls1),E mod 2 =\= 0,quitarElem(Ls1, E1, Ls2),E1 mod 2 =:= 0, 90. quitarElem(Ls 2, E2, Ls3),E2 mod 2 =:= 0. 91. 92. % obtiene el segundo operando 93. obtenerOperandoDos(L,[E,E1,E2],Ls):- quitarElem(L, E, Ls1),E mod 2 =\= 0,quitarElem(Ls1, E1, Ls2),E1 mod 2 =\= 0, 94. quitarElem(Ls2 , E2, Ls),E2 mod 2 =:= 0. 95. 96. % realiza la suma 97. cuentaSuma(Ls2,Oper1, Oper2, [R1,R2,R3]):obtenerResultSum(Oper1,Num1),obtenerResultSum(Oper2,Num2 ),Result is Num1 + Num2, 98. R1 is Result // 100 ,quitarElem(Ls2,R1,V), R1 mod 2 =\= 0, Raux is (Result - R1*100), 99. R2 is Raux // 10,quitarElem(V,R2,V2), R2 mod 2 =\= 0,

100. R3 is (Result - (R1*100 + R2*10)), 101. quitarEl em(V2,R3,_),R3 mod 2 =:= 0. 102. 103. % obtiene el resultado de la suma 104. obtenerResultSum(L, Numero):- quitarElem(L, E, Ls1), quitarElem(Ls1, E1, Ls2), 105. quitarElem(Ls2, E2, _), 106. Numero is E*100 + E1*10 + E2,!.
_______________________________________________________________

S-ar putea să vă placă și