Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Lorenzo31 en 07 de Febrero 2017, 16:01

Título: PHP. Programacion Funcional ejemplos básicos, rotar array, comprobar palíndromo
Publicado por: Lorenzo31 en 07 de Febrero 2017, 16:01
Funcion que indica cuantas veces se repite X elemento en un conjunto.
La pongo en dos versiones, Int y String.

la escribo para recibir criticas de los duchos del foro, y aprender de esta programación adaptada a PHP, en este caso. No supe como pasar el String -1 de otra forma que la que veis para recursiva.

Con int, dado la funcion cuantasVeces(numero, cadenaDeNumeros);

Código: [Seleccionar]
<?php	//funcion (n,x)//				iguales(n,y) n!=y 0   n==y 1	function iguales(int $number, int $other):int{			return ($number == $other) ? 1 : 0;			}		function newCadena(string $cadena):string{ 							$arrayCadena = str_split($cadena);															foreach($arrayCadena as $key=>$num){ 										$recuperar .= ($key) ? $num : ''; }									return $recuperar;								  }		function cuantasVeces(int $number, int $cadena): int{			switch($cadena){				case 0:   return 0;				default:								$letter = substr($cadena, 0, 1);			$value = cuantasVeces($number, (int)newCadena($cadena));				return $value + iguales($number, (int)$letter);	}			}				echo cuantasVeces(4,1249434623);		?>



Con String

Código: [Seleccionar]
<?php	//funcion (n,x)//				iguales(n,y) n!=y 0   n==y 1	function iguales(string $number, string $other):int{			return ($number == $other) ? 1 : 0;			}		function newCadena(string $cadena):string{ 							$arrayCadena = str_split($cadena);															foreach($arrayCadena as $key=>$num){ 										$recuperar .= ($key) ? $num : ''; }									return $recuperar;								  }		function cuantasVeces(string $number, string $cadena): int{		switch(strlen($cadena)){				case 0:   return 0;				default:				$letter = substr($cadena, 0, 1);			$value = cuantasVeces($number, newCadena($cadena));				return $value + iguales($number, $letter);	}			}				echo cuantasVeces('c','carca');		?>


Espero criticas para mejorar y aprender, saludos compañeros.
Título: Re:PHP. Programacion Funcional.
Publicado por: Lorenzo31 en 08 de Febrero 2017, 13:14
Añado otro ejercicio. La función es, rotar N numeros de un array , pasandolos de alante a atrás.
rota(2, array(10,4,3,2,1,2,4,5,6,7,8,8,9)) --> devolverá array(3,2,1,2,4,5,6,7,8,8,9, 10, 4)

Código: [Seleccionar]
function rota(int $cantidad, array $lista):array{

switch($cantidad){
case 0: break;
 
default:
array_push($lista, array_shift($lista));
$cantidad--;
$lista = rota($cantidad, $lista);
}
return $lista;

}

var_dump( rota(2, array(10,4,3,2,1,2,4,5,6,7,8,8,9)) );



Dado un array, la funcion palindromo(array) te indica si es palindromo o no, true false.
Código: [Seleccionar]
function compareFalse(bool $numero, bool $numero2):bool{  return ($numero && $numero2) ? true : false; }

function palindromo(array $lista):bool
{
if(count($lista) > 1 ){
return  compareFalse( ( array_shift($lista) == array_pop($lista) ), palindromo($lista) );
}
return true;
}


var_dump(palindromo(array(3,2,1,1,2,3)) );
var_dump(palindromo(array(4,3,1,3,4) ) );
var_dump( palindromo(array(4,1,3,4) ) );



Título: Re:PHP. Programacion Funcional.
Publicado por: Lorenzo31 en 08 de Febrero 2017, 20:17
Edito el codigo de rota(n), para hacerlo mas claro y recursivo

Código: [Seleccionar]
function rota( $cantidad, $lista){

switch($cantidad){
case 0: return $lista;

default:
array_push($lista, array_shift($lista));

return rota($cantidad-1, $lista);
}

}

var_dump( rota(2, array(10,4,3,2,1,2,4,5,6,7,8,8,9)) );