1
0
This commit is contained in:
2025-10-10 02:12:44 +02:00
commit dac3abf431
212 changed files with 475579 additions and 0 deletions

20
PI1/.classpath Normal file
View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry excluding="adda/ejemplos" kind="src" path="src/main/java"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-20">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry combineaccessrules="false" kind="src" path="/DatosCompartidos">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry combineaccessrules="false" kind="src" path="/ParteComun">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="bin"/>
</classpath>

17
PI1/.project Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>PI1</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@@ -0,0 +1,15 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=20
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=20
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=20

View File

@@ -0,0 +1,6 @@
32,55
15,140
82,120
26,89
35,54
3,126

View File

@@ -0,0 +1,6 @@
93,24
250,43
331,473
210,56
345,68
75,5009

View File

@@ -0,0 +1,14 @@
Apple
Banana
Cherries
Grapes
Lemon
Orange
Peach
Pear
Pineapple
Plum
Pomegranate
Strawberry
Apricot
Blueberries

View File

@@ -0,0 +1,10 @@
Dolphin
Fish
Cat
Crab
Pig
Elephant
Butterfly
Whale
Dog
Chicken

View File

@@ -0,0 +1,12 @@
Red
Blue
Green
Yellow
Purple
Orange
Pink
Brown
Black
White
Gray
Silver

View File

@@ -0,0 +1,17 @@
Carrot
Broccoli
Cauliflower
Tomato
Cucumber
Spinach
Lettuce
Potato
Onion
Garlic
Peas
Beans
Asparagus
Zucchini
Eggplant
Celery
Radish

View File

@@ -0,0 +1,23 @@
Jeans
Jacket
Dress
Sweater
Skirt
Pants
Blouse
Shorts
Socks
Hat
Coat
Gloves
Scarf
Underwear
Belt
Boots
Sneakers
Sandals
Blazer
Pajamas
Hoodie
Vest
Tights

View File

@@ -0,0 +1,18 @@
Doctor
Teacher
Engineer
Lawyer
Nurse
Scientist
Artist
Chef
Firefighter
Police officer
Dentist
Architect
Musician
Actor
Accountant
Electrician
Writer
Farmer

View File

@@ -0,0 +1,6 @@
10,6
9,11
16,7
21,5
8,10
22,12

View File

@@ -0,0 +1,57 @@
package adda.ejercicios;
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import adda.util.EnteroCadena;
public class Ejercicio1 {
public static String ej1Func(Integer varA, Integer varB) {
UnaryOperator<EnteroCadena> nx = elem -> {
return EnteroCadena.of(elem.a() + 3,
elem.a() % 2 == 0 ? elem.a() + "*" : elem.a() + "!");
};
return Stream.iterate(EnteroCadena.of(varA, "A"), elem -> elem.a() < varB, nx)
.filter(elem -> elem.a() % 10 != 0)
.map(elem -> elem.s())
.collect(Collectors.joining("-"));
}
public static String ej1Iter(Integer varA, Integer varB) {
EnteroCadena seed = EnteroCadena.of(varA, "A");
StringBuilder res = new StringBuilder();
int ac = varA;
res.append(seed.s());
while(ac < varB) {
EnteroCadena ec = EnteroCadena.of(ac+3, ac % 2 == 0 ? ac + "*" : ac + "!");
if(ec.a() % 10 != 0 && ec.a() < varB) {
res.append("-").append(ec.s());
}
ac+=3;
}
return res.toString();
}
public static String ej1RecF(Integer varA, Integer varB) {
EnteroCadena seed = EnteroCadena.of(varA, "A");
StringBuilder res = new StringBuilder();
int ac = varA;
res.append(seed.s());
return ej1RecFAux(varA, varB, res, ac);
}
public static String ej1RecFAux(Integer varA, Integer varB, StringBuilder res, Integer ac) {
if(ac < varB) {
EnteroCadena ec = EnteroCadena.of(ac+3, ac % 2 == 0 ? ac + "*" : ac + "!");
if(ec.a() % 10 != 0 && ec.a() < varB) {
res.append("-").append(ec.s());
}
ac+=3;
return ej1RecFAux(varA, varB, res, ac);
} else {
return res.toString();
}
}
}

View File

