「Geo3x3」
今回、開発した2025年新登場の構造化プログラミング言語「Wirth(ヴィルト)」に対応して、対応言語数が109となりました。
「Geo3x3 in Wirth」
Wirthを使ったエンコード「geo3x3.wirth」はこちら
function encode(lat, lng, level) res = "E" if lng < 0 res = "W" lng = lng + 180 endif lat = lat + 90 # 180:the North Pole, 0:the South Pole unit = 180 for i = 1 to level - 1 unit = unit / 3 x = lng // unit y = lat // unit res = res + (x + y * 3 + 1) lng = lng - x * unit lat = lat - y * unit next return res end
ちなみに、Wirth氏が開発したPascalでの記述「geo3x3.pas」はこちら
function Geo3x3_encode(lat: real; lng: real; level: integer): string; var unitsize: real; i: integer; x: integer; y: integer; begin result := 'E'; if lng < 0.0 then begin result := 'W'; lng := lng + 180.0; end; lat := lat + 90.0; { 180:the North Pole, 0:the South Pole } unitsize := 180.0; for i := 1 to level - 1 do begin unitsize := unitsize / 3.0; x := Floor(lng / unitsize); y := Floor(lat / unitsize); result := result + IntToStr(x + y * 3 + 1); lng := lng - x * unitsize; lat := lat - y * unitsize; end end;
型宣言が不要で、then、begin、セミコロンなどなくていいものを極力省いてよりシンプルにしています。
Pythonでの記述「geo3x3.py」はこちら
def encode(lat: float, lng: float, level: int): res = "" if lng >= 0: res += "E" else: res += "W" lng += 180 lat += 90 # 180:the North Pole, 0:the South Pole unit = 180 for i in range(1, level): unit /= 3 x = int(lng / unit) y = int(lat / unit) res += chr(ord('0') + x + y * 3 + 1) lng -= x * unit lat -= y * unit return res
一番お気に入りのオブジェクト指向言語、JavaScriptの「geo3x3.js」はこちら
const encode = (lat, lng, level) => { let res = "E"; if (lng < 0.0) { res = "W"; lng += 180.0; } lat += 90.0; // 180:the North Pole, 0:the South Pole let unit = 180.0; for (let i = 1; i < level; i++) { unit /= 3.0; const x = Math.floor(lng / unit); const y = Math.floor(lat / unit); res += x + y * 3 + 1; lng -= x * unit; lat -= y * unit; } return res; };
どれも似てますが、ちょっとずつ違うのがおもしろいですね!