Python挑战之“比比谁更短”(12.13)
写在前面
本挑战旨在训练对Python简洁性的理解程度,请你在编程的过程中尽量使得代码行数更短(是行数而不是字数)。最好在代码后面附一份正常的写法,防止日后想用此题却因为那糟糕的可读性而浪费时间。另外,本人仅仅是一个初学Python的大一新生,如果给出的代码有错误或有误导他人的地方,欢迎大佬指出,一定改正。
注意 本挑战仅限娱乐,请在作业和考试中不要一味地为了短而降低代码的可读性。
Description
如果一个数满足以下性质,则称这个数是好的:
1.是四位数;
(这里的几位数和难度有关,请尽量保证你的代码具有普适性,不要写仅仅针对这一条题目的代码,下同)
2.在16进制、10进制、12进制下的各位之和相等。
比如,2991的各位之和为2+9+9+1=21,它的12进制为1893,各位之和也为21,但是它的16进制BAF的各位之和为11+10+15=36,所以2991不是好的。
请你编程找到所有的好数。
Input
没有输入。
Output
所有的好数,一行一个。
参考代码
#from math import log
#def fsum(n,f):return sum(n//f**i%f for i in range(4//log(f,10)))
def fsum(n,f,a=0):return fsum(n//f,f,a+n%f) if n else a
for x in [i for i in range(10**(4-1),10**4) if fsum(i,16)==fsum(i,12)==fsum(i,10)]:print(x)
'''
def fsum(n,f):
ans=0
while n!=0:
ans+=n%f
n//=f
return ans
for i in range(1000,10000):
if fsum(i,16)==fsum(i,12)==fsum(i,10):
print(i)
'''