プログラミングのお題スレ Part16 at TECH
[2ch|▼Menu]
[前50を表示]
500:デフォルトの名無しさん
19/12/30 15:32:52.11 fFRqMrLq.net
いいっすねー、新しいお題用意してるからちょっとまってて

501:デフォルトの名無しさん
19/12/30 15:44:13.04 fFRqMrLq.net
お題
四角形の縦の長さの数列と
四角形の横の長さの数列と
四角形の面積が与えられます
縦の長さと横の長さを組み合わせて
与えられた面積と一致する四角形をいくつ
作ることができるか求めてください
入力: 41, 9, 25, 92, 48, 15, 69, 61, 85, 22, 82, 79, 7, 34, 86, 29, 36, 77, 16, 79, 57, 8, 9, 58, 86, 0, 24, 83, 63, 46
入力: 12, 79, 11, 65, 9, 33, 44, 54, 30, 43, 76, 23, 24, 86, 15, 35, 21, 97, 57, 96, 6, 3, 59, 51, 29, 58, 93, 94, 49, 8
入力: 195?

502:デフォルトの名無しさん
19/12/30 15:45:24.75 fFRqMrLq.net
195の後ろの文字化けは無視してください
195と書きたかったのです

503:デフォルトの名無しさん
19/12/30 15:47:28.48 fFRqMrLq.net
入力の数列の長さが数万になってもちょっぱやで計算できるとなお良いです

504:デフォルトの名無しさん
19/12/30 16:18:52.49 pgNmBWor.net
四角形の縦の長さの定義は?
まさか四角形=長方形じゃないでしょ

505:デフォルトの名無しさん
19/12/30 16:21:26.52 fFRqMrLq.net
>>489
ではそのまさかということで
四角形とは長方形のことです!

506:デフォルトの名無しさん
19/12/30 16:26:20.78 fFRqMrLq.net
問題を書いたときは長方形以外の四角形がこの世に存在するとは思いもよらなかったので四角形と書いたのです

507:デフォルトの名無しさん
19/12/30 18:39:14.57 JZjS6BbQ.net
オーダーは n log n
問題には
数列に同じ値が複数あった場合に1個とするのか別カウントするのかという曖昧性がある

508:デフォルトの名無しさん
19/12/30 18:41:24.69 fFRqMrLq.net
>>492
同じ値は別カウントで良いです

509:デフォルトの名無しさん
19/12/30 18:54:14.71 JZjS6BbQ.net
数列が整数限定
数列の数が大きい
面積が小さい
なら
素因数分解っていうアプローチもあるのかな?

510:デフォルトの名無しさん
19/12/30 19:25:46.59 fFRqMrLq.net
>>486
同じ値を別カウントにするとベラボーに難しいですね
同じ値は1個とカウントして良いです

511:デフォルトの名無しさん
19/12/30 19:25:50.71 2F+fuXCx.net
>>486
数万程度なら、Rで何の工夫もなしに素直に書いても瞬時に求められるな。
URLリンク(ideone.com)

512:デフォルトの名無しさん
19/12/30 19:28:13.92 fFRqMrLq.net
>>496
マジですか・・・すごいです

513:デフォルトの名無しさん
19/12/30 19:31:03.47 fFRqMrLq.net
>>462
そういえばこの問題って.NETのLINQとかJavaのStreamとか
使ってソートすればたぶんヒープが使われて逐次処理が行われるんで
全部の値をソートせずに答えが求められるんじゃないかと思った
ほぼ線形探索

514:デフォルトの名無しさん
19/12/30 19:34:34.59 2F+fuXCx.net
>>486
数列が重複要素可で、>>495の条件で求めるなら、>>496のdの右辺をunique()で囲めば良い。

515:デフォルトの名無しさん
19/12/30 19:38:11.16 JZjS6BbQ.net
>>495
アルゴリズム的にはどっちもかわらん
特定の言語で記述しにくいってことはあるかもしれないけど

516:デフォルトの名無しさん
19/12/30 19:39:21.71 fFRqMrLq.net
>>500
マジですか・・・

517:デフォルトの名無しさん
19/12/30 20:14:35.59 2F+fuXCx.net
>>484
Rのマニュアルを調べたら確かにそういう仕様だね。sort関数のmethod引数で
ソート方式を指定できるが、省略時は2^31要素未満の数値ベクトルに対しては
基数ソート、それ以外に対してはシェルソートが選択されると書かれている。
ということで、method引数を明示的に指定して実行時間を比較してみると、
基数、クイック、シェルソートがそれぞれ50.8, 45.2, 38.2ミリ秒で、基数ソートが
何故か一番遅いな。PCで実行したら基数<クイック<シェルの順だったのに。
RのクイックソートでもC++ STLのsortよりはまだ速い。URLリンク(ideone.com)
二分探索をCで書けば爆速で、実行時間は0.042マイクロ秒。Rの二分探索と3桁違う。
(キャッシュの影響があるのかも知れないが)。URLリンク(ideone.com)
Rの関数はCかFortranで書かれているものが多いが、binsearch関数はRで書かれているし、
戻り値のフラグ判定が文字列照合という非効率な処理だから、二分探索としては
あまり速くない。

518:デフォルトの名無しさん
19/12/30 20:30:55.63 0ybHI6rZ.net
>>492
重複なしなら
縦の数列をハッシュテーブルに入れる
横の数値に対して...
・0 ならスキップ
・面積を横の数値で割った余りが0でないならスキップ
・面積を横の数値で割った値がハッシュテーブルになければスキップ
・カウントアップ
を繰り返せばいいだけだからO(n)
(要するに>>496なんだけど)
重複ありで別カウントならハッシュテーブルの代わりにディクショナリにして値に個数を入れといてカウントアップ時に縦横の個数を掛けたものを加算すればいいだけ

519:デフォルトの名無しさん
19/12/30 20:46:19.63 JZjS6BbQ.net
ハッシュテーブルの検索はオーダー1じゃないと思うんだ

520:デフォルトの名無しさん
19/12/30 21:43:46.47 0ybHI6rZ.net
>>504
実装とかによるけど大抵の実装だとほぼO(1)だよ

521:デフォルトの名無しさん
19/12/30 22:39:47.32 JZjS6BbQ.net
ほぼ1ってなんだよwww
オーダー1の実装だと
値の範囲という別のオーダーが生まれる

522:デフォルトの名無しさん
19/12/30 22:44:20.79 fFRqMrLq.net
>>506
平均のことかと

523:デフォルトの名無しさん
19/12/30 22:53:03.82 JZjS6BbQ.net
ああ平均か
最悪値は非常に悪いよね

524:デフォルトの名無しさん
19/12/30 22:55:25.07 JZjS6BbQ.net
てっきり超巨大ハッシュテーブルを作るのかと思った

525:デフォルトの名無しさん
19/12/30 22:58:46.54 fFRqMrLq.net
たしかにハッシュテーブルの最悪の計算量はO(n)だけれども
そうなることってマレだよ
むかしVBで使われてたScripting.Dictionaryはテーブルサイズが1万固定のようで
それ以上になると計算コストがバク上がりしてた
最近のライブラリだとテーブルサイズが可変になってるので問題ない
あとはWebサービスに対する攻撃としてキーが衝突するデータを大量に送りつけるってのが
数年前に話題になったかな
ハッシュ関数を予測してデータを作為的に作らない限り最悪の計算コストになることはないかと
ハッシュテーブル使うときはO(1)で考えて良いと思う

526:デフォルトの名無しさん
19/12/30 23:12:19.04 p3QJuMJ/.net
Ruby のハッシュでは、データ数と共に、バケット数を増やしていく。
バケット数は、2 の累乗の次に現れる素数。
2^n + a, 2 <= n <= 30
8 + 3 = 11
16 + 3 = 19
32 + 5 = 37
64 + 3 = 67
128 + 3 = 131
256 + 27 = 283
512 + 9 = 521
データ数が、バケット数の5倍を超えると、ハッシュが再構成される。
再構成時には、極端に遅くなる
11 * 5 = 55 だから、データ数が56 個になると、バケット数が19 になる。
19 * 5 = 95 だから、データ数が96 個になると、バケット数が37 になる

527:デフォルトの名無しさん
19/12/30 23:30:39.44 JZjS6BbQ.net
最近は結構インテリジェントに作られてるんだね
unordered_set/map もたまには使ってみようかな

528:デフォルトの名無しさん
19/12/31 07:26:10.17 kRQlhKMg.net
制約論理型言語だと変数の上限下限を自動的に切ってくれる。

529:デフォルトの名無しさん
19/12/31 09:03:13.10 hkax3Wzu.net
お題
フィボナッチ数列のn番目をF(n)とした時
F(F(80))の下位8桁を求めよ
フィボナッチ数列は以下で定義される数列である
F(1)=1
F(2)=1
F(n)=F(n-2)+F(n-1)

530:デフォルトの名無しさん
19/12/31 10:24:38.95 NKLtpqnc.net
>>514
21055810
あってるかな。
フィボナッチ数列は行列を使うアルゴリズムで


531:O(log n)で計算できるもんね。外側の計算はmod100000000 で計算すればいい。



532:デフォルトの名無しさん
19/12/31 12:24:58.82 5aZymNkm.net
>>515
Rは整数が32ビットまでで桁あふれするから、Juliaで書く。
F = Int64[1 1; 1 0]
n = (F ^ 80)[1, 2]
P = Int64[1 0; 0 1]
R = F
while n > 0
  global r = n % 2
  global n = div(n, 2)
  if r > 0
    global P = P * R .% 100000000
  end
  global R = R * R .% 100000000
end
println(P[1, 2])
-- 実行結果 --
21055810

533:デフォルトの名無しさん
19/12/31 12:26:30.15 5aZymNkm.net
>>515じゃなくて>>514だった。

534:デフォルトの名無しさん
19/12/31 13:18:28.06 5aZymNkm.net
>>514
Rでも多桁計算パッケージgmpを使ったら、正しく計算できた。
URLリンク(ideone.com)

535:デフォルトの名無しさん
19/12/31 17:23:41.22 NKLtpqnc.net
>>514
>>516
515です。コード上げてなかった。
URLリンク(ideone.com)

536:513
19/12/31 18:46:25.67 H+c+1UtF.net
>>513
64ビットに収まるようにしたので簡単でしたかね
C++
URLリンク(ideone.com)

537:デフォルトの名無しさん
19/12/31 18:47:43.73 H+c+1UtF.net
>>514でした
すみません

538:デフォルトの名無しさん
19/12/31 19:45:18.11 5fWgt8Ro.net
>>449
URLリンク(ideone.com)
C++。問題勘違いして全探索かいたんだよ〜。
おわらねー。Orz

539:デフォルトの名無しさん
19/12/31 20:25:50.73 W8YPZd1D.net
>>522
100億人に2020になる素数をプレゼント出来そうだ。

540:デフォルトの名無しさん
19/12/31 20:58:55.61 5fWgt8Ro.net
>>523
100億!!???マジで??
そら手に余るわ。教えてくれてありがとう。
プレゼントするときは、「あなたに特別な2020を!」って感じか。

541:デフォルトの名無しさん
20/01/01 07:48:09.89 W9Zu1XGU.net
>>523
素数2個の2020は41人しかあげられない。

542:
20/01/01 12:10:34.36 WIYGoppO.net
あけおめ

543:デフォルトの名無しさん
20/01/01 12:56:41.11 WIYGoppO.net
お題
a^n + b^n + c^n = 2020
の整数解のうちnが最大の物を求めよ

544:
20/01/01 15:06:53.67 /JBKhr80.net
あけおめ〜

545:デフォルトの名無しさん
20/01/01 15:29:53.46 qVK/11PV.net
A HAPPY NEW YEAR !!!
というコード。

546:デフォルトの名無しさん
20/01/02 04:45:53.28 cCzcmPOa.net
>>451

547:デフォルトの名無しさん
20/01/02 14:00:53.09 2eGsq/cP.net
(´;ω;`)

548:デフォルトの名無しさん
20/01/03 03:43:04.42 ct9N0pK8.net
お題
a^3 + b^3 + c^3 = 2020 * 2
の整数解を求めよ。

549:デフォルトの名無しさん
20/01/03 03:49:51.76 ct9N0pK8.net
追加
a^3 + b^3 + c^3 = 2020 / 2・2
の整数解を求めよ。

550:デフォルトの名無しさん
20/01/03 03:54:35.20 pVliia9g.net
>>486
Kotlin
URLリンク(paiza.io)
こんなので良いの?単に掛け算して一致するか比較しているだけなんだけど。
オマケとして重複しないようにはしているが。

551:デフォルトの名無しさん
20/01/03 04:17:21.42 pVliia9g.net
>>532
C
URLリンク(paiza.io)
どう?

552:デフォルトの名無しさん
20/01/03 04:18:44.02 pVliia9g.net
>>533
最後の 2・2 の部分って何? 2.2? こっちで文字化けしてちゃんと表示されてないだけ?

553:デフォルトの名無しさん
20/01/03 09:45:42.54 +RiBlMC+.net
>>536
2020 / 2・2 = 2020 / 2 * 2 = 2020

554:デフォルトの名無しさん
20/01/03 12:48:37.25 3k7MKqlh.net
>>532
200万以下だと38通り
(並び替えも数えるとその6倍)
>>533
2020は解無し
1010は100万までには解は無い
505は100万までに18個

555:デフォルトの名無しさん
20/01/03 12:51:02.88 3k7MKqlh.net
>>527
n乗して64bitの範囲だとn=2しか発見出来なかった

556:デフォルトの名無しさん
20/01/03 20:05:33.33 3k7MKqlh.net
>>532
C
URLリンク(ideone.com)
38個見つけるのに1時間くらいかかりました
38個目 (1661082, 440694, -1671358)
こういうのはC/C++が得意でしょう
他の言語で出来ます? (挑戦)

557:デフォルトの名無しさん
20/01/04 17:22:50.50 HJ66bOYq.net
お題
>>514に関連して、F(F(80))の桁数を求めよ。
計算式は簡単だが…

558:デフォルトの名無しさん
20/01/04 17:47:47.60 6lKY6ugm.net
over flow周りはあってるんだかわからん
URLリンク(i.imgur.com)

559:デフォルトの名無しさん
20/01/04 19:01:02.66 hAlxX0tq.net
Mathematica ?

560:デフォルトの名無しさん
20/01/04 20:28:18.17 rMjoeVI8.net
お題: 文字列を逆順にしてコピーするreverse関数を定義せよ(既存のライブラリを使ってはならない)

561:デフォルトの名無しさん
20/01/04 20:40:17.01 YRTK1M0u.net
>>544 Ruby
puts 'ABCDEF'.chars.then{|a| a.size.times.map{a.pop}}.join
# => FEDCBA

562:デフォルトの名無しさん
20/01/04 20:46:16.21 HJ66bOYq.net
>>544 PowerShell
function reverse($s) {-join $s[-1..-$s.length]}
reverse 文字列を逆順にしてコピーするreverse関数を定義せよ
-- 実行結果 --
よせ義定を数関esreverるすーピコてしに順逆を列字文

563:デフォルトの名無しさん
20/01/04 21:12:58.70 AqMdau2S.net
>>544 Ruby
def reverse( s ); s.chars.inject(:prepend); end

564:デフォルトの名無しさん
20/01/04 21:13:39.03 rMjoeVI8.net
>>544 C
URLリンク(ideone.com)

565:デフォルトの名無しさん
20/01/04 21:26:02.66 e7dEja3I.net
>>544
Java
URLリンク(paiza.io)

566:デフォルトの名無しさん
20/01/05 00:51:01.04 Y4p4/H36.net
>>544
Kotlin
URLリンク(paiza.io)
Kotlin の String には reversed() という文字列順序逆転のための拡張関数が最初からあって紛らわしいので rev() という名前で自作した。

567:デフォルトの名無しさん
20/01/05 08:25:52.70 h+ccWvVu.net
>>532
 {a, b, c} = {-12, -4, 18} {-4, 2, 16} など
>>533
 {a, b, c} = {-6, -2, 9} {-2, 1, 8} など

568:デフォルトの名無しさん
20/01/05 08:35:04.57 OU8kozEP.net
>>544 Ruby
def rev(s)
(1..s.size).map{|i|s[-i]}.join
end

569:デフォルトの名無しさん
20/01/05 11:04:36.67 Z8HxF2cT.net
>>544 Common Lisp
URLリンク(ideone.com)
URLリンク(ideone.com)

570:デフォルトの名無しさん
20/01/05 15:25:24.03 +tGOF19X.net
>>544 Python
def reverse(s):
return s[::-1]

571:デフォルトの名無しさん
20/01/05 16:01:41.83 8nvrboOv.net
>>540
こういうのを見ると我々は離散数学についてはほぼ無力と思う。

572:デフォルトの名無しさん
20/01/05 17:02:46.74 x729cdax.net
>>555
勉強しとけ

573:デフォルトの名無しさん
20/01/05 21:49:56.17 2Fq0AHrI.net
>>544 R
URLリンク(ideone.com)
>>546のPowerShellと違って、U+10000以上の文字が含まれていても正しく逆順にできる。

574:デフォルトの名無しさん
20/01/05 21:52:10.17 2Fq0AHrI.net
>>542
仮数部も指数部も間違っている。整数で1の位まで正確に求められるよ。

575:デフォルトの名無しさん
20/01/05 22:31:31.58 h+ccWvVu.net
>>540 サンクス
>>532 の解
{13, 11, 8}
{15, 9, -4}
{8, 1, -2} * 2
{9, -2, -6} * 2
{16, -6, -15} * 2
{74, -23, -73}
{43, -27, -39} * 2
{171, -75, -166}
{169, 64, -172} * 2
{516, 93, -517}
{414, 385, -504} * 2
{530, 337, -572}
{1098, 939, -1291}
{1290, 171, -1291}
{1626, -957, -1507}
{2251, -712, -2227}
{3107, -587, -3100}
{3299, 1018, -3331}
{3509, -2525, -3004}
{4022, -3163, -3221}
{2673, 1114, -2736} * 2
{13571, -9259, -11948}
{15291, -8419, -14388}
{10102, 674, -10103} * 2
{43943, 28524, -47631}
{23689, -3382, -23666} * 2 など。

576:デフォルトの名無しさん
20/01/05 22:41:01.23 h+ccWvVu.net
>>533 の解
{8, 1, -2}
{9, -2, -6}
{16, -6, -15}
{43, -27, -39}
{169, 64, -172}
{414, 385, -504}
{530, 337, -572}
{2673, 1114, -2736}
{10102, 674, -10103}
{23689, -3382, -23666}
 ・・・ ・・・
{830541, 220347, -835679} など。

577:デフォルトの名無しさん
20/01/05 22:48:30.69 bLPoA6E7.net
>>541
C++
URLリンク(ideone.com.VJk9QA)
倍精度だと微妙に精度が足りないので
擬似4倍精度で計算してみた
4倍精度や多倍長が使える言語やライブラリを使えば一瞬で書けるんだけど

578:デフォルトの名無しさん
20/01/05 22:49:34.33 bLPoA6E7.net

URLリンク(ideone.com)
でした

579:デフォルトの名無しさん
20/01/05 23:29:51.01 2Fq0AHrI.net
>>562
正解。
Rには多倍長浮動小数点パッケージRmpfrがあるので、120ビット精度での計算をさっと書ける。
多倍長整数パッケージgmpにはフィボナッチ数列の第n項を求める関数があるので、第80項を
自分で求める必要すらない。
URLリンク(ideone.com)
C/C++にもlong double型があるので楽勝!と思っていると罠に嵌まる。Visual C++では
long doubleは移植性(単にコンパイルが通るという意味で)のために定義されているだけで、
double精度しかないので使えない。GNU C++ではlong doubleが本当のlong doubleなので使える。
URLリンク(ideone.com)
これをVisual C++やGNU Cで実行すると、1の位が2大きい不正確な値が表示されてしまう。
URLリンク(ideone.com)

580:デフォルトの名無しさん
20/01/05 23:41:09.00 2Fq0AHrI.net
GNU C++にも罠があって、URLリンク(ideone.com) はideoneでは結果が正しく
表示されているが、Windows版でコンパイルすると「-0桁」になってしまう。
printfの%Lf書式指定子が何故か正常に機能しないようなので、long longに変換して
%lld書式指定子を使う必要がある。

581:デフォルトの名無しさん
20/01/05 23:58:45.24 Z3Lsb/Mg.net
>>562は擬似4倍精度の四則演算やルートがコンパクトにまとまっており参考になるかと思います
logは手抜きですが

582:デフォルトの名無しさん
20/01/06 00:24:13.90 MKFPBGLf.net
x87の80bit形式久々に聞いた
intelの失敗仕様
本当のlong doubleって言ったら128bitの事だと思う

583:デフォルトの名無しさん
20/01/07 12:16:08 lAASQTDH.net
本当の?

584:デフォルトの名無しさん
20/01/07 13:02:38.21 PuPIfAOU.net
大きさと精度が一致しないということでは。
例えば、16ビット整数の加算において255+1で桁あふれが発生するのは、勘弁してほしい。
16ビット整数であれば精度も16ビットあってほしい。

585:デフォルトの名無しさん
20/01/07 13:13:00.08 4oL1Xwrc.net
intelの拡張小数は箱も中身も80bitだぞ
隠れた1bitも隠さないから中身は79bitとも言えるかもしれないけど

586:デフォルトの名無しさん
20/01/07 13:43:12.96 PuPIfAOU.net
GCCのlong doubleは128ビットあるから。

587:デフォルトの名無しさん
20/01/07 22:24:41.07 Y9qs9jpB.net
ひさびさにx87命令を使ってみた
masm形式なのでideoneでは動作しませんが
URLリンク(ideone.com)

588:デフォルトの名無しさん
20/01/07 22:38:44.27 Y9qs9jpB.net
↑の出力結果
4893806799921043 (4893806799921042 + 0.855469)
丸める前の正確な値は
4893806799921042.8564973677594677....
なので小数第二位まで合っています
80bitでもギリギリって感じ
2進数だと
上位62bitまで正確、下位2bitが計算誤差
ということになります

589:デフォルトの名無しさん
20/01/07 23:09:32 Y9qs9jpB.net
URLリンク(pc.watch.impress.co.jp)

590:デフォルトの名無しさん
20/01/08 17:55:41.24 E2HYW9Z+.net
お題
フィボナッチ数列のn番目をF(n)とした時
F(F(F(80)))の下位4桁を求めよ
フィボナッチ数列は以下で定義される数列である
F(1)=1
F(2)=1
F(n)=F(n-2)+F(n-1)

591:デフォルトの名無しさん
20/01/08 18:47:53.52 bVQLyL/p.net
フィフィフィボナッチ数列はお腹いっぱい

592:
20/01/08 19:48:23.85 npJkZznC.net
>>571
x87 すごくいいです!私も 9801FA に i487SX をようやく搭載して準備完了です!

593:デフォルトの名無しさん
20/01/08 20:00:11.84 naqRCa+g.net
お前は昭和何年からタイムスリップしてきたんだ

594:デフォルトの名無しさん
20/01/08 20:33:31.36 DEoUiUkq.net
>>574
R
URLリンク(ideone.com)

595:デフォルトの名無しさん
20/01/08 21:16:17.44 E2HYW9Z+.net
正解
C++
URLリンク(ideone.com)

596:デフォルトの名無しさん
20/01/08 23:38:33.13 3Vg9kR1l.net
>>544 Perl5
use feature qw{say signatures};
sub reverse($s) {
 map {substr $s, -$_, 1} 1..length $s;
}
say &reverse('reverse');

597:デフォルトの名無しさん
20/01/10 10:41:25.62 lJ/gG0sx.net
お題:自分用expm1()的なもの。底はe以外でも良い。不正な引数でのエラー処理は
考慮しなくても良い。

598:デフォルトの名無しさん
20/01/10 13:20:18.79 KXQq2+DU.net
目的が高精度なのかSIMDなのか単に出題者が勉強したいだけなのか
もしかしてx87命令を使わせたい?

599:デフォルトの名無しさん
20/01/10 20:53:23.97 1usNcOvE.net
>>581
expm1()って何?

600:デフォルトの名無しさん
20/01/10 21:01:53.36 jjOShzcG.net
エキスペディション・マグニチュードワンのことやろな

601:581
20/01/10 22:06:13.03 lJ/gG0sx.net
>>582
SIMDやx87命令は考えてませんでした。
四則演算とexpm1()以外のライブラリ関数は使用可って事で。
やっぱし無難にテイラー展開で求めるのが楽?
>>583
例えば
URLリンク(linuxjm.osdn.jp)

602:デフォルトの名無しさん
20/01/10 22:10:45.27 lApN4p1F.net
四則演算も使ったらダメなのかい

603:581
20/01/10 22:42:31.47 lJ/gG0sx.net
>>586
訂正:
四則演算と、「expm1()以外の」ライブラリ関数は使用可

604:デフォルトの名無しさん
20/01/11 06:32:12.11 wIXPHQcF.net
出題者が方法を知りたいだけだよね?
なら質問スレ/宿題スレの方が適切

605:デフォルトの名無しさん
20/01/11 09:22:26.15 R1f0qLP3.net
お題
素数番目の素数をスーパー素数と言う。
スーパー素数の最初の100個を求める。

606:デフォルトの名無しさん
20/01/11 10:27:02.77 LQrvWU7L.net
>>589 Ruby 2.7.0
require 'Prime'
p Prime.take(100).then{|p| Prime.take(p.last).select.with_index{p.include?(-~_2)}}
# => [3, 5, 7, [中略], 3761, 3911]

607:デフォルトの名無しさん
20/01/11 10:31:32.27 LQrvWU7L.net
typo
# => [3, 5, 11, 17, 31, [中略], 3733, 3761, 3911]

608:デフォルトの名無しさん
20/01/11 10:52:09.93 VG9fEjGe.net
お題
5の倍数の素数を5の倍数素数という
5の倍数素数を全て求めよ

609:デフォルトの名無しさん
20/01/11 11:10:43.29 V+Dyph4l.net
5の倍数の素数ってどういうことですか?
文字通りの意味なら5だけだと思うんですけど

610:デフォルトの名無しさん
20/01/11 13:10:43.10 JM9/51Sk.net
>>544 Perl4
use feature qw{say signatures};
sub rev($s) {
 $s ne '' and substr ($s, -1, 1, '') . rev($s)
}
say rev('string


611:'); てす



612:デフォルトの名無しさん
20/01/11 13:14:26.71 JM9/51Sk.net
>>594 Perl5 だった…orz
しかし、このソースの「substr (」のrと(の間のスペース文字を省くと
スレへの書き込みで
HTTP/1.1 403 Forbidden
が起きて書き込めなかったのは謎…

613:デフォルトの名無しさん
20/01/11 14:01:21.01 M68szGrA.net
>>592
echo 5

614:デフォルトの名無しさん
20/01/11 20:08:39.02 go77StkR.net
お題
20200111の階乗を素因数分解したとき、すべての因数の積は20200111の階乗だが、
すべての因数の和は何か。

615:デフォルトの名無しさん
20/01/11 20:55:04.41 r5wulSj/.net
ナベアツ理論か。

616:デフォルトの名無しさん
20/01/12 00:39:46.42 PW2KE/yt.net
>>595
書き込めないコマンドは、一杯ある。
「ls −l」とか
5ch は、特定の命令によって、表示の見た目を変えることができるから、
単に、表示する文字列に変換するだけじゃなくて、
投稿されたテキストから、命令を抽出したりしているから、
バグりそうなテキストを排除しているのだろう

617:デフォルトの名無しさん
20/01/12 10:30:24.93 Cuf7XVQy.net
>>597
C++
URLリンク(ideone.com)

618:デフォルトの名無しさん
20/01/12 16:28:53.41 Svv4a/Ag.net
お題: バイナリ―サーチを実装せよ(自分の記憶だけで書かなければならない)

619:デフォルトの名無しさん
20/01/12 16:52:57.01 qRMFtMw7.net
>>601
Java
URLリンク(paiza.io)

620:デフォルトの名無しさん
20/01/12 17:33:54.06 kqg5PnqA.net
>>601 Ruby
def bs(ary, &cond)
  return ary[0] && cond.call(ary[0]) ? ary[0] : ary[1] && cond.call(ary[1]) ? ary[1] : nil if ary.size < 3
  mid = ary.size / 2
  bs(ary[cond.call(ary[mid]) ? 0..mid : mid + 1..-1], &cond)
end
p bs([1,3,5,7,9]){|i| i > 0} # => 1
p bs([1,3,5,7,9]){|i| i > 3} # => 5
p bs([1,3,5,7,9]){|i| i > 9} # => nil

621:
20/01/12 17:39:35.02 ZvwnN6DP.net
>>601
C++
スレリンク(tech板:33番)
std::set<int> の再実装にて、内部にバイナリーサーチを含んでいます

622:
20/01/12 17:41:03.57 ZvwnN6DP.net
>>601
>(自分の記憶だけで書かなければならない)
これは重要かつ役に立つ訓練のしかたですね、この前は pthread の mutex と cond が理解できているかどうかを、この縛りのもとにコードを書いて試みました

623:デフォルトの名無しさん
20/01/12 18:20:53.87 Xff8C4Cf.net
>(自分の記憶だけで書かなければならない)
お題は全てそういうものだと思ってたが
みんなカンニングして回答してるの?

624:デフォルトの名無しさん
20/01/12 19:59:45.88 qRMFtMw7.net
お題1
10ビットの乱数を10個作成して
2進数に変換して出力してください
10ビットに満たない数は0埋めしてください
例)
1101101110
1000100011
0100111001
1110000001
1001001100
0010001111
1111001000
1010110111
1100001001
0100110111
お題2
縦方向、または、横方向に1が連続しているところを調べて
最も1が連続しているところの1の数を出力してください
ビット数や乱数の数が増えてもちょっぱやで処理できるとなお良いです

625:デフォルトの名無しさん
20/01/12 20:38:11.83 xWFTg64o.net
>>600
正解。あなたには簡単すぎただろうが。
Rで書いた解答例はPCでは2秒台で実行できたのに、ideoneでは制限時間5秒以内に
終わらなかったので、C++で書いた方を貼る。URLリンク(ideone.com)
>>600とほぼ同じだが、掛け算が減る分だけ速いな。

626:デフォルトの名無しさん
20/01/12 21:27:08.47 xWFTg64o.net
>>607
R
URLリンク(ideone.com)

627:デフォルトの名無しさん
20/01/12 21:44:57.86 qRMFtMw7.net
>>609
ありがとうございます、そして申し訳ないです
11
11
こうなってたら4と出力してほしくて
連続じゃないですね、隣接といえばよかったかもしれません
縦方向、横方向に1が隣接してる領域のうち最大の領域の1の数を出力して欲しいのです

628:デフォルトの名無しさん
20/01/12 21:45:02.91 xWFTg64o.net
>>607
ビット数と乱数の数を別々に指定できるように訂正
URLリンク(ideone.com)

629:デフォルトの名無しさん
20/01/12 21:48:51.97 qRMFtMw7.net
すみません・・・平にご容赦いただきたく

630:デフォルトの名無しさん
20/01/12 21:48:57.49 xWFTg64o.net
>>610
隣接している領域は矩形でなければいけないのか、そうでなくても良いのか。例えば、
1110
0110
0111
は前者なら6個で、後者なら8個になる。

631:デフォルトの名無しさん
20/01/12 21:52:58.77 qRMFtMw7.net
>>613
矩形じゃなくていいです8個パターンです!

632:デフォルトの名無しさん
20/01/13 04:22:53 5GjUS2iX.net
質問なら質問スレに
宿題なら宿題スレに

回答を用意してない出題は禁止

633:デフォルトの名無しさん
20/01/13 04:47:28.11 5GjUS2iX.net
昔ながらのPAINTアルゴリズム
検索すれば色々と出てくるよ

634:デフォルトの名無しさん
20/01/13 05:51:52.90 9cAJpR6a.net
>>589 J
smoutput 10 10 $ p: <: p: i.100
実行結果
3 5 11 17 31 41 59 67 83 109
127 157 179 191 211 241 277 283 331 353
367 401 431 461 509 547 563 587 599 617
709 739 773 797 859 877 919 967 991 1031
1063 1087 1153 1171 1201 1217 1297 1409 1433 1447
1471 1499 1523 1597 1621 1669 1723 1741 1787 1823
1847 1913 2027 2063 2081 2099 2221 2269 2341 2351
2381 2417 2477 2549 2609 2647 2683 2719 2749 2803
2897 2909 3001 3019 3067 3109 3169 3229 3259 3299
3319 3407 3469 3517 3559 3593 3637 3733 3761 3911

635:デフォルトの名無しさん
20/01/13 09:11:38.57 a0NWv3WS.net
>>607はAOJにあった島の数の問題じゃないの
そうじゃなくてもぷよぷよは大抵コレでしょ

636:デフォルトの名無しさん
20/01/13 12:20:35.97 AM9JqLhx.net
>>607
>>615だそうだが、既にほぼ書いてしまっていたから、完成させたのを載せる。
R
URLリンク(ideone.com)

637:デフォルトの名無しさん
20/01/13 14:02:08.92 7B3b+WrT.net
>>607
Java
URLリンク(paiza.io)
回答は一応用意してました
みんなUnionFind大好きだと思ったんだけど

638:デフォルトの名無しさん
20/01/13 18:55:55.99 7n+Qr/32.net
>>566
>>569
8087は、第3の実数フォーマット、一時実数を許している点でユニークである。
このフォーマットは、(符号が1ビット)、指数が15ビットで、有効数字が64ビットである。
このフォーマットで格納されている数値は、拡張精度数と言われている。
単精度および倍精度実数と異なり、一時実数は入力および出力値を表わすことを意図していない。
・・・・(中略)・・・・・
それでは、何故80ビットではなく4倍精度すなわち128ビットを一時実数に使わなかったのか。
1つの理由は、4倍精度は少なくとも性能(速度)が半分になることである。
他の理由は、4倍精度を基本フォーマットとして用いると、中間結果のためにより長いフォーマットが必要となることである。
(後略)
・出典
J.F.パーマー・S.P.モース(著)「8087入門」啓学出版 (1985/Feb) 御牧 義 (訳) 


639:2900円   第2章 データフォーマット、p.19-20



640:デフォルトの名無しさん
20/01/13 19:02:27.52 7n+Qr/32.net
John F. Palmer, Ph.D. は8087の設計者、
Stephen P. Morse, Ph.D. は8086の設計者だそうな。

641:デフォルトの名無しさん
20/01/13 19:38:23.04 cBNIohlK.net
x87で遊んでた頃は
将来は4倍精度とか8倍精度とかが当たり前になると思ってたけど
まさか単精度や半精度の時代になるとは

642:デフォルトの名無しさん
20/01/14 21:06:38.50 vjAz2zAO.net
>>581
AVX2 & FMA で作ってみました
URLリンク(ideone.com)
範囲チェックはしてません

643:デフォルトの名無しさん
20/01/14 21:13:25.69 vjAz2zAO.net
20命令で4個のdoubleのexpm1の計算が出来ます
8パラにしてレイテンシを隠蔽すれば
1個あたり2.5クロックくらい

644:デフォルトの名無しさん
20/01/15 12:05:09.83 z1LU+PP1.net
将来、行列演算もFPU化されると、逆行列の桁落ちが問題になるだろうな・・・・
それを見越して、入出力は64bitのまま内部演算だけ80bitにしたんぢゃね?

645:デフォルトの名無しさん
20/01/15 13:12:03.91 BnAK3ul/.net
思想がどんなに優れてても使われなきゃしょうがない
レジスタが8個しか無いから内部だけ80bitでもほとんど精度改善にならないし
メモリに80bit保存するのも使いにくい
互換性の問題もあって
コンパイラや最適化で値がかわってしまうのも都合が悪い
だから演算にx87命令を使ったとしても内部64bit精度がデフォ
x87全盛期に作られたSuperPIも64bit精度の演算を使ってる
80bit精度で計算すれば速度アップ出来るにも関わらず

646:デフォルトの名無しさん
20/01/15 17:38:16 xp2qVCg5.net
>>589 Ruby
require 'prime'
a=Prime.take(100)
p ([0]+Prime.take(a.last)).values_at(*a)

647:デフォルトの名無しさん
20/01/15 21:04:20.76 /kpg6gtq.net
お題:
9つの物がある。
重さが20以下で価値の合計が最大になる組み合わせを求めなさい。
(Part7から再出)
[重さ, 価値]
[
[3, 5],
[5, 6],
[6, 3],
[3, 5],
[5, 9],
[2, 1],
[7, 5],
[4, 6],
[8, 3],
]

648:デフォルトの名無しさん
20/01/15 21:18:06.99 1ZW9vAE3.net
ナップサック問題か

649:デフォルトの名無しさん
20/01/15 21:27:46 woCrNz65.net
重さ < 価値
となる物を集めると丁度重さが20だから
これが解

650:デフォルトの名無しさん
20/01/16 21:02:25 ZS18thyn.net
【お題】以下の31個の数の下6桁を求めよ。

20200101の1, 2, 3, ..., 20200101乗の総和
20200102の1, 2, 3, ..., 20200102乗の総和
20200103の1, 2, 3, ..., 20200103乗の総和
 :
20200131の1, 2, 3, ..., 20200131乗の総和

651:デフォルトの名無しさん
20/01/17 06:54:23.06 bFwt3c1k.net
>>626
逆行列の計算は避けた方がいいってえらいひとがゆってた
URLリンク(www.kyoritsu-pub.co.jp)

652:デフォルトの名無しさん
20/01/17 12:14:19.25 onsz9c/m.net
>>629
16, 7: 0 0 1 0 0 1 0 0 1
17, 9: 0 0 0 0 0 1 1 0 1
18, 26: 1 1 0 1 1 1 0 0 0
19, 27: 1 1 0 0 1 1 0 1 0
20, 31: 1 1 0 1 1 0 0 1 0

653:デフォルトの名無しさん
20/01/17 18:26:22.50 KcAYJrW8.net
>>632
C++
URLリンク(ideone.com)

654:デフォルトの名無しさん
20/01/17 20:33:32 VgNyCBhj.net
>>635
正解。

Rによる2種類の解答例
(1) URLリンク(ideone.com)
(2) URLリンク(ideone.com)

(1)は等比数列の総和の公式を利用しているので分かりやすいが、途中計算の最大値が
(20200130 * 1000000 - 1) ^ 2 ≒ 2 ^ 88.4 になるかも知れず、64ビット整数の
範囲に収まらないため、Cでは手軽に書けない。Rでは多倍長整数パッケージgmpを
使って書ける。

(2)は部分和をちまちま足していく方式で、途中計算の最大値が (1000000 - 1) ^ 2
≒ 2 ^ 39.9 で済むため、Cでも64ビット整数で計算できる。Rでも多倍長計算が必要な
(1)より速い (正味の実行時間が(1)は0.016秒、(2)は0.004秒)。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1215日前に更新/270 KB
担当:undef