english

learn php

learn css

learn html

learn javascript

learn php

7. functions

solution 7.5
1 minute / 198 words

seven / solution 7.5

<?php

simplify("6 7844/240");

function simplify(string $f)
{
    $f = trim($f);
    print_r("simplifying " . $f . ".\n");
    if (!($f = checkFraction($f))) {
        print_r("invalid fraction.\n");
        return false;
    }
    if ($f[1] === 0) {
        print_r("sorry, you can't divide by 0.\n");
        return false;
    }
    if ($i = checkInteger($f)) {
        print_r("your fraction simplifies to " . $i . ".\n");
        return $i;
    }
    $f = reduceFraction($f);
    print_r("your fraction simpifies to " . $f[0] . "/" . $f[1]);
    if ($m = checkMixed($f)) {
        print_r(" or " . $m[0] . " " . $m[1] . "/" . $m[2]);
    }
    print_r(".\n");
}

function checkFraction(string $f)
{
    $f = trim($f);
    if (!str_contains($f, "/")) {
        // not a fraction
        return false;
    }
    if (str_contains($f, " ")) {
        // mixed fraction
        $mixed = explode(" ", $f);
        $whole = trim($mixed[0]) + 0;
        $fraction = explode("/", $mixed[1]);
        $numerator = trim($fraction[0]) + 0;
        $denominator = trim($fraction[1]) + 0;
        $numerator = $whole * $denominator + $numerator;
    } else {
        // simple fraction
        $fraction = explode("/", $f);
        $numerator = trim($fraction[0]) + 0;
        $denominator = trim($fraction[1]) + 0;
    }
    return [$numerator, $denominator];
}

function checkInteger(array $f)
{
    return $f[0] % $f[1] === 0 ? $f[0] / $f[1] : false;
}

function reduceFraction(array $f)
{
    for ($i = $f[1]; $i >= 1; $i--) {
        if ($f[0] % $i === 0 && $f[1] % $i === 0) {
            return [$f[0] / $i, $f[1] / $i];
        }
    }
    return $f;
}

function checkMixed(array $f)
{
    if ($f[1] > $f[0]) {
        // mixed is impossible with a smaller numerator
        return false;
    }
    $whole = floor($f[0] / $f[1]);
    $numerator = $f[0] - $whole * $f[1];
    return [$whole, $numerator, $f[1]];
}

learn php

learn css

learn html

learn javascript

powered by akelei. an avi sato project.