プログラミングのお題スレ Part12
■ このスレッドは過去ログ倉庫に格納されています
比較というのは差をみつけることだからな ココでの差は引き算の差の意味ではない、当然 数字を引き算して差を求めることもできる、当然 >>3 が言ってる比較って値そのものの差による比較ってことだろ ってことな わかった? お題:f(n)::={nを連続するいくつかの正整数の和として表す表し方の総数}とおく 例えば、15=7+8=4+5+6=1+2+3+4+5よりf(15)=4である 上限Nが与えられたとき、n<=Nでf(n)が奇数となるようなnをすべて足し合わせた値を求めよ 10 -> 24 100 -> 665 1000 -> 18006 10000 -> 571940 100000 -> 18010994 1000000 -> 569929080 10000000 -> 18001029437 100000000 -> 569128815672 1000000000 -> 17994029079715 > nを連続するいくつかの正整数の和として表す表し方の総数 15は7+8と4+5+6と1+2+3+4+5の3通りの表し方があって その総数f(15)が4ってどういうこと? >>17 Java https://ideone.com/FqcPpb 適当に作ったが考え方を変えないとideone時間が足りない >>17 >連続するいくつかの正整数の和として表す表し方の総数 http://izumi-math.jp/sanae/MathTopic/renzokuwa/renzokuwa.htm >1以外の奇数の約数と同じだけある ttps://www.eikoh-seminar.com/echtas/blog/2015/10/post-224.html >1以外の奇数の約数を何個持っているか >>17 Java https://ideone.com/m7oieG BitSetなんて使わず普通に再帰使ったほうが早かった… 10月の学校に着いた時間と帰った時間を平日分全部出力する(土日のみ休みで平日は必ず学校がある) A君は神経質なので秒まで着いた時間と帰った時間をメモする 時間は任意とする。 入力例 2018/10/01 09:25:00 2018/10/01 17:30:00 出力例 入力例と同じフォーマットの形式の日付時間が平日分全て出力された後に、 今度は別のフォーマットで平日分全て出力される 出力例 2018/10/01 09:25:00 2018/10/01 17:30:00 2018/10/02 09:26:00 2018/10/02 17:24:00 : : : 平日のみ全部出力 : : 別フォーマット出力例 20181001 092500 20181001 173000 勤怠記録を整形したいです と正直に言えば話が早いのに >>27 そうなんですけど、VBAで会社にソースはあるんですけど、他の言語でも見たいんです 平日って設定要る? 文字列 "YYYY/MM/DD HH:MM:SS" をいろんなフォーマットに変換するだけの問題じゃ駄目? なんで一旦 echo するの? 責めてるんじゃなくて単純な疑問ね >>24 C++ #include <cstdio> #include <vector> #include <tuple> using namespace std; int zeller(int y, int m, int d) { if (m < 3) { y--; m += 12; } return (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + d ) % 7; } int main() { vector<tuple<int, int, int, int, int, int>> v; for (int y, m, d, h, i, s; scanf("%d/%d/%d %d:%d:%d", &y, &m, &d, &h, &i, &s) == 6; ) { if (int w = zeller(y, m, d); 1 <= w && w <= 5) { v.emplace_back(y, m, d, h, i, s); } } for (auto [y, m, d, h, i, s] : v) { printf("%d/%02d/%02d %02d:%02d:%02d\n", y, m, d, h, i, s); } for (auto [y, m, d, h, i, s] : v) { printf("%d%02d%02d %02d%02d%02d\n", y, m, d, h, i, s); } } >>29 平日って設定の理由としては、問題を少し複雑にしたかったから、あえて入れてみた まあその制限が問題を難しくしてるのかって話もあるけど 文字列を色々なフォーマットにするでもいいけど、日本語でおkとか入力例とか出力例が自分でも適当過ぎた気がするので、また今度の機会に‥ >>30 C++は好きな言語だ 今度の連休で遊ばせてもらいます そう言えば寝てたら未来へ行っちゃうってのは、Islandにちょっと似てる。 春分の日と秋分の日はその前の年に気象庁だかどっかから指定される休日だから任意の時刻に対して平日判定を行うのは不可能 まず問題文をよく読めって学校で教わらなかったのか? ああ10月限定かすまんな それでも無駄な情報が多くて何をさせたい問題なのかやっぱりわからんわ お題 1から連続する自然数の並びで 最初の a個の総和と それに続くb個の総和が 等しくなるものを 好きなだけ求めるち >>38 (0..10**8).each{|i|n=2*i*(i+1)+1;x=Integer.sqrt(n);puts'a=%d, b=%d'%[a=(x-1)/2,i-a]if x**2==n} #=>a=0, b=0 a=2, b=1 a=14, b=6 a=84, b=35 a=492, b=204 a=2870, b=1189 a=16730, b=6930 a=97512, b=40391 a=568344, b=235416 a=3312554, b=1372105 a=19306982, b=7997214 >>34 koltin全く知らないけど、あとで読んでみます! >>38 C++ https://ideone.com/PLj4M9 Wolfram先生によると一般項があるらしい http://www.wolframalpha.com/input/?i=2a (a%2B1)%3D(a%2Bb)(a%2Bb%2B1)+and+a%3E%3D0+and+b%3E%3D0 半角スペース区切りで数字が入力されるのでソートして出力しなさい いろんなアルゴリズムでやってみよう -*- input -*- 3 1 4 1 5 9 2 6 53 58 97 93 2 38 46 26 -*- output -*- 1 1 2 2 3 4 5 6 9 26 38 46 53 58 93 97 例) Ruby ボゴソート ary = gets.split.map(&:to_i) nil while ary.shuffle!.each_cons(2).any?{|a, b| a > b} puts ary * ' ' バブルソート ary = gets.split.map(&:to_i) (ary.size - 1).times do ary.each_cons(2).with_index{|(a, b), i| ary[i, 2] = b, a if a > b} end puts ary * ' ' perl -ne '@d=split;print join(" ",sort {$a <=> $b} @d)."\n"' 無念無想のままたった今打った。1回も試していない。 >>24 A君は平日以外学校に行かんのだろ? なら曜日なんぞ気にせず入力された登下校時刻を単に変換するだけになるような アスペか?アスペにはこのスレはたぶん無理 ↑これの読解もままならないだろうが(苦笑 >>47 そうだね さらに 10/01だけの入力から 10/02が出力されるところも謎だ お題 現在の時刻をスウォッチ・インターネットタイムで表示する 例 @042 >>50 Ruby UTC基準で d=24*60*60;$><<'@%f'%((Time.now.to_f%d)*1e3/d) #=> @426.818338 ビール標準時が基準点でないものはスウォッチ・インターネットタイムではない >>52 d=24*60*60;$><<'@%f'%(((Time.now.to_f-60*60)%d)*1e3/d) perl -e '$s=86400;$n=1000*((time()+3600)%$s)/$s;printf "@%d\n",$n' 今実行するとこう出る。 @757 https://exoplanetarchive.ipac.caltech.edu/docs/transit_algorithms.html まずこのサイトを読んで日時(UTC基準)からJDを求めるプログラムを作りなさい 逆に日時(UTC基準)から時刻を求めるプログラムを作りなさい このサイトに書いてあるとおりに作るとプログラムの結果は正しくならない プログラムの結果が正しくなるように修正し、 このサイトのどこに誤記があるかその箇所を指摘しなさい >>55 訂正 (正)逆にJDから日時(UTC基準)を求めるプログラムも作りなさい (誤)逆に日時(UTC基準)から時刻を求めるプログラムを作りなさい >>57 (365.25*dy).to_i とかは 1461*dy/4 にしないとまずい >>58 365.25 は 101101101.01(2) だから誤差の心配は無いよね? (1..3000).each{|n| p n if (365.25*n).to_i != 1461*n/4 } とかやってみて >>59 それは良いとしても ( (c-122.1)/365.25 ).to_i の類の表現が他の個所にも複数あり この内のどれかが p (5.151/1.717).to_i #=> 2 のようにならないとはコードをみただけでは明確ではなく 剰えrubyのFloat classの精度は実装依存であるためこの様な処理はすべきではない え ruby って IEEE 754 に準拠してないの? 信じ難いなそれ 使い物にならないじゃん IEEE754関係ないやろ Cのdoubleも環境依存やで いや関係なかったら困るだろ バグってんだか仕様だかわからなくなるぞ 関係ないってそういう意味ではないのでは? >>61 の指摘することとIEEE 754は関係ないってだけで。 例えば32bitか64bitでdouble型の精度が違うなんて別に珍しいことではないと思うんですけど。 > 32bitか64bitでdouble型の ん? 32bitのdoubleなんてありえるの? IEEE 754以外で倍制度を決めてる何かがあるの? >>60 たかだか30行程度のループも再帰もない一本道なので具体的に示してもらえるとありがたいです。 この種のプログラムは地デジの日付情報が MJDで ARIBの規格書にも載っていて、 ごく一般的に使われているので、もし問題があるようならばなんとかしたいですよね。 >( (c-122.1)/365.25 ).to_i 浮動小数点で JD が扱える精度+αくらいならこれは問題ないと思いますが。 c は整数ですし、分母の 365.25もすでに説明しましたね。 グレゴリオ暦6239年で JD が 4000000辺りで分子が 365.25の倍数前後は 4000217.1/365.25 と 4000218.1/365.25 だから仮数部が 19bitほどあればいいわけですね。 # こんな定数のままだとコンパイラが最適化してしまいますけどね 組み込み用途などによっては考慮すべきかもしれないけれど、 最初のお題(>>55 )ってそういう意図があったのでしょうか? >このサイトに書いてあるとおりに作るとプログラムの結果は正しくならない これは特定の環境に限られたものを指していたのかな? 精度的に問題ないって理解してれば良いのでは よく理解してない人が小数点使う必要ない場面で使って事故って何も分かりませんみたいな事あるし コンシューマゲームなんかだとシビアなんで、癖みたいにしておかないとハマってしまうけど >>55 はココからが本当の本題 @ >>58 のコードでの誤記の指摘は概ね正解 ただ>>58 のコードの修正だけでは紀元前に対応していない 紀元前が対応するように修正しなさい A @のプログラムの通日を整数の通ナノ秒にして、ナノ秒までの時刻を正確に相互変換できるようにしなさい B Aにうるう秒をいれて正確に相互変換できるようにしなさい(制約で問題が発生する場合、問題が発生する時刻を書きなさい) 参考URL:http://maia.usno.navy.mil/ser7/tai-utc.dat Bは普通にやったら結構めんどい課題と考えられる 力技でやるなら暇人以外にはオススメしない(力技でやらないほうがいいと一応警告しておいたからな) コードの一部を出力するコードをサクッと作るぐらいの力量がなければ きっとサクッとはできないしサクッと結果の評価もできないと考えられる https://ideone.com/fF1kvl Bで使えるデータは用意しておいた 気が向いたヤツはチャレンジしなさい >>68-70 はサマータイムスレで暴論吐いてた奴じゃない? C言語スレとかのいろいろな所に出没してる半角先生だ どこでも相手にされなくなったから出題しに来た サマータイムスレでの暴論って何なんだろう? まさかのサマータイム賛成なんて奴だったら許せんな。 お題 倍精度実数で整数部分が正確に表現できる最大値を求める 浮動小数点実数型と言えど最大要素に近い 部分は、整数×2^整数という形の整数也 区間を求めるなら仮数部だけで収まる最大値だけど、 とある数の整数部が正しく表現されているだけなら仮数部も込みで double の最大値が答え それを std::numeric_limits<double>max() や DBL_MAX を使わずに計算せよ、ということか >>74 を2分探索で計算で出すコード書いてて ideone のコンパイラのバグ見つけた気がする https://ideone.com/D3ip5M if 文の条件式の値が1なのに実行されない find_max<char> とか int32_t で起きる 何か間違ってるかな 符号付き整数オーバーフロー(未定義動作)のせいで 変な最適化でもかかってるんじゃね? >>68 通常 JDは UTCを元にするので閏秒は考慮しないと思いますよ、 天文計算などする場合は必要に応じて UT1とかに変換しているのじゃないかと? >>80 なるほど。 オーバフローが未定義動作だとすると符号付整数の最大値を求めるのは難しそうだな。 ものすごい頭悪いこといってるわ。。。 UTCは う る う 秒 入 れ た 時 刻 のことだぞ マジでなんでこんな頭悪いの 天文でつかわれるユリウス日なんかはアホがいうとおり固定 1光年も固定でもないとヤバイからな 1光年は光が1ユリウス年(365.25日)進む距離になる そもそもオレの課題ではそんなことを問題になんかしてないからな 課題どおりにやればいい 低学歴知恵遅れが知ったぶりしてハジかく典型的な例といっていい 低学歴知恵遅れはいちいち自分が低学歴知恵遅れですと自白するからな 相手にされなくなったんで問題だせば自動的に相手にされると思い込んでいる その辺りが半角先生の思考の限界 ここが適切なのかわかりませんが、知恵を頂けたら幸いです。 当方CGクリエーターで、プログラミングの知識は殆どありません。 そこで質問なのですが、 Aのオブジェクトの座標値が(-1,-2,-3)として、Bのオブジェクトの座標値が(1,2,3)の場合、 Bのワールド位置を維持して、BをAのローカル座標位置へ移動させるには どのような行列式になるでしょうか? ネットで座標変換とか色々調べてみましたが、子のワールド位置を維持した状態で 親に該当するローカル座標へ移動させる方法がわかりませんでした。 本来の目的としては、 CGアニメーションソフトのコンストレイント機能にペアレントがありますが、 それを行列式(ノード)で行いたいのです。 (コンストレインのペアレントとは、 時間軸上の任意の位置で親子関係の接続や解除を行うことが出来る機能です。 その接続/解除時には、子は現在のワールド位置を維持します。 >>88 スレのルールに則れば誰か答えてくれるかもね >>88 >Aのオブジェクトの座標値が(-1,-2,-3)として、Bのオブジェクトの座標値が(1,2,3)の場合、 (1,2,3) を (-1,-2,-3) からの相対値で表すということなら (1,2,3) 引くことの (-1,-2,-3) イコール (2,4,6) >>68 >B Aにうるう秒をいれて正確に相互変換できるようにしなさい >>83 >UTCは う る う 秒 入 れ た 時 刻 のことだぞ うるう秒を入れるでなく、外すが正解ですね。すでに UTCには閏秒が入っていますから。 UTC(協定世界時)は TAI(国際原子時)を元に閏秒で補正して UT1(世界時)に合わせています。 7:00:00(UTC)の一日先の時間が24h+-1sec(閏秒)でも時刻は7:00:00(UTC)となるわけです。 よって JDに24hを足すと翌日になり JD/24h%7で曜日が分かります。 未来の日付も計算可能ですが、閏秒を入れないTAI(国際原子時)では地球の自転次第で変化します。 >天文でつかわれるユリウス日なんかはアホがいうとおり固定 逆です、天文計算で使うような時間は UT(世界時)を基準にしています。 それは天体の運動方程式を解くために基準の時刻からの正確な時間が必要だからです。 https://warwick.ac.uk/fac/sci/physics/research/astro/people/steeghs/mpags-as2/mpags_techniques_2012_1b.pdf ・International Atomic Time (TAI) - SI second defined by frequency of hyperfine transition of cesium133 - Measured and counted with international network of atomic clocks ・Co-ordinated Universal Time (UTC) - Our civil time (in winter) - Based on SI second, with 86400s/day - Kept synchronised with UT1 since 1972 by addition of leap seconds - Leap seconds not added to TAI, so TAI-UTC is not constant - Currently (Nov 2012) TAI - UTC = 35s - Use of leap secs currently under discussion (inconvenient for astro) ・Co-ordinated Universal Time (UTC) - Currently (Nov 2012) TAI - UTC = 35s ・Calendar is independent of time system, so state both, e.g. - 2011 November 11 11:00:00.0 UTC - 2011 November 11 11:00:34.0 TAI - JD 2455876.958333 UTC - JD 2455876.958727 TAI コレでオレの課題ができないなら 人間やめたほうがいい プログラミングのお題 「10以下の素数の和を求めよ」 答え 「17。コード書くまでもないんだがこれでいいのか?」 これはおかしいだろう >>95 ruby n = 10 Prime.reduce(0){|s, i|break(s) if i > n; s + i} え?じゃ、こんな感じ? perl -e 'for($n=1;(2**$n)!=(2**$n+1);$n++){} printf "%d, %.0f\n", $n, 2 ** $n;' 動かすとこう出るが。 53, 9007199254740992 >>95 Pharo/Squeak Smalltalk (Integer primesUpTo: 10) sum >>95 ruby -rPrime 'p Prime.first(10).sum' #=> 17 first(10)って普通は最初の10個を列挙するもんだがrubyは違うのか… 名前重要ってわりにセンスないな じゃあちなみにこの関数名は何ならいいんだ? お前の考えを言ってみろよ センスを判定してやるよ first(10)が10までってセンスは普通におかしいだろ つーかrubyも最初の10個返すんだが…? 誰も動作を疑わずに書かれたものを脳死で信じるいい例だな、 >>99 のは17にはならん ruby/ruby: The Ruby Programming Language ttps://github.com/ruby/ruby そりゃそうだろ スクリプト言語のソースコードは公開されてて誰でも読めるが 大抵のユーザーは書かれたものを脳死で信じるしかないだろ それともお前は使うスクリプト言語のソースコードは全部精査してるのか? コンパイラのソースコードまで熟読してるのか? ンなモン、脳死で信じるしかねーだろ 最近JavaとかC++とか少ないな Javaは例の騒動があるから仕方ないとしてCとかC++はないんか >>95 ruby require 'prime' p Prime.take_while {|i| i < 10}.inject(:+) >>79 gcc8.1だと char (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 1 (!(n > d && is_usual_num(n))) 0 break calculated = -128 numeric_limits = 127 128 127 となるね なぜか言語自体のコード読む読まないの話になってるけど、これくらいのコードなら動かせばすぐにfirstが何してるか分かるじゃん、って思っただけだわ お題 方程式 1/n = 1/x + 1/y (ただし、n,x,yは正整数でx≦y)について考える 例えばn=4のとき、1/4 = 1/5 + 1/20 = 1/6 + 1/12 = 1/8 + 1/8 より解の個数は3である 上限Mが与えられたとき、上の方程式の解の個数がMを超える最小のnの値を求めよ 2 -> 4 5 -> 12 10 -> 24 100 -> 1260 1000 -> 180180 10000 -> 116396280 250000000000 -> ? >>112 n = 2の時 1/4 + 1/4 = 1/2 1/3 + 1/6 = 1/2 だけだから結果は2だよ n=4の時より大きくなることはあり得ないし ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる