LoginSignup
10
0

競プロの問題をnibblesで解く①

Posted at

はじめに

コードゴルフ用言語のnibblesについて、記事が全く存在しなかったので作ってみました。
気になるけど資料が無くて始めにくい。。。という方の参考になればと思います。

あまり詳しいことには触れないので、気になる方はこちらをご覧ください。

今回は、簡単な入力かつ単純な計算で解ける問題を扱います。
ABC001 - 005 A問題の難易度がちょうど良かったため、解いてみます。

各問題のフォーマット下記の通りです。
(kotatsugameさんのこちらの記事から、丸パクリさせていただきました。)

入力形式

解法

Byte数
コード

コメント

問題

ABC001 A - 積雪深差

$ H_1 $
$ H_2 $

$H_1 - H_2$を出力します。

4byte
-$;$

3byteの解答が存在しますが、foldの知識が必要になるため、今回はこちらの解答を考えます。
nibblesの演算は大体が下記の形で行われます。
演算子 引数1 引数2 $\cdots$

リファレンスで引き算に該当する演算を確認してみましょう。
引き算(subtract)のLit, Arg Typesを確認すると、

演算子 引数1 引数2
- num num

がわかります。
演算子 引数1 引数2 の通りに 「- 5 3」 と書いてみると、 $5 - 3$ ができるわけです。
nibblesでは入力1つ目の数字を「\$」、2つ目の数字を「;$」で受け取れますので、

6byte
- $ ;$

最後に不要なスペースを削除すれば完了です。
ちなみに出力にprint文のようなものは必要ありません、勝手に出力してくれます。

ABC002 A - 正直者

$ X \quad Y $

${\rm max} (X,Y)$を出力します。

3byte
];$

maxの演算は以下となります。

演算子 引数1 引数2
] num num

先ほどの問題と同様に、

4byte
]$;$

で正しく出力が行われます。
ここで、nibblesには Implicit Args(暗黙的引数) というものが存在します。
簡単に説明すると、最後が\$で終わるとき、大体省略できちゃうよってやつです。
※「\$」単体である必要があります。「;$」を「;」とすることはできません。
先ほどの

4byte
]$;$

について、\$と;$の場所を変えても結果は変わりませんから、

4byte
];$$

$で終了しているので、これは省略可能です。

3byte
];$

無事3byteとなり完了です。

ABC003 A - AtCoder社の給料

$ N $

$(N+1) \times 5000$を出力します。

7byte
*5000+1

足し算、掛け算の演算はそれぞれ以下です。
(実際は他の引数にも対応可能なため、リファレンスの表記は異なります。)

演算子 引数1 引数2
+ num num
* num num

そのまま実装して、

9byte
*+$1 5000

5000を前に持ってくるとスペースが削減できますね。

8byte
*5000+$1

最後に$と1の場所を反転して、省略すれば完了です。

7byte
*5000+1

ABC004 A - 流行

$ N $

$2 \times N$を出力します。

1byte
+

$2 \times N$をそのまま実装すると

3byte
*2$

\$を省略して「*2」の2byteでしょうか。
ここで、$2 \times N$を$N + N$と考えてみます。

3byte
+$$

$が2個並んでますね。
しっかりどちらも省略可能です。よって

1byte
+

となるわけです。

ABC005 A - おいしいたこ焼きの作り方

$x \quad y$

$\lfloor y/x \rfloor$を出力します。

3byte
/;$

割り算は以下の通りです。

演算子 引数1 引数2
/ num num

実はnibbles, 整数しか扱えません。
そのため、自動的に切り捨て除算となるので、これをそのまま実装すればOKです。
最後の$省略を忘れずに。

おわりに

下記の問題も簡単な演算で解けるのでぜひ解いてみてください。

次回はもう少し複雑な入力を扱ってみたいと思います。

10
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
10
0