#!/usr/bin/env python
def sums(a, b, c, d):
if (a + b + c) == d:
return True
return False
sums_true = set()
def descending(a, b, c, d):
if (a > b) and (b > c):
return True
return False
descending_true = set()
def even(a, b, c, d):
e = list(sorted([a % 2, b % 2, c % 2, d % 2]))
if e == [0, 0, 1, 1]:
return True
return False
even_true = set()
def primes(a, b, c, d):
n = 0
p = set([2, 3, 5, 7])
for num in (a, b, c, d):
if num in p: n += 1
return n == 2
primes_true = set()
def squares(a, b, c, d):
n = 0
s = set([1, 4, 9])
for num in (a, b, c, d):
if num in s: n += 1
return n == 2
squares_true = set()
for i in xrange(1000, 10000):
nums = str(i)
a, b, c, d = map(int, nums)
if sums(a, b, c, d):
sums_true.add(i)
if descending(a, b, c, d):
descending_true.add(i)
if even(a, b, c, d):
even_true.add(i)
if primes(a, b, c, d):
primes_true.add(i)
if squares(a, b, c, d):
squares_true.add(i)
print 'Sums:', len(sums_true)
print 'Descending:', len(descending_true)
print 'Even:', len(even_true)
print 'Primes:', len(primes_true)
print 'Squares:', len(squares_true)
print
print 'Sums & Descending:', len(sums_true & descending_true)
print 'Sums & Even:', len(sums_true & even_true)
print 'Sums & Primes:', len(sums_true & primes_true)
print 'Sums & Squares:', len(sums_true & squares_true)
print 'Descending & Even:', len(descending_true & even_true)
print 'Descending & Primes:', len(descending_true & primes_true)
print 'Descending & Squares:', len(descending_true & squares_true)
print 'Even & Primes:', len(even_true & primes_true)
print 'Even & Squares:', len(even_true & squares_true)
print 'Primes & Squares:', len(primes_true & squares_true)
print
all = len(sums_true & descending_true & even_true & primes_true & squares_true)
print 'All:', all