paiza×Qiita記事投稿キャンペーンということで、paizaラーニングレベルアップ問題集の名刺バインダー管理を色々な言語でやってみました。対象はコードモンスター大図鑑で対応している9言語にPerl、Scala、Go、Swiftを合わせた13言語です。
2024/08/25更新
Javascriptのコードを修正いたしました。
方針
番号$m$の名刺は
\left\lfloor\frac{m-1}{2n}\right\rfloor+1
枚目のファイルにあり、裏面の番号を$m'$とすると、
m+m'=4n\left\lfloor\frac{m-1}{2n}\right\rfloor+2n+1
となります。答えは
m'=2n\times\left(\left\lfloor\frac{m-1}{2n}\right\rfloor\times2+1\right)+1-m
です。
PHP
<?php
[$n, $m] = explode(" ", fgets(STDIN));
echo (2 * $n * (intdiv($m - 1, 2 * $n) * 2 + 1) + 1 - $m) . "\n";
?>
Ruby
n, m = gets.split.map(&:to_i)
p 2 * n * ((m - 1) / (2 * n) * 2 + 1) + 1 - m
Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
sc.close();
System.out.println(2 * n * ((m - 1) / (2 * n) * 2 + 1) + 1 - m);
}
}
Python
n, m = map(int, input().split())
print(2 * n * ((m - 1) // (2 * n) * 2 + 1) + 1 - m)
C言語
#include <stdio.h>
int main(void){
int n, m;
scanf("%d %d", &n, &m);
printf("%d\n", 2 * n * ((m - 1) / (2 * n) * 2 + 1) + 1 - m);
return 0;
}
C#
using System;
class Program
{
static void Main()
{
int[] nm = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
int n = nm[0];
int m = nm[1];
Console.WriteLine(2 * n * ((m - 1) / (2 * n) * 2 + 1) + 1 - m);
}
}
Javascript
const lines = require("fs").readFileSync("/dev/stdin", "utf8").split("\n");
// 2024-08-25 parseIntからNumberに修正
// const [n, m] = lines[0].split(" ").map(x => parseInt(x, 10));
const [n, m] = lines[0].split(" ").map(Number);
console.log(2 * n * (Math.floor((m - 1) / (2 * n)) * 2 + 1) + 1 - m);
C++
#include <iostream>
using namespace std;
int main(void){
int n, m;
cin >> n >> m;
cout << 2 * n * ((m - 1) / (2 * n) * 2 + 1) + 1 - m << endl;
return 0;
}
Kotlin
import java.util.*
fun main() {
val sc = Scanner(System.`in`)
val n = sc.nextInt()
val m = sc.nextInt()
sc.close()
println(2 * n * ((m - 1) / (2 * n) * 2 + 1) + 1 - m)
}
Perl
my ($n, $m) = split ' ', <STDIN>;
print 2 * $n * (int(($m - 1) / (2 * $n)) * 2 + 1) + 1 - $m, "\n"
Scala
import scala.io.StdIn._
object Main extends App {
val Array(n, m) = readLine().split(" ").map(_.toInt)
println(2 * n * (((m - 1) / (2 * n)) * 2 + 1) + 1 - m)
}
Go
package main
import (
"fmt"
)
func main() {
var n, m int
fmt.Scan(&n, &m)
fmt.Println(2*n*((m-1)/(2*n)*2+1) + 1 - m)
}
Swift
import Foundation
let nm = readLine()!.split(separator: " ").map { Int($0)! }
let n = nm[0]
let m = nm[1]
print(2 * n * ((m - 1) / (2 * n) * 2 + 1) + 1 - m)