新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

新しい課題を思いつきました。素数ネタですが…。

2021-10-15 08:01:33 | kotlin

 今まで、cametan_42さんのブログで勉強してきて、今朝の散歩で思いついたのが、素数ネタです。取り敢えず4桁ということで、右から見ても、左から見ても、同じ数値。3桁なら101ですよね。直ぐは分かりません。9000番台であることは間違いないですが。cametan_42さんのブログに回文の書き込みもありますが、Rubyで書いてみようかと思います。

 素数のジェネレータに対して、フィルタを作るということですね。

 ちょっと驚きですが、929が10000以下で、右から読んでも、左から読んでも同じというのは929が最後らしい。上のスクリプトではそうでした。予想では9000番台にあるだろうと思ったんですが、無いみたいです。

 それとこれはあくまで、素数のジェネレータですよね。これを改造して、回文の素数のジェネレータにするにはどうしたら良いんでしょうか?クラスの継承を使うのか?クラスのクラス、クラスのネスティング?有るのか?謎です。

追記1)

SosuCheck()をclass Primesに入れてみました。呼ぶ方では、primes.SosuCheck(x)となりました。未だ、回文素数ジェネレータに成ってません。


コメント (4)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« cametan_42さんの練習問題twe... | トップ | 何年ぶりかで、村上春樹さん... »
最新の画像もっと見る

4 コメント

コメント日が  古い順  |   新しい順
ん〜〜〜 (cametan_42)
2021-10-16 22:14:20
例えばこんなカンジ?

require 'prime'

primes = (2..Float::INFINITY).lazy.select do |i|
 i.prime?
end

def primedrome(p)
 p.select do |i|
  s = i.to_s
  s == s.reverse
 end
end

puts(primedrome(primes).take_while {|x| x < 10000}.force)
返信する
見事です! (isam)
2021-10-17 10:57:36
いつもながらのスマートなコーディングです。自分には、ほぼ絶対かけません。いや絶対x2かな?
 require 'prime'とありますが、システムが用意してくれてるんですか?素数を用意してるのでなく、i.prime?で素数かそうでないか?判断するツールを用意している、そんな感じですね。.forceはどんな働きですか?
 将棋か碁で、下手の考え休むに似たり、と正しくそれです。休みも必要ですよね。
 
返信する
だいぶチーティングですけどね (cametan_42)
2021-10-17 15:08:44
> require 'prime'とありますが、システムが用意してくれてるんですか?素数を用意してるのでなく、i.prime?で素数かそうでないか?判断するツールを用意している、そんな感じですね。

そうですね。Rubyにあるライブラリです。
これでだいぶ労力が低減出来る。
PythonはBattery IncludedですがRubyもなかなか、ですねぇ。

> .forceはどんな働きですか?

遅延評価のオブジェクトを「実体化」させる為の働きをします。
こっちのブログでLispの話書いてましたが、そのLisp族のSchemeから借りてきてる機能ですね。さすがRubyの作者、Matz氏はLisperです。

Schemeには基本的な遅延評価関数が二つしかなく、それらはdelayとforceと呼ばれています。
delayは与えられた式の評価を止めます。
forceは評価が止まった式(プロミスと言います)の評価を始めさせます。
Rubyではlazyと言うメソッドが、大まかに言うとdelayで、forceがそのままforceですね。
返信する
cametan_42さん、コメントありがとうございます (isam)
2021-10-17 15:35:18
 正直に、詳しくないので、形として覚えておいたほうが、良いようです。細部については、その後、改めて。
 lazy,take,forceが三位一体ですかね。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

kotlin」カテゴリの最新記事