>>> def adjacental(num):
... num = str(num)
... digit = num[0]
... for newdigit in num[1:]:
... if abs(int(digit) - int(newdigit)) != 1:
... if list(sorted([digit, newdigit])) != ['0', '9']:
... return False
... digit = newdigit
... return True
...
>>> adjacental('098765434567876543234567898')
True
>>> adjacental('0981374918')
False
>>>
pairs = map(lambda *r: frozenset(r), range(1,10), range(2,10)+[0])
adj = lambda *r: pairs.count(frozenset(map(int,r))) != 0
adjacental = lambda s: all([adj(s[i],s[i+1]) for i in xrange(len(s)-1)])
def op(value, item):
(prev, ok) = value
if ok:
if prev is None:
return (item, True)
else:
return (item, abs(prev - item) in [1, 9])
else:
return (None, False)
def adjacental(num):
(j, r) = reduce(op, [int(digit) for digit in str(num)], (None, True))
return r
>>> def adjacental(num):
... seq = [int(digit) for digit in str(num)]
... for i in xrange(len(seq) - 1):
... diff = abs(seq[i] - seq[i + 1])
... if (diff != 1) and (diff != 9):
... return False
... return True
...
>>> adjacental('098765434567876543234567898')
True
>>> adjacental('0981374918')
False
>>>