@@ -0,0 +1,83 @@
package adda.ejercicios;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.UnaryOperator;
import java.util.stream.Stream;
import adda.util.TuplaEjercicio2;
public class Ejercicio2 {
public static List<Integer> ejercicio2RecNF(Integer a, Integer b) {
List<Integer> ls = new ArrayList<>();
if(a < 2 || b < 2) {
return List.of(a*b);
} else if(a > b) {
ls.addAll(ejercicio2RecNF(a%b, b-1));
ls.add(a);
} else {
ls.addAll(ejercicio2RecNF(a-2, b/2));
ls.add(b);
}
return ls;
}
public static List<Integer> ejercicio2RecF(Integer a, Integer b) {
List<Integer> ls = new ArrayList<>();
return ejercicio2RecFAux(a, b, ls);
}
public static List<Integer> ejercicio2RecFAux(Integer a, Integer b, List<Integer> ls) {
if (a < 2 || b < 2) {
ls.add(a * b);
} else if (a > b) {
ls.addAll(ejercicio2RecFAux(a % b, b - 1, new ArrayList<>()));
ls.add(a);
} else {
ls.addAll(ejercicio2RecFAux(a - 2, b / 2, new ArrayList<>()));
ls.add(b);
}
return ls;
}
public static List<Integer> ejercicio2Iter(Integer a, Integer b) {
List<Integer> ls = new ArrayList<>();
while (a >= 2 && b >= 2) {
if (a > b) {
ls.add(a);
a %= b;
b--;
} else {
ls.add(b);
b /= 2;
a -= 2;
}
}
ls.add(a * b);
Collections.reverse(ls);
return ls;
}
public static List<Integer> ejercicio2Func(Integer a, Integer b) {
UnaryOperator<TuplaEjercicio2> next = x -> {
if(x.a() < 2 || x.b() < 2) {
x.ac().add(x.a()*x.b());
return TuplaEjercicio2.of(0, 0, x.ac());
} else if (x.a() > x.b()) {
x.ac().add(x.a());
return TuplaEjercicio2.of(x.a() % x.b(), x.b() - 1, x.ac());
} else {
x.ac().add(x.b());
return TuplaEjercicio2.of(x.a() - 2, x.b() / 2, x.ac());
}
};
List<Integer> res = Stream.iterate(
TuplaEjercicio2.of(a, b, new ArrayList<Integer>()),
x -> x.hasNext(),
x -> next.apply(x)).toList().get(0).ac();
Collections.sort(res);
return res;
}
}

View File

@@ -0,0 +1,74 @@
package adda.ejercicios;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;
import adda.util.TuplaEjercicio3;
import us.lsi.streams.Stream2;
public class Ejercicio3 {
public static List<String> ejercicio3Iter(String fichA, String fichB) {
List<String> ac = new ArrayList<>();
Iterator<String> iterA = Stream2.file(fichA).iterator();
Iterator<String> iterB = Stream2.file(fichB).iterator();
while(iterA.hasNext() || iterB.hasNext()) {
if(iterA.hasNext()) {
ac.add(iterA.next());
if(iterA.hasNext()) {
ac.add(iterA.next());
}
}
if(iterB.hasNext()) {
ac.add(iterB.next());
if(iterB.hasNext()) {
ac.add(iterB.next());
}
}
}
return ac;
}
public static List<String> ejercicio3RecF(String fichA, String fichB) {
List<String> ac = new ArrayList<>();
Iterator<String> iterA = Stream2.file(fichA).iterator();
Iterator<String> iterB = Stream2.file(fichB).iterator();
return ejercicio3RecFAux(fichA, fichB, iterA, iterB, ac);
}
public static List<String> ejercicio3RecFAux(String fichA, String fichB,
Iterator<String> iterA, Iterator<String> iterB, List<String> ac) {
List<String> res = new ArrayList<>();
if(iterA.hasNext() || iterB.hasNext()) {
if(iterA.hasNext()) {
ac.add(iterA.next());
if(iterA.hasNext()) {
ac.add(iterA.next());
}
}
if(iterB.hasNext()) {
ac.add(iterB.next());
if(iterB.hasNext()) {
ac.add(iterB.next());
}
}
res = ejercicio3RecFAux(fichA, fichB, iterA, iterB, ac);
} else {
res = ac;
}
return res;
}
public static List<String> ejercicio3Func(String fichA, String fichB) {
return Stream.iterate(TuplaEjercicio3.of(
Stream2.file(fichA).iterator(),
Stream2.file(fichB).iterator(),
new ArrayList<>()),
x -> x.next())
.filter(x -> !x.hasNext())
.findFirst()
.get()
.ac();
}
}

View File

@@ -0,0 +1,66 @@
package adda.ejercicios;
import java.util.HashMap;
import java.util.Map;
import us.lsi.common.Pair;
public class Ejercicio4 {
public static String ejercicio4RecSinMem(Integer a, Integer b) {
if(a <= 4) {
return a+"."+b;
} else if(b <= 4) {
return b+"-"+a;
} else {
return ejercicio4RecSinMem(a/2, b-2)+","+ejercicio4RecSinMem(a-2, b/2)+","+ejercicio4RecSinMem(a-1, b-1);
}
}
public static String ejercicio4RecConMem(Integer a, Integer b) {
return ejercicio4RecConMemAux(a,b,new HashMap<>());
}
public static String ejercicio4RecConMemAux(Integer a, Integer b, Map<Pair<Integer,Integer>,String> map) {
Pair<Integer,Integer> pair = Pair.of(a, b);
String res = null;
if(map.containsKey(pair)) {
return map.get(pair);
} else {
if(a <= 4) {
res = a+"."+b;
map.put(pair, res);
} else if(b <= 4) {
res = b+"-"+a;
map.put(pair, res);
} else {
res = ejercicio4RecConMemAux(a/2, b-2,map)+","+ejercicio4RecConMemAux(a-2, b/2,map)+","+ejercicio4RecConMemAux(a-1, b-1,map);
map.put(pair, res);
}
}
return res;
}
public static String ejercicio4Iter(Integer a, Integer b) {
Map<Pair<Integer,Integer>, String> map = new HashMap<>();
for(int i = 0; i <= a; i++) {
for(int j = 0; j <= b; j++) {
Pair<Integer,Integer> pair = Pair.of(i, j);
String res = null;
if(map.containsKey(pair)) {
return map.get(pair);
}
if(i <= 4) {
res = i+"."+j;
map.put(pair, res);
} else if(j <= 4) {
res = j+"-"+i;
map.put(pair, res);
} else {
res = map.get(Pair.of(i/2, j-2))+","+map.get(Pair.of(i-2, j/2))+","+map.get(Pair.of(i-1, j-1));
map.put(pair, res);
}
}
}
return map.get(Pair.of(a, b));
}
}

View File

@@ -0,0 +1,128 @@
package adda.tests;
import adda.ejercicios.Ejercicio1;
import adda.ejercicios.Ejercicio2;
import adda.ejercicios.Ejercicio3;
import adda.ejercicios.Ejercicio4;
import us.lsi.common.Files2;
public class Tests {
public static void testEjercicio1 () {
System.out.println("================ EJERCICIO 1 ================");
StringBuilder sbFun = new StringBuilder("Funcional: \n");
StringBuilder sbIter = new StringBuilder("Iterativo: \n");
StringBuilder sbRecF = new StringBuilder("Recursivo Final: \n");
for(String linea: Files2.linesFromFile("data/PI1Ej1DatosEntrada.txt")) {
String[] partes = linea.split(",");
Integer a = Integer.valueOf(partes[0]);
Integer b = Integer.valueOf(partes[1]);
sbFun.append(Ejercicio1.ej1Func(a, b));
sbFun.append("\n");
sbIter.append(Ejercicio1.ej1Iter(a, b));
sbIter.append("\n");
sbRecF.append(Ejercicio1.ej1RecF(a, b));
sbRecF.append("\n");
}
System.out.println(sbFun.toString());
System.out.println(sbIter.toString());
System.out.println(sbRecF.toString());
System.out.println("=============================================");
System.out.println("\n\n");
}
public static void testEjercicio2 () {
System.out.println("================ EJERCICIO 2 ================");
StringBuilder sbFun = new StringBuilder("Funcional: \n");
StringBuilder sbIter = new StringBuilder("Iterativo: \n");
StringBuilder sbRecF = new StringBuilder("Recursivo Final: \n");
StringBuilder sbRecNF = new StringBuilder("Recursivo No Final: \n");
for(String linea: Files2.linesFromFile("data/PI1Ej2DatosEntrada.txt")) {
String[] partes = linea.split(",");
Integer a = Integer.valueOf(partes[0]);
Integer b = Integer.valueOf(partes[1]);
sbFun.append(Ejercicio2.ejercicio2Func(a, b));
sbFun.append("\n");
sbIter.append(Ejercicio2.ejercicio2Iter(a, b));
sbIter.append("\n");
sbRecF.append(Ejercicio2.ejercicio2RecF(a, b));
sbRecF.append("\n");
sbRecNF.append(Ejercicio2.ejercicio2RecNF(a, b));
sbRecNF.append("\n");
}
System.out.println(sbFun.toString());
System.out.println(sbIter.toString());
System.out.println(sbRecF.toString());
System.out.println(sbRecNF.toString());
System.out.println("=============================================");
System.out.println("\n\n");
}
public static void testEjercicio3 () {
String file1A = "./data/PI1Ej3DatosEntrada1A.txt";
String file1B = "./data/PI1Ej3DatosEntrada1B.txt";
String file2A = "./data/PI1Ej3DatosEntrada2A.txt";
String file2B = "./data/PI1Ej3DatosEntrada2B.txt";
String file3A = "./data/PI1Ej3DatosEntrada3A.txt";
String file3B = "./data/PI1Ej3DatosEntrada3B.txt";
System.out.println("================ EJERCICIO 3 ================");
System.out.println("Iterativo: ");
System.out.println(Ejercicio3.ejercicio3Iter(file1A, file1B));
System.out.println(Ejercicio3.ejercicio3Iter(file2A, file2B));
System.out.println(Ejercicio3.ejercicio3Iter(file3A, file3B));
System.out.println("\n");
System.out.println("Recursivo Final: ");
System.out.println(Ejercicio3.ejercicio3RecF(file1A, file1B));
System.out.println(Ejercicio3.ejercicio3RecF(file2A, file2B));
System.out.println(Ejercicio3.ejercicio3RecF(file3A, file3B));
System.out.println("\n");
System.out.println("Funcional: ");
System.out.println(Ejercicio3.ejercicio3Func(file1A, file1B));
System.out.println(Ejercicio3.ejercicio3Func(file2A, file2B));
System.out.println(Ejercicio3.ejercicio3Func(file3A, file3B));
System.out.println("=============================================");
System.out.println("\n\n");
}
public static void testEjercicio4 () {
System.out.println("================ EJERCICIO 4 ================");
StringBuilder sbSinMem = new StringBuilder("Sin memoria: \n");
StringBuilder sbConMem = new StringBuilder("Con memoria: \n");
StringBuilder sbIter = new StringBuilder("Iterativo: \n");
for(String linea: Files2.linesFromFile("data/PI1Ej4DatosEntrada.txt")) {
String[] partes = linea.split(",");
Integer a = Integer.valueOf(partes[0]);
Integer b = Integer.valueOf(partes[1]);
sbSinMem.append(Ejercicio4.ejercicio4RecSinMem(a, b));
sbSinMem.append("\n");
sbConMem.append(Ejercicio4.ejercicio4RecConMem(a, b));
sbConMem.append("\n");
sbIter.append(Ejercicio4.ejercicio4Iter(a, b));
sbIter.append("\n");
}
System.out.println(sbSinMem.toString());
System.out.println(sbConMem.toString());
System.out.println(sbIter.toString());
System.out.println("=============================================");
System.out.println("\n\n");
}
public static void main(String[] args) {
testEjercicio1();
testEjercicio2();
testEjercicio3();
testEjercicio4();
}
}

View File

@@ -0,0 +1,7 @@
package adda.util;
public record EnteroCadena(Integer a, String s) {
public static EnteroCadena of(Integer a, String s) {
return new EnteroCadena(a,s);
}
}

View File

@@ -0,0 +1,13 @@
package adda.util;
import java.util.List;
public record TuplaEjercicio2(Integer a, Integer b, List<Integer> ac) {
public static TuplaEjercicio2 of(Integer a, Integer b, List<Integer> ac) {
return new TuplaEjercicio2(a,b,ac);
}
public boolean hasNext() {
return a >= 2 || b >= 2;
}
}

View File

@@ -0,0 +1,30 @@
package adda.util;
import java.util.Iterator;
import java.util.List;
public record TuplaEjercicio3(Iterator<String> iterA, Iterator<String> iterB, List<String> ac) {
public static TuplaEjercicio3 of(Iterator<String> iterA, Iterator<String> iterB, List<String> ac) {
return new TuplaEjercicio3(iterA, iterB, ac);
}
public boolean hasNext() {
return iterA.hasNext() || iterB.hasNext();
}
public TuplaEjercicio3 next() {
if(iterA.hasNext()) {
ac.add(iterA.next());
if(iterA.hasNext()) {
ac.add(iterA.next());
}
}
if(iterB.hasNext()) {
ac.add(iterB.next());
if(iterB.hasNext()) {
ac.add(iterB.next());
}
}
return TuplaEjercicio3.of(iterA, iterB, ac);
}
}

View File

@@ -0,0 +1,4 @@
module pi1 {
requires datos_compartidos;
requires partecomun;
}