Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/06/2015, 10:27
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Pregunta [-CONCURSO-] PHP Maraton script #1 - Desafios



NIVEL 1


Este primer nivel es para calentamiento, la dificultad de estos desafíos es la mínima de la maratón. ¡En marcha!

A.- En este desafió, se deberá mostrar la frase "Hola mundo"... ¡Pero con algunas restricciones!
- Script: php_maraton_v1_level_1A.php

- El script no puede decir "Hola mundo" de forma explicita en ningún lado, es decir, no se pueden hacer cosas como:
Código PHP:
Ver original
  1. <?php
  2.         $saludo = "Hola mundo";
  3.         $saludo = implode(" ", ["Hola", "mundo"]);
  4.         // Etc..
Dicho de otra forma, al mirar el código fuente no se deben poder leer directamente ninguna de las dos palabras, ya sea juntas o separadas, por lo que hay que pensar una forma de ocultarlas.

CONDICIÓN DE MERITO:
- No se pueden utilizar ninguna de las funciones de manejo de string que figuran en esta lista del manual.

B.- En este desafió, la tarea a realizar sera identificar y saludar al visitante... ¡Pero con algunas restricciones!
- Script: php_maraton_v1_level_1B.php
- El script deberá ser capaz de realizar una interaccion en 3 pasos con el usuario, para ello agregue al inicio de su script la definicion del siguiente array que contiene el codigo html de cada pantalla:
Código PHP:
Ver original
  1. <?php
  2.         $pantallas = [
  3.             '<!DOCTYPE html>
  4.                 <html>
  5.                     <head>
  6.                         <title>PHP MARATON SCRIPT V1 - NIVEL 1 B</title>
  7.                     </head>
  8.                     <body>
  9.                         <form action="php_maraton_v1_level_1B.php">
  10.                             <input type="text" name="nombre">
  11.                             <input type="submit" value="IDENTIFICARME">
  12.                         </form>
  13.                     </body>
  14.                 </html>',
  15.             '<!DOCTYPE html>
  16.                 <html>
  17.                     <head>
  18.                         <title>PHP MARATON SCRIPT V1 - NIVEL 1 B</title>
  19.                         <meta http-equiv="Refresh" content="1;URL=php_maraton_v1_level_1B.php">
  20.                     </head>
  21.                     <body>
  22.                         ¡Has sido identificado correctamente! <a href="php_maraton_v1_level_1B.php">Hay click aqui si el navegador no te redirige automaticamente</a>
  23.                     </body>
  24.                 </html>',
  25.             '<!DOCTYPE html>
  26.                 <html>
  27.                     <head>
  28.                         <title>PHP MARATON SCRIPT V1 - NIVEL 1 B</title>
  29.                     </head>
  30.                     <body>
  31.                         ¡Hola -NOMBRE-! ¡Te tengo identificado!
  32.                     </body>
  33.                 </html>'
  34.         ];

1) Si el usuario esta cargando el script "php_maraton_v1_level_1B.php" y no esta identificado, mostrar la pantalla $pantallas[0] para solicitar un nombre.

2) Si el usuario se acaba de identificar (osea que acaba de enviar el formulario del paso 1, debe mostrar la pantalla $pantallas[1] que lo llevara a su pagina de bienvenida.

3) Cuando el usuario es redireccionado a su pagina de bienvenida luego de identificarse, deberá ver un saludo cordial, puesto ya se ha identificado previamente, dicho saludo es la pantalla $pantallas[2] pero reemplazando a "-NOMBRE-" por el nombre que ingreso en el paso 1.

CONDICIÓN DE MERITO:
No utilizar para resolver a este desafió ninguna de las siguientes opciones:
  • Sesiones ($_SESSION, session_*, etc).
  • Cookies.
  • Archivos (file_put_contents, file_get_contents, fopen, etc).
  • Bases de datos.
  • Memcache.

IMPORTANTE:
Para simplificar la lectura del código a la hora de publicar la solución de este desafió, no publique el array con las definiciones de las pantallas, puesto que ya esta en este mensaje y es el mismo para todos los concursantes.

NIVEL 2


Este es el segundo nivel de la maratón, ambos desafíos propuestos están relacionados con un juego de poker. ¡En marcha!

NOTA: Para que no halla disputas, la siguiente tabla muestra las combinaciones en orden ganador de un juego de poker y las probabilidades de obtener cada combinación, los desafios se evaluaran en base a esta tabla:



Para ambos desafíos se usara la siguiente clase:
Código PHP:
Ver original
  1. <?php
  2.   class Poker {
  3.      
  4.       public function jugada($cartas) {
  5.           /*...*/
  6.           return /*... Ej: "Escalera real" ...*/;
  7.       }
  8.      
  9.       public function partida($cartas1, $cartas2) {
  10.           /*...*/
  11.           return /*... Ej: -1, 0, 1 ...*/;
  12.       }
  13.      
  14.       public function probabilidades($cartas) {
  15.           /*...*/
  16.           return [ "win" : /*...*/, "lost" : /*...*/, "tied" : /*...*/ ];
  17.       }
  18.      
  19.       public function apuesta($cartas, $maximo = 100) {
  20.           /*...*/
  21.           return /*... Ej: 50 ...*/;
  22.       }          
  23.      
  24.   }

Considere ademas, que en todos los casos $cartas es un array de 5 string de dos caracteres cada uno, donde el primer carácter indica el numero de la carta:
Ej: 1,2,3,4,5,6,7,8,9,0,J,Q,K
NOTA: El 0 representa al 10
y el segundo el color:
Ej: P,C,D,T
las letras pueden estar en mayusculas o minusculas o ambas ¡Ojo con eso!.

Ej: $cartas = ["1P", "2T", "JC", "KD", "5D"];


A.- En este desafió, se deberá programar el método jugada($cartas), que deberá retornar el nombre de la jugada (primer columna de la tabla) de acuerdo a la mano obtenida.
No esta permitido hacer uso de los métodos del punto B.

CONDICIÓN DE MERITO:
Desarrollar el método partida($cartas1, $cartas2) que determine quien es el ganador de una partida, en caso de empate debe retornar 0, si la jugada de $cartas1 es mejor que la de $cartas2 debe retornar 1, y si la jugada de $cartas2 es mejor que la de $cartas1 debe retornar -1.
Recuerde que en caso de que la jugada de ambos sea "Carta alta" ganara el que tenga la carta mas alta.
Esta permitido llamar al método creado previamente.


B.- En este desafió, se deberá programar el método probabilidades($cartas), que deberá retornar la probabilidad de ganar, perder y empatar que tiene una mano de cartas determinada basándose en los datos de la ultima columna del cuadro.
Esta permitido llamar al método creado en el punto A.
NOTA MATEMÁTICA: Tenga en cuenta que la suma de estas 3 probabilidades debe ser 1 si o si.

CONDICIÓN DE MERITO:
Desarrollar el método apuesta($cartas, $maximo = 100) que determine en base a las probabilidades de ganar, perder y empatar de la jugada, cuando deberia ser la apuesta del jugador en términos económicos, teniendo en cuenta que la mesa solo permite hasta un tope de apuestas, este tope esta definido en el parámetro $maximo, por lo tanto el mono a sugerir nunca puede exceder ese techo.
Esta permitido llamar al método creado previamente.
Para realizar el calculo deben aplicarse las siguientes consideraciones:
- Se sugiere apostar una parte directamente proporcional a la probabilidad de ganar.
- Se sugiere apostar la mitad de la parte directamente proporcional a probabilidad de empatar.
- Se sugiere no apostar nada de la parte directamente proporcional a la probabilidad de perder.
Cita:
Ej:
$maximo = 100
$prob_ganar = 0.5
$prob_empatar = 0.4
$prob_perder = 0.1
$apuesta_sugerida = 70
CONDICIÓN DE MERITO EXTRA:
En el metodo probabilidades($cartas) debe considerar que si la jugada es carta alta, la probabilidad varia segun el valor de la carta mas alta.

IMPORTANTE: Recuerde publicar las soluciones en 2 mensajes diferentes, si bien pertenecen a la misma clase, se evalúan por separado de forma independiente.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 29/06/2015 a las 15:53 Razón: Nivel 2