Paiza
Paizaはコーディングのスキルチェックが行えます。
問題では標準入力からパラメータを受け取りますが、毎回書くのも手間なのでどの問題でも共通して利用できるテンプレートを用意しました。
Paiza標準入力テンプレート
単一行でも複数行でもDランク〜SランクまですべてのPaizaの問題で利用できます。また、ローカルで動作確認のやり方もご紹介します。
<?php
$inputs = [];
while ($input = trim((string) fgets(STDIN))) {
$inputs[] = explode(' ', $input);
}
var_dump($inputs);
使い方1
$ php example.php
ファイルを実行すると標準入力を受け付けます。
空Enterするとループから抜けます。
入力したデータは $inputs
に配列で格納されてるので良い感じに使用してください。
使い方2
何度も動作確認したい時に標準入力を何度も行うのは手間がかかります。
何行にも渡りも入力データがある場合は入力ミスも発生しやすいです。
実行時にファイルを標準入力にリダイレクトすると簡単です。
aaa bbb ccc
100 200 300 400 500
stdin.txt
はただのテキストファイルです。
$ php example.php < stdin.txt
Dockerコマンド
$ docker run -i -v $(pwd):/data -w /data php:8.1 php example.php < stdin.txt
ローカルにphp環境作るのが面倒な人はdockerでphpコンテナを作るのが一番楽かなと思います。
標準出力テスト
$ diff <(docker run -i -v $(pwd):/data -w /data php:8.1 php c075.php < stdin.txt) <(cat stdout.txt)
標準出力が多い場合、1行1行目で確認するのは手間なので、diffで差分がないか確認すると良いです。
解説
STDIN
STDIN
は standard input(標準入力)
の意味です。
ターミナルで入力した文字を標準入力としてPHPへ渡す形になります。
fgets とは
第一引数に指定したファイルポインタから1行取得し、その文字列を返します。
https://www.php.net/manual/ja/function.fgets.php
STDIN
という標準入力を表す定数を渡しているので、標準入力から1行取得します。
fgets
した時に読み込みデータがない場合、 false
が返るので string
にキャストしてます。
trim とは
第一引数に指定した文字列の先頭および末尾にある空白や改行を取り除き、その文字列を返します。
https://www.php.net/manual/ja/function.trim.php
改行のみの行を最終行と判定したいのですが、改行コードがあるとループから抜けることができないので、trimしてます。