4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

続・素数一覧を求めるワンライナー各言語まとめ

Last updated at Posted at 2021-06-20

前記事の姉妹版として『フィボナッチ数列を求めるワンライナー各言語まとめ』記事を立ち上げたところ,制約条件のせいか,膨大かつ&エレガントなワンライナーが大集合.『素数一覧』も同じようなスタイルで仕切り直してみることにしました.

※ここでいう『ワンライナー(one-liner program)』はシェル芸のようなものとお考え下さい(本来は逆ですが).コードレビューが重要視されている開発現場などでは避けるべきでしょう.

条件

  • $1<n<100$の$n$のうち素数のみを出力(逐次出力でもREPL戻り値表示でも可)
  • 素数判定・生成および素因数分解を行う関数の類は使用不可
  • ワンライナー実行は,一行分のキーボード入力ののち改行一回が基本
  • (今回は)関数型・反復型などは問わず,セミコロン等による複文もOK

各言語での記述例

初版として,前記事の記事本体やコメント欄の記述例(+新規言語)のうち,最も短いと思われる記述および筆者が直接確認した実装・バージョンを載せています.ワンライナー実行がシェル経由などの場合は,そのための記述も合わせています.より短い表現&他言語版歓迎(順次差し替え・追加を行います).

J(9.0.2)
(-.*/~)2+i.98
julia(1.4.1)(∉は2文字換算)
100|>x->(r=2:x)[r.[r*r']]
Ruby(2.7.0/irb1.2.1)
(2...100).filter{|x|(2...x).all?{x%_1>0}}
bc(1.07.1)
for(n=2;n<101;n++){i=2;while(n%i)i+=1;if(n==i)n}
Scheme(Gauche0.9.11-p1)
(remove(.$ #/^(..+?)\1+$/ make-string)(iota 98 2))
calc(2.12.7.2)
for(n=2;n<101;n++){for(i=2;n%i;i++);if(n==i)print n}
JavaScript(Node.js10.19)
for(i=1;++i<98;){for(j=1;i%++j;);i==j&&console.log(i)}
IchigoJamBASIC(1.4.3web)
?2:?3:?5:?7:FORI=9TO97:IFI%2*I%3*I%5*I%7?I:NEXTELSENEXT
Haskell(GHC8.6.5)
(\n->filter(\x->all(\z->x`mod`z/=0)[2..x-1])[2..n-1])100
CommonLisp(CLISP2.49.92)
(do((i 1))((>(incf i)99))(format(=(gcd(!(1- i))i)1)"~D~%"i))
Python(3.8.5)
[x for x in range(2,100)if not[i for i in range(2,x)if x%i==0]]
Scala(2.11.12/Java16.0.1)
var n=2;while(n<100){var i=2;while(n%i!=0)i+=1;if(n==i)println(n);n+=1;}
Lua(5.3.3)
for n=2,99 do i=2while n%i~=0 do i=i+1 end if n==i then print(n," ")end end
Clojure(1.10.1)
((fn[n](filter(fn[x](not((set(map #(mod x %)(range 2 x)))0)))(range 2 n)))100)
Erlang(OTP24)
[X||X<-lists:seq(2,100),not lists:any(fun(Z)->X rem Z==0 end,lists:seq(2,X-1))].
C(gcc9.3.0+dash0.5.10)
echo 'i;main(n){for(;++n<98;)for(i=1;++i<n?n%i:!printf("%d ",n););}'|gcc -w -xc -&&./a.out
Scheme(GNUGuile3.0.7)
(filter(lambda(x)(not(member 0(map(lambda(z)(modulo x z))(cddr(iota x))))))(cddr(iota 100)))
CommonLisp(SBCL1.4.16)
(do((n 2(+ n 1)))((= n 100))(do((i 2(+ i 1)))((=(mod n i)0)(cond((= i n)(princ n)(terpri))))))
Scheme(Chibi-scheme0.10.0)
(do((n 2(+ n 1)))((= n 100))(do((i 2(+ i 1)))((=(modulo n i)0)(cond((= i n)(display n)(newline))))))
Rust(1.47.0+dash0.5.10)
echo 'fn main(){let mut n=2;while n<100{let mut i=2;while n%i!=0{i+=1};if n==i{print!("{} ",n)};n+=1;}}'|rustc -&&./rust_out
Kotlin(1.5.20)
fun p(l:List<Int>,n:Int):List<Int>{return if(n<99){p(l.filterNot{it>n&&it%n==0},n+1)}else{println(l);l}};p((2..99).toList(),2)
Vim(8.1)(:でコマンドラインモードに入ってから入力)
echo {g->g(g)}({g->{n,r->n<2?r :{g->g(g)}({g->{n,i->n==i?1 :n%i==0?0 :g(g)(n,i+1)}})(n,2)?g(g)(n-1,[n]+r) :g(g)(n-1,r)}})(99,[])
Excel(2021-06-25時点ベータ版)
=LAMBDA(g,g(g))(LAMBDA(g, LAMBDA(n,r,IF(n<2,r, IF(LAMBDA(g,g(g))(LAMBDA(g,LAMBDA(n,i,IF(n=i,TRUE,IF(MOD(n,i)=0,FALSE,g(g)(n,i+1))))))(n,2), g(g)(n-1,n&" "&r), g(g)(n-1, r))))))(99,"")

備考

更新履歴

  • 2021-12-29:Scheme(Gauche)の記述例を変更(Twitterより)
  • 2021-12-29:Python3の記述例を変更
  • 2021-06-29:Cの記述例を変更(コメントより)
  • 2021-06-28:Kotlinの記述例を追加
  • 2021-06-25:Excel(ベータ版)の記述例を追加
  • 2021-06-25:Vimの記述例を変更
  • 2021-06-24:Rubyの記述例を変更(コメントより)
  • 2021-06-24:LISP系言語の記述例を実装ごとに分割・変更(コメントより)
  • 2021-06-24:JavaScriptの記述例を変更(コメントより)
  • 2021-06-24:IchigoJamBASICの記述例を追加(コメントより)
  • 2021-06-22:Jの記述例を変更(コメントより)
  • 2021-06-21:Jの記述例を変更(コメントより)
  • 2021-06-21:条件欄に素因数分解を行う関数の類不可の旨記載
  • 2021-06-21:Vim,Lua,Common Lispの記述例を追加
  • 2021-06-20:初版公開(J,Julia,bc,Ruby,calc,Haskell,Python,JavaScript,Scala,Clojure,Erlang,Scheme(iota/filter使用・未使用),C,Rust)
4
2
16

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?