В тз не понимаю как сделать формат входных данных: Вам даются две строки A и B. Вам нужно преобразовать строку A в два шага: – Сделать некоторые маленькие буквы большими, – Удалить оставшиеся маленькие буквы, так, чтобы получить в итоге строку B. Задание: Допишите реализацию функции abbreviation. Для каждого тестового случая выведите "YES", если возможно преобразовать строку A в строку B и "NO", если невозможно. Формат входных данных: В первой строке записано целое число T – количество тестовых случаев. В следующих 2*T строках содержится описание тестов. Первая строка содержит A. Вторая строка содержит B. Ограничения: 1 ≤ T ≤ 10 1 ≤ |A|,|B|≤ 1000 –Строка A состоит из маленьких и больших латинских букв – Строка B состоит из больших латинских букв Формат выходных данных: Вывести на экран "YES" или "NO". Пример: Входные данные: 1 daBcd ABC Выходные данные: YES Решение: daBcd->dABCd->ABC. мой говнокод: function abbreviation($a, $b) { if(strripos($a,$b) === false){ echo 'NO'; } else{ echo 'YES <br>'; $answer_One = $a[mt_rand(0,strlen($a))]; $answer_One = str_ireplace($answer_One,strtoupper($answer_One),strtolower($a)); $answer_Two = str_ireplace($b,strtoupper($b),strtolower($answer_One)); $answer_Three = preg_split('/[a-z]/',$answer_Two); $answer_Three = implode('',$answer_Three); echo 'Решение:<br>'; echo $answer_One.'->'.$answer_Two.'->'.$answer_Three; } } abbreviation('ZYTFcxc','YTF');// YES Решение: Zytfcxc->zYTFcxc->YTF
PHP: <?php $a = 'daBcd'; $b = 'ABC'; $result = abbreviation($a, $b); echo $result; function abbreviation ($a, $b) { preg_match("/{$b}/i", $a, $matches); if( count($matches) > 0) { $b = str_ireplace($matches[0], $b, $a); $c = preg_replace("/[a-z]/", "", $b); return "YES {$a}->{$b}->{$c}"; } else { return "NO"; } }
Код (Text): <?php function abbreviation($filename, $outputfilename) { // все строки из файла грузим как массив $input_array = file($filename); // число строк для сравнения, указанных в файле $rows_count = (int)$input_array[0]; // фактическое число строк для сравнения (тут имеем ввиду строку с разным регистром букв // и след. за ней строку в верхнем регистре) $fact_rows_count = (count($input_array) - 1) / 2; // если кол-во строк в файле меньше 1 или больше 10 // если кол-во строк нечетно // если кол-во строк указанное в файле (в первой строке), не равное их фактическому кол-ву if ($rows_count < 1 || $rows_count > 10 || ($rows_count % 2) == 2 || $rows_count != $fact_rows_count) { throw new Exception("Число тестовых случаев некорректно"); } $search_string = ""; foreach ($input_array as $index => $item) { if ($index == 0) { continue; } // первая строка, в ней мы должны сделать разные буквы маленькими и большими в случайном порядке if (($index % 2) == 1) { $search_string = randomizeCase($item); } if (($index % 2) == 0) { if (mb_strtoupper($item) != $item) { // проверяем, все ли буквы в верхнем регистре echo $item, PHP_EOL; throw new Exception("Строка, которая должна быть в верхнем регистре содержит маленькие буквы"); } $answer = mb_strpos($search_string, $item) ? 'YES' : 'NO'; file_put_contents($outputfilename, $answer . PHP_EOL, FILE_APPEND); echo $search_string, $item, PHP_EOL; } } } function randomizeCase(string $str) { for ($i = 0, $c = strlen($str); $i < $c; $i++) { $str[$i] = (rand(0, 100) > 50 ? strtoupper($str[$i]) : strtolower($str[$i])); } return $str; } abbreviation("input.txt", "output.txt");
Забыл добавить входной файл input.txt и полученный результирующий файл Input.txt - содержимое файла 3 afhlKsc XSC ioJsasD SAS laksdkd SDK Output.txt - содержимое файла NO NO YES Процесс выполнения скрипта