2
0
paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」

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

Last updated at Posted at 2024-08-14

paiza×Qiita記事投稿キャンペーンということで、paizaラーニングレベルアップ問題集の宝くじを色々な言語でやってみました。対象はコードモンスター大図鑑で対応している9言語です。

2024/08/25更新
Javascriptのコードを修正いたしました。


方針

問題文の

1等:当選番号と一致する番号
前後賞:当選番号の±1の番号(当選番号が100000または199999の場合,前後賞は一つしかありません)
2等:当選番号と下4桁が一致する番号(1等に該当する番号を除く)
3等:当選番号と下3桁が一致する番号(1等および2等に該当する番号を除く)

1等の場合: first
前後賞の場合: adjacent
2等の場合: second
3等の場合: third
それ以外(外れ)の場合: blank

を関数にします。

2024/08/26更新
2等の判定において、購入した宝くじ券の番号$a$と当選番号$b$の下4桁が一致する判定において、「$a$, $b$を整数として見た時$a$を$10000$で割った余りと$b$を$10000$で割った余りが等しい」としておりましたが、$a\equiv b\mod m$ならば$a-b\equiv 0\mod m$という性質を用いて、「$a-b$を$10000$で割った余りが$0$」とします。
これにより、2等の判定基準が変更された場合でも1ヶ所修正すればよいことになります。
3等についても同様です。


PHP
<?php
	global $b;
	$b = fgets(STDIN);


	function lottery($a) {
		global $b;
		if ($a == $b) { // 1等:当選番号と一致する番号
			return "first";
		} elseif (abs($a - $b) == 1) { // 前後賞:当選番号の±1の番号
			// elseif ($a == $b - 1 || $a == $b + 1)
			return "adjacent";
		} elseif (($a - $b) % 10000 == 0) { // 2等:当選番号と下4桁が一致する番号
			// elseif ($a % 10000 == $b % 10000)
			return "second";
		} elseif (($a - $b) % 1000 == 0) { // 3等:当選番号と下3桁が一致する番号
			// elseif ($a % 1000 == $b % 1000)
			return "third";
		} else { // それ以外(外れ)
			return "blank";
		}
	}


	$n = fgets(STDIN);
	for ($i = 0; $i < $n; $i++) {
		$a = fgets(STDIN);
		echo lottery($a) . "\n";
	}
?>

Ruby
$b = gets.to_i


def lottery(a) 
	if a == $b # 1等:当選番号と一致する番号
		return "first"
	elsif (a - $b).abs == 1 # 前後賞:当選番号の±1の番号
		# elsif a == $b - 1 || a == $b + 1
		return "adjacent"
	elsif (a - $b) % 10000 == 0 # 2等:当選番号と下4桁が一致する番号
		# elsif a % 10000 == $b % 10000
		return "second"
	elsif (a - $b) % 1000 == 0 # 3等:当選番号と下3桁が一致する番号
		# elsif a % 1000 == $b % 1000
		return "third"
	else # それ以外(外れ)
		return "blank"
	end
end


n = gets.to_i
n.times do
	a = gets.to_i
	puts lottery(a)
end

Java
import java.util.*;

public class Main {

	static int b;

	static String lottery(int a) {
		if (a == b) { // 1等:当選番号と一致する番号
			return "first";
		} else if (Math.abs(a - b) == 1) { // 前後賞:当選番号の±1の番号
			// else if (a == b - 1 || a == b + 1)
			return "adjacent";
		} else if ((a - b) % 10000 == 0) { // 2等:当選番号と下4桁が一致する番号
			// else if (a % 10000 == b % 10000)
			return "second";
		} else if ((a - b) % 1000 == 0) { // 3等:当選番号と下3桁が一致する番号
			// else if (a % 1000 == b % 1000)
			return "third";
		} else { // それ以外(外れ)
			return "blank";
		}
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		b = sc.nextInt();
		int n = sc.nextInt();
		for (int i = 0; i < n; i++) {
			int a = sc.nextInt();
			System.out.println(lottery(a));
		}
		sc.close();
	}
}

Python
b = int(input())


def lottery(a):
	if a == b: # 1等:当選番号と一致する番号
		return "first"
	elif abs(a - b) == 1: # 前後賞:当選番号の±1の番号
		# elif a == b - 1 or a == b + 1:
		return "adjacent"
	elif (a - b) % 10000 == 0: # 2等:当選番号と下4桁が一致する番号
		# elif a % 10000 == b % 10000:
		return "second"
	elif (a - b) % 1000 == 0: # 3等:当選番号と下3桁が一致する番号
		# elif a % 1000 == b % 1000:
		return "third"
	else: # それ以外(外れ)
		return "blank"


n = int(input())
for _ in range(n):
	a = int(input())
	print(lottery(a))

C言語
#include <stdio.h>
#include <stdlib.h>

int b;

