//Hacker Rank Input //1 10 11 9 8 7 6 5 2 8 12, 7 58 2 34 76 88 2 5 3 8 11, 9 65 3 8 98 36 22 87 66 99 0 /* Read and parse input */ $handle = fopen ('php://stdin', 'r'); $string_array = fgets($handle); $array = explode(', ', $string_array); array_walk($array, function (&$element) { $element = explode(' ', $element); }); // do your job with bidimensional $array
Via de regra, quando estamos no ambiente Hacker Rank, para obtermos um array de um enunciado de um problema em PHP temos que fazer o parsing de uma string dada as características do input pelo STDIN.
As coisas podem se complicar bastante se o parsing não for bem executado, e é claro que com a pressão da competição, é o que geralmente acontece.
O problema não é do problema em si, por que depois que passa a competição e a pressão você olha pra ele e diz… PQP!
Então fica aí a dica, basta observar com calma, e principalmente observar os delimitadores. Neste caso o primeiro delimitador não é simplesmente uma vírgula, mas sim dois caracteres vírgula e espaço combinados.
# wrong delimiter applied on first level $array = explode(',', $string_array); // [0]=> string(24) "1 10 11 9 8 7 6 5 2 8 12" // [1]=> string(26) " 7 58 2 34 76 88 2 5 3 8 11" // [2]=> string(29) " 9 65 3 8 98 36 22 87 66 99 0
Deste ponto em diante as coisas se complicam, pois apesar de termos um array unidimensional de três elementos, o próximo explode vai gerar o segundo nível com mais elementos do que o esperado por conter um espaço a mais.
# wrong quantity of elements on second level array_walk($array, function (&$element) { $element = explode(' ', $element); }); // [0]=> array(11) // [1]=> array(12) // [2]=> array(12)
Agora não tem mais desculpas, essa é pra não esquecer mais.
Dang it!