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!!

Difficulty: introductory

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))]
    
    
    
    #result = []
    #i = int(a**0.5) + bool(a**0.5 % 1)
    #j = int(b**0.5) + 1
    #for n in range(i, j):
    #    sq = n**2
    #    if not any(int(d) % 2 for d in str(sq)):
    #        result.append(sq)
    #return result


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**.5//1)&-2,int(b**.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