【電脳少女プログラミング2088 ─壊レタ君を再構築─】「自然の残る公園」をやってみた。

paizaの新作プログラミングゲーム【電脳少女プログラミング2088 ─壊レタ君を再構築─】[自然の残る公園（paizaランク：C相当）](https://ppg.paiza.jp/denno2088/areas/10)をやってみました。
- - -
###### 問題
https://ppg.paiza.jp/denno2088/challenges/denno2088_c_c_03
- - -
###### 方針
1. ビーコンの数を表す整数$N$、現在の位置の$y$座標を表す整数$a$、$x$座標を表す整数$b$を受け取ります
1. 最も近いビーコンの番号$K$を$0$未満または$N$より大きい整数で初期化します
1. 最も近いビーコンの距離の2乗$D$を$8,000,000$より大きい整数で初期化します（問題の制約条件より）
1. 以下、$i=1,2,...,N$について繰り返します
	1. ビーコンの座標を表す整数$(y_i,x_i)$を受け取ります
	1. 現在地とビーコンとの距離の2乗$(x-b)^2+(y-a)^2$を計算します
	1. その距離が$D$未満ならば
		1. 最も近いビーコンの番号$K$を$i$に置き換えます
		1. $D$を更新します
1. 最も近いビーコンの番号$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
```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++
```cpp
#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#
```cs
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
```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
```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
```js
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
```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
<?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
```pl
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
```py
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
```rb
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
```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
```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)
```