ABCのA問題を普通にC++やPythonなどの言語を使って解こうとすると、どうしても数分かかってしまいます。かんたんな問題でも1分以上掛かる人が多いのではないかと思います。
そこで、今日はdcという言語を紹介したいと思います。ABCの最速の提出はdcであることも多いです。
世の中には普通の言語を使って十数秒で問題を解くすごい人がたくさんいますが、dcを習得することで単純な計算問題であれば誰でも数秒で問題が解けるようになると思います。
この記事では、dcを用いることで秒殺できる問題を解く方法を説明します。
ということで、dcの基本的な使い方を説明していきます。
50p
上記のコードは、「50と出力する」という意味です。pはprintのpです。
37.2p
これは37.2を出力します。
[Hello world!]p
これはHello world!を出力します。
文字列は基本的に[]でくくります。
5
これはスタックに5を足します。
dcの計算は基本的にスタックを用いて行います。
5p
これは
1.スタックに5を積む
2.それを出力する
という意味です。
2 5 p p
これは
1.スタックに2を積む
2.スタックに5を積む
3.スタックの一番上を出力する(5が出力される)
4.スタックの一番上を出力する(5が出力される)
という意味です。ちなみに空白に意味はないです。
3n
これは
1.スタックに5を積む
2.それを出力し、スタックの一番上を削除する
という意味です。pとnにはあとに数字が残るかどうかの違いしかありません。
2 5 n n
1.スタックに2を積む
2.スタックに5を積む
3.スタックの一番上を出力し、スタックの一番上を削除する(5が出力される)
4.スタックの一番上を出力し、スタックの一番上を削除する(2が出力される)
2 5 + p
1.スタックに2を積む
2.スタックに5を積む
3.スタックの一番上と2番めを取り出し、その結果をスタックに積む
4.スタックの一番上を出力する
?+p
1.標準入力から一行読み取ってスタックに追加する
2.一番最後の数字と2番めの数字を足す
3.結果を出力する
上記のコマンドは、例えば以下の入力に対して5を返します:
2 3
5 2 – p
5から2を引いた3を出力します。順序を間違えやすいので注意しましょう。
?+-p
3番目-(1番目+2番目)を計算します。
6 2 * p
6*2=12を出力します。
14 2 / p
14/2=7を出力します。
15 4 / p
15を4で割って切り捨てます。3です。
?/p
入力を受け取って、最初の数/二番目の数を計算して出力します。ABC186Aの答えになります。
??-p
2行入力を受け取って、引き算して出力します。ABC001-Aの答えになります。