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()
}