RosettaCodeData/Task/Even-or-odd/NetRexx/even-or-odd.netrexx
2023-07-01 13:44:08 -04:00

43 lines
1.7 KiB
Text

/* NetRexx */
options replace format comments java crossref symbols nobinary
say 'Val'.right(5)': mod - ver - pos - bits'
say '---'.right(5)': ---- + ---- + ---- + ----'
loop nn = -15 to 15 by 3
say nn.right(5)':' eo(isEven(nn)) '-' eo(isEven(nn, 'v')) '-' eo(isEven(nn, 'p')) '-' eo(isEven(nn, 'b'))
end nn
return
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- Overloaded method. Default is to use the remainder specialization below
method isEven(anInt, meth = 'R') public static returns boolean
select case meth.upper().left(1)
when 'R' then eo = isEvenRemainder(anInt)
when 'V' then eo = isEvenVerify(anInt)
when 'P' then eo = isEvenPos(anInt)
when 'B' then eo = isEvenBits(anInt)
otherwise eo = isEvenRemainder(anInt) -- default
end
return eo
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
method isEvenRemainder(anInt) public static returns boolean
return anInt // 2 == 0
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
method isEvenVerify(anInt) public static returns boolean
return anInt.right(1).verify('02468') == 0
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
method isEvenPos(anInt) public static returns boolean
return '13579'.pos(anInt.right(1)) == 0
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
method isEvenBits(anInt) public static returns boolean
return \(anInt.d2x(1).x2b().right(1))
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
method eo(state = boolean) public static
if state then sv = 'Even'
else sv = 'Odd'
return sv.left(4)