ページ

2012/08/07

[競技プログラミング][PHP][天下一プログラマーコンテスト2012]分類たん

B - 分類たん

時間制限 : 2sec / スタック制限 : 10MB / メモリ制限 : 64MB

問題文

分類たんは、スペースをカンマ区切りにするのが大好き。
でも、スペースが続いたときは、カンマ 1 つで書きたい。

文字列が与えられるので、与えられた文字列のスペースをカンマ区切りにした文字列を出力してください。

入力

入力は以下の形式で標準入力から与えられる。
c1c2…cN
入力として文字列が 1 行で与えられる。
入力の文字列長 N は、 1≤N≤2000 を満たす。
i 文字目の文字 ci は大文字のアルファベット (A, …, Z) 、カンマ (,) 、スペース( ) のいずれかである。
文字列の最初の文字 c1 と最後の文字 cN はスペースではない。

出力

入力として与えられた文字列のスペースをカンマ区切りにした文字列を標準出力に 1 行で出力せよ。
ただし、複数の連続したスペースは 1 つのカンマにする。
なお、行の終端には改行が必要である。

出典

B: 分類たん - 天下一プログラマーコンテスト2012 予選A | AtCoder

回答

AtCoder/tenka1_2012_A_2.php at master · wada811/AtCoder · GitHub
<?php
$str = rtrim(fgets(STDIN));
do{
    $str = str_replace('  ', ' ', $str);
}while(strpos($str, '  '));
$str = str_replace(' ', ',', $str);
echo $str.PHP_EOL;
?>
ねずみ算より簡単だったので難易度設定に違和感。
スペース二つがなくなるまでスペース一つに圧縮して最後にカンマに置換するだけ。
strposは見つからないとFALSEを返すけど一文字目で0を返すから判定には注意。
今回は最初の文字にスペースが入らないと定義されているので安心して使える。