paizaラーニングレベルアップ問題集の「宝くじ」をやってみた

paiza×Qiita記事投稿キャンペーンということで、paizaラーニングレベルアップ問題集の[宝くじ](https://paiza.jp/works/mondai/c_rank_skillcheck_archive/lottery)をやってみました。
- - -
- サンプルプログラム1（Python3）

    ```py
    b = int(input())
    n = int(input())
    for i in range(n):
        a = int(input())
        if a == b:
            print("first")
        elif abs(a - b) == 1:
            print("adjacent")
        elif a % 10000 == b % 10000:
            print("second")
        elif a % 1000 == b % 1000:
            print("third")
        else:
            print("blank")
    ```
    - 当選番号及び購入した宝くじ券の番号を整数として標準入力から取得します。
    - あとは問題文の指示に従って、1等、前後賞、2等、3等と順番に判定していきます。
    - 2等の「当選番号と下4桁が一致する」は、「10000で割った余りが一致する」として判定します。
    同様に、3等の「当選番号と下3桁が一致する」は、「1000で割った余りが一致する」として判定します。
    - 2等は「1等に該当する番号を除く」、3等は「1等および2等に該当する番号を除く」とありますので、判定の順番を間違えないようにします。
        前後賞の判定はいつでも構いません。
　
- - -
- サンプルプログラム2（Python3）
    - 番号を文字列として取得して比較する方法もあります。
    ```py
    b = input()
    n = int(input())
    for i in range(n):
        a = input()
        if a == b:
            print("first")
        elif abs(int(a) - int(b)) == 1:
            print("adjacent")
        elif a[-4:] == b[-4:]:  # a[-4:]で文字列aの末尾4文字を取得
            print("second")
        elif a[-3:] == b[-3:]:
            print("third")
        else:
            print("blank")
    ```
　
- - -
- サンプルプログラム3（C）
    - Cでの整数変換、末尾までの部分文字列の取得方法を記載します。
    ```c
	#include <stdio.h>
	#include <string.h>
	#include <stdlib.h>
	
	int main(void) {
		char b[7];
		scanf("%s", b);
		int n;
		scanf("%d", &n);
		for (int i = 0; i < n; i++) {
			char a[7];
			scanf("%s", a);
			if (strcmp(a, b) == 0) { //strcmpで比較
				puts("first");
			} else if (abs(atoi(a) - atoi(b)) == 1) { //atoiで文字配列を整数に変換
				puts("adjacent");
			} else if (strcmp(a + 2, b + 2) == 0) { //a+2で文字配列aの3文字目以降を表す
				puts("second");
			} else if (strcmp(a + 3, b + 3) == 0) {
				puts("third");
			} else {
				puts("blank");
			}
		}
		return 0;
	}
    ```
　
- - -
- サンプルプログラム4（C++）
    - C++での整数変換、末尾までの部分文字列の取得方法を記載します。
    ```cpp
	#include <iostream>
	#include <string>
	using namespace std;
	
	int main(void) {
		string b;
		cin >> b;
		int n;
		cin >> n;
		for (int i = 0; i < n; i++) {
			string a;
			cin >> a;
			if (a == b) {
				cout << "first" << endl;
			} else if (abs(stoi(a) - stoi(b)) == 1) { //stoiで文字列を整数に変換
				cout << "adjacent" << endl;
			} else if (a.substr(2) == b.substr(2)) { //a.substr(2)で文字列aの3文字目以降を取得
				cout << "second" << endl;
			} else if (a.substr(3) == b.substr(3)) {
				cout << "third" << endl;
			} else {
				cout << "blank" << endl;
			}
		}
		return 0;
	}
    ```
　
- - -
- サンプルプログラム5（Java）
    - Javaでの整数変換、末尾までの部分文字列の取得方法を記載します。
    ```java
    import java.util.*;

    public class Main {
        public static void main(String[] args) throws Exception {
            Scanner sc = new Scanner(System.in);
            String b = sc.next();
            int n = sc.nextInt();
            for (int i = 0; i < n; i++) {
                String a = sc.next();
                if (a.equals(b)) {// equalsで比較
                    System.out.println("first");
                } else if (Math.abs(Integer.parseInt(a) - Integer.parseInt(b)) == 1) {
                    // Integer.parseIntで文字列を整数に変換
                    System.out.println("adjacent");
                } else if (a.substring(2).equals(b.substring(2))) {
                    // a.substring(2)で文字列aの3文字目以降を取得
                    System.out.println("second");
                } else if (a.substring(3).equals(b.substring(3))) {
                    System.out.println("third");
                } else {
                    System.out.println("blank");
                }
            }
            sc.close();
        }
    }
    ```

- - -
ちなみに、C++とJavaの部分文字列取得メソッドで引数を2つ指定する場合
C++では`s.substr(開始位置, 長さ)`
Javaでは`s.substring(開始位置, 終了位置:=開始位置+長さ)`
で指定します。
いずれの場合も、
「開始位置」は文字列の先頭を0文字目としてカウント、
第2引数を指定しなければ、開始位置以降末尾までの文字列を取得
します。
（参考：[部分文字列の取得1](https://paiza.jp/works/mondai/cgc_problems_005/cgc_problems__pr15_lv05)、[部分文字列の取得2](https://paiza.jp/works/mondai/cgc_problems_005/cgc_problems__pr16_lv05)）