Pizza Pi

Pizza Pi

Ejercicio de aprendizaje

Introducción

Números enteros

Los números enteros son números sin parte decimal que pertenecen al conjunto {..., -2, -1, 0, 1, 2, ...}. Los valores máximo y mínimo de un número entero dependen del sistema en el que se ejecuta PHP. Por lo general, en la mayoría de los sistemas modernos, el número entero es un valor de 64 bits, lo que significa que puede representar desde -9_223_372_036_854_775_808 hasta 9_223_372_036_854_775_807 inclusive.

<?php

$a = 1234;
$a = 1_234_567;

Puedes escribir valores literales de números enteros en una base distinta de la base 10 usando un prefijo de base:

<?php

$a = 0123; // octal number (equivalent to 83 decimal)
$a = 0o123; // octal number (as of PHP 8.1.0)
$a = 0x1A; // hexadecimal number (equivalent to 26 decimal)
$a = 0b11111111; // binary number (equivalent to 255 decimal)

Tomado de la documentación de PHP

Números de punto flotante

En PHP, los números de punto flotante se usan para representar un subconjunto de los números reales. Están formados por uno o más dígitos separados por un separador decimal.

<?php

$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
$d = 1_234.567; // as of PHP 7.4.0

Trampas comunes

No todos los números ni todas las operaciones aritméticas se pueden manejar con números de punto flotante. Usar números de punto flotante para representar dólares y centavos puede provocar errores de redondeo.

<?php

$result = 0.1 + 0.2; // => 0.30000000000000004

Operadores aritméticos

PHP ofrece varios operadores para realizar operaciones aritméticas. PHP sigue el orden de operaciones matemático estándar para sus operadores aritméticos. Los operadores que ofrece PHP son:

  • Identidad (+)
  • Negación (-)
  • Suma (+)
  • Resta (-)
  • Multiplicación (*)
  • División (/)
  • Módulo (%)
  • Exponenciación (**)
$moles = +'10';
$aLotOfMoles = 6.022 * 10**23 * $moles;

Instrucciones

A Lilly le encanta cocinar. Quiere hacer una fiesta de pizza con sus amigos. Para aprovechar al máximo sus ingredientes, necesita saber cuánto de cada ingrediente requiere antes de empezar.

Para resolver esto, Lilly redactó un programa que automatiza parte de la planeación, pero necesita tu ayuda para terminarlo. ¿Ayudarás a Lilly a hacer una fiesta de pizza con las proporciones perfectas?

1. Una proporción de masa

A Lilly le encantan las pizzas delgadas y crujientes, con una corteza más fina. La masa necesaria para el centro es de 200 g como mínimo, pero cada persona a la que sirve requiere 20 g más de masa.

grams = pizzas * ((persons * 20) + 200)

Lilly necesita una función que:

  • Reciba el número de pizzas
  • El número de personas a las que servirá cada pizza
  • Y devuelva la masa necesaria redondeada al gramo más cercano.

Por ejemplo, para hacer 4 pizzas que alimentan a 8 personas:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateDoughRequirement(4, 8);
// => 1440

2. Un toque de salsa

Lilly es meticulosa al aplicar su salsa, pero el tamaño de sus pizzas puede ser irregular. Por experiencia, sabe que se necesitan 125 mL de salsa por pizza. Lilly necesita una función que calcule cuántas latas de salsa comprar.

cans of sauce = pizzas * sauce per pizza / sauce can volume

Por ejemplo, dado que Lilly necesita hacer 8 pizzas y cada lata es de 250 mL:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateSauceRequirement(8, 250);
// => 4

3. Un poco de queso, por favor

El queso viene en cubos perfectos y se vende por tamaño.

La fórmula que usa Lilly no es la fórmula del área de la pizza, ya que ella no quiere que el queso cubra toda el área. Decidió usar la siguiente fórmula para determinar cuántas pizzas de cierto diámetro (diameter) se pueden hacer con un cubo de queso de cierta longitud de lado (cheese_dimension):

pizzas = (cheese_dimension³) / (thickness * PI * diameter)

Crea una función que:

  • Reciba la longitud del lado de un cubo de queso
  • Reciba el grosor deseado de la capa de queso
  • Reciba el diámetro de la pizza
  • Y use la fórmula de Lilly para devolver el número de pizzas que se pueden hacer, redondeando hacia abajo.

Por ejemplo, dado un cubo de queso de 25x25x25 cm, una capa de queso de 0.5 cm de grosor y pizzas de 30 cm de diámetro:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateCheeseCubeCoverage(25, 0.5, 30);
// => 331

4. Un reparto justo

Por último, Lilly quiere que sus pizzas se dividan en 8 rebanadas cada una y se distribuyan de manera uniforme entre sus amigos.

Crea una función que:

  • Reciba un número de pizzas y un número de amigos
  • y devuelva el número de rebanadas que sobrarán si cada persona toma la misma cantidad de rebanadas.

Por ejemplo:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateLeftOverSlices(2, 4);
// => 0
$pizza_pi->calculateLeftOverSlices(4, 3);
// => 2
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
PHP Exercism

¿Todo listo para empezar Pizza Pi?

Regístrate en Exercism para aprender y dominar PHP con 11 conceptos122 ejercicios y mentoría humana real, todo gratis.