Visual Basic で Welcome to AtCoder を解いてみた

[Qiita Engineer Festa 2024（キータ・エンジニア・フェスタ 2024） - Qiita](https://qiita.com/official-campaigns/engineer-festa/2024)
において、約1ヶ月で38記事という大量の記事の投稿を要求されることがわかった。
そこで、あまりコストをかけずに記事数を稼ぐ方法を考えた結果、「Welcome to AtCoder を様々な言語で解く」ことを思いついた。
単に解くだけでなく、使用する言語仕様の解説を入れれば、記事として一応成立するだろう。

# Welcome to AtCoder

[PracticeA - Welcome to AtCoder](https://atcoder.jp/contests/abs/tasks/practice_1)

Welcome to AtCoder では、以下の形式で整数 $a$, $b$, $c$ および文字列 $s$ が入力として与えられる。

```text
a
b c
s
```

この入力をもとに、与えられた整数の和 $sum = a + b + c$ および文字列 $s$ を、以下の形式で出力することが求められる。

```text
sum s
```

# 今回用いる Visual Basic の機能

## Main プロシージャ

[メインのプロシージャ - Visual Basic | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/program-structure/main-procedure)

Visual Basic (のコンソール アプリケーション) では、エントリポイントとして `Main` プロシージャを定義する。
以下の形式で定義できる。

```vb
Module mainModule
    Sub Main()
        ' 処理内容
    End Sub
End Module
```

## 変数宣言

[変数宣言 - Visual Basic | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/variables/variable-declaration)

```vb
Dim 変数名 As 型名
```

の形式で、変数を宣言できる。
型は、整数 `Integer`、文字 `Char`、文字列 `String` などがある。

```vb
Dim 変数名 As 型名 = 初期値
```

の形式で、変数の初期値を設定できる。

型名は省略し、初期値から推論させることができる。

```vb
Dim 変数名 = 初期値
```

## 整数の扱い

[算術演算子 - Visual Basic | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/operators-and-expressions/arithmetic-operators)
[Int32.Parse メソッド (System) | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/api/system.int32.parse?view=net-8.0#system-int32-parse(system-string))
[文字列を数値に変換する、数値を文字列に変換する - .NET Tips (VB.NET,C#...)](https://dobon.net/vb/dotnet/programing/convert.html)

```vb
a + b
```

のように、[+ 演算子](https://learn.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/addition-operator) を用いることで、数値の加算を行うことができる。

```vb
Integer.parse(a)
```

により、文字列 `a` をそれが表す整数に変換できる。

## 配列の扱い

[配列 - Visual Basic | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/arrays/)

```vb
Dim 名前 = New 要素の型() {初期値リスト}
```

の形で、初期値を持つ配列を宣言できる。

```vb
配列名(添字)
```

の形で、配列の要素にアクセスできる。最初の要素の添字は `0` である。

## 文字と文字列の扱い

[文字列型 (String) - Visual Basic | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/data-types/string-data-type)
[Char データ型 - Visual Basic | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/data-types/char-data-type)
[String.Split メソッド (System) | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/api/system.string.split?view=net-8.0#system-string-split(system-char()))

`"hello"` のように `""` で囲むことで、文字列 (`String` 型) のリテラルを表現できる。
`"a"c` のように1文字の文字列リテラルの後ろに `c` をつけることで、文字 (`Char` 型) のリテラルを表現できる。

```vb
文字列.Split(区切り文字の配列)
```

により、文字列を区切り文字で区切った配列を得ることができる。

## 標準入出力

[Console.ReadLine メソッド (System) | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/api/system.console.readline?view=net-8.0#system-console-readline)
[Console.WriteLine メソッド (System) | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/api/system.console.writeline?view=net-8.0#system-console-writeline(system-string-system-object-system-object))

```vb
Console.ReadLine()
```

により、標準入力から1行読み込んで、文字列として得ることができる。
結果の文字列は改行文字を含まない。

```vb
Console.WriteLine(書式指定文字列, 埋め込む値, ...)
```

により、標準出力に文字列を出力し、さらに改行を出力できる。
書式指定文字列内の `{0}` は最初の「埋め込む値」に、`{1}` は次の「埋め込む値」に、…のように置き換えられる。

# 提出コード

```vb
Module mainModule
    Sub Main()
        Dim line1 As String = Console.ReadLine()
        Dim line2 As String = Console.ReadLine()
        Dim line3 As String = Console.ReadLine()
        Dim separator = New Char() { " " }
        Dim bc = line2.Split(separator)
        Dim a As Integer = Integer.parse(line1)
        Dim b As Integer = Integer.parse(bc(0))
        Dim c As Integer = Integer.parse(bc(1))
        Console.WriteLine("{0} {1}", a + b + c, line3)
    End Sub
End Module
```

[提出 #55182176 - AtCoder Beginners Selection](https://atcoder.jp/contests/abs/submissions/55182176)