char* lottery(int a) {
	if (a == b) { // 1等:当選番号と一致する番号
		return "first";
	} else if (abs(a - b) == 1) { // 前後賞:当選番号の±1の番号
		// else if (a == b - 1 || a == b + 1)
		return "adjacent";
	} else if ((a - b) % 10000 == 0) { // 2等:当選番号と下4桁が一致する番号
		// else if (a % 10000 == b % 10000)
		return "second";
	} else if ((a - b) % 1000 == 0) { // 3等:当選番号と下3桁が一致する番号
		// else if (a % 1000 == b % 1000)
		return "third";
	} else { // それ以外(外れ)
		return "blank";
	}
}

int main(void) {
	scanf("%d", &b);
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		int a;
		scanf("%d", &a);
		puts(lottery(a));
	}
}

C#
using System;

class Program
{
	static int b;

	static String lottery(int a)
	{
		if (a == b)
		{
			// 1等:当選番号と一致する番号
			return "first";
		}
		else if (Math.Abs(a - b) == 1)
		// else if (a == b - 1 || a == b + 1)
		{
			// 前後賞:当選番号の±1の番号
			return "adjacent";
		}
		else if ((a - b) % 10000 == 0)
		// else if (a % 10000 == b % 10000)
		{
			// 2等:当選番号と下4桁が一致する番号
			return "second";
		}
		else if ((a - b) % 1000 == 0)
		// else if (a % 1000 == b % 1000)
		{
			// 3等:当選番号と下3桁が一致する番号
			return "third";
		}
		else
		{
			// それ以外(外れ)
			return "blank";
		}
	}

	static void Main()
	{
		b = int.Parse(Console.ReadLine());
		int n = int.Parse(Console.ReadLine());
		for (int i = 0; i < n; i++)
		{
			int a = int.Parse(Console.ReadLine());
			Console.WriteLine(lottery(a));
		}
	}
}

Javascript

2024/08/25 parseIntからNumberに修正

const lines = require("fs").readFileSync("/dev/stdin", "utf8").split("\n");
// const b = parseInt(lines[0], 10);
const b = Number(lines[0]);


function lottery(a) {
	if (a === b) { // 1等:当選番号と一致する番号
		return "first";
	} else if (Math.abs(a - b) === 1) { // 前後賞:当選番号の±1の番号
		// else if (a === b - 1 || a === b + 1)
		return "adjacent";
	} else if ((a - b) % 10000 === 0) { // 2等:当選番号と下4桁が一致する番号
		// else if (a % 10000 == b % 10000)
		return "second";
	} else if ((a - b) % 1000 === 0) { // 3等:当選番号と下3桁が一致する番号
		// else if (a % 1000 == b % 1000)
		return "third";
	} else { // それ以外(外れ)
		return "blank";
	}
}


// const n = parseInt(lines[1], 10);
const n = Number(lines[1]);
for (var i = 0; i < n; i++) {
	// let a = parseInt(lines[2 + i], 10);
	let a = Number(lines[2 + i]);
	console.log(lottery(a));
}

C++
#include <iostream>
using namespace std;

int b;

string lottery(int a) {
	if (a == b) { // 1等:当選番号と一致する番号
		return "first";
	} else if (abs(a - b) == 1) { // 前後賞:当選番号の±1の番号
		// else if (a == b - 1 || a == b + 1)
		return "adjacent";
	} else if ((a - b) % 10000 == 0) { // 2等:当選番号と下4桁が一致する番号
		// else if (a % 10000 == b % 10000)
		return "second";
	} else if ((a - b) % 1000 == 0) { // 3等:当選番号と下3桁が一致する番号
		// else if (a % 1000 == b % 1000)
		return "third";
	} else { // それ以外(外れ)
		return "blank";
	}
}

int main(void) {
	cin >> b;
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int a;
		cin >> a;
		cout << lottery(a) << endl;
	}
	return 0;
}

Kotlin
import java.util.*;

var b = 0


fun lottery(a: Int): String {
	if (a == b) { // 1等:当選番号と一致する番号
		return "first"
	} else if (Math.abs(a - b) == 1) { // 前後賞:当選番号の±1の番号
		// else if (a == b - 1 || a == b + 1)
		return "adjacent"
	} else if ((a - b) % 10000 == 0) { // 2等:当選番号と下4桁が一致する番号
		// else if (a % 10000 == b % 10000)
		return "second"
	} else if ((a - b) % 1000 == 0) { // 3等:当選番号と下3桁が一致する番号
		// else if (a % 1000 == b % 1000)
		return "third"
	} else { // それ以外(外れ)
		return "blank"
	}
}


fun main() {
	val sc = Scanner(System.`in`)
	b = sc.nextInt()
	val n = sc.nextInt()
	for (i in 1..n) {
		var a = sc.nextInt()
		println(lottery(a))
	}
	sc.close()
}
2
0
2

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