|
2 | 2 | title: "序"
|
3 | 3 | ---
|
4 | 4 |
|
5 |
| -# はじめに |
6 |
| -この本では AtCoder を利用しながら Rust について解説します.C++ や python などの他言語を書いたことがないプログラミング初心者でも読めるよう努めています. |
7 |
| - |
8 |
| -AtCoder のジャッジシステムを利用するため,まず AtCoder にログインすることが必要になります.アカウントを持っていない人は,[ここ](https://atcoder.jp/register)からアカウント作成を行ってください. |
9 |
| - |
10 |
| -# 入出力 |
11 |
| -レストランにやってきた客が店員に料理を注文し,店員が客に料理を出すという流れを考えてください.競技プログラミングにおけるプログラムと人(ユーザ)のやり取りは,この店員と客のやり取りと同じように捉えられます.すなわち,プログラムはユーザから何らかの注文を受け,処理を行って,結果をユーザに返します.この対話には,客の注文にあたる**標準入力**,出てくる料理にあたる**標準出力**,そしてプログラム内でエラーが発生したときにそれをユーザに報告する**標準エラー出力**の 3 つが用いられます.これらのやり取りは全て文字列で行われます. |
12 |
| - |
13 |
| -例として,「2 つの数を受け取って,その和を計算するプログラム」を考えます.このプログラムを実行するとき,例えば標準入力として `10 20` をユーザがプログラムに渡すと,標準出力として `30` をプログラムがユーザに返します.計算の途中で何らかのエラーが発生した場合は,その旨を標準エラー出力としてプログラムがユーザに返します. |
14 |
| - |
15 |
| -競技プログラミングでは,「2 つの数を受け取って,その和を計算するプログラムを作れ」というように,標準入力で受け取ったデータに対し正しく処理を行って結果を標準出力に返すプログラムを作る問題が出題されます.この問題であれば,プログラムが 2 つの数を受け取ったときに正しく和を出力できていれば正解となります.一方,間違った数を出力している場合や,計算に時間がかかりすぎている場合は不正解となります. |
16 |
| - |
17 |
| -:::message |
18 |
| -しばしば,標準入力を stdin,標準出力を stdout,標準エラー出力を stderr と書きます. |
19 |
| -::: |
20 |
| - |
21 |
| -# コンパイルと実行 |
22 |
| -上ではプログラムを単に「作る」と言いましたが,より正確には,コンピュータ上で実行できる**実行可能ファイル**を作り,その中にプログラムの中身を書きこみます.このとき,プログラムの各手順は,コンピュータの理解できる**機械語**で書く必要があります.しかし,機械語は `55 48 89 e5 5d c3`…… といった値の羅列なので,普通の人間がこれを直接読み書きすることは困難です. |
23 |
| - |
24 |
| -そこで,もっと人間に分かりやすい書き方で手順書を書き,それを機械語に変換するという手段が発達しました.こうして生まれたのが,C,C++ や Rust といった**プログラミング言語**です.プログラミング言語は機械語よりも読み書きに向いていますが,同時に厳密な文法を持つため,一定の規則に従って機械語に変換することができます.よって,あるプログラミング言語から機械語への自動的な変換を行うプログラムを一度作ってしまえば,その言語で他の様々なプログラムが書けるようになります.これはちょうど,ロボットを直接手で組み立てる代わりに,まずロボットを組み立てるロボットを作り,そこに与える命令を変えることで他の様々なロボットを作れるのと似ています. |
25 |
| - |
26 |
| -機械語への変換を**コンパイル**といい,コンパイルを行うプログラムを**コンパイラ**といいます.変換前の,人が書いた手順書のことを**ソースコード**と呼びます. |
27 |
| - |
28 |
| -Rust でソースコードを書くと,コンパイラがそれを実行可能ファイルに変換します.一度できた実行可能ファイルは何度でも実行でき,そのたびにプログラムは入力を受け取って出力を返します. |
29 |
| - |
30 |
| -# 提出 |
31 |
| -AtCoder の形式を知るために,問題を 1 つ解いてみましょう.ログインした後,[practice contest](https://atcoder.jp/contests/practice) に参加登録し,[A - Welcome to AtCoder](https://atcoder.jp/contests/practice/tasks/practice_1) を開いてください. |
32 |
| - |
33 |
| -問題文に,どのようなプログラムを作るのか書いてあります.あなたはこれに対し*ソースコードを*提出します.提出されたソースコードは AtCoder のコンピュータ(サーバ)上で実行可能ファイルへとコンパイルされた後,様々な入力に対し正しく動作するか自動で判定されます. |
34 |
| - |
35 |
| -以下の手順で,この問題に対する提出を行ってみましょう. |
36 |
| - |
37 |
| -1. ページの一番下までスクロールすると,ソースコードを入力する欄があるので,次の内容をコピーして貼り付けます. |
38 |
| - ```rust |
39 |
| - use proconio::input; |
40 |
| - |
41 |
| - fn main() { |
42 |
| - input! { |
43 |
| - a: i32, |
44 |
| - b: i32, |
45 |
| - c: i32, |
46 |
| - s: String, |
47 |
| - } |
48 |
| - println!("{} {}", a + b + c, s); |
49 |
| - } |
50 |
| - ``` |
51 |
| -1. 言語の選択欄から Rust を探し,選択します. |
52 |
| -1. 「提出」をクリックします. |
53 |
| -1. ソースコードがコンパイルされ,様々な標準入力を与えながら実行されます. |
54 |
| -1. 結果が灰色の「WJ」から緑色の「AC」に変われば成功です. |
55 |
| - |
56 |
| -AC は Accepted の略で,提出したソースコードが正解とみなされたことを意味します.これらの用語の説明は[ここ](https://atcoder.jp/contests/practice/glossary)にあります. |
57 |
| - |
58 |
| -# コードテスト |
59 |
| -[このページ](https://atcoder.jp/contests/practice/custom_test)では,コードテストができます.ソースコードのコンパイルと実行ができますが,提出として記録されることはありません.自分でプログラムの動作を確かめるときに使います.手順は次の通りです. |
60 |
| - |
61 |
| -1. 提出するときと同じように,入力欄にソースコードを入力します. |
62 |
| -1. 「標準入力」の欄に,プログラムに渡す内容を書きます. |
63 |
| -1. 言語の選択欄から Rust を探し,選択します. |
64 |
| -1. 「実行」をクリックします. |
65 |
| -1. コンパイルと実行が行われ,結果が「標準出力」と「標準エラー出力」の欄に表示されます. |
66 |
| -1. 正常に終了したときは「終了コード」が 0 になります.一方,プログラム内で異常が起こったときは終了コードが 0 以外になります. |
| 5 | +[『RustCoder ―― AtCoder と Rust で始める競技プログラミング入門』序](https://zenn.dev/toga/books/rust-atcoder/viewer/intro)をご覧ください。 |
0 commit comments