0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rubyでインタラクティブな問題に回答する

Posted at

背景

  • 競技プログラミング(AtCoder)の問題を解いていたところ、インタラクティブな問題への回答に詰まったので調べたことをまとめます。
  • インタラクティブな問題例

結論

# NG
puts 'answer1'
puts 'answer2'
puts 'answer3'
		  
# OK
puts 'answer1'
$stdout.flush
		  
puts 'answer2'
$stdout.flush
		  
puts 'answer3'
$stdout.flush
		  
# もしくは
$stdout.sync = true
		  
puts 'answer1'
puts 'answer2'
puts 'answer3'
  • puts だけでは不十分で、 puts の後に $stdout.flush を呼び出す必要がありました。

補足

  • $stdout は 組み込み変数 参照1
  • $stdout の初期値は Object::STDOUT
  • Object::STDOUTIO クラスのインスタンス
  • irb(main):001> STDOUT.instance_of? IO
    => true
    
  • IO クラスのインスタンスメソッドには flush があり、内部バッファをフラッシュする。 参照2
  • $stdout.flush はこれを呼び出して、バッファをフラッシュしている。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?