PHP版、標準入力の受け取り方

 

競技プログラミング歴が1年を超えたけど、AtCoder Problemsを見ると、「AC数95」「最長連続AC日数2日」とかいうアレな情報が出てきてブログ書く気になった。

 

とりあえず…

競技プログラミングで1番最初に悩んだ標準入力について書きたい。

 

けど、いきなりの脱線

競技プログラミングを始めたのは「Fラン文系学部生時代の暇潰し」です。

(8/5追記:ここは、理系のガチ勢とかのいわゆるプロな人々ではない、脳みそゆるふわ勢だよってことが言いたいだけなので表現を模索中です)

ちょうどその頃にchokudaiさんの、「paizaのコードガールこれくしょん全部やるとAtCoder出れるよ(まだphprubyしかないけど)」みたいなツイートを見つけて、

paiza登録→phpに決定(phpだけ基礎編の一部まで無料公開してたから)→AtCoder参加

みたいな流れで今に至る。

 

本題(PHPでの標準入力の受け取り方)

AtCoderのpractice contest A(はじめてのあっとこーだー)によると、

<?php
# 整数の入力
fscanf(STDIN, "%d", $a);
# スペース区切りの整数の入力
fscanf(STDIN, "%d %d", $b, $c);
# 文字列の入力
fscanf(STDIN, "%s", $s);

らしい。

正直、頭がアなので「??」ってなった。(paiza開始前)

(今でも、「STDIN」が「STanDard INput」の略なんだろうなとか、「fscanf」は「file scan function」の略かな?(適当)くらいなのでア)

 

これがpaizaだと、

<?php

$n = fgets(STDIN);

で、文字列でも整数でもいけるよ!って言われてハッピーになった。

ちなみにスペース区切りの入力だと、

$n = explode(" ",fgets(STDIN));

らしい。

これを覚えただけでAtCoderに参加する気になれたのが驚きだけど、とりあえず同じとこで悩んだ人用にいつかブログに書いたげようって思ってたから書いた。

(この1年で「純粋に競技プログラミングしかしてない 且つ 使用言語にPHPを選ぶ」ってのは悪手っぽいことがわかったから、これから始める人には、ぜひC++とかを選んでほしい。(「PHPで唯一のACをとるんや!」って人は一緒にがんばろ!))

(中身だけコピペしてAtCoderのリンクとか載せなかったけど良いのかな?)

 

おまけ(標準出力)

標準出力はAtCoderもpaizaも「echo $ans」だったからecho使ってる。