def buy(b, yen): if yen < m: return for i in range(0, len(a)): v = a[i] if yen >= v: b[i] += 1 if yen == v: h.add(str(b)) else: buy(b, yen - v) b[i] -= 1
buy([0, 0, 0], 5360) for s in h: print(s) 0312デフォルトの名無しさん2024/03/27(水) 23:55:15.74ID:qNf/D02g>>304 Haskell
[(a, b, c) | a <- [0..20], b <- [0..20], c <- [0..20], a * 460 + b * 580 + c * 600 == 5360]
x = sqrt(p), y = p / x とすると、浮動小数点数の特性により x == y とならない場合は存在する。 このとき、xとyの仮数部を整数と見なした値(以降では「仮数整数」と呼ぶ)の差は1なので、 z = (x + y) / 2 はxとyのうち仮数整数が偶数の方に一致する。zを新たなxとして代入しyとzを 再計算すれば、今度はxの仮数整数が偶数なのでzはxに必ず一致し、>>321の収束判定条件が成立する。
具体例で見ると、p = 2 のときはxの仮数整数が奇数なので x != z となるが、zを新たなxとして代入し 再計算すれば x == z が成立する。桁上がりが起こる p = 3.9999999999999996 のときも、同様に 再計算で x == z が成立する。p = 3 のときはxの仮数整数が偶数なので x == z が成立し再計算は不要。 0326デフォルトの名無しさん2024/04/15(月) 22:06:46.39ID:MxMoolaJ>>325 解説ありがとう 俺には理解できないレベルだと分かりましたw 俺なら収束の自信が無くてDBL_EPSILONを使った判定と ループ回数上限を組み合わせて実装しそうだ 0327デフォルトの名無しさん2024/04/17(水) 05:47:35.77ID:F2fqxIYT ヘロンの公式はそのままだと、数値計算での安定性が良くないらしいぞ 解決策は、Wikipediaの英語版の方に… tps://en.wikipedia.org/wiki/Heron%27s_formula#Numerical_stability 03283272024/04/17(水) 05:52:23.77ID:F2fqxIYT そしてこんなとこでもカハンせんせーの名前がが 0329デフォルトの名無しさん2024/04/17(水) 16:28:33.14ID:7JRzlbtx の長さ この公式で計算される面積は、理論的には正しい値です。しかし、実際には、以下の理由で誤差が生じる可能性があります。
by Gemini 0330デフォルトの名無しさん2024/04/17(水) 23:38:33.35ID:k4k/eSae>>327に載っている参考文献 William M. Kahan, ‘Miscalculating Area and Angles of a Needle-like Triangle’ http://www.cs.berkeley.edu/~wkahan/Triangle.pdf のTable 1の問題がパソコン等でのC++プログラムでも再現されるか試してみた。 https://ideone.com/r4toUS
An algorithm stood convicted of numerical instability if it could be replaced by a new algorithm at least about as fast and accurate as the old for all data, and good for all data for which the old algorithm was bad.
class String def to_c(n) if %r|^n|=~n n=(n.sub(%r|^n|,"").to_i+26)%26 lb=("A".."Z").to_a.join sb=("a".."z").to_a.join la=lb[n..25]+lb[0..n-1] sa=sb[n..25]+sb[0..n-1] return self.tr(lb,la).tr(sb,sa) else return self end end end
p "Hello,World!".to_c("n3") #=>"Khoor,Zruog!" p "Hello,World!".to_c("n-5") #=>"Czggj,Rjmgy!" p "Hello,World!".to_c("s") #=>"Hello,World!" p "Khoor,Zruog!".to_c("n-3") #=>"Hello,World!" p "Czggj,Rjmgy!".to_c("n5") #=>"Hello,World!" 0358デフォルトの名無しさん2024/06/07(金) 09:04:13.66ID:tQi+9x5m #! ruby
class String def to_c(n) if %r|^n|=~n n=(n.sub(%r|^n|,"").to_i+26)%26 lb=("A".."Z").to_a.join sb=("a".."z").to_a.join la=lb[n..25]+lb[0..n-1] sa=sb[n..25]+sb[0..n-1] return self.tr(lb,la).tr(sb,sa) else return self end end end
p "Hello,World!".to_c("n3") #=>"Khoor,Zruog!" p "Hello,World!".to_c("n-5") #=>"Czggj,Rjmgy!" p "Hello,World!".to_c("s") #=>"Hello,World!" p "Khoor,Zruog!".to_c("n-3") #=>"Hello,World!" p "Czggj,Rjmgy!".to_c("n5") #=>"Hello,World!" 0359デフォルトの名無しさん2024/06/07(金) 21:13:26.78ID:U/DqAKAj>>356 R https://ideone.com/Qj6B3w0360デフォルトの名無しさん2024/06/07(金) 23:24:01.54ID:KUK95Vnh Haskell 範囲外の数値は平文字をそのまま返すこととした。
import Data.Char
cearsar n |(-26) <= n && n <= 26 = map (f n) where f x = chr.(+x).ord cearsar _ = cearsar 0