回答:
「キーワードなし」の制限はここでは重要ではありません。可能であれば、キーワードを追加しても改善されないだろうと確信しています。
n=2;main(m){n<720&&main(m<2?printf("%d ",n),n:n%m?m-1:n++);}
代替バージョン:
出力はそれほど良くありませんが、私はprintf
悪用が好きです。
n=2;main(m){n<720&&main(m<2?printf("%*d",n,n):n%m?m-1:n++);}
両方のソリューションの秘trickは、2つのループ(再帰によって実装される)を1つにマージすることです。
n
次の潜在的な素数、m
次の潜在的な除数です。
各再帰呼び出しで、インクリメントn
(m
前の値に設定中)またはデクリメントしますm
。
Pythonはこの挑戦のために作られたものではありません。したいprint
?それは予約されています。さて、私たちはどのように使用しstdout
ますか?まあ、それは費用がかかりimport
ます...あなたはそれを推測し、予約しました。まあ...私はUnix上にいるので、ファイル記述子1を開くことができます。これはたまたまstdoutです。ハック!
男と反復?何もありませんeval
。もちろんループはありませんが、def
orで関数を定義することもできませんlambda
。そして、怪我にin辱を加えるために、リストの理解さえ使用することはできません!私はいつもmap(p.__mod__,...)
コードゴルフのようなものを使う言い訳を探しています...理解は常により良いです。今までです。
p=1
eval(compile("p+=1;open('/dev/fd/1','w').write('%s '%p*all(map(p.__mod__,range(2,p))));"*720,'','exec'))
さて、あなたはそれが文句を言うかもしれませんexec
(私もしませんでした私は、キーワードを使用していないにもかかわらず、キーワードです)。さて、これはを使用しない117文字のソリューションです。eval
exec
'exec'
p=2
s="eval('('+s*(p<720)+')',open('/dev/fd/1','w').write('%s '%p*all(map(p.__mod__,range(2,p)))),{'p':p+1})";eval(s)
__import__
が、それはつもりコスト文字だ
#define q j*j<k?i%p[j++]||(i++,j=0):printf("%d\n",p[j=0,k++]=i++)
#define A q;q;q;q;q;q;q;q
#define B A;A;A;A;A;A;A;A
#define C B;B;B;B;B;B;B
main(){int i=2,j=0,k=0,p[999];C;C;C;C;C;}
さて、ここに簡単な最初の試みがあります。これは要件を満たす必要があると思います。私は単純な試行分割を使用して素数を見つけ、プリプロセッサを使用して構築された展開されたループを見つけて、十分な数になるまで繰り返します。繰り返しの数が調整され、正確に128個の素数が出力されるようになりました。
Mathematicaの「予約語」の解釈方法がわかりませんが、プレイしたいので、組み込み関数なしで素数を生成したり、素数性をテストしたりすることを意味します。
Fold[#2Cases[#/#2,1|_Rational]&,#,#]&@Range[2,719]