Faces from a mesh: Difference between revisions

Content added Content deleted
m (→‎{{header|Phix}}: added syntax colouring, made p2js compatible)
(→‎{{header|Wren}}: Updated code, no change in output.)
Line 888: Line 888:
{{trans|Go}}
{{trans|Go}}
{{libheader|Wren-sort}}
{{libheader|Wren-sort}}
{{libheader|Wren-seq}}
{{libheader|Wren-fmt}}
{{libheader|Wren-fmt}}
<lang ecmascript>import "/sort" for Sort
<lang ecmascript>import "./sort" for Sort
import "/fmt" for Fmt
import "./seq" for Lst
import "./fmt" for Fmt

// Assumes s1, s2 are of same length.
var sliceEqual = Fn.new { |s1, s2|
for (i in 0...s1.count) {
if (s1[i] != s2[i]) return false
}
return true
}

// Check two perimeters are equal.
// Check two perimeters are equal.
var perimEqual = Fn.new { |p1, p2|
var perimEqual = Fn.new { |p1, p2|
Line 911: Line 905:
for (r in 0..1) {
for (r in 0..1) {
for (i in 0...le) {
for (i in 0...le) {
if (sliceEqual.call(c, p2)) return true
if (Lst.areEqual(c, p2)) return true
// do circular shift to right
// do circular shift to right
var t = c[-1]
Lst.rshift(c)
for (i in le-2..0) c[i+1] = c[i]
c[0] = t
}
}
// now process in opposite direction
// now process in opposite direction
Sort.reverse(c) // reverses 'c' in place
Lst.reverse(c) // reverses 'c' in place
}
}
return false
return false
}
}

var faceToPerim = Fn.new { |face|
var faceToPerim = Fn.new { |face|
// use copy to avoid mutating 'face'
// use copy to avoid mutating 'face'
Line 983: Line 975:
return perim[0..-2]
return perim[0..-2]
}
}

System.print("Perimeter format equality checks:")
System.print("Perimeter format equality checks:")
var areEqual = perimEqual.call([8, 1, 3], [1, 3, 8])
var areEqual = perimEqual.call([8, 1, 3], [1, 3, 8])