diff --git b/jweb-e002/.classpath a/jweb-e002/.classpath
new file mode 100644
index 0000000..b444419
--- /dev/null
+++ a/jweb-e002/.classpath
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git b/jweb-e002/.project a/jweb-e002/.project
new file mode 100644
index 0000000..a2603ea
--- /dev/null
+++ a/jweb-e002/.project
@@ -0,0 +1,31 @@
+
+
+ jweb-e002
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+ org.eclipse.wst.common.project.facet.core.nature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.wst.jsdt.core.jsNature
+
+
diff --git b/jweb-e002/.settings/.jsdtscope a/jweb-e002/.settings/.jsdtscope
new file mode 100644
index 0000000..92e666d
--- /dev/null
+++ a/jweb-e002/.settings/.jsdtscope
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git b/jweb-e002/.settings/org.eclipse.jdt.core.prefs a/jweb-e002/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ a/jweb-e002/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git b/jweb-e002/.settings/org.eclipse.wst.common.component a/jweb-e002/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..3d6e5f1
--- /dev/null
+++ a/jweb-e002/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git b/jweb-e002/.settings/org.eclipse.wst.common.project.facet.core.xml a/jweb-e002/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..01c9992
--- /dev/null
+++ a/jweb-e002/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git b/jweb-e002/.settings/org.eclipse.wst.jsdt.ui.superType.container a/jweb-e002/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ a/jweb-e002/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git b/jweb-e002/.settings/org.eclipse.wst.jsdt.ui.superType.name a/jweb-e002/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ a/jweb-e002/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git b/jweb-e002/WebContent/META-INF/MANIFEST.MF a/jweb-e002/WebContent/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5e94951
--- /dev/null
+++ a/jweb-e002/WebContent/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git b/jweb-e002/WebContent/WEB-INF/jsp/SieteCartas.jsp a/jweb-e002/WebContent/WEB-INF/jsp/SieteCartas.jsp
new file mode 100644
index 0000000..cfc11cf
--- /dev/null
+++ a/jweb-e002/WebContent/WEB-INF/jsp/SieteCartas.jsp
@@ -0,0 +1,45 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+<%@ page import="clases.*" %>
+
+
+
+
+ Mejores Combinaciones
+
+
+ Mejores Combinaciones
+
+ Cartas Generadas Aleatoriamente
+ <%
+ Carta[] cartas = (Carta[])request.getAttribute("cartas");
+ for(int i=0; i
+
+ <%}%>
+
+
+
+ Mejores Combinaciones
+
+ <%
+ Carta[] mano = new Carta[5];
+ String mejores = (String)request.getAttribute("mejores");
+ Poker p = new Poker();
+ //Separa el string en arrays, donde encuentre ";"
+ //Si hay ; quiere decir que hubieron dos o mas ganadores
+ for(int i=0; i
+
+ <%}%>
+
+ <%=p.nombreJugada(mano)%>
+
+ <%}%>
+
+
+
\ No newline at end of file
diff --git b/jweb-e002/WebContent/WEB-INF/jsp/cartas.jsp a/jweb-e002/WebContent/WEB-INF/jsp/cartas.jsp
new file mode 100644
index 0000000..87d7d43
--- /dev/null
+++ a/jweb-e002/WebContent/WEB-INF/jsp/cartas.jsp
@@ -0,0 +1,13 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+
+
+
+
+Insert title here
+
+
+" width=200 height=250 >
+
+
+
\ No newline at end of file
diff --git b/jweb-e002/WebContent/WEB-INF/jsp/mano_doc.jsp a/jweb-e002/WebContent/WEB-INF/jsp/mano_doc.jsp
new file mode 100644
index 0000000..e7d7534
--- /dev/null
+++ a/jweb-e002/WebContent/WEB-INF/jsp/mano_doc.jsp
@@ -0,0 +1,29 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+ <%@ page import="clases.*" %>
+
+
+
+
+ Mano doc desde api
+
+
+ Cartas!
+
+ Manos Aleatorias extraidas desde api
+ <%Carta[] cartas = (Carta[])request.getAttribute("mano");
+ String nombreJugada = (String) request.getAttribute("nombreJugada");
+
+ for(int i=0; i
+ " width=80 height=120>
+
+ <%
+ }
+ %>
+
+ Jugada: <%=nombreJugada%>
+
+
+
+
\ No newline at end of file
diff --git b/jweb-e002/WebContent/WEB-INF/web.xml a/jweb-e002/WebContent/WEB-INF/web.xml
new file mode 100644
index 0000000..6d005d5
--- /dev/null
+++ a/jweb-e002/WebContent/WEB-INF/web.xml
@@ -0,0 +1,12 @@
+
+
+ jweb-e002
+
+ index.html
+ index.htm
+ index.jsp
+ default.html
+ default.htm
+ default.jsp
+
+
\ No newline at end of file
diff --git b/jweb-e002/WebContent/html/cartas.html a/jweb-e002/WebContent/html/cartas.html
new file mode 100644
index 0000000..fc9b177
--- /dev/null
+++ a/jweb-e002/WebContent/html/cartas.html
@@ -0,0 +1,24 @@
+
+
+
+
+ Insert title here
+
+
+ Cartas de Poker
+
+
+
+
\ No newline at end of file
diff --git b/jweb-e002/WebContent/imagenesCartas/2C.png a/jweb-e002/WebContent/imagenesCartas/2C.png
new file mode 100644
index 0000000..413b0da
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/2C.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/2D.png a/jweb-e002/WebContent/imagenesCartas/2D.png
new file mode 100644
index 0000000..f966e48
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/2D.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/2H.png a/jweb-e002/WebContent/imagenesCartas/2H.png
new file mode 100644
index 0000000..345744e
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/2H.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/2S.png a/jweb-e002/WebContent/imagenesCartas/2S.png
new file mode 100644
index 0000000..a0de145
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/2S.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/3C.png a/jweb-e002/WebContent/imagenesCartas/3C.png
new file mode 100644
index 0000000..f8b8183
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/3C.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/3D.png a/jweb-e002/WebContent/imagenesCartas/3D.png
new file mode 100644
index 0000000..cee21f3
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/3D.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/3H.png a/jweb-e002/WebContent/imagenesCartas/3H.png
new file mode 100644
index 0000000..8494e1c
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/3H.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/3S.png a/jweb-e002/WebContent/imagenesCartas/3S.png
new file mode 100644
index 0000000..78e3b20
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/3S.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/4C.png a/jweb-e002/WebContent/imagenesCartas/4C.png
new file mode 100644
index 0000000..8938459
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/4C.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/4D.png a/jweb-e002/WebContent/imagenesCartas/4D.png
new file mode 100644
index 0000000..d9ae5be
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/4D.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/4H.png a/jweb-e002/WebContent/imagenesCartas/4H.png
new file mode 100644
index 0000000..41a4488
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/4H.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/4S.png a/jweb-e002/WebContent/imagenesCartas/4S.png
new file mode 100644
index 0000000..70bc9cc
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/4S.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/5C.png a/jweb-e002/WebContent/imagenesCartas/5C.png
new file mode 100644
index 0000000..a7f49be
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/5C.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/5D.png a/jweb-e002/WebContent/imagenesCartas/5D.png
new file mode 100644
index 0000000..cff0617
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/5D.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/5H.png a/jweb-e002/WebContent/imagenesCartas/5H.png
new file mode 100644
index 0000000..1efcbf3
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/5H.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/5S.png a/jweb-e002/WebContent/imagenesCartas/5S.png
new file mode 100644
index 0000000..e708806
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/5S.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/6C.png a/jweb-e002/WebContent/imagenesCartas/6C.png
new file mode 100644
index 0000000..d8382d3
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/6C.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/6D.png a/jweb-e002/WebContent/imagenesCartas/6D.png
new file mode 100644
index 0000000..7ba40e9
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/6D.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/6H.png a/jweb-e002/WebContent/imagenesCartas/6H.png
new file mode 100644
index 0000000..93a84f8
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/6H.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/6S.png a/jweb-e002/WebContent/imagenesCartas/6S.png
new file mode 100644
index 0000000..874162b
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/6S.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/7C.png a/jweb-e002/WebContent/imagenesCartas/7C.png
new file mode 100644
index 0000000..f6a9653
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/7C.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/7D.png a/jweb-e002/WebContent/imagenesCartas/7D.png
new file mode 100644
index 0000000..6c4393d
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/7D.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/7H.png a/jweb-e002/WebContent/imagenesCartas/7H.png
new file mode 100644
index 0000000..d4a59ff
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/7H.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/7S.png a/jweb-e002/WebContent/imagenesCartas/7S.png
new file mode 100644
index 0000000..895f85c
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/7S.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/8C.png a/jweb-e002/WebContent/imagenesCartas/8C.png
new file mode 100644
index 0000000..bc87bf0
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/8C.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/8D.png a/jweb-e002/WebContent/imagenesCartas/8D.png
new file mode 100644
index 0000000..38c5695
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/8D.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/8H.png a/jweb-e002/WebContent/imagenesCartas/8H.png
new file mode 100644
index 0000000..c2812aa
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/8H.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/8S.png a/jweb-e002/WebContent/imagenesCartas/8S.png
new file mode 100644
index 0000000..0277cc6
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/8S.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/9C.png a/jweb-e002/WebContent/imagenesCartas/9C.png
new file mode 100644
index 0000000..d81b2f2
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/9C.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/9D.png a/jweb-e002/WebContent/imagenesCartas/9D.png
new file mode 100644
index 0000000..e0d3d05
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/9D.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/9H.png a/jweb-e002/WebContent/imagenesCartas/9H.png
new file mode 100644
index 0000000..7b679e1
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/9H.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/9S.png a/jweb-e002/WebContent/imagenesCartas/9S.png
new file mode 100644
index 0000000..f58493e
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/9S.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/AC.png a/jweb-e002/WebContent/imagenesCartas/AC.png
new file mode 100644
index 0000000..396c158
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/AC.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/AD.png a/jweb-e002/WebContent/imagenesCartas/AD.png
new file mode 100644
index 0000000..d702a39
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/AD.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/AH.png a/jweb-e002/WebContent/imagenesCartas/AH.png
new file mode 100644
index 0000000..435fc14
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/AH.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/AS.png a/jweb-e002/WebContent/imagenesCartas/AS.png
new file mode 100644
index 0000000..f07f67d
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/AS.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/JC.png a/jweb-e002/WebContent/imagenesCartas/JC.png
new file mode 100644
index 0000000..16418e4
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/JC.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/JD.png a/jweb-e002/WebContent/imagenesCartas/JD.png
new file mode 100644
index 0000000..05b0389
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/JD.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/JH.png a/jweb-e002/WebContent/imagenesCartas/JH.png
new file mode 100644
index 0000000..259421c
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/JH.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/JS.png a/jweb-e002/WebContent/imagenesCartas/JS.png
new file mode 100644
index 0000000..6e0554d
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/JS.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/KC.png a/jweb-e002/WebContent/imagenesCartas/KC.png
new file mode 100644
index 0000000..70c4ee5
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/KC.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/KD.png a/jweb-e002/WebContent/imagenesCartas/KD.png
new file mode 100644
index 0000000..95a3b8f
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/KD.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/KH.png a/jweb-e002/WebContent/imagenesCartas/KH.png
new file mode 100644
index 0000000..0defcbb
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/KH.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/KS.png a/jweb-e002/WebContent/imagenesCartas/KS.png
new file mode 100644
index 0000000..43b8e19
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/KS.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/QC.png a/jweb-e002/WebContent/imagenesCartas/QC.png
new file mode 100644
index 0000000..6f74177
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/QC.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/QD.png a/jweb-e002/WebContent/imagenesCartas/QD.png
new file mode 100644
index 0000000..85c443f
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/QD.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/QH.png a/jweb-e002/WebContent/imagenesCartas/QH.png
new file mode 100644
index 0000000..ba8e1e4
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/QH.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/QS.png a/jweb-e002/WebContent/imagenesCartas/QS.png
new file mode 100644
index 0000000..a6ef69f
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/QS.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/TC.png a/jweb-e002/WebContent/imagenesCartas/TC.png
new file mode 100644
index 0000000..f9ade6d
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/TC.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/TD.png a/jweb-e002/WebContent/imagenesCartas/TD.png
new file mode 100644
index 0000000..a9de67e
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/TD.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/TH.png a/jweb-e002/WebContent/imagenesCartas/TH.png
new file mode 100644
index 0000000..df551b0
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/TH.png differ
diff --git b/jweb-e002/WebContent/imagenesCartas/TS.png a/jweb-e002/WebContent/imagenesCartas/TS.png
new file mode 100644
index 0000000..22141df
Binary files /dev/null and a/jweb-e002/WebContent/imagenesCartas/TS.png differ
diff --git b/jweb-e002/WebContent/index.html a/jweb-e002/WebContent/index.html
new file mode 100644
index 0000000..caf2de2
--- /dev/null
+++ a/jweb-e002/WebContent/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+ Insert title here
+
+
+
+
+
\ No newline at end of file
diff --git b/jweb-e002/build/classes/clases/Carta.class a/jweb-e002/build/classes/clases/Carta.class
new file mode 100644
index 0000000..ee6f09d
Binary files /dev/null and a/jweb-e002/build/classes/clases/Carta.class differ
diff --git b/jweb-e002/build/classes/clases/Poker.class a/jweb-e002/build/classes/clases/Poker.class
new file mode 100644
index 0000000..4433cc2
Binary files /dev/null and a/jweb-e002/build/classes/clases/Poker.class differ
diff --git b/jweb-e002/build/classes/servlets/Cartas.class a/jweb-e002/build/classes/servlets/Cartas.class
new file mode 100644
index 0000000..77c9590
Binary files /dev/null and a/jweb-e002/build/classes/servlets/Cartas.class differ
diff --git b/jweb-e002/build/classes/servlets/ManoDoc.class a/jweb-e002/build/classes/servlets/ManoDoc.class
new file mode 100644
index 0000000..a8f5e17
Binary files /dev/null and a/jweb-e002/build/classes/servlets/ManoDoc.class differ
diff --git b/jweb-e002/build/classes/servlets/SieteCartas.class a/jweb-e002/build/classes/servlets/SieteCartas.class
new file mode 100644
index 0000000..cf93981
Binary files /dev/null and a/jweb-e002/build/classes/servlets/SieteCartas.class differ
diff --git b/jweb-e002/lib/json-20180813.jar a/jweb-e002/lib/json-20180813.jar
new file mode 100644
index 0000000..592f08c
Binary files /dev/null and a/jweb-e002/lib/json-20180813.jar differ
diff --git b/jweb-e002/src/clases/Carta.java a/jweb-e002/src/clases/Carta.java
new file mode 100644
index 0000000..ec33fe0
--- /dev/null
+++ a/jweb-e002/src/clases/Carta.java
@@ -0,0 +1,23 @@
+package clases;
+
+public class Carta {
+
+ public Carta()
+ {
+
+ }
+
+ public Carta(String completo)
+ {
+ this.valor = String.valueOf(completo.charAt(0));
+ this.palo = String.valueOf(completo.charAt(1));
+ }
+
+ String valorPalo()
+ {
+ return this.valor + this.palo;
+ }
+
+ public String valor;
+ public String palo;
+}
diff --git b/jweb-e002/src/clases/Poker.java a/jweb-e002/src/clases/Poker.java
new file mode 100644
index 0000000..68bee19
--- /dev/null
+++ a/jweb-e002/src/clases/Poker.java
@@ -0,0 +1,775 @@
+package clases;
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import clases.Carta;
+//import com.roshka.bootcamp004.poker.MyClass;
+
+public class Poker {
+
+ // TH, TC, 5S, 5H, AD, AH, 2S
+ public String mejorJugada(Carta[] mano)
+ {
+ ArrayList candidatas = new ArrayList();
+ ArrayList mejores = new ArrayList();
+ String mejoresString="";
+ Carta[] cartas = mano;
+
+ //Crea una mano de 5 cartas que va a seguir igual siempre
+ Carta [] manoPrincipal = new Carta[5];
+
+ //Crea una mano de 5 cartas que va a variar para crear las
+ //distintas combinaciones
+ Carta [] manoVariante = new Carta[5];
+
+ //Carga las primeras 5 cartas en la mano
+ for (int i = 0; i < 5; i++) {
+ manoPrincipal[i] = new Carta(cartas[i].valor+cartas[i].palo);
+ }
+ manoVariante = manoPrincipal.clone();
+ //Se agrega la primera combinación a las manos candidatas
+ candidatas.add(manoVariante.clone());
+
+ //Las dos ultimas cartas las guarda en variables diferentes
+ Carta x = cartas[5];
+ Carta y = cartas[6];
+
+ //Se crean las combinaciones
+ for (int i = 0; i < 5; i++) {
+ //Rota la x
+ manoVariante[i] = x;
+ //Agrego una copia de la mano variante para no tener problemas
+ //Con la modificacion de los valores
+ //Por el tema de paso por referencia
+ candidatas.add(manoVariante.clone());
+
+ //Es para no repetir combinaciones. Esta repeticion
+ //se da en la cuarta iteración
+ //if(i!=4){
+ for(int j = i; j < 5; j++){
+ //Se usa una variable auxiliar para volver a poner el valor
+ //que se cambió como estaba
+ Carta aux = manoVariante[j];
+
+ //Rota la y cuando la x está rotando
+ manoVariante[j]= y;
+ //Se agrega una copia a las candidatas
+ candidatas.add(manoVariante.clone());
+ //Vuelve la mano variante a su estado original
+ manoVariante[j] = aux;
+ }
+ /*}else{
+ //Solo faltaría agregar una rotación, cuando la y está al final
+ manoVariante[i]=y;
+ candidatas.add(manoVariante.clone());
+ }*/
+ manoVariante = manoPrincipal.clone();
+ }
+
+ /*
+ for (int i = 0; i < candidatas.size(); i++) {
+ System.out.println("Combinacion número: "+(i+1));
+ System.out.println(candidatas.get(i)[0].valor+candidatas.get(i)[0].palo);
+ System.out.println(candidatas.get(i)[1].valor+candidatas.get(i)[1].palo);
+ System.out.println(candidatas.get(i)[2].valor+candidatas.get(i)[2].palo);
+ System.out.println(candidatas.get(i)[3].valor+candidatas.get(i)[3].palo);
+ System.out.println(candidatas.get(i)[4].valor+candidatas.get(i)[4].palo);
+ System.out.println("******");
+ }
+ */
+ //System.out.println(candidatas.size());
+
+ //Crea una instancia de MyClass, que contiene
+ //el método que elige cuál es la mejor jugada
+ //MyClass mc = new MyClass();
+
+ //Crea un vector string con los índices de los ganadores
+ String[] mejoresCombinaciones = ganadores(candidatas).split(" ");
+ //System.out.println("Cantidad de ganadores: "+ mejoresCombinaciones.length);
+
+ //System.out.println("Indice de los ganadores: "+mc.ganadores(candidatas));
+
+ //Imprime las mejores combinaciones
+ /*for (int j = 0; j < mejoresCombinaciones.length; j++) {
+ //Convierte los indices de los ganadores que están en String
+ //a int
+ int index = Integer.parseInt(mejoresCombinaciones[j]);
+ for (int i = 0; i < 5; i++) {
+ System.out.print(candidatas.get(index)[i].valor+candidatas.get(index)[i].palo+" ");
+ }
+ System.out.println();
+ }*/
+
+ for (int j = 0; j < mejoresCombinaciones.length; j++) {
+ //Convierte los indices de los ganadores que están en String
+ //a int
+ int index = Integer.parseInt(mejoresCombinaciones[j]);
+ mejores.add(candidatas.get(index).clone());
+ }
+
+ //Carga mejoresString, que contiene los resultados del vector mejores
+ //pero en String, todo concatenado
+ //También imprime el contenido de "mejores"
+ for (int j = 0; j < mejores.size(); j++) {
+ //Convierte los indices de los ganadores que están en String
+ //a int
+ //int index = Integer.parseInt(mejoresCombinaciones[j]);
+ for (int i = 0; i < 5; i++) {
+ mejoresString += mejores.get(j)[i].valor+mejores.get(j)[i].palo;
+
+ //System.out.print(candidatas.get(j)[i].valor+candidatas.get(j)[i].palo);
+ if(i!=4){
+ //System.out.print(",");
+ mejoresString += ",";
+
+ }
+ }
+ //System.out.println();
+ if(j!=mejores.size()-1)
+ mejoresString += ";";
+ }
+
+
+ return mejoresString;
+ //return "AD,AH,TH,TC,5S;AD,AH,TH,TC,5H";
+ }
+
+
+ public String ganadores(List jugadas)
+ {
+ //System.out.println("Cantidad de jugadas: " + jugadas.size());
+ ArrayList ganadores = new ArrayList();
+ //Indica que es la primera mano
+ boolean esPrimero=true;
+ //Array para almacenar los índices
+ ArrayList indices = new ArrayList();
+ //Contador que mantiene el valor del indice
+ int index=0;
+
+ for (Carta[] mano : jugadas) {
+ // System.out.println("JUGADA ======================");
+
+ if(esPrimero){
+ ganadores.add(mano);
+ indices.add(index);
+ esPrimero=false;
+ }
+ else{
+ ArrayList calificacionMayor= calificacion(ganadores.get(ganadores.size()-1));
+ ArrayList calificacionActual= calificacion(mano);
+ if(calificacionMayor.get(0)calificacionActual.get(i)){
+ break;
+ }
+ //Si la i llega al tamaño máximo del array, quiere decir
+ //que son todos iguales
+ else if(i==calificacionMayor.size()-1){
+ ganadores.add(mano);
+ indices.add(index);
+ }
+ }
+ }
+ }
+ index++;
+ }
+
+ //imprimirGanadores(ganadores);
+ String stringGanadores="";
+ for (int i = 0; i < indices.size(); i++) {
+ stringGanadores += indices.get(i)+" ";
+ }
+ return stringGanadores;
+ }
+
+ private ArrayList calificacion(Carta[] mano){
+ ArrayList calificacion= new ArrayList();
+ /**
+ * La calificacion numérica de cada carta estará en el lugar 0 del array retornado
+ * Escalera color -> 9
+ * Poker -> 8
+ * Full -> 7
+ * Color -> 6
+ * Escalera -> 5
+ * Trio -> 4
+ * Par Doble -> 3
+ * Par -> 2
+ * Carta alta -> 1
+ */
+
+ //Array para almacenar la cantidad de apariciones de cada número
+ int[] valores = new int[13];
+ //Array para almacenar la cantidad de apariciones de cada palo
+ int[] palos = new int[4];
+ inicializarArrays(valores, palos, mano);
+
+ //Si es escalera, solo basta ver el valor de la escalera
+ if(esEscaleraColor(valores, palos)){
+ int[] ordenado = ordenarMano(mano);
+ calificacion.add(9);
+ //Si el AS actúa como 14, entonces el AS vale 14
+ if(ordenado[4]==12 && ordenado[0]==0){
+ calificacion.add(14);
+ }
+ else{
+ calificacion.add(ordenado[4]);
+ }
+
+ }
+ else if(esPoker(valores)){
+ //Si es poker, se envia la calificacion en el primer elemento, seguido del
+ //valor que hizo que sea poker, seguido del valor diferente
+ calificacion.add(8);
+ if(indiceDe(4,valores)==0){
+ calificacion.add(14);
+ calificacion.add(indiceDe(1,valores));
+ }
+ else{
+ calificacion.add(indiceDe(4,valores));
+
+ if(indiceDe(1, valores)==0){
+ calificacion.add(14);
+ }
+ else{
+ calificacion.add(indiceDe(1, valores));
+ }
+ }
+
+ }
+ else if(esFull(valores)){
+ //No hay empate en full, por lo tanto solo hace falta
+ //el valor de la mano
+ calificacion.add(7);
+ if(indiceDe(3,valores)==0){
+ calificacion.add(14);
+ calificacion.add(indiceDe(2,valores));
+ }
+ else{
+ calificacion.add(indiceDe(3,valores));
+
+ if(indiceDe(2, valores)==0){
+ calificacion.add(14);
+ }
+ else{
+ calificacion.add(indiceDe(2,valores));
+ }
+ }
+ }
+ else if(esColor(palos)){
+ int aux=0;
+ calificacion.add(6);
+ int[] ordenado = ordenarMano(mano);
+ if(ordenado[0]==0){
+ calificacion.add(14);
+ aux=1;
+ }
+ for (int i = 4; i >= aux; i--) {
+ calificacion.add(ordenado[i]);
+ }
+ }
+ else if(esEscalera(valores)){
+ int[] ordenado = ordenarMano(mano);
+ calificacion.add(5);
+ if(ordenado[4]==12 && ordenado[0]==1){
+ calificacion.add(14);
+ }
+ else{
+ calificacion.add(ordenado[4]);
+ }
+ }
+ else if(esTrio(valores)){
+ calificacion.add(4);
+
+ //Convierte el AS al mayor valor, en lugar de 1 vale 14
+ if(indiceDe(3,valores)==0){
+ calificacion.add(14);
+ }else{
+ calificacion.add(indiceDe(3, valores));
+ }
+
+ int[] ordenado = ordenarMano(mano);
+
+ int aux = 0;
+ if(ordenado[0]==0){
+ calificacion.add(14);
+ aux = 1;
+ }
+
+
+ for (int i = 4; i >=aux; i--) {
+ if(calificacion.get(1)!=ordenado[i]){
+ calificacion.add(ordenado[i]);
+ }
+ }
+ }
+ else if(esParDoble(valores)){
+ calificacion.add(3);
+
+ //Si es un par doble de AS, se le asigna 14
+ if(indiceDe(2,valores)==0){
+ calificacion.add(14);
+ calificacion.add(indiceDeReversa(2, valores));
+ }
+ else{
+ calificacion.add(indiceDeReversa(2, valores));
+ calificacion.add(indiceDe(2, valores));
+ }
+
+ if(indiceDe(1,valores)==0){
+ calificacion.add(14);
+ }
+ else{
+ calificacion.add(indiceDe(1,valores));
+ }
+
+ }
+ else if(esPar(valores)){
+ calificacion.add(2);
+
+ //Si el par es de AS, se setea su valor a 14
+ if(indiceDe(2,valores)==0){
+ calificacion.add(14);
+ }
+ else{
+ calificacion.add(indiceDe(2, valores));
+ }
+
+
+ int[] ordenado = ordenarMano(mano);
+ int aux=0;
+
+ if(ordenado[0]==0){
+ calificacion.add(14);
+ aux=1;
+ }
+
+
+ for (int i = 4; i >=aux; i--) {
+ if(calificacion.get(1)!=ordenado[i]){
+ calificacion.add(ordenado[i]);
+ }
+ }
+ }
+ else{
+ int aux=0;
+ calificacion.add(1);
+ //Si hay un AS, se coloca directamente después de la
+ //calificación
+ int[] ordenado = ordenarMano(mano);
+
+ if(ordenado[0]==0){
+ calificacion.add(14);
+ aux=1;
+ }
+ for (int i = 4; i >= aux; i--) {
+ calificacion.add(ordenado[i]);
+ }
+ }
+
+
+ return calificacion;
+ }
+
+ private int indiceDe(int elemento, int[] vector){
+
+ for (int i = 0; i < vector.length; i++) {
+ if(vector[i]==elemento) return i;
+ }
+
+ //retorna -1 si no encuentra;
+ return -1;
+ }
+ private int indiceDeReversa(int elemento, int[] vector){
+
+ for (int i = vector.length-1; i >=0; i--) {
+ if(vector[i]==elemento) return i;
+ }
+
+ //retorna -1 si no encuentra;
+ return -1;
+ }
+
+ private int[] ordenarMano(Carta[] mano){
+ int[] ordenado = new int[5];
+
+ for (int i = 0; i < 5; i++) {
+
+ String valorString= mano[i].valor;
+ if(valorString.equals("A") || valorString.equals("a")){
+ ordenado[i]=0;
+ }
+ else if(valorString.equals("T") || valorString.equals("t")){
+ ordenado[i]=9;
+ }
+ else if(valorString.equals("J") || valorString.equals("j")){
+ ordenado[i]=10;
+ }
+ else if(valorString.equals("Q") || valorString.equals("q")){
+ ordenado[i]=11;
+ }
+ else if(valorString.equals("K") || valorString.equals("k")){
+ ordenado[i]=12;
+ }
+ else{
+ ordenado[i] = Integer.parseInt(valorString)-1;
+ }
+ }
+ Arrays.sort(ordenado);
+ return ordenado;
+ }
+
+ private boolean esEscaleraColor(int[] valores, int[] palos){
+ /**
+ * Funcionamiento: recorre el vector de valores y cuando encuentra un 1
+ * enciende una bandera para comenzar a contar.
+ * Termina el ciclo cuando ya no quedan elementos o cuando encuentra un número
+ * distinto a 1. Si este número es mayor a 1, entonces termina el ciclo.
+ * Si el contador termina en 5, se comprueba que todos los palos sean iguales.
+ * esto se consigue revisando si en el vector de palos hay un 5, porque esto significa
+ * que todos fueron iguales
+ * O si hay un 4 en el contador y una A presente, también es verdadero
+ */
+
+ //bandera para activar sumador
+ boolean sumadorActivo=false;
+
+ //Sumador de números contiguos
+ int sumador=0;
+
+ //no se comprueba si existe A, porque despues se comprueba
+ //si el contador llegó a 4 y existe una A, entonces es una
+ //escalera
+ for (int i = 1; i < 13; i++) {
+ //Si la cantidad de aparición de un valor fue mayor a 1,
+ //no es posible que sea una escalera
+ if(valores[i]>1){
+ return false;
+ }
+
+ if(valores[i]==1){
+ sumadorActivo=true;
+ }
+
+ if(valores[i]==0 && sumadorActivo){
+ break;
+ }
+ if(sumadorActivo){
+ sumador++;
+ }
+ }
+
+ //Si el sumador llegó a 5 entra al ciclo que comprueba
+ //o si llegó a 4 y existe una A
+ //si alguno de los palos vino 5 veces
+ if(sumador==5 || (sumador==4 && valores[0]==1 && valores[9]==1 && valores[8]==0)){
+ for (int i = 0; i < 4; i++) {
+ if(palos[i]==5){
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ //Comprueba si la mano es póker
+ private boolean esPoker(int[] valores){
+ /**
+ * Funcionamiento: Ordena el array de valores de forma ascendente.
+ * Para comprobar si existe poker, basta con mirar el último elemento del array,
+ * donde debería encontrarse un 4
+ */
+
+ //Clona el array de valores
+ int [] ordenado = valores.clone();
+ //Ordena la copia
+ Arrays.sort(ordenado);
+
+ if(ordenado[12]==4){
+ return true;
+ }
+
+ return false;
+ }
+
+ private boolean esFull(int[] valores){
+ //Clona el array de valores
+ int [] ordenado = valores.clone();
+ //Ordena la copia
+ Arrays.sort(ordenado);
+
+ if(ordenado[12]==3 && ordenado[11]==2)
+ return true;
+
+ return false;
+ }
+
+ private boolean esColor(int[] palos){
+ //Clona el array de valores
+ int [] ordenado = palos.clone();
+ //Ordena la copia
+ Arrays.sort(ordenado);
+
+ if(ordenado[3]==5)
+ return true;
+
+ return false;
+ }
+
+ private boolean esEscalera(int[] valores){
+ //bandera para activar sumador
+ boolean sumadorActivo=false;
+
+ //Sumador de números contiguos
+ int sumador=0;
+
+ //no se comprueba si existe A, porque despues se comprueba
+ //si el contador llegó a 4 y existe una A, entonces es una
+ //escalera
+ for (int i = 1; i < 13; i++) {
+
+ //Si la cantidad de aparición de un valor fue mayor a 1,
+ //no es posible que sea una escalera
+ if(valores[i]>1){
+ return false;
+ }
+
+ if(valores[i]==1){
+ sumadorActivo=true;
+ }
+
+ if(valores[i]==0 && sumadorActivo){
+ break;
+ }
+ if(sumadorActivo){
+ sumador++;
+ }
+ }
+
+ //Si el sumador llegó a 5 entra al ciclo que comprueba
+ //o si llegó a 4 y existe una A
+ if(sumador==5 || (sumador==4 && valores[0]==1 && valores[9]==1 && valores[8]==0)){
+ return true;
+ }
+
+ return false;
+ }
+
+ private boolean esTrio(int[] valores){
+ //Clona el array de valores
+ int [] ordenado = valores.clone();
+ //Ordena la copia
+ Arrays.sort(ordenado);
+
+ if(ordenado[12]==3 && ordenado[11]==1 && ordenado[10]==1)
+ return true;
+
+ return false;
+ }
+
+ private boolean esParDoble(int[] valores){
+ //Clona el array de valores
+ int [] ordenado = valores.clone();
+ //Ordena la copia
+ Arrays.sort(ordenado);
+
+ if(ordenado[12]==2 && ordenado[11]==2 && ordenado[10]==1)
+ return true;
+ return false;
+ }
+
+ private boolean esPar(int[] valores){
+ //Clona el array de valores
+ int [] ordenado = valores.clone();
+ //Ordena la copia
+ Arrays.sort(ordenado);
+
+ if(ordenado[12]==2 && ordenado[11]==1 && ordenado[10]==1 && ordenado[9]==1)
+ return true;
+
+ return false;
+ }
+
+ private void inicializarArrays(int[] valores, int[] palos, Carta[] mano){
+ //Se coloca 1 y 14 para que sea mas facil controlar las Escaleras
+ for (int i = 0; i < 13; i++) {
+ valores[i]=0;
+ }
+ for (int i = 0; i < 4; i++) {
+ palos[i] = 0;
+ }
+
+ //carga los vectores de cantidades de aparición
+ for (int i = 0; i < 5; i++) {
+ String valorString = mano[i].valor;
+ String paloString = mano[i].palo;
+
+ if(valorString.equals("A") || valorString.equals("a")){
+ valores[0]++;
+ }
+ else if(valorString.equals("T") || valorString.equals("t")){
+ valores[9]++;
+ }
+ else if(valorString.equals("J") || valorString.equals("j")){
+ valores[10]++;
+ }
+ else if(valorString.equals("Q") || valorString.equals("q")){
+ valores[11]++;
+ }
+ else if(valorString.equals("K") || valorString.equals("k")){
+ valores[12]++;
+ }
+ else if(valorString.equals("J") || valorString.equals("j")){
+ valores[10]++;
+ }
+ else{
+ int index = Integer.parseInt(valorString);
+ valores[index-1]++;
+ }
+
+ //Para el array de cantidades de palos
+ //S -> 0
+ //C -> 1
+ //H -> 2
+ //D -> 3
+ if(paloString.equals("S") || paloString.equals("s")){
+ palos[0]++;
+ }
+ else if(paloString.equals("C") || paloString.equals("c")){
+ palos[1]++;
+ }
+ else if(paloString.equals("H") || paloString.equals("h")){
+ palos[2]++;
+ }
+ else if(paloString.equals("D") || paloString.equals("d")){
+ palos[3]++;
+ }
+ }
+ }
+
+ //Este metodo genera n cantidad de cartas al azar
+ public Carta[] generarCartas(int n) {
+ Carta[] cartas = new Carta[n];
+
+ Random random = new Random();
+ String nuevaCarta = "";
+
+ int valor;
+ int palo;
+
+ for(int i=0; i