The integer ```64``` is the first integer that has all of its digits even and furthermore, is a perfect square.

The second one is ```400``` and the third one ```484```.

Give the numbers of this sequence that are in the range ```[a,b] ```(both values inclusive)

Examples:
``` python
even_digit_squares(100, 1000) == [400, 484] # the output should be sorted.
even_digit_squares(1000, 4000) == []
``` 

Features of the random tests for ```even_digit_squares(a, b)```
```
number of Tests = 167
maximum value for a = 1e10
maximum value for b = 1e12
```
You do not have to check the entries, ```a``` and ```b``` always positive integers and ```a < b``` 

Happy coding!!

Source: codewars | Difficulty: EASY
Tags: Mathematics

Starter code: def even_digit_squares(a, b):
	

Solutions:
def is_even(x):
	return all((int(i) % 2 == 0 for i in str(x)))

def even_digit_squares(a, b):
	first = int(a ** (1 / 2)) + 1
	last = int(b ** (1 / 2)) + 1
	return sorted([x * x for x in range(first, last) if is_even(x * x)])


def even_digit_squares(a, b):
	return [i ** 2 for i in range(int(a ** 0.5), int(b ** 0.5) + 1) if all((not int(j) % 2 for j in str(i ** 2)))]


from bisect import bisect_left, bisect_right
EVEN = set('02468')
pedps = [x for x in (x * x for x in range(8, 1000000, 2)) if set(str(x)) <= EVEN]

def even_digit_squares(a, b):
	return pedps[bisect_left(pedps, a):bisect_right(pedps, b)]


def even_digit_squares(a, b):
	return [n ** 2 for n in range(int(a ** 0.5) + bool(a ** 0.5 % 1), int(b ** 0.5) + 1) if not any((int(d) % 2 for d in str(n ** 2)))]


PEDPS = [n * n for n in range(2, 10 ** 6, 2) if set(str(n * n)) <= set('02468')]

def even_digit_squares(a, b):
	return [n for n in PEDPS if a <= n <= b]


from math import ceil

def digits(n):
	while n >= 10:
		if n % 10 % 2 > 0:
			return False
		n //= 10
	return n % 2 == 0

def even_digit_squares(a, b):
	p = ceil(a ** 0.5)
	q = int(b ** 0.5)
	return [i * i for i in range(p, q + 1) if digits(i * i)]


even_digit_squares = lambda a, b: [n * n for n in range(1 - int(-a ** 0.5 // 1) & -2, int(b ** 0.5) + 1, 2) if set(str(n * n)) <= set('02468')]


import math

def even_digit_squares(a, b):
	evens = ('2', '4', '6', '8', '0')
	start = math.ceil(math.sqrt(a))
	stop = math.ceil(math.sqrt(b + 1))
	return [n * n for n in range(start, stop) if all((i in evens for i in str(n * n)))]


from math import floor, ceil, sqrt

def allEven(n):
	digs = list(str(n))
	odd_digs = ['1', '3', '5', '7', '9']
	for dS in odd_digs:
		if dS in digs:
			return False
	return True

def even_digit_squares(a, b):
	(lim1, lim2) = (int(floor(sqrt(a))) - 1, int(ceil(sqrt(b)) + 1))
	res = []
	for i in range(lim1, lim2):
		ii = i ** 2
		if a <= ii <= b and allEven(ii):
			res.append(ii)
	return res