fork download
  1. <?php
  2.  
  3. function punyaHuruf($kataPertama, $kataKedua)
  4. {
  5. if ($kataPertama === '') {
  6. return true;
  7. }
  8.  
  9. $himpunanKedua = array_flip(str_split(strtolower($kataKedua)));
  10.  
  11. foreach (str_split(strtolower($kataPertama)) as $huruf) {
  12. if (!isset($himpunanKedua[$huruf])) {
  13. return false;
  14. }
  15. }
  16.  
  17. return true;
  18. }
  19.  
  20. function punyaHurufMultiset($kataPertama, $kataKedua)
  21. {
  22. if ($kataPertama === '') {
  23. return true;
  24. }
  25.  
  26. $frekuensi = array_count_values(str_split(strtolower($kataKedua)));
  27.  
  28. foreach (str_split(strtolower($kataPertama)) as $huruf) {
  29. if (empty($frekuensi[$huruf])) {
  30. return false;
  31. }
  32. $frekuensi[$huruf]--;
  33. }
  34.  
  35. return true;
  36. }
  37.  
  38.  
  39. /* ===================== PENGUJIAN ===================== */
  40.  
  41. $lulus = 0;
  42. $total = 0;
  43.  
  44. function uji($pertama, $kedua, $harapan)
  45. {
  46. global $lulus, $total;
  47.  
  48. $hasil = punyaHuruf($pertama, $kedua);
  49. $total++;
  50. if ($hasil === $harapan) {
  51. $lulus++;
  52. $status = 'LULUS';
  53. } else {
  54. $status = 'GAGAL';
  55. }
  56.  
  57. echo str_pad("punyaHuruf('$pertama', '$kedua')", 40)
  58. . ' => ' . str_pad($hasil ? 'TRUE' : 'FALSE', 6)
  59. . " [$status]" . PHP_EOL;
  60. }
  61.  
  62. echo "--- Test case dari soal ---" . PHP_EOL;
  63. uji('cat', 'antarctica', true);
  64. uji('cat', 'australia', false);
  65. uji('cat', 'ANTARCTICA', true);
  66.  
  67. echo PHP_EOL . "--- Edge case ---" . PHP_EOL;
  68. uji('CAT', 'antarctica', true);
  69. uji('', 'apapun', true);
  70. uji('abc', '', false);
  71. uji('', '', true);
  72. uji('aa', 'antarctica', true);
  73. uji('cat', 'cat', true);
  74. uji('cats', 'cat', false);
  75.  
  76. echo PHP_EOL . "--- Perbandingan himpunan vs multiset ---" . PHP_EOL;
  77. $pasangan = array(
  78. array('aa', 'cat'),
  79. array('aaa', 'banana'),
  80. array('cat', 'antarctica'),
  81. );
  82. foreach ($pasangan as $p) {
  83. "%-24s himpunan=%-6s multiset=%s" . PHP_EOL,
  84. "('" . $p[0] . "', '" . $p[1] . "')",
  85. punyaHuruf($p[0], $p[1]) ? 'TRUE' : 'FALSE',
  86. punyaHurufMultiset($p[0], $p[1]) ? 'TRUE' : 'FALSE'
  87. );
  88. }
  89.  
  90. echo PHP_EOL . "==============================" . PHP_EOL;
  91. echo "RINGKASAN: $lulus dari $total pengujian LULUS" . PHP_EOL;
  92. if ($lulus !== $total) {
  93. echo "ADA PENGUJIAN YANG GAGAL" . PHP_EOL;
  94. }
Success #stdin #stdout 0.02s 25468KB
stdin
Standard input is empty
stdout
--- Test case dari soal ---
punyaHuruf('cat', 'antarctica')          => TRUE   [LULUS]
punyaHuruf('cat', 'australia')           => FALSE  [LULUS]
punyaHuruf('cat', 'ANTARCTICA')          => TRUE   [LULUS]

--- Edge case ---
punyaHuruf('CAT', 'antarctica')          => TRUE   [LULUS]
punyaHuruf('', 'apapun')                 => TRUE   [LULUS]
punyaHuruf('abc', '')                    => FALSE  [LULUS]
punyaHuruf('', '')                       => TRUE   [LULUS]
punyaHuruf('aa', 'antarctica')           => TRUE   [LULUS]
punyaHuruf('cat', 'cat')                 => TRUE   [LULUS]
punyaHuruf('cats', 'cat')                => FALSE  [LULUS]

--- Perbandingan himpunan vs multiset ---
('aa', 'cat')            himpunan=TRUE   multiset=FALSE
('aaa', 'banana')        himpunan=TRUE   multiset=TRUE
('cat', 'antarctica')    himpunan=TRUE   multiset=TRUE

==============================
RINGKASAN: 10 dari 10 pengujian LULUS