[過去ログ] プログラミングのお題スレ Part18 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
703(1): 2020/10/17(土)01:58 ID:S6LboNFt(1/3) AAS
>>695 Ruby
n = 20201016
nl = 0
while n > 0
nl = ((nc = (n.odd?)? nc + 1 : 0) > nl)? nc : nl
n >>= 1
end
puts nl
704(2): 2020/10/17(土)01:59 ID:u2s9P3C4(2/2) AAS
>>702
125の時1になった
705: 2020/10/17(土)02:41 ID:AbkDXvLA(1) AAS
これだからQZ
706: ◆QZaw55cn4c 2020/10/17(土)02:53 ID:4JRxXuyk(2/2) AAS
>>695
C++: 外部リンク:ideone.com
>>702 にはロジックに欠陥がありました
>>704
ご指摘ありがとうございます。
707: 703 2020/10/17(土)09:22 ID:S6LboNFt(2/3) AAS
>>704
自分の >>703 も
- nl = 0
+ nc = nl = 0
708: 2020/10/17(土)12:19 ID:a+zi+w45(1) AAS
>>695 C++
外部リンク:wandbox.org
709: 2020/10/17(土)13:46 ID:eBu6AjRf(1) AAS
>>695 C
外部リンク:ideone.com
710(5): 2020/10/17(土)18:57 ID:S6LboNFt(3/3) AAS
>>695 Ruby
n = 20201016
i = 0
while n != 0
n &= n << 1
i += 1
end
puts i
711: 2020/10/17(土)19:11 ID:wXdm0x1E(1/2) AAS
>>710
うまいやり方だな。それには気付かなかった。
712: 2020/10/17(土)19:29 ID:wXdm0x1E(2/2) AAS
>>695
Kotlin script
2進数文字列に変換してから 0 を区切り文字にして分割してその中の一番長い文字列の長さを出すというやり方。
fun max1(n: Int) = n.toString(2).split('0').map { it.length }.max()
println(max1(20201016))
これで 5 が出る。
省3
713: 2020/10/17(土)20:05 ID:vimxgZ9f(1) AAS
>>695 JavaScript
let num = 20201016
let ans = num.toString(2).split`0`.sort().pop().length
console.log(ans) //=> 5
714: 2020/10/17(土)20:50 ID:w8j3NnhR(1) AAS
>>695 octave
外部リンク:ideone.com
f = @(n) max(cellfun(@numel, strsplit(dec2bin(n), '0')));
f(20201016)
715: 2020/10/17(土)20:54 ID:frzgm+pU(1) AAS
>>695
Perl
外部リンク:paiza.io
716: 2020/10/17(土)23:22 ID:P3PLPttw(1) AAS
いつもRubyの人からなにかしら学ぶことがある
717: 2020/10/18(日)00:42 ID:nYmbGZmV(1) AAS
ハトにエサを与えないで下さい
718: 2020/10/18(日)01:06 ID:qT62bbHa(1) AAS
QZは自分の頭が悪いのをわざわざ周知してもらうためにクソコードを晒すのか
ドMだな
719: 2020/10/18(日)03:42 ID:DpwMGaW+(1) AAS
>>710
なるほどな、感心した
n>>1でもいいわけだな
720: 2020/10/18(日)04:21 ID:xWXtsYNK(1) AAS
>>700 のほうが速いと思うが
721: 2020/10/18(日)04:36 ID:F/EhVBet(1/3) AAS
rubyよく分からないけど>>710の方が100倍くらいは速そうに思える
722: 2020/10/18(日)05:53 ID:28u9FaXE(1) AAS
うん。速そうだね。数値計算しかしてないし。
723(1): 2020/10/18(日)10:06 ID:ARbR7jXS(1) AAS
20201016みたいに桁数が少ないならそうだけど桁数が増えるとルーブが答え×桁数回だからアルゴリズムそのものは遅い
桁数が少ないうちは内部関数しか使ってない利点で早いとは思うけど
724(3): 2020/10/18(日)12:07 ID:GUbLWvo/(1) AAS
>>723
>>700,710 をベンチマークで比較してみた
外部リンク:ideone.com
外部リンク:ideone.com
20201016 では 5~6倍
巨大な数だと 7000倍以上
725: ◆QZaw55cn4c 2020/10/18(日)15:53 ID:xUpUEWAV(1) AAS
>>693
残念ながら、私の出題もイマイチ人気がありませんでした‥‥
726: 2020/10/18(日)21:20 ID:wanN/5Zd(1/4) AAS
>>685
Java
外部リンク:paiza.io
727: 2020/10/18(日)21:43 ID:wanN/5Zd(2/4) AAS
>>669
Java
外部リンク:paiza.io
728: 2020/10/18(日)22:06 ID:wanN/5Zd(3/4) AAS
>>667
Java
外部リンク:paiza.io
729: 2020/10/18(日)22:14 ID:wanN/5Zd(4/4) AAS
>>695
Java
外部リンク:paiza.io
730(1): 2020/10/18(日)22:45 ID:F/EhVBet(2/3) AAS
>>724
x = n
while x != 0
x &= x << 1
i += 1
end
ruby知らないから適当に書いたけど
こんな感じにしないと二回目以降nが0でやってるっぽい
こうすると22倍くらいの差だった
731: 2020/10/18(日)22:54 ID:F/EhVBet(3/3) AAS
連続してるビット数が多いときはこの方が速くなったけど
すごいごちゃごちゃになった
i = 0
s = 1
x = n
while x != 0
t = x & (x << s)
if t == 0 then
if s == 1 then
i += 1
省9
732: 2020/10/18(日)22:56 ID:QW0aA1Hz(1) AAS
>>724
GJ
733(1): 2020/10/19(月)06:30 ID:8QFJcUQW(1) AAS
>>695
echo "obase=2; 20201016" | bc | sed 's/./&\n/g' | uniq -c | perl -lane 'if ($M < $F[0]) {$M = $F[0]}; END{print $M}'
5
734: 724 2020/10/19(月)15:26 ID:u+lqDWSF(1) AAS
>>730
ご指摘の通りでした
外部リンク:ideone.com
を修正しました
>>710 は 1の連続が多いと弱いですね
735(3): 2020/10/19(月)17:41 ID:Sd7Rn+fr(1) AAS
お題
2^(1/3)を百桁表示せよ
出力
1.2599210498948731647672106072782283505702514647015079800819751121552996765139594837293965624362550941543102560356156652593990240
参考
a(n+3) = 3*a(n+2) + 3*a(n+1) + an
a(1) = 3, a(2)=3, a(3)=15
で決まる数列について
min (a(n)/a(n+1), a(n+1)/a(n+2), a(n+3)/a(n+3) )
. < 2^(1/3)-1
省2
736(1): 2020/10/19(月)21:36 ID:gq9726ze(1/2) AAS
>>733
echo "obase=2; 20201016" | bc | sed 's/0\+/\n/g' | wc -L
でよくね?
737: 2020/10/19(月)22:00 ID:gq9726ze(2/2) AAS
>>735 Bash
$ echo "scale=100;e(l(2) / 3)" | bc -l
1.25992104989487316476721060727822835057025146470150
79800819751121552996765139594837293965624362550940
738: 2020/10/19(月)22:30 ID:14xSvmON(1) AAS
>>735 dc
dcには平方根の演算子はあるが立方根はないので
c^(1/3) = sqrt(c/sqrt(c/sqrt(c/...)))
と変形して適当に反復
100k[2z333>av/]dsaxp
1.2599210498948731647672106072782283505702514647015079800819751121552\
996765139594837293965624362550941
739: 2020/10/19(月)23:54 ID:mPlPc+C9(1) AAS
>>735
参考を誰も参考にしてくれないのにワロタ
参考を元に作ったコード
Haskell
外部リンク:ideone.com
ちなみにrubyのpi.rbが同じテクニック使ってます
そっちは定数係数でない三項間関係の漸化式パージョン
740: 2020/10/20(火)02:36 ID:gFGmv7lM(1) AAS
>>736
たしかに
741: 2020/10/20(火)04:08 ID:Mf7a0fdE(1) AAS
おっせえじゃん
742(7): 2020/10/20(火)21:07 ID:hsuNVmIy(1) AAS
お題:ぼくがかんがえたさいきょうのちょうわへいきん
2変数調和平均 f(x, y) = 2 / (1 / x + 1 / y)
但し xまたはyがゼロの時、f(x, y) == 0
の計算を考える。
Cのdoubleに相当する精度で計算する際に、理論値(≒多倍長精度で計算したものを
double相当に丸めたもの)と一致しない割合(エラー率)をモンテカルロ法で求めよ。
x, yは、正規分布N(0, 1)の絶対値に従うものとする。
発展的なお題:
前掲の調和平均の式を変形し、エラー率の変化を調べよ。例えば、
f(x, y) = 2 * x * y / (x + y)
省5
743: 2020/10/22(木)01:17 ID:rA+WIIWx(1) AAS
...but nobody answered
744(1): 253 2020/10/23(金)09:17 ID:7L0FHKID(1) AAS
正規乱数をモンテカルロ法で算出して
doubleと多倍長浮動小数点でそれぞれ計差した2変数調和平均に
差がある率を求めれば良いの?
正規乱数なら書かなくともライブラリにあるんだよね。
あるいは誤り率の計算そのものにモンテカルロ法を使うようなやり方なのかな
745: 2020/10/23(金)14:48 ID:oxO2c12D(1) AAS
次のプリーズ
746(3): 2020/10/23(金)20:02 ID:Vzf4XOui(1) AAS
お題
乱数を使ってシミュレーションしてください
ジョーカーを除くトランプ52枚から1枚抜き取って箱に入れました
その後、残った51枚から3枚引いて確認したら3枚ともダイヤでした
では最初に抜き取った箱の中が1枚がダイヤである確率はいくらか?
747: 2020/10/23(金)20:27 ID:LovVc5SM(1/2) AAS
>>746 Ruby
DECK = [*0..51]
def hoge
a, *b = DECK.sample(4) until b&.all?{|v| v % 4 == 0}
a % 4 == 0
end
def fuga(n)
1.0 * n.times.count{hoge} / n
end
p fuga(1e6) # => 0.20414
省1
748: 2020/10/23(金)20:46 ID:LovVc5SM(2/2) AAS
途中で送信してしまった
99%信頼区間は 0.20414±0.0010382 => [0.2031018, 0.2051782]
理論値は 10/49 = 0.20408163265306123
749: 2020/10/23(金)20:49 ID:5NWyTruo(1) AAS
確認前後での確率変動を出せ、っていうお題じゃねえのコレ
750(2): 2020/10/24(土)01:58 ID:6bv42JD2(1) AAS
お題
ジョーカー除く52枚のカードがある
スートを表すS,H,D,Cと、A,K,Q,J,X,9,8,7,6,5,4,3,2との2文字からなる文字列でカードの柄を表すこととする。
当然ながら52枚のうちどの2枚も同じ柄でない
この一組のカードを使ってポーカーゲームをする。
すなわち、初手のカード5枚を配られたプレイヤーは、そのうち0枚以上5枚以下のカードを場に捨てて、同じ枚数のカードを残りの山札47枚から引くことができる。
このときどのカードが選ばれるかは無作為であり、プレイヤーは選択できない。
さて、プレイヤーは、初手のカード5枚に対して、最終的に手に残る5枚のカードをポーカーのルールで評価して得られる配点の期待値が最も高くなるように捨て札を決めたい。
入力としてカード5枚が与えられたとき、そのような捨て札の組み合わせを求めるプログラムを記述せよ。
ここで、ポーカーの役と配点の対応はプログラムのパラメータとして組み込んで良い。
751: 2020/10/24(土)21:09 ID:xQuuF55s(1) AAS
>>750
// 任意の役の配点を0とする
printf(0);
752: 2020/10/24(土)23:43 ID:DlOr4HzX(1) AAS
>>746
Java
外部リンク:paiza.io
753: 2020/10/25(日)09:27 ID:dKQi7OF0(1) AAS
>>750 Perl5
外部リンク:ideone.com
役のレートは某ゲームのものを使用
ノーペアのとき
全部変えるより1枚残したほうが有利という結果が出てちょっと驚いてる
754: 2020/10/25(日)10:49 ID:zd7LSfWt(1) AAS
3が1枚来てて、3が3枚残ってるなら、
・手元の3を捨てると、3が来ても何も起こらない
・手元に3を残すと、3が来るとワンペアになる
つまり、残りのカードを引けるかどうか、になる
>>746の亜種
755: 2020/10/25(日)11:44 ID:c/nOQwtG(1) AAS
746はシミュレーションも何もただの引っ掛け問題でしょ
モンティホール問題の方が引っ掛け問としては出来が良い
756: 2020/10/25(日)12:58 ID:vQGWPLvq(1) AAS
引っかけも何も条件付確率の初歩の初歩の問題だろ
757: 2020/10/25(日)14:14 ID:tOCt4zCM(1) AAS
52枚トランプの束で2枚目から4枚目までがダイアであるような場合に限定してその内先頭もダイアであるような場合は全体の何バーセントかを問う問題
758: 742 2020/10/26(月)01:17 ID:LimhPZzI(1) AAS
>>744
正規乱数自体は既存のライブラリで(Pythonならnumpy.random.randnとか)。
例えば、最初のお題(2/(1/x+1/y)で計算するやつ)は、34%位のエラー率になります。
759: 253 2020/10/27(火)00:51 ID:uqMOOUWw(1) AAS
そうすると俺にはモンテカルロ法をわざわざ使うところが
どこかよく分からないんだよね…
760(5): 2020/10/27(火)23:07 ID:9NNPSda/(1) AAS
結局>>742は数学的にはどういう意味なんやろ
x,yがN(0,1)に従う独立確率変数、
ρ:R→RがDouble型に丸める関数(Doubleのレンジに入らない確率はほとんど0だから無視)、
h(x,y)=2xy/(x+y)
としたとき
P(ρ(h(ρ(x),ρ(y))) ≠ ρ(h(x,y))) ≒ 34%
って事?
761(1): 253 2020/10/28(水)00:01 ID:Jno143Es(1/12) AAS
面白い記号だなそれ。
だが、他の人にも伝わるように書いた方が話が広がってよいよ。
どんなに数学が得意な人でも本当に優秀な人はそうすることができると思う
762(1): 2020/10/28(水)00:17 ID:3yQQm3er(1/3) AAS
Φρズと書いてハイロウズと読みます
763: 2020/10/28(水)00:21 ID:n11gpLQR(1/3) AAS
煽りでもなく素直に疑問なのだが>>760のどこら辺がわからないんだ?
正規分布の下りか?
764: 253 2020/10/28(水)00:30 ID:Jno143Es(2/12) AAS
>>762
マジレスしようと思ったが、そういう問題じゃないんだよ
言葉で書きゃー2,3行のことなんだから
言葉で人に伝わるように書けばいいだろ
と、突き放しちゃ実も蓋も無いので少しマジレスすると
ρ:R→R が写像なのは分かる。
がしかしだ
P(ρ(h(ρ(x),ρ(y))) ≠ ρ(h(x,y))) ≒ 34%
って、お前の教室のホワイトボードじゃねんだぞ。
そんなんでどうっやって世の人と付き合ってんだか…
765(1): 253 2020/10/28(水)00:40 ID:Jno143Es(3/12) AAS
大体、P()てのは何の関数だ。
どこにでもあるような関数名だが、一般的な関数か?
いや、そんなことの説明は要らない
お前の言いたいことはそんな自己流の式よりも
手短な読んで分かる日本語で書けるはずだ
いいやP()に限らない、お前のレスは一事が万事そんな感じ
一からからやり直せ
そしたら相手してやる
766(1): 2020/10/28(水)00:42 ID:n11gpLQR(2/3) AAS
>>765
文脈から明らかにP(A)はAが起こる確率でしょうが
ちなみに俺は>>760じゃないんで
767(1): 253 2020/10/28(水)00:43 ID:Jno143Es(4/12) AAS
>>766
それ関数じゃないだろ。何で関数として書くんだ。
どういう関数空間なんだ?
768: 253 2020/10/28(水)00:47 ID:Jno143Es(5/12) AAS
簡単なことを
わざわざ難しいことのように書くのは
有能な人のすることではない
769(1): 2020/10/28(水)00:51 ID:n11gpLQR(3/3) AAS
>>767
落ち着けよお前
P(事象A) := 事象Aが起こる確率 なんて高校数学の範疇だぞ
>>760が殊更ペダンチックには感じない
770: 253 2020/10/28(水)01:00 ID:Jno143Es(6/12) AAS
>>769
別に落ち着いているけど
これか
外部リンク:ja.wikipedia.org
P()が確立っていつから?
俺が大学の頃まではこういう記法は見た記憶が無いんだけど
P(ρ(h(ρ(x),ρ(y))) ≠ ρ(h(x,y))) ≒ 34%
これは言葉で書いたらもっと分かりやすくならないのか?
771: 253 2020/10/28(水)01:15 ID:Jno143Es(7/12) AAS
結局 >>760 は
2 / (1 / x + 1 / y)をdoubleで計算した値と倍長精度で計算したものをdouble相当に丸めたものが一致しない割合
この一行をわざわざ他の人に分かりにくい式で再度書いているだけのこと
繰り返しだし分かりにくいし
意味(doubleで計算した値と倍長精度で計算したものをdouble相当に丸めたものが一致しない割合)
が欠落している
そういうことに気づきな
772: 2020/10/28(水)01:17 ID:6h0Rpnv/(1/2) AAS
多分ですけど、あなた以外はそこまでわかりにくい表現だとは感じていないのだと思いますよ
773: 253 2020/10/28(水)01:19 ID:Jno143Es(8/12) AAS
まじかw
そしたら回答山盛りだ
お前もさんも回答よろしくな
774(1): 2020/10/28(水)01:20 ID:6h0Rpnv/(2/2) AAS
>>742の意味するところが数学的に自明になればおのずと回答も付くでしょう
775: 253 2020/10/28(水)01:20 ID:Jno143Es(9/12) AAS
蛇足だが、あの式で意味がわかった上で
まさか回答できなかったら、単なる無能だからな
776: 253 2020/10/28(水)01:27 ID:Jno143Es(10/12) AAS
>>774
参考までにあなたは今までどのような回答を投稿されましたか?
777: 2020/10/28(水)01:29 ID:3yQQm3er(2/3) AAS
>>761
> 面白い記号だなそれ。
で、結局面白い記号って何だったの?
778: 253 2020/10/28(水)01:30 ID:Jno143Es(11/12) AAS
ふふ、それは
ヒ・ミ・ツ
779: 2020/10/28(水)01:43 ID:3yQQm3er(3/3) AAS
教科書ないから高校数学 確率で一番上に出たやつ。
外部リンク[html]:studysapuri.jp
やっぱ高校の教科書に載ってたよなあww
仮に載ってなかったとして大学で使う書籍にもP載ってないって?w
> 俺が大学の頃まではこういう記法は見た記憶が無いんだけど
780: 253 2020/10/28(水)01:56 ID:Jno143Es(12/12) AAS
ゆとり以降だなそりゃ
781: 2020/10/28(水)02:11 ID:d52OC3St(1) AAS
恥の上塗りするくらいなら黙ってればいいのに
782: 253 2020/10/28(水)02:16 ID:FRCNqyyj(1) AAS
じゃあ何か自慢の回答でもしてよ
783: 742 2020/10/28(水)05:10 ID:MEeLXnFm(1) AAS
>>760
2/(1/x+1/y)
を
2*x*y/(x+y)
と変形した場合だと、36%位です(100万回試行してみた)。
784(1): 2020/10/28(水)06:02 ID:W3KKdO+Q(1) AAS
>>742 C
外部リンク:ideone.com
2 / (1 / x + 1 / y) のエラー率は 38.5%
2 * x * y / (x + y) のエラー率は 40.4%
と出た
785: 742 2020/10/28(水)12:23 ID:jim4KuYP(1/2) AAS
>>784
h0の計算は、xdやxdをlong doubleにcastする感じで!
>double h0 = ( xl == 0. || yl == 0. ? 0. : 2. / (1.L / xd + 1.L / yd));
786: 742 2020/10/28(水)13:16 ID:jim4KuYP(2/2) AAS
間違えました
double h0 = ( xd == 0. || yd == 0. ? 0. : 2. / (1.L / xd + 1.L / yd));
787(14): 2020/10/29(木)00:16 ID:GFOWX4AY(1/9) AAS
お題:言語機能のみを使い単方向リストを実装しメソッドpushとpopを実装せよ
pushはリスト末尾にノードをプッシュし、popはリスト末尾からノードをポップする
ノードの持つ値は整数とする
788(1): 2020/10/29(木)00:52 ID:wtq/xrTf(1/3) AAS
複数pushできるの?
popも個数指定できるの?一個ずつ?
pushの戻り値はリスト自身?入れた値?成否?
789(1): 2020/10/29(木)01:01 ID:GFOWX4AY(2/9) AAS
>>787
>>788
pushもpopも値は1つずつ
pushの戻り値はなんでもいい
790(3): 2020/10/29(木)10:47 ID:jsAu6jIB(1/2) AAS
>>787 js
入出力のサンプルケース書いてないやつ絶対自分はやってないだろ
class SinglyLinkedList {
push(value) {
this.head = { next: this.head, value }
}
pop() {
if (!this.head) return
this.head = this.head.next
}
省9
791(2): 2020/10/29(木)12:03 ID:GFOWX4AY(3/9) AAS
>>790
なんで>>787,789の仕様でこんな実装になるんだ?
お題ちゃんと読んでる?
792(1): 2020/10/29(木)12:11 ID:moZIRBYC(1) AAS
>>791
「言語機能のみを使い」は引っかかる表現だったけどそれのことかい?
793(2): 2020/10/29(木)12:16 ID:95aSRVZj(1/2) AAS
オレもこの「言語機能のみを使い」がわからなかった
「ライブラリ関数使うな」か「文字列操作関数のみを使い」かどっちかかなと
わからんから様子見
794(1): 2020/10/29(木)12:18 ID:GFOWX4AY(4/9) AAS
>>792
>>790
は787の仕様としてただしかったわ
すまんな
こっちのお題の定義があいまいすぎたらしい
言語機能は問題ない
795: 2020/10/29(木)12:21 ID:GFOWX4AY(5/9) AAS
>>793
ライブラリ使うなって言いたかった
あとお題提出前の実装については>>790に比べるとかなり冗長な実装をしてある
ここに晒す気はないが
796(2): 2020/10/29(木)12:33 ID:AOpu1Zek(1) AAS
stdlib.h使わずに作るの?
797(2): 2020/10/29(木)12:36 ID:jsAu6jIB(2/2) AAS
>>794
まあええわ
俺もclassは久々に使ったけどできれば使わずに実装したかったわ
798: 2020/10/29(木)12:50 ID:GFOWX4AY(6/9) AAS
>>797
こっちの実装したコードに比べるとそっちのコードはえらくシンプルなんだよな
軽くショックだわ
>>791みたいな口きいてすまんかったな
799: 2020/10/29(木)13:24 ID:GFOWX4AY(7/9) AAS
>>796
リスト以外の実装は自由の想定
stdio.hも使っておk
800: 2020/10/29(木)13:27 ID:GFOWX4AY(8/9) AAS
>>796
C/C++などの言語はmallocなどを使っても良いことにする
801: 2020/10/29(木)15:09 ID:dNWGwdex(1) AAS
Haskellみたいな純粋関数だとそもそも標準ライブラリだけだと“状態”を作るのも難しいんだよな
同じ表現は永遠に同じ答えを返すからスタックの“状態”を変化させるというのがそもそもできない
それをなんとかするのに“モナド”というのがあるんだけど状態を処理する“ステートモナド”は標準ライブラリではないんだよな
ほとんど“準標準”だけど
802(1): 2020/10/29(木)16:24 ID:95aSRVZj(2/2) AAS
State モナドを“準標準”と認めてもらえるなら簡単
Haskell
import Control.Monad.State
pop :: State [a] a
pop = do
a <- get
modify tail
return $ head a
push :: a -> State [a] ()
push x = do
省14
上下前次1-新書関写板覧索設栞歴
あと 200 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.034s