{始点, 終点}のペアからなる2D Listがお互いにクロスしていないかチェックするAppleScriptです。
{{9, 12}, {15, 18}, {17, 25}, {27, 29}}
のような場合には、NG(false)。
{{9, 12}, {15, 18}, {19, 25}, {27, 29}}
のような場合には、OK(true)と判定します。
{{9, 12}, {15, 18}, {18, 25}, {27, 29}}
のように、接している場合にもNG(false)と判定します。
もともとの用途は、
あいうえお「かきく『けこ」さしす』せそ
のように、本来記述してはいけないカッコの記法が行われたことを検出するものです。
ただし、文法的には本来許容すべきカッコのネスティング
あいうえお「かきく『けこ』さしす」せそ
についてもエラー検出してしまっているので、その点は一考の余地がありそうです。
AppleScript名:{始点, 終点}の2D Listがお互いにクロスしていないかチェック.scptd |
— – Created by: Takaaki Naganoya – Created on: 2018/12/14 — – Copyright © 2018 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set aList to {{9, 12}, {15, 18}, {17, 25}, {27, 29}} set aRes to checkCrossRange(aList) of me –> false set bList to {{9, 12}, {15, 18}, {18, 25}, {27, 29}} set bRes to checkCrossRange(bList) of me –> false set cList to {{9, 12}, {15, 18}, {19, 25}, {27, 29}} set cRes to checkCrossRange(cList) of me –> true –{始点, 終点}のペアの2D Listが違いにクロスしていないかチェック on checkCrossRange(aList as list) set rList to {} repeat with i in aList copy i to {sRange, eRange} set tmpRange to current application’s NSMakeRange(sRange, eRange – sRange + 1) set the end of rList to tmpRange end repeat repeat with ii in rList set jj to contents of ii repeat with i in rList set j to contents of i if jj is not equal to j then set aRes to current application’s NSIntersectionRange(jj, j) if aRes is not equal to {location:0, |length|:0} then return false end if end if end repeat end repeat return true end checkCrossRange |
More from my site
(Visited 29 times, 1 visits today)