2022-01-01から1年間の記事一覧

約数を求める(Ruby)

prime ライブラリを使う。結果は順不同。 require "prime" def divisors(n) result = [1] doit = ->(pd, acc) { return if pd.empty? x, *xs = pd (0..x[1]).each do |i| e = acc * x[0] ** i result << e doit.(xs, e) end } doit.(n.prime_division, 1) re…

numo-gnuplot sample

qiita.comウィンドウで表示する場合。Linux Mint 20.3。 require "numo/gnuplot" Numo.gnuplot do set terminal: "wxt font 'Noto Sans CJK JP,12'" set title: "グラフのタイトル" set xrange: 0..6 set yrange: 0..60 set xlabel: "x軸のラベル" set ylabe…

単調非減少と単調非増加で配列(Enumerator)を切断する

要するにこれです。 atcoder.jp 配列 A が与えられます。 A を何箇所かで切って、A の連続した部分であるようないくつかの数列に分けます。 この時、分けられたあとの数列は全て、単調非減少または単調非増加な列になっている必要があります。 コード Enumer…

Ractor でフィボナッチ数列

まずは小手調べ takeするまで待って、takeするたびに無限に同じオブジェクトを返してくれる Ractor は、「Pull型通信」を使ってこんな風に作れる。 r = Ractor.new do loop { Ractor.yield 1 } end Array.new(5) { r.take } #=>[1, 1, 1, 1, 1] わかりやすい…

パスカルの三角形(Elixir)

obelisk.hatenablog.com ここで Ruby でやっていることを、Elixir でやってみました。 こういうのを表示します。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 コード pascal_triangle.exs defmodule PascalTriangle …

Hit&Blow を Ruby で

qiita.comおもしろそうなので、自分でも書いてみた。 ルール コンピュータの決めた、各桁に重複のない3桁の数を当てるゲーム。 当たらなかった場合、 入力と桁の合っている数字の数を、ヒット 入力と桁は合っていないが重複はしている数字の数を、ブロウ と…

Enumerator#rest みたいなのが欲しい

Ruby の Enumerator で、列挙はひとつずつしかできない。まとめていくつか列挙できるメソッドが欲しい。こんな感じ。 class Enumerator def rest(n=nil) ary = [] case n in nil loop { ary << self.next } in Integer => a a.times { ary << self.next } en…