paizaの新作プログラミングゲーム【電脳少女プログラミング2088 ─壊レタ君を再構築─】自然の残る公園(paizaランク:C相当)をやってみました。
問題
方針
- ビーコンの数を表す整数$N$、現在の位置の$y$座標を表す整数$a$、$x$座標を表す整数$b$を受け取ります
- 最も近いビーコンの番号$K$を$0$未満または$N$より大きい整数で初期化します
- 最も近いビーコンの距離の2乗$D$を$8,000,000$より大きい整数で初期化します(問題の制約条件より)
- 以下、$i=1,2,...,N$について繰り返します
- ビーコンの座標を表す整数$(y_i,x_i)$を受け取ります
- 現在地とビーコンとの距離の2乗$(x-b)^2+(y-a)^2$を計算します
- その距離が$D$未満ならば
- 最も近いビーコンの番号$K$を$i$に置き換えます
- $D$を更新します
- 最も近いビーコンの番号$K$を出力します
- 距離の比較は距離の2乗で、整数の状態で比較します
- 距離の計算は$f(x_0,x_1,y_0,y_1)$や$f(x_0,y_0,x_1,y_1)$の様な定義でもいいのですが、今回は$f_{b,a}(x,y)$の様な感じで定義します
C
#include <stdio.h>
int a, b;
int square_distance(int y, int x) {
return (y - a) * (y - a) + (x - b) * (x - b);
}
int main() {
int n;
scanf("%d %d %d", &n, &a, &b);
int k;
int min = 1 << 23;
for (int i = 1; i <= n; i++) {
int y, x;
scanf("%d %d", &y, &x);
int d = square_distance(y, x);
if (d < min) {
k = i;
min = d;
}
}
printf("%d\n", k);
return 0;
}
C++
#include <iostream>
using namespace std;
int a, b;
int square_distance(int y, int x) {
return (y - a) * (y - a) + (x - b) * (x - b);
}
int main() {
int n;
cin >> n >> a >> b;
int k;
int minimum = 1 << 23;
for (int i = 1; i <= n; i++) {
int y, x;
cin >> y >> x;
int d = square_distance(y, x);
if (d < minimum) {
k = i;
minimum = d;
}
}
cout << k << endl;
return 0;
}
C#
using System;
class Program
{
static int a, b;
private static int SquareDistance(int y, int x) {
return (y - a) * (y - a) + (x - b) * (x - b);
}
public static void Main()
{
int[] nab = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
int n = nab[0];
a = nab[1];
b = nab[2];
int k = -1;
int min = 1 << 23;
for (int i = 1; i <= n; i++) {
int[] yx = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
int d = SquareDistance(yx[0], yx[1]);
if (d < min) {
k = i;
min = d;
}
}
Console.WriteLine(k);
}
}
Go
package main
import "fmt"
var a, b int
func square_distance(y int, x int) int {
return (y - a) * (y - a) + (x - b) * (x - b)
}
func main() {
var n int
fmt.Scan(&n, &a, &b)
var k int
min := 1 << 23
for i := 1; i <= n; i++ {
var y, x int
fmt.Scan(&y, &x)
d := square_distance(y, x)
if d < min {
k = i
min = d
}
}
fmt.Println(k)
}
Java
import java.util.*;
public class Main {
static int a, b;
private static int squareDistance(int y, int x) {
return (y - a) * (y - a) + (x - b) * (x - b);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
a = sc.nextInt();
b = sc.nextInt();
int k = -1;
int min = 1 << 23;
for (int i = 1; i <= n; i++) {
int d = squareDistance(sc.nextInt(), sc.nextInt());
if (d < min) {
k = i;
min = d;
}
}
System.out.println(k);
sc.close();
}
}
JavaScript
const lines = require("fs").readFileSync("/dev/stdin", "utf8").split('\n');
const [n, a, b] = lines[0].split(' ').map(Number);
function squareDistance(y, x) {
return (y - a) * (y - a) + (x - b) * (x - b);
}
let k;
let min = 1 << 23;
for (var i = 1; i <= n; i++) {
let [y, x] = lines[i].split(' ').map(Number);
let d = squareDistance(y, x);
if (d < min) {
k = i;
min = d;
}
}
console.log(k);
Kotlin
import java.util.*
var a = 0
var b = 0
fun squareDistance(y: Int, x: Int): Int {
return (y - a) * (y - a) + (x - b) * (x - b);
}
fun main() {
val sc = Scanner(System.`in`)
val n = sc.nextInt()
a = sc.nextInt()
b = sc.nextInt()
var k = -1
var min = 1 shl 23
for (i in 1..n) {
val d = squareDistance(sc.nextInt(), sc.nextInt())
if (d < min) {
k = i
min = d
}
}
sc.close()
println(k)
}
PHP
<?php
[$n, $a, $b] = array_map('intval', explode(' ', fgets(STDIN)));
function square_distance($y, $x) {
global $a, $b;
return ($y - $a) * ($y - $a) + ($x - $b) * ($x - $b);
}
$k = null;
$min = 1 << 23;
for ($i = 1; $i <= $n; $i++) {
[$y, $x] = array_map('intval', explode(' ', fgets(STDIN)));
$d = square_distance($y, $x);
if ($d < $min) {
$k = $i;
$min = $d;
}
}
echo $k, PHP_EOL;
?>
Perl
my ($n, $a, $b) = map{ int($_) }(split(' ',<STDIN>));
sub square_distance {
return ($_[0] - $a) * ($_[0] - $a) + ($_[1] - $b) * ($_[1] - $b);
}
my $k;
my $min = 1 << 23;
for (my $i = 1; $i <= $n; $i++) {
my ($y, $x) = map{ int($_) }(split(' ',<STDIN>));
my $d = &square_distance($y, $x);
if ($d < $min) {
$k = $i;
$min = $d;
}
}
print "$k$/";
Python3
n, a, b = map(int, input().split())
def square_distance(y, x):
return (y - a) * (y - a) + (x - b) * (x - b)
k = None
minimum = 1 << 23
for i in range(n):
y, x = map(int, input().split())
d = square_distance(y, x)
if d < minimum:
k = i + 1
minimum = d
print(k)
Ruby
n, $a, $b = gets.split.map(&:to_i)
def square_distance(y, x)
return (y - $a) * (y - $a) + (x - $b) * (x - $b)
end
k = nil
min = 1 << 23
n.times do |i|
y, x = gets.split.map(&:to_i)
d = square_distance(y, x)
if d < min
k = i + 1
min = d
end
end
p k
Scala
import scala.io.StdIn._
object Main extends App{
val Array(n, a, b) = readLine().split(" ").map(_.toInt)
val squareDistance = (y: Int, x: Int) => (y - a) * (y - a) + (x - b) * (x - b)
var k = -1
var min = 1 << 23
for (i <- 1 to n) {
val Array(y, x) = readLine().split(" ").map(_.toInt)
val d = squareDistance(y, x)
if (d < min) {
k = i
min = d
}
}
println(k)
}
Swift
let nab = readLine()!.split(separator: " ").map { Int($0)! }
let (n, a, b) = (nab[0], nab[1], nab[2])
func squareDistance(y: Int, x: Int) -> Int {
return (y - a) * (y - a) + (x - b) * (x - b)
}
var k = -1
var minimum = 1 << 23
for i in 1...n {
let yx = readLine()!.split(separator: " ").map { Int($0)! }
let d = squareDistance(y: yx[0], x: yx[1])
if d < minimum {
k = i
minimum = d
}
}
print(k)