Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Wildcard challenge
- * Escrever um algoritmo, em php, que tenha como entrada uma string composta por palavras separadas por pipe ( | ) e a saída seja uma sequência com todos os wildcards possíveis.
- * Exemplos.:
- * Entrada: “sao-paulo”
- * Saída: *
- * Entrada: “sao-paulo|restaurante”
- * Saída: sao-paulo|*
- * *|restaurante
- */
- // lê uma linha da entrada
- $input = trim(fgets(STDIN));
- // separa as palavras pelo pipe
- $palavras = explode('|',$input);
- $totalPalavas = count($palavras);
- if($totalPalavas == 1) {
- print "*";
- return ;
- }
- // binário é base 2, então tem 2^n combinações de sequências para n bits
- $totalCombinacoes = pow(2, $totalPalavas);
- for($i = 1; $i < ($totalCombinacoes - 1); $i++) {
- $bin = format_binary($i, $totalPalavas);
- $sequencia = "";
- // itera sobre cada bit do binário resultante
- for($j = 0; $j < strlen($bin); $j++) {
- if($j != 0) $sequencia .= "|";
- // se for bit 1, troca pelo wildcard; se não troca pela palavra da posição
- $sequencia .= ($bin[$j] == "1") ? '*' : $palavras[$j];
- }
- print $sequencia."\n";
- }
- /**
- * Transforma um número decimal em binário com um número fixo de bits
- * @param int $numero Número decimal
- * @param int $numbits Quantidade de bits
- * @return string
- */
- function format_binary($numero, $numbits) {
- // transforma em binário
- $bin = decbin($numero);
- // retorna um 'zerofill' no binário
- return substr(str_repeat(0,$numbits),0,$numbits - strlen($bin)) . $bin;
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement