def f(n):l=[1];exec"(n in l)>=any(n%k<1for k in range(2,n))>q;l=map(sum,zip([0]+l,l+[0]));"*n
オンラインでお試しください!
これは名前付き関数fで、終了コードを介して出力します。パスカルプライムの場合は0、それ以外の場合は1です。
これはどのように機能しますか?
def f(n):l=[1]; # Define a function f (arg. n) and a list l = [1].
exec"..."*n # Execute n times.
(n in l) # Boolean: "n is in l?" is greater than...
>=any(n%k<1for k in range(2,n)) # the boolean: "Is n composite?"?
>q; # If the boolean comparison returns a falsy
# result, then continue on without any difference.
# Otherwise, evaluate the other part of the
# inequality, thus performing "is greater than q".
# Since we have no variable "q", this terminates
# with exit code 1, throwing a "NameError".
l=map(sum,zip([0]+l,l+[0])); # Generate the next row in Pascal's triangle,
# By zipping l prepended with a 0 with l appended
# with a 0 and mapping sum over the result.
これは、基本的にnがPascalの三角形の最初のn-1行にあるかどうか、またはそれが素数であるかどうかをチェックし、これら2つの条件のいずれかが満たされるとエラーをスローします。
ovsのおかげで1バイト節約されました。