Pizza Pi

Pizza Pi

Exercício de aprendizagem

Introdução

Números inteiros

Números inteiros são números que pertencem ao conjunto {..., -2, -1, 0, 1, 2, ...}. Os valores máximo e mínimo de um número inteiro são determinados pelo sistema em que o PHP roda. Normalmente, na maioria dos sistemas modernos, o número inteiro é um valor de 64 bits, o que significa que ele pode representar de -9_223_372_036_854_775_808 a 9_223_372_036_854_775_807, inclusive.

<?php

$a = 1234;
$a = 1_234_567;

Você pode escrever valores literais inteiros em bases diferentes de 10 usando um prefixo 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)

Retirado da documentação do PHP

Números de ponto flutuante

Os números de ponto flutuante são usados no PHP para representar um subconjunto dos números reais. Eles começam com um ou mais dígitos separados por um separador decimal.

<?php

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

Armadilhas comuns

Nem todos os números e operações aritméticas podem ser realizados com números de ponto flutuante. Usar números de ponto flutuante para representar dólares e centavos pode levar a erros de arredondamento.

<?php

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

Operadores aritméticos

O PHP oferece vários operadores para realizar operações aritméticas. O PHP segue a ordem de operações matemática padrão para seus operadores aritméticos. Os operadores que o PHP oferece são:

  • Identidade (+)
  • Negação (-)
  • Adição (+)
  • Subtração (-)
  • Multiplicação (*)
  • Divisão (/)
  • Módulo (%)
  • Exponenciação (**)
$moles = +'10';
$aLotOfMoles = 6.022 * 10**23 * $moles;

Instruções

Lilly adora cozinhar. Ela quer fazer uma festa de pizza com os amigos. Para aproveitar ao máximo os ingredientes, ela precisa saber quanto de cada ingrediente vai precisar antes de começar.

Para resolver isso, Lilly esboçou um programa para automatizar parte do planejamento, mas precisa da sua ajuda para terminá-lo. Você vai ajudar a Lilly a fazer a festa de pizza perfeitamente proporcional?

1. Uma proporção de massa

Lilly é fã de pizzas finas e crocantes, com uma borda mais fina. A massa necessária para o meio é de no mínimo 200 g, mas cada pessoa que ela serve exige mais 20 g de massa.

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

Lilly precisa de uma função que:

  • Receba o número de pizzas
  • O número de pessoas que cada pizza vai servir
  • E retorne a massa necessária arredondada para o grama mais próximo.

Por exemplo, para fazer 4 pizzas que alimentam 8 pessoas:

<?php

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

2. Um toque de molho

Lilly é meticulosa ao aplicar o molho, mas o tamanho das suas pizzas pode variar. Pela sua experiência, ela sabe que são necessários 125 mL de molho por pizza. Lilly precisa de uma função que calcule quantas latas de molho comprar.

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

Por exemplo, considerando que Lilly precisa fazer 8 pizzas e cada lata tem 250 mL:

<?php

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

3. Um pouco de queijo, por favor

O queijo vem em cubos perfeitos e é vendido por tamanho.

A fórmula que Lily usa não é a fórmula da área da pizza, já que ela não quer que o queijo cubra toda a área. Ela decidiu usar a seguinte fórmula para determinar quantas pizzas de um certo diâmetro (diameter) podem ser feitas a partir de um cubo de queijo com um certo comprimento de aresta (cheese_dimension):

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

Crie uma função que:

  • Receba a medida da aresta de um cubo de queijo
  • Receba a espessura desejada da camada de queijo
  • Receba o diâmetro da pizza
  • E use a fórmula de Lilly para retornar o número de pizzas que podem ser feitas, arredondando para baixo.

Por exemplo, considerando um cubo de queijo de 25x25x25 cm, uma camada de queijo de 0,5 cm de espessura e pizzas de 30 cm de diâmetro:

<?php

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

4. Uma divisão justa

Por fim, Lilly quer que suas pizzas sejam divididas em 8 fatias cada e distribuídas igualmente entre os amigos.

Crie uma função que:

  • Receba um número de pizzas e um número de amigos
  • e retorne o número de fatias que vão sobrar se cada pessoa pegar a mesma quantidade de fatias.

Por exemplo:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateLeftOverSlices(2, 4);
// => 0
$pizza_pi->calculateLeftOverSlices(4, 3);
// => 2
Editar via GitHub O link abre em uma nova janela ou aba
PHP Exercism

Tudo pronto para começar Pizza Pi?

Crie sua conta no Exercism para aprender e dominar PHP com 11 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.