3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Given the Japanese numeral reading system, write a program that converts an integer into the equivalent Japanese reading. * * Basic numeral readings: * 1: ichi * 2: ni * 3: san * 4: yon * 5: go * 6: roku * 7: nana * 8: hachi * 9: kyuu * 10: juu * 20: ni-juu * 30: san-juu * 100: hyaku * 1000 : sen * 10,000: man * 100,000,000: oku * 1,000,000,000,000: chou * 10,000,000,000,000,000: kei * * Exceptions due to voice rounding in Japanese reading: * 300: sanbyaku * 600: roppyaku * 800: happyaku * 3000: sanzen * 8000: hassen * 1,000,000,000,000: itchou * 8,000,000,000,000: hatchou * 10,000,000,000,000: jutchou (also applies to multiplies of 10,000,000,000,000) * 10,000,000,000,000,000: ikkei * 60,000,000,000,000,000: rokkei * 80,000,000,000,000,000: hakkei * 100,000,000,000,000,000: jukkei (also applies to multiplies of 10,000,000,000,000,000) * 1,000,000,000,000,000,000: hyakkei (also applies to multiplies of 1,000,000,000,000,000,000) * * Starting at 10,000, numbers begin with ichi if no digit would otherwise precede, e.g. 1,000 is sen but 10,000 is ichi-man. * * Examples: * 11: juu ichi * 17: juu nana * 151: hyaku go-juu ichi * 302: san-byaku ni * 469: yon-hyaku roku-juu kyuu * 2025 : ni-sen ni-juu go * 10,403: ichi-man yon-byaku san * 41,892: yon-juu ichi-man happyaku kyuu-juu ni * 80,000,000,000,000: hachi-jutchou */ $inputNumber = 2025; $inputString = (String)$inputNumber; $numeralReadings = array( 1 => 'ichi', 2 => 'ni', 3 => 'san', 4 => 'yon', 5 => 'go', 6 => 'roku', 7 => 'nana', 8 => 'hachi', 9 => 'kyuu', 10 => 'juu', 20 => 'ni-juu', 30 => 'san-juu', 100 => 'hyaku', 1000 => 'sen', 10000 => 'man', 100000000 => 'oku', 1000000000000 => 'chou', 10000000000000000 => 'kei' ); $numeralExceptions = array( 300 => 'sanbyaku', 600 => 'roppyaku', 800 => 'happyaku', 3000 => 'sanzen', 8000 => 'hassen', 1000000000000 => 'itchou', 8000000000000 => 'hatchou', 10000000000000 => 'jutchou', 10000000000000000 => 'ikkei', 60000000000000000 => 'rokkei', 80000000000000000 => 'hakkei', 100000000000000000 => 'jukkei', 1000000000000000000 => 'hyakkei' ); if ($inputString > 10000) { $inp1 = floor($inputString / 1000); $inp = $inputString - ($inp1 * 1000); if($inp !== 0) { read($inp1, $numeralReadings, $numeralExceptions, false); read($inp, $numeralReadings, $numeralExceptions); } else { read($inputString, $numeralReadings, $numeralExceptions); } } else { read($inputString, $numeralReadings, $numeralExceptions); } function read($inputStr, $numeralReadings, $numeralExceptions, $parse1 = true) { $splitString = str_split($inputStr); $returnString = ''; $appendIchi = false; $firstNumber = null; foreach ($splitString as $key => $number) { if ($firstNumber == null) { $firstNumber = $number; } if ($number !== 0) { $int = 1; $a = count($splitString) - 1 - $key; for ($i = 0; $i < $a; $i++) { $int = $int * 10; } $tempNumber = (int)$number * $int; if (isset($numeralExceptions[$tempNumber])) { $returnString .= $numeralExceptions[$tempNumber] . ' '; continue; } if (isset($numeralReadings[$tempNumber])) { if ($parse1 == false && $tempNumber == 1) { continue; } $returnString .= $numeralReadings[$tempNumber] . ' '; continue; } if (isset($numeralReadings[(int)$number])) { if ($parse1 == false && $tempNumber == 1) { continue; } $returnString .= $numeralReadings[(int)$number]; if ($int !== 1) { $returnString .= '-' . $numeralReadings[$int]; } $returnString .= ' '; } } } echo $returnString; }

preferences:
34.21 ms | 402 KiB | 5 Q