Pythonでの解答例
当日の問題はこちらから
http://nabetani.sakura.ne.jp/hena/ordf10updown/
オフラインで敗北してきたけれど、
当日やろうとしていたやりかたで再挑戦
適当なサイズのマップを作って、あとはそこから引いていく。
yhpg.py
#!env python3
# -*- coding:utf-8 -*-
# http://nabetani.sakura.ne.jp/hena/ordf10updown/
import math
#とりあえずこれだけあればテストデータには耐えられる
FIELD_SIZE = 100
NUMBER_MAX = 8000
def solve(data):
ix, iy = getPos(int(data))
result = ["-","-","-","-"]
if iy != 0:
result[0] = str(map[iy-1][ix])
result[1] = str(map[iy+1][ix])
if ix != 0:
result[2] = str(map[iy][ix-1])
result[3] = str(map[iy][ix+1])
return ",".join(result)
def getPos(d):
for i in range(1,d+1):
if d == 1:
return [0,0]
lower = int(math.pow(i-1,2))
maximum = int(math.pow(i,2))
if( lower < d <=maximum):
if (i % 2 == 0):
return even(d, i, lower, maximum)
else:
return odd(d, i, lower, maximum)
def even(d, size, lower, maximum):
x=0
y=size-1
for i in range(1,size+1):
x=i-1
if lower + i == d:
return[x,y]
for i in range(size):
y = i
if maximum - i == d:
return[x,y]
def odd(d, size, lower, maximum):
x=0
y=size-1
for i in range(1,size+1):
x=i-1
if maximum - i + 1 == d:
return[x,y]
for i in range(size):
y = i
if lower + i + 1 == d:
return[x,y]
def test(data, expect):
result = solve(data)
if result == expect:
print("成功: " + result + ":" + expect )
else:
print("失敗: " + result + ":" + expect )
map = [[0 for i in range(FIELD_SIZE)] for i in range(FIELD_SIZE)]
for i in range(1,NUMBER_MAX):
x, y = getPos(i)
map[y][x] = i
test( "10", "9,25,-,11" )
test( "1", "-,2,-,4" )
test( "2", "1,9,-,3" )
test( "4", "-,3,1,5" )
test( "26", "25,49,-,27" )
test( "72", "71,73,57,93" )
test( "82", "81,121,-,83" )
test( "100", "-,99,65,101" )
test( "122", "121,169,-,123" )
test( "141", "142,140,104,148" )
test( "145", "-,146,144,196" )
test( "320", "321,319,261,329" )
test( "504", "503,505,465,557" )
test( "563", "564,562,498,590" )
test( "906", "905,907,895,1019" )
test( "1047", "1046,1048,1002,1134" )
test( "1111", "1068,1204,1110,1112" )
test( "1338", "1257,1401,1339,1337" )
test( "1613", "1612,1614,1588,1752" )
test( "1845", "1686,1854,1846,1844" )
test( "1921", "1922,1920,1780,1952" )
test( "2517", "2516,2518,2484,2688" )
test( "2670", "2671,2669,2535,2739" )
test( "2798", "2613,2821,2799,2797" )
test( "2841", "2778,2994,2840,2842" )
test( "2896", "2897,2895,2725,2937" )
test( "3050", "3001,3225,3049,3051" )
test( "3354", "3355,3353,3147,3375" )
test( "3563", "3564,3562,3402,3638" )
test( "4454", "4261,4525,4455,4453" )
test( "5397", "5262,5558,5396,5398" )
test( "5592", "5363,5659,5593,5591" )
test( "6122", "6121,6123,6047,6363" )
test( "6772", "6771,6773,6677,7009" )