PHP :: Aufgabe #353

1 Lösung Lösung öffentlich

Buchstabenkiste (Wörter bilden)

Anfänger - PHP von JKooP - 09.05.2021 um 17:29 Uhr
In einer fiktiven Kiste befinden sich eine vorgegebene Menge an Steinen mit aufgedruckten Kleinbuchstaben (a-z).
Nun soll geprüft werden, ob sich ein vorgegebenes (auch fiktives) Wort mit den in der Kiste vorhandenen Steinen bilden lässt.
Sowohl das Wort als auch der Inhalt der Kiste werden als String (Text) übergeben.

Beispiele:
Wort = "mama"; Kiste = "mneamna"
Lösung: true

Wort = "papa"; Kiste = "aapq"
Lösung: false

Wort = "aabaacbaacbb"; Kiste = "bbaabaaccaaa"
Lösung: false

Achtung: die Wörter sollen aus bis zu 10.000 Zeichen (Kleinbuchstaben) bestehen können.

Erstelle eine Methode/Funktion, die für obige Aufgabenstellung true/false als Ergebnis liefert.

Viel Spaß

Lösungen:

vote_ok
von Exception (7090 Punkte) - 26.06.2021 um 21:47 Uhr
Quellcode ausblenden PHP-Code
<?php

$checker = function(string $word, string $trunk): bool {
  // validate input
  if (!preg_match('/[a-z]+/', $word)) return false;
  if (!preg_match('/[a-z]+/', $trunk)) return false;
  
  // for later usage convert string to array
  $word = str_split($word);
  $trunk = str_split($trunk);

  foreach ($word as $character) {
  	// search letter in trunk
    if (($key = array_search($character, $trunk)) !== false) {
      unset($trunk[$key]);
      $trunk = array_values($trunk);
    }
    // no letter found in trunk
    else {
      return false;
    }
  }
  
  return true;
};

var_dump($checker('', '')); // false, input not valid
var_dump($checker('ABC', 'ABC')); // false, input not valid
var_dump($checker('abc', 'cba')); // true
var_dump($checker('abcd', 'cba')); // false, 'd' missing in trunk
var_dump($checker('abc', 'dcba')); // true
var_dump($checker('aabbcc', 'abcabc')); // true
var_dump($checker('mama', 'mneamna')); // true
var_dump($checker('papa', 'aapq')); // false
var_dump($checker('aabaacbaacbb', 'bbaabaaccaaa')); // false

Konsolenausgabe:

bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
1800865

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.