プログラミングのお題スレ Part11
■ このスレッドは過去ログ倉庫に格納されています
>>619 のもっと効率悪い奴だよ 元は100C4じゃなくて28C4だったけど int cc[4][32][32]; こんな二次元の配列使ってた https://ideone.com/VFv36f 2年前に書いたやつで今は何やってるかよく分からないけど >>619 のは昨日元のこのコードを見ないで30分くらい考えて作った それの何が不満? 何をどう改善したいのかわからないと テーブル作成の速度? テーブル検索の速度? コードサイズ? バイナリサイズ? コードの分かりやすさや移植性? 605、出題しておいて何だがこれめっちゃ難しいな マップの大きさの制約があると通路引くのが難しすぎる いちおう解けるのを自分で確認してから出してくれないと困る >>643 一般に、再帰を非再帰に書き下すのは難しいのです… お題 ポーランド記法による計算機を実装せよ 演算子は加算(+)と乗算(*)をサポートすること * + 1 5 + 2 3 => 30 * * * * 2 3 4 5 6 => 720 >>645 Ruby 2.5.0 [ "* + 1 5 + 2 3", "* * * * 2 3 4 5 6" ].each do |_exp| exp = +-_exp nil while exp.gsub!(/([^\d\s]+) +(\d+) +(\d+)/){$2.to_i.send($1, $3.to_i)} puts '%s => %s' % [_exp, exp] end #=> * + 1 5 + 2 3 => 30 * * * * 2 3 4 5 6 => 720 お題 N個の整数(a_1, a_2, ..., a_n, ..., a_N)と*+/()を使った数式の値が、ある整数aにもっとも近い数式とその値(実数)を出力せよ 引き算はなし a_n = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} >>606 >>605 のは要はローグライクの部屋を作れってことだろ 出題者の説明不足 画像の1枚でも張れば見て分かる ttps://cdn-ak.f.st-hatena.com/images/fotolife/g/gaou2/20170905/20170905111314.png これ見た目では普通だけどかなり横に長い部屋なんだよな >>654 今だと全角文字で作ればいいかな。絵文字もまじえて。 >>597 Java https://ideone.com/VUgSXO 1行〜5行までしか答え出ないな うちの環境で 9行を探索するのに4.6秒 10行を探索するのに61.6秒 2018行はあかんww いやさすがに数学板でやれや。 国際数学オリンピックて自分で言うてるやんけ 数学とか使わずに総当たりでやってるのに数学板に行けとな いやこれは総当たりでは計算量的に無理だろ コードは書けるだろうけど 存在することを帰納法で証明するしかないから数学板の問題だ まーた数学コンプレックスが暴れてるのか 数オリに出るくらいの賢さがないから計算機の力も借りて解くっていう方向性は別にスレチじゃないだろ ここでレスリングの話しだして苦言を呈されると「まーたレスリングコンプレックスが暴れてるのか」 極端に言うとこういうこと。 レスリング板、数学板があるだろ。 わざわざここでオナニーしたいのは専門以外の板でマウント取りたいのかな? そんなひねくれた根性だから現実世界でミジメな生活なんだよ。 早速暴れてて草 正攻法で数オリの問題を解く話を延々してたんならうざいけど 飽くまで計算機使って解いてみようぜって言ってる人にまでその理屈が当てはまるわけないだろ それとも数学だけじゃなくて論理的思考もできないタイプか?それなら納得だわw 数学で解ける問題をわざわざコンピューターでムダな解き方するの?? 突き詰めていくと数学で出した解法そのまま引き写すだけになるのが分かりきってるのに。 だからわざわざ「数オリに出るくらいの賢さがないから」って言ってるだろ日本語読めねえのかよ そりゃ灘の入試レベルならその通りだろうけど数オリで正解率1割切ってたような問題なんだから計算機使ったアプローチしてみるのもプログラミングのお題としては面白いだろ それともなんだ、円周率の計算だってペンと紙でできるんだから無駄だっていうのか?w そんな極論言うレベルの頭だから数学もできないんだよw そういう無駄に一般化した話も結構だけど、 個別具体的な話として>>597 は計算機を併用することに効果が無いから数学の問題だと言ってるんだよ。 2018を解けるほど効率化できるなら既に人力で解けているだろうからね。 それは総当たり以外にうまい方法が思い浮かばないから言えるだけでしょうよ。 あと素数判定アルゴリズムなんか考えればわかるけど、効率化できることと人力で解けることに相関はないぞ。 少なくともスレチではないと思うよ。 部外者だが 嫌なら回答しなきゃいいだけなのに 何文句言ってるの? って感じ そんなことより野球のはなししようぜ!嫌なら無視すりゃいいだけ。 アプローチ以前に >>597 の問題って存在するの それとも無いの 作るのは無理な気がするがよーわからん 一番大きい数値 1+2+…2018 = 2037171 は差の絶対値で作れないので最下段確定 一番大きい数値を出来るだけ上段に伝搬させるために小さい数値(1~2017)と組み合わせていっても最上段に残るのは 2018 → 2019 以上と組み合わせると 2017 未満の数値がダブる 最下段で 2037171 と 1 を組み合わせた場合、 2037169 も最下段に設置する必要がある 2037169 は 1~2018 の大部分と組み合わせられないので上のほうまで伝搬できずにアウト その長々とした理屈は2018が7でも6でも同様のことが言えるよね そして7や6には解がある >>673 適当に作ったプログラム(>>657 )じゃ5までしか見つかっとらんのだけど、6や7にも解あるんか 5以下の場合は数字が足りなくなる前に最大値からの流れに合流出来てるんじゃね? >>674 >>657 じゃなくてCで書いたけど6〜40までは解無し 数オリ経験者、東大数学科卒だけど 今度挑戦してみるか お題 非負整数nが与えられるので、以下に示すような六角形状の螺旋を描画せよ https://ideone.com/MmH3N6 >>679 質問です。 n>99の場合はズレが生じてくると思いますが、その時はどうしますか? それともn≦99で範囲を絞ってもよろしいんでしょうか? まぁ、私が作れるかどうか分からないんですがorz 難しそうだが良いお題だな こういうお題を考えられるようになりたい まずは数学から入るか 中心つき六角数 - Wikipedia ttps://ja.wikipedia.org/wiki/%E4%B8%AD%E5%BF%83%E3%81%A4%E3%81%8D%E5%85%AD%E8%A7%92%E6%95%B0 >>680 nの大きさに合わせて-の数を決めれば、歪にならないと思うよ。 >>685 へ〜やっぱ n = 5 までしかないんだな 後でちゃんと読んどくわ 出題者は自分で書けるのを一度確認してから出題してほしいわ >>688 BF +>+<-][+[->+[+>-<]<]<+[>+[.>]-]-] >>688 awk Linux 用 awk '{printf "%.3f℃n", $1 / 1000}' /sys/class/thermal/thermal_zone0/temp 実行例 56.000℃ あれ?\n が抜けた。 これね。 awk '{printf "%.3f℃\n", $1 / 1000}' /sys/class/thermal/thermal_zone0/temp 鈴木貫太郎 灘中 中学入試問題シリーズ 整数問題 https://youtu.be/98U2qVDQltc 6桁の整数、5AB,C15 が999 の倍数である時、ABC を求めよ 答え A=8, B=4, C=4 お題:与えられた正の整数nを2進数〜16進数に変換して表示する。 11進数以降の10以上を表す文字はABCDEFを使用。 (10=A, 11=B, 12=C, 13=D, 14=E, 15=F) 例:12進数の11 ---> B 出力例: n=123456 base(2) ---> 11110001001000000 base(3) ---> 20021100110 base(4) ---> 132021000 base(5) ---> 12422311 base(6) ---> 2351320 base(7) ---> 1022634 base(8) ---> 361100 base(9) ---> 207313 base(10) ---> 123456 base(11) ---> 84833 base(12) ---> 5B540 base(13) ---> 44268 base(14) ---> 32DC4 base(15) ---> 268A6 base(16) ---> 1E240 >>696 500015 + <ABC00> = 0 mod 999 <=> 4151 + <ABC> = 0 mod 999 <=> 4151 + <ABC> = 999*5 <=> <ABC> = 844 >>699 Ruby #!ruby -p b, n = $_.scan(/\d+/).map &:to_i puts n.to_s(b).upcase #=> 12進数の11 B 2進数の123456 11110001001000000 3進数の123456 20021100110 16進数の123456 1E240 >>696 何も考えてないPerlのワンライナー perl -e 'for(0..999){$n=sprintf"5%03d15",$_;if($n%999==0){print"$n\n"}}' 584415 >>699 Linux等で動くGNUのbcコマンド プログラムをファイルに入れておいてbcの引数で指定し、変換させたい数値は標準入力から読ませる。 ibase = 10 n = read() for (i = 2; i <= 16; i++) { obase = 10 print "base(", i, ") --> " obase = i print n, "\n" } >>700 既出でしたか 失礼しました では追加でもう1つ お題: 時間を表わす文字列(hh:mm:ss形式の8文字)の秒数を求める 最上位の時間だけは99時間を超えた場合拡張される 例:123時間45分6秒 ---> 123:45:06 出力例: 01:23:45 = 5025 sec 333:33:33 = 1200813 sec 出題者の回答例:C言語 https://ideone.com/pnrcQ6 >>706 Ruby ゴルフ気分で #!ruby -palF: $_='%d sec'%(0..2).map{|i|$F[~i].to_i*60**i}.sum # input 01:23:45 333:33:33 # output 5025 sec 1200813 sec お題:10兆までの素数のリストを作ってみませんか? https://tech.nikkeibp.co.jp/it/article/Watcher/20100519/348242/ 条件:既存のライブラリ、モジュール、外部コマンド等を利用するのは不可 すべて自分で記述すること int64_t, uint64_t の使用は許可する Ruby では百万までで、処理に数秒掛かって、78,498個の素数があった class PrimeNumber # 素数 def initialize (to = 20) @to = to @prime_numbers = [] end def add_table (n) limit = Math.sqrt(n).ceil @prime_numbers.each do |prime_num| # 割り切れたら、素数ではない return if n % prime_num == 0 # sqrt より大きいなら、確かめずとも素数である break if limit < prime_num end @prime_numbers.push n # 割り切れない end def print (2..@to).each do |n| add_table n end puts @prime_numbers.length end end >>713 perl 一応これで理屈の上ではできるとは思うんだが、477577まで行ったところでアホらしくなって止めたw #!/usr/bin/perl use strict; use warnings; my @pn = (2); my $n = 1; print "$n: $pn[0]\n"; $n++; LOOP: for (my $i = 3; $i <= 10000000000000; $i += 2) { for (@pn) { next LOOP unless ($i % $_); } push(@pn, $i); print "$n: $i\n"; $n++; } >>713 Ruby 10兆なら改良されたAtkinの篩を使ってガシガシやるしかないだろう http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.192.4926& ;rep=rep1&type=pdf sup = 10**7 primes = [2, 3] 5.step(sup, 6){|i| 2.times{ primes << i if primes.none?{|pr| break true if pr*pr > i; i % pr == 0} i += 2 } } primes.pop if primes[-1] > sup p primes.size #=> 664579 >>713 昔やった アセンブラ & AVX & マルチスレッド 探してみる みつかりました そんなに昔じゃなかった 2年半前 41兆くらいまで求めてます マルチスレッドではありませんでした 処理内容はよく覚えていません 素数表作成 ビットパターン作成 ふるい のようなコメントがあります 105単位でなにかやってます だんだん思い出してきました 6n+1, 6n+5 に対応するビット列を保持 小さな素数の倍数はマスクを作ってAVX命令でANDしていって 大きな素数の倍数はp(210n+48個の値) にしぼって ビット命令でひたすらふるう感じ キャッシュサイズを考えて小さなバッファでやってます お題: ロト6で申込数字のいずれかが必ず5等以上に当選する 最小の申込数字の組み合わせを作ってください ロト6は01〜43の数字から異なる数字6個を順番不問で選び 申込数字6個のうち3個以上が本数字と一致すれば5等以上に当選となります >>721 ・5等の当選条件を満たしている ・5等以上のいずれかの当選条件を満たしている この2つは同値なの? >>723 1〜5等に該当するならば必ず当選番号と同じ数字が少なくとも3つ入っているということがはっきりしない限り解けないでしょ ごめん 申込数字6個のうち3個以上が本数字と一致すれば5等以上に当選となります を 申込数字6個のうち3個以上が本数字と一致すれば5等に当選となります と読み間違えてたわ >>727 >>722 は>>721 とは無関係だが >>724 は(>>721 の解釈次第では)無関係ではない >>724 は 3個以上一致 <===> 5等以上に当選 3個以上一致 ====> 5等以上に当選 のどちらかをたずねたのかと思った >>730 そもそもこっちが>>722 と>>724 で「申込数字6個のうち3個ちょうど本数字と一致すれば5等に当選」って誤解してたのが始まりなんだ わけわかんないこと言ってごめんね ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる