Tenho participado de vários desafios de golfe com códigos PHP recentemente e algumas das técnicas usadas para ler dados de um arquivo como fopen()
e / fread()
ou file_get_contents()
realmente dão ao meu código uma batida na contagem de caracteres. Especialmente os métodos fornecidos para leitura na entrada da linha de comando.
Minha pergunta é: qual é a maneira mais rápida (menos pressionamentos de teclas) de ler e gravar no conteúdo de um arquivo e qual é a maneira mais rápida (menos pressionamentos de teclas) de ler uma linha no prompt?
(Nota: Como se trata de código golf, não posso usar nenhuma biblioteca externa.)
fonte
Dependendo do formato de entrada, o fgetcsv e o fscanf também podem ser economizadores de bytes.
Por exemplo, suponha que cada linha da sua entrada consista em dois números inteiros separados por espaço. Para ler esses valores em uma matriz, você pode usar um dos seguintes:
Ou se você quiser ler cada um deles em uma variável diferente:
fonte
Para ler arquivos não físicos (entrada de leitura)
Se você tiver uma entrada de linha única, use
-F
e$argn
para ler em STDIN. Isso é apenas 5 bytes e muito mais curto que outros métodos.Exemplo: Experimente online!
Basicamente,
-F
executa seu código uma vez para cada linha da entrada e preenche$argn
a sequência dessa linha de entrada. Mais informações: https://www.php.net/manual/en/features.commandline.options.phpSe você tiver uma entrada com várias linhas, use
$argv
.$argv
é uma matriz que, a partir do índice,1
contém todos os argumentos que você passa para o seu código. Então você pode usar$argv[1]
e assim por diante, que tem apenas 8 bytes. Você também pode passar vários argumentos e fazer um loop neles com osfor(;$a=$argv[++$i];)
quais geralmente é mais curto que outros métodos.Exemplo 1: Experimente online!
Exemplo 2: Experimente online!
Mais informações: https://www.php.net/manual/en/reserved.variables.argv.php
fonte