Playing with Roman numerals

The following code returns the longest Roman numeral string generated for the year between 1 and 2099. Note that the largest number that can be represented in Roman notation is 3,999 (MMMCMXCIX).



function integerToRoman($year)
{
    /* Ref: https://www.rapidtables.com/convert/number/how-number-to-roman-numerals.html 
     *      https://en.wikipedia.org/wiki/Roman_numerals
     */
    
    
    $result = '';

    // Create a lookup array that contains all of the Roman numerals.
    $lookup = array(
                   'M' => 1000, 'CM' => 900, 'D' => 500, 'CD' => 400,
                   'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40,
                   'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1
                   );
 
    foreach($lookup as $roman => $value)
    {
        // Determine the number of matches
        $matches = intval($year / $value);

        // Add the same number of characters to the string as the count of $matches
        $result .= str_repeat($roman,$matches);

        // Set the $year to be the remainder of the $year and the value
        $year = $year % $value;
    }
 
    return $result;
}

$longest = '';
$year = '';

for($i=1; $i <= 2099; $i++) {
    $roman = integerToRoman($i);
    if(strlen($roman) > strlen($longest)) {
        $longest = $roman;
        $year = $i;
    }
}

echo $longest . " : " . $year;

//
// MDCCCLXXXVIII : 1888
//

That will be year 1888, represented by the Roman string ‘MDCCCLXXXVIII’, which is 13 characters long. The next longest Roman number is 2888 represented by ‘MMDCCCLXXXVIII’ which has has 14 characters.

Yearly medicine dosage visualization

For the past several years I’ve regularly consumed Pantoprazole – a proton pump inhibitor (PPI) – to control my acid reflux. However, as it is well know, regular PPI use causes various health problems. I’ll not enumerate those here, but trust me when I say that they are numerous. Last year I decided to wean myself off PPIs slowly, by only limiting to a 20mg dose on any single day, and alternating or dropping some days completely. I recorded my dosage information in Google calendar on my mobile, so that I could process it later. Now that I’ve a more than a year’s data with me I thought of visualizing it to get an understanding of my dosage habits.
Read More

Visualizing missing data in databases

Missing data in databases can cause bugs in applications or incorrect calculations. Recently, while working on a RETS application, I needed to ensure that not many missing values were encountered in one of the MySQL tables. Although one could easily write a SQL query to find the percentage of missing values, I many times find it easier to first get a visual representation of the amount of missing data there is in the table, and then drill-down further if required. One library that I found that lets you easily get a visual representation of missing data in your database tables is missingno – a Python library.
Read More