1 名前:デフォルトの名無しさん mailto:sage [2021/06/19(土) 00:02:57.84 ID:MQWrKSb7.net] プログラミングのお題スレです。 【出題と回答例】 1 名前:デフォルトの名無しさん お題:お題本文 2 名前:デフォルトの名無しさん >>1 使用言語 回答本文 結果がある場合はそれも 【ソースコードが長くなったら】 (オンラインでコードを実行できる) https://ideone.com/ codepad.org/ compileonline.com/ rextester.com/runcode https://runnable.com/ https://code.hackerearth.com/ melpon.org/wandbox https://paiza.io/ 宿題は宿題スレがあるのでそちらへ。 ※前スレ プログラミングのお題スレ Part19 https://mevius.5ch.net/test/read.cgi/tech/1606662245/
756 名前:デフォルトの名無しさん [2022/08/20(土) 22:24:09.90 ID:5JSGWnVi.net] >>703 ってこれじゃだめなのかな 7行で書ける https://ideone.com/eKTMZr
757 名前:96 mailto:sage [2022/08/21(日) 02:42:00.00 ID:P6BPpVvp.net] >>712 Perl5 use feature qw{say signatures}; no warnings "experimental::signatures"; sub ($n, @a) { $h{$$_[0]} = $$_[1] for map{[/(\w+)/g]} @_[1..$n]; sub ($m, @) { $g{$h{$$_[0]}} += $$_[1] for map{[/(\w+)/g]} @_[1..$m]; }->(@a[$n..$#a]); say "$_:$g{$_}" for sort keys %g; }->(<>); ※見易くするためインデントを全角スペースに置換してあります。 実行結果: https://ideone.com/GxsRSY
758 名前:デフォルトの名無しさん [2022/08/21(日) 06:03:07.44 ID:V5T4kdVo.net] >>712 <group>順にって、何を元にして group の順序を決めるの? 入力された順?それだと例の入力のように GroupC, GroupA, GroupC の順で来ている場合はどうするの?
759 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 07:03:57.35 ID:3JIuIXQv.net] <group>毎という事だと思う サンプル見るとgroup名か集計したpointの昇順かも知れないけどそこはどうとでもなりそうだし
760 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 08:49:24.60 ID:0ZMA3aWJ.net] >>713 実際にここでも数字を使っている例が出て来てるからわかると思うけど 競プロなんかではよくあるフォーマットだよ
761 名前:デフォルトの名無しさん [2022/08/21(日) 18:07:19.66 ID:ecIOs+Jg.net] >>666 C# https://paiza.io/projects/sT_SLT3n0NNab0a-ZD7IHQ
762 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 18:28:38.88 ID:Y2TZP89X.net] お題:Hello, World!を出力中にプログラムを強制終了せよ Hello, World!が完全に出力されたらGAME OVERとする
763 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 18:45:13.28 ID:ui07Fbeq.net] >>724 Ruby Thread.new{'Hello, World!'.each_char{|c| print c; sleep 0.01}; raise 'GAME OVER'} Thread.new{exit} # => Hello, World!
764 名前:デフォルトの名無しさん [2022/08/21(日) 18:49:48.17 ID:ecIOs+Jg.net] >>701 C# https://paiza.io/projects/D1PZTVPBn2qnksCQnwYQmw?language=csharp
765 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 18:51:27.42 ID:ui07Fbeq.net] >>725 訂正 Thread.new{'Hello, World!'.each_char{|c| print c; sleep 0.01}; raise 'GAME OVER'} Thread.new{exit!} # => H
766 名前:デフォルトの名無しさん [[ここ壊れてます] .net] >>703 C# https://paiza.io/projects/HzrEP1l1vX4Z3JUqmHSUwg
767 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] >>724 c https://ideone.com/xaMOR7
768 名前:デフォルトの名無しさん [[ここ壊れてます] .net] >>648 C# https://paiza.io/projects/2cxaJzBNbukA4-EolW07Cw
769 名前:729 mailto:sage [2022/08/22(月) 19:20:01.17 ID:7CA3B9Dd.net] >>724 c https://ideone.com/k8R7TU ・>>729 どう見ても正常終了です。本当にありがとうございました。 ・子プロセスの強制終了を見届けてから自分自身も強制終了
770 名前:デフォルトの名無しさん [2022/08/25(木) 15:38:14.81 ID:bJn+zm7R.net] >>724 その強制終了って人間が Ctrl + C を押すなどしてやるという意味? 間に合わずに全部出力し切った場合は GAME OVER 出すということ?
771 名前:デフォルトの名無しさん mailto:sage [2022/08/25(木) 15:52:23.73 ID:BfuXla1W.net] >>732 強制終了→exit(0)などでプログラム的に終了させる GAME OVER→お題の達成失敗
772 名前:デフォルトの名無しさん mailto:sage [2022/08/25(木) 16:09:53.36 ID:6j74uL6b.net] 54.144.0.0/12といったどこかで見たことあるような形式の文字列を入力すると ^(?!(54.144.|54.145.|54.146.|54.147.|54.148.|54.149.|54.150.|54.151.|54.152.|54.153.|54.154.|54.155.|54.156.|54.157.|54.158.|54.159.)) といったいい感じの文字列が標準出力に出力されるやつ、誰か作れますか? 例の他にも54.208.0.0/13 54.216.0.0/14 54.192.0.0/12 54.160.0.0/11 54.220.0.0/15といった似た感じの文字列が入力され やはりいい感じに処理された別の文字列が出力されます できればライセンスはゼロ条項BSDライセンスでお願いします
773 名前:デフォルトの名無しさん [[ここ壊れてます] .net] ま、まあ、作れなくはないかな…
774 名前:デフォルトの名無しさん [2022/08/25(木) 18:48:07.98 ID:0xws5w3m.net] フワっとした頭の中にしか定義されてない案件なんて誰もこなせないぞ 本人以外は
775 名前:デフォルトの名無しさん [2022/08/25(木) 20:40:48.98 ID:0z7AphVM.net] >>734 Java https://paiza.io/projects/Fot4E7hZfbJ95P_hSbI3NQ
776 名前:デフォルトの名無しさん mailto:sage [2022/08/25(木) 21:10:16.35 ID:/BGaqBqg.net] >>734 JavaScript function _734(ip_range) { const result = []; const as = ip_range.split(/\D/).map(_ => Number(_)); const m = as.at(-1); const q = Math.floor(m / 8
777 名前:); const r = m % 8; const e = 8 - r; const l = as[q].toString(2).padStart(8, '0').slice(0, r); for (let i = 0, sup = 2 ** e; i < sup; i++) { as.splice(q, 1, Number.parseInt(l + i.toString(2).padStart(e, '0'), 2)); result.push(as.slice(0, q + 1)); } return '^(?!(' + result.map(_ => `${_.join('\\.')}${q < 3 ? '\\.' : ''}`).join('|') + '))'; } [] [ここ壊れてます]
778 名前:デフォルトの名無しさん mailto:sage [2022/08/25(木) 22:00:47.00 ID:JPPVgQ9Y.net] beer licenseでよければ書くが
779 名前:デフォルトの名無しさん mailto:sage [2022/08/26(金) 04:09:37.08 ID:NIKxWs5c.net] 割とすぐに出来るもんなんですね どちらも実用上問題なさそうな、いい感じの実行結果です >738は最新の実行環境に心当たりがなかったので確認に手間どりましたが Chromeのコンソールから実行して確認できました (cscriptで実行しようとしたらat()に対応してなかったので) いやー勉強になります、ありがとう
780 名前:デフォルトの名無しさん mailto:sage [2022/08/26(金) 04:49:22.52 ID:0rX9u4fb.net] >>740 スレタイも読めないアホは消えろ
781 名前:96 mailto:sage [2022/08/26(金) 05:19:52.33 ID:GgZblxs6.net] >>740 人をタダで利用してない?
782 名前:デフォルトの名無しさん [2022/08/26(金) 11:51:47.61 ID:d54FvNjc.net] >>733 マルチスレッドかマルチタスクで "Hello, world!" を出力する処理と、ランダムなタイミングでそれを強制終了させる処理が動くということで良いのか? そして出力中に停止できなかったら "GAME OVER" が最後に出ると。
783 名前:デフォルトの名無しさん mailto:sage [2022/08/26(金) 14:32:15.45 ID:71YXfdUw.net] >>743 その実装でもいいよ 題意はいかにHello, World!出力中にプログラムを終了させるかだから sleep挟んでもいい
784 名前:デフォルトの名無しさん [2022/08/26(金) 18:44:07.03 ID:NQ4mbOjq.net] >>733 #!/usr/bin/env sh cat <<"EOL" | perl -ne '/(Hello, World)(?:[!])/ ? die " $1 got failed." : print' > foo > bar > baz > Hello, World > Hello, World > Hello, World! > you can't see me, right? > EOL foo bar baz Hello, World Hello, World Hello, World got failed. at -e line 1, <> line 6.
785 名前:デフォルトの名無しさん mailto:sage [2022/08/26(金) 21:28:18.28 ID:NIKxWs5c.net] はて?プログラミングのお題を投げて、競技的な興味をもって答えたくなった人が答え その回答に興味があれば参照して「普段は扱ってないこの言語だとそういうやりかたなのか」 「自分とは違うスマートなやり方があったのか」と思ったりするスレ、という理解でしたが もしかして投げたときに”お題”という文字が抜けてたのが問題ありましたか? 概ね正解とするに足る実行結果を、実用上問題なさそうと表現したことが拙かったですか? もしそうなら申し訳ない、次からは気をつけます
786 名前:デフォルトの名無しさん mailto:sage [2022/08/26(金) 21:31:39.94 ID:NIKxWs5c.net] ついでというかなんというか>734の自分のお題に対する自己回答です(色々と手抜きしてありますが) #!/usr/bin/ksh function proc { typeset A B C D E F N M L I IFS='.','/' read A B C D E <<XYZ $1 XYZ let N="(${E}+8)/8" let M="8-(${E}%8)" if [ $N -eq 5 ]; then echo -n "${A}.${B}.${C}.${D}"; return; fi set -A BASE dummy "" "${A}." "${A}.${B}." "${A}.${B}.${C}." set dummy $A $B $C $D; shift $N; F=$1; let L="$F-1+(1<<$M)" for I in `seq $F $L`; do echo -n "|${BASE[$N]}${I}."; done; } if [ $# -eq 0 ]; then echo "need CIDR/s"; exit 65; fi set -A CIDR dummy $@; echo -n "^(?!dummy"; for I in `seq 1 $#`; do proc ${CIDR[$I]}; done; echo ")" exit 0
787 名前:96 mailto:sage [2022/08/29(月) 02:30:43.54 ID:QAZMtAov.net] >>734 Perl5 for (<>) { print; @a = /(\d+)/g; $w = pop @a; $o = ($w - 1) >> 3; $m = $w - $o * 8; $n = 2**(8 - $m); $l = join '.', @a[0..$o-1]; $l .= '.' if '' ne $l; $h = $a[$o] & (255 << (8 - $m)); $r = $o < 3 ? '.' : ''; @b = map{$l . ($h + $_) . $r} 0..($n - 1); print '^(?!(' . join('|', @b) . "))\n"; print "\n"; } ※見易くするためインデントを全角スペースに置換しています。 実行例: https://ideone.com/VBJMMo
788 名前:96 mailto:sage [2022/08/29(月) 02:55:16.14 ID:QAZMtAov.net] >>748 128.0.0.0/1 の結果が変 バグ入りだ、ゴメンチャイ
789 名前:96 mailto:sage [2022/08/29(月) 03:01:45.22 ID:QAZMtAov.net] あれ?いいのかな? 仕様を推測して作ったけどちょっと混乱したかも… 寝るわ
790 名前:デフォルトの名無しさん [2022/09/09(金) 22:29:09.28 ID:zwPgoVui.net] お題 長方形の1辺の長さのリストと正方形の面積のリストが入力されます それぞれの正方形の面積について 長方形の1辺の長さのリストから2つを選んで掛け合わせ長方形の面積を計算します 長方形の面積が正方形の面積以上でかつ最小の面積となる組み合わせを探して出力してください 見つからなかった場合はerrorを出力してください (例) // 1辺の長さのリスト [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1] // 正方形の面積のリスト [390, 240, 37, 396, 198, 99, 242, 53, 329, 202] // 出力 390:error 240:16,17 37:3,13 396:error 198:11,18 99:6,17 242:16,17 53:3,18 329:error 202:13,16
791 名前:デフォルトの名無しさん mailto:sage [2022/09/09(金) 23:02:00.41 ID:Un8DgV3E.net] >>751 a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1] b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202] c = a.group_by(&:itself).values.map{_1.size > 2 ? _1[0, 2] : _1}.flatten.permutation(2).map{[_1 * _2, [_1, _2].sort]}.uniq.sort.to_h b.each{|s| puts '%d: %s' % [s, c.find{_1[0] >= s}&.[](1)&.join(?,) || :error]} # => 390: error 240: 16,17 37: 3,13 396: error 198: 11,18 99: 6,17 242: 16,17 53: 3,18 329: error 202: 13,16
792 名前:デフォルトの名無しさん mailto:sage [2022/09/09(金) 23:46:43.88 ID:3788iROh.net] >>751 ruby https://ideone.com/hBHe51 def f(as, bs) c = as.combination(2).map(&:sort).to_a.uniq.map {|x, y| [x * y, x, y]}.sort_by(&:first).each_cons(2) bs.map do |b| d = c.find {|e, f| e[0] < b && b <= f[0]} "#{b}:#{d ? d[1][1..2].join(',') : 'error'}" end end a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1] b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202] puts f(a, b)
793 名前:753 mailto:sage [[ここ壊れてます] .net] >>751 https://ideone.com/2UDrLT ・>>753 を若干の整理 ・>>752 さんのを見て&.を勉強 def f(a, b) c = a.combination(2).map(&:sort).to_a.uniq.map {|x, y| [x * y, x, y]}.sort b.map {|b| "#{b}:#{c.find {|e| b <= e[0]}&.[](1..2)&.join(',') || 'error'}"} end a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1] b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202] puts f(a, b)
794 名前:デフォルトの名無しさん mailto:sage [2022/09/10(土) 00:34:04.51 ID:sDbT/M8A.net] みんな解くのはえーなぁ
795 名前:96 mailto:sage [2022/09/10(土) 02:29:07.85 ID:7pWsuKpo.net] >>751 Perl5 $ls = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]; $ss = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]; sub f {2 < @_ ? (f(@_[1..$#_]), map{[$_[0] * $_, $_[0], $_]} @_[1..$#_]) : ()} @rs = sort{$$a[0] <=> $$b[0]} f @$ls; for $aa (@$ss) { @b = grep{$aa <= $$_[0]} @rs; print @b ? "$aa:$b[0][1],$b[0][2]\n" : "$aa:error\n"; } 実行結果 $ perl 20_751.pl 390:error 240:17,16 37:3,13 396:error 198:18,11 99:17,6 242:17,16 53:3,18 329:error 202:13,16
796 名前:デフォルトの名無しさん mailto:sage [2022/09/10(土) 11:29:46.54 ID:q8enYz1J.net] >>751 octave https://ideone.com/WGkm27 function c = f(a, b) u = unique(sort(nchoosek(a, 2), 2), 'rows'); p = prod(u, 2); c = cell(size(b)); for i = 1:numel(b) d = min(p(b(i) <= p)); if isempty(d) c{i} = sprintf('%d:error', b(i)); else s = strjoin(arrayfun(@(n) {num2str(n)}, u(p == d, :)), ','); c{i} = sprintf('%d:%s', b(i), s); end end end a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]; b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]; cellfun(@disp, f(a, b))
797 名前:デフォルトの名無しさん mailto:sage [2022/09/10(土) 13:32:08.25 ID:q8enYz1J.net] >>751 c https://ideone.com/Cqx8M3 #include <stdio.h> void f(int *a, int *b, int na, int nb) { int i, j, k, found, min, x, y; for (i = 0; i < nb; i++) { found = 0; for (j = 0; j < na; j++) for (k = 0; k < na; k++) if (j != k && b[i] <= a[j] * a[k] && (!found || a[j] * a[k] < min)) found = 1, min = a[j] * a[k], x = a[j], y = a[k]; if (!found) printf("%d:error\n", b[i]); else printf("%d:%d,%d\n", b[i], x, y); } } int main() { int a[] = {17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1}; int b[] = {390, 240, 37, 396, 198, 99, 242, 53, 329, 202}; f(a, b, sizeof a / sizeof *a, sizeof b / sizeof *b); return 0; }
798 名前:デフォルトの名無しさん [2022/09/10(土) 19:18:11.93 ID:PLqR4TKQ.net] >>751 Kotlin 可能な限り漢字を使ったプログラムにしてみたが、余計にゴチャゴチャしてしまったかな? https://paiza.io/projects/ay4L7Wchnt6lGUvkh6h21A 240 が 16, 17 ではなく 17, 16 のように出るが、まあよかろう。 (リストの順番で覚えているのでこうなる)。
799 名前:デフォルトの名無しさん [2022/09/10(土) 22:25:19.23 ID:7X0yi8nW.net] お題 >>751 の問題について 長方形の1辺の長さをソートして縦方向と横方向に並べて交差するところに長方形の面積を入れて表にします https://downloadx.getuploader.com/g/angel556/90/%E3%81%97%E3%82%83%E3%81%8F%E3%81%A8%E3%82%8A%E6%B3%95.png この図は50を探すところを描いています 青色の斜めの値の中から正方形の面積以上かつ最小の値を見つけその場所を出発点とします 長方形の面積が正方形の面積よりも大きい場合は表を上にたどり、長方形の面積が正方形の面積よりも小さい場合は表を右にたどります 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます しゃくとり虫が動いてるように見えるのでこれをしゃくとり法と呼ぶことにします >>751 の問題をしゃくとり法で解いてください
800 名前:デフォルトの名無しさん [2022/09/10(土) 22:51:25.27 ID:7X0yi8nW.net] > 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます これは間違いかも、これだと55を見つけられない 各自で考えていただければありがたく
801 名前:デフォルトの名無しさん [2022/09/10(土) 22:52:41.16 ID:7X0yi8nW.net] いや、いいのか!? ダメだ混乱してきたもうパニックですわ
802 名前:デフォルトの名無しさん mailto:sage [2022/09/10(土) 22:57:53.10 ID:sDbT/M8A.net] おちつけ
803 名前:デフォルトの名無しさん [2022/09/10(土) 23:12:42.56 ID:7X0yi8nW.net] >>760 > 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます これは間違いでした、上方向から右方向に変わる直前の値が回答候補ですね 50を探す場合、56,55,51が候補です https://downloadx.getuploader.com/g/angel556/91/%E3%81%97%E3%82%83%E3%81%8F%E3%81%A8%E3%82%8A%E6%B3%95_%E8%A8%82%E6%AD%A3.png
804 名前:素数を数えるんだ [2022/09/10(土) 23:25:22.59 ID:22kPJ9rf.net] 2, 3, 5, 7, 11, 13, 17, 19......
805 名前:デフォルトの名無しさん [2022/09/11(日) 01:04:25.98 ID:/LH0BDzE.net] お題 2~19までの素数を生成し掛け算の表を出力してください
806 名前:デフォルトの名無しさん [2022/09/12(月) 01:50:52.46 ID:xawmAmgS.net] >>751 Java https://paiza.io/projects/9bNWiYGC-KndYn1QmRsYIA
807 名前:デフォルトの名無しさん [2022/09/12(月) 10:44:10.79 ID:VxR6iqOp.net] >>764 Kotlin https://paiza.io/projects/caNg1GtDFhBF9Rk6AwC52Q 出力をHTMLにするとそれっぽく表示できた。 50は正方形の面積リストの最初に入れたが例の画像と同じような見た目になった。
808 名前:デフォルトの名無しさん mailto:sage [2022/09/12(月) 18:32:56.65 ID:eGlSQ2pk.net] >>751 ttps://ideone.com/mFYcmC >>764 ttps://ideone.com/vwjQvN
809 名前:デフォルトの名無しさん [2022/09/13(火) 22:22:38.95 ID:B0VHMNYc.net] >>766 C# https://paiza.io/projects/mR6tnluHgitHnC0VJWc6Wg
810 名前:デフォルトの名無しさん [2022/09/13(火) 22:25:19.07 ID:V4Kz63G0.net] お題:OpenGLで四角形を3つ描画せよ 一番下の四角形が1番大きく赤色 その上にのってる四角形は2番目に大きく緑色 さらにその上にのってる四角形は3番目に大きく青色
811 名前:デフォルトの名無しさん [2022/09/14(水) 12:47:57.36 ID:LkrioAg+.net] お題 フェアフィールドの公式は、西暦1年1月1日から指定した日付までの日数を求めるもので次の式です 日数 = (365 * Y) + (Y / 4) - (Y / 100) + (Y / 400) + (306 * (M + 1) / 10) + D - 428 UNIX時間は、西暦1970年1月1日午前0時0分0秒からの経過秒数です フェアフィールドの公式を用いてUNIX時間から年月日を求めて出力してください (例) 1000000000 → 2001-09-09T01:46:40 1234567890 → 2009-02-13T23:31:30
812 名前:デフォルトの名無しさん mailto:sage [2022/09/14(水) 15:20:59.73 ID:s+3MjQLV.net] >>772 bat @echo off &setlocal call :Conv_uTime2iso 1000000000 call :Conv_uTime2iso 1234567890 pause&exit /b :Conv_uTime2iso set /a "GD=(UT=%~1)/86400+719468, h=100+(R=UT%%86400)/3600, n=100+(R%%=3600)/60, s=100+R%%60, y=400*(GD/146097), y+=100*(i=(R=GD%%146097)/36524), y+=(R%%=36524)/1461*4, y+=j=(R%%=1461)/365, R=R%%365+365*(L=(i|j)/4), f=(k=(R*5+2)/153)/10, d=R+101-(306*k+4)/10, m=k+103-f*12, y+=f-L" echo %y%-%m:~-2%-%d:~-2%T%h:~-2%:%n:~-2%:%s:~-2%
813 名前:デフォルトの名無しさん mailto:sage [2022/09/15(木) 05:31:46.38 ID:LgD4XKTt.net] //>>772 JavaScript function _772(epoch) { /**/epoch = BigInt(epoch);if (epoch < 0n) {throw new RangeError('');} /**/const lastDateOfMonth = (_ => Object.fromEntries(Array.from([, , , ..._.slice(2), _[0], _[1]].entries()).filter(([, v]) => v)))(Array.from(new Array(12).keys()).map(m => BigInt(new Date(2_022, m + 1, 0, 0, 0 - new Date().getTimezoneOffset()).getDate()))); /**/const FAIRFIELD = fairfield(1_969n, 12n, 31n) + epoch / 86_400n + 1n; /**/let [Y, M, D] = [1_969n, 13n, 1n]; /**/for (; D <= 58n; D++) {if (FAIRFIELD == fairfield(Y, M, D)) {return {Y: 1_970n, M: 1n + D / 31n, D: D % 31n};}} /**/for (Y = 1_970n; Y <= Number.MAX_SAFE_INTEGER; Y++) { /**//**/for (M = 3n, D = 1n; D <= 366n; D++) { /**//**//**/if (FAIRFIELD == fairfield(Y, M, D)) { /**//**//**//**/if (D == 366n) { /**//**//**//**//**/if (isLeapFullYear(Y + 1n)) { /**//**//**//**//**//**/
814 名前:return {Y: Y + 1n, M: 2n, D: 29n}; /**//**//**//**//**/} else { /**//**//**//**//**//**/return {Y: Y + 1n, M: 3n, D: 1n}; /**//**//**//**//**/} /**//**//**//**/} else { /**//**//**//**//**/for (; lastDateOfMonth[M] <= D; D -= lastDateOfMonth[M++]); /**//**//**//**//**/if (M <=12n) { /**//**//**//**//**//**/return {Y, M, D}; /**//**//**//**//**/} else { /**//**//**//**//**//**/return {Y: Y + 1n, M: M % 12n, D}; /**/}}}}} /**/function isLeapFullYear(Y) {return Y % 4n == 0n && Y % 100n != 0n || Y % 400n == 0;} /**/function fairfield(Y, M, D) {return Y * 365n + Y / 4n - Y / 100n + Y / 400n + 306n * (M + 1n) / 10n + D - 428n;} } [] [ここ壊れてます]
815 名前:デフォルトの名無しさん mailto:sage [2022/09/15(木) 22:07:10.52 ID:AaudQZzp.net] うるう秒のテーブルがないと求められなくない?
816 名前:デフォルトの名無しさん mailto:sage [2022/09/16(金) 00:34:31.77 ID:ETiYX3D6.net] 400年で146097日増えるみたいだから適当にバイアス付けて146097で割る予感
817 名前:デフォルトの名無しさん mailto:sage [2022/09/16(金) 00:35:51.49 ID:ETiYX3D6.net] 違う 適当にバイアス付けて÷365.2425だ
818 名前:デフォルトの名無しさん mailto:sage [2022/09/16(金) 01:05:26.42 ID:/mniU0r8.net] フェアフィールドの公式てwikipediaに書かれている出自不明な公式でも何でも無いでっち上げの記事でしょ 式の解説文がこれまた頭悪くて、なのに誰も修正しないという
819 名前:デフォルトの名無しさん mailto:sage [2022/09/16(金) 01:13:35.77 ID:mMDmJ4/Z.net] グレゴリオ歴のとこに解説載ってるよ https://ja.m.wikipedia.org/wiki/%E3%82%B0%E3%83%AC%E3%82%B4%E3%83%AA%E3%82%AA%E6%9A%A6
820 名前:デフォルトの名無しさん [2022/09/16(金) 21:18:24.66 ID:k/2PI65L.net] >>772 Java https://paiza.io/projects/GkxKdFMCsjdM1lSoxk8mhQ
821 名前:デフォルトの名無しさん [2022/09/17(土) 17:48:30.91 ID:fw6a0lZo.net] お題 2*2の整数行列がいくつか与えられる。 これらを適当な順番で掛け合わせる(行列積)ことで零行列を作ることが可能かどうか判定せよ。 ただし、同じ行列を2回以上使用してもよい。 例 [[1, 0], [0, 0]], [[0, -1], [1, 0]] =>可能(行列1*行列2*行列1==0) [[1, 2], [3, 4]], [[0, -3], [2, 4]] =>不可能(正則行列だから)
822 名前:デフォルトの名無しさん mailto:sage [2022/09/17(土) 18:42:03.76 ID:ZMguHADz.net] >>781 零因子の発掘ですか、濃ゆいお題ですね…
823 名前:デフォルトの名無しさん mailto:sage [2022/09/18(日) 11:34:42.07 ID:qZaavGGf.net] お題:循環参照を開放せよ。 java https://ideone.com/xe64l4 ・ガベコレの対象になったのを確認まででヨシとす c++ https://ideone.com/1gXTAX
824 名前:デフォルトの名無しさん [2022/09/18(日) 12:52:34.73 ID:BMeW7wRv.net] >>783 Java https://paiza.io/projects/KPlcyOa7-yBMKlBes0ImXg
825 名前:デフォルトの名無しさん [2022/09/18(日) 16:37:27.93 ID:BMeW7wRv.net] >>783 Python https://paiza.io/projects/xCNkUNUSXbwUSWTf8OEA-Q
826 名前:デフォルトの名無しさん [2022/09/19(月) 02:47:41.37 ID:/08McGz8.net] >>783 Kotlin https://paiza.io/projects/dZhh0NhaeEwnxD45W6V7Ng Java VM 上で動くから Java と同じで参照している変数を null にして System.gc() するだけ。
827 名前:デフォルトの名無しさん mailto:sage [2022/09/24(土) 01:13:05.90 ID:uYRJl5GL.net] >>772 亀レスHaskell https://ideone.com/y7jYXr 色々考えて結局テーブル作って処理という最後の手段 わざわざ公開するほどのもんでもないけど一区切りつけるため 暦の勉強になった なんで大の月と小の月の配置はこんなみっともないことになってるんだろ? 歴史家が調べでよくわからんみたいだけど
828 名前:デフォルトの名無しさん [2022/09/24(土) 04:40:38.82 ID:6vPOYH6k.net] >>772 だめ。その式に当てはめると必ずずれる。
829 名前:デフォルトの名無しさん mailto:sage [2022/09/24(土) 07:42:29.88 ID:aunrhsr3.net] うるう秒を考慮しないとずれる
830 名前:デフォルトの名無しさん mailto:sage [2022/09/24(土) 09:42:29.34 ID:v3rIJe0P.net] >>788 問題には書かれていないけれどその式は条件によって前処理が必要 ・1-2月は前年として扱う。 1年を3-14月として計算 m=1 or 2 の時 y=y-1, m=m+12 >>789 UNIXTIMEにうるう秒なんて無い
831 名前:デフォルトの名無しさん mailto:sage [2022/09/24(土) 11:33:11.17 ID:aunrhsr3.net] >>790 日付に変換する過程でうるう秒考慮しないとずれるでしょう
832 名前:デフォルトの名無しさん mailto:sage [2022/09/24(土) 12:13:55.28 ID:v3rIJe0P.net] >>791 UNIXTIMEは「epocからの実時間の秒数」では無い 実時間から、うるう秒は加減され含まれず、1日は86400秒換算 だからそれを日時に変換しても「うるう秒の時刻を表せない」だけでズレなど発生しない
833 名前:デフォルトの名無しさん mailto:sage [2022/09/24(土) 12:34:24.41 ID:aunrhsr3.net] >>792 レスありがとう。不勉強だったわ。
834 名前:デフォルトの名無しさん [2022/09/24(土) 16:57:05.53 ID:6vPOYH6k.net] >>790 出題ミスか。 これまでに作られたプログラムはその辺のことを考慮したプログラムになっていたのかな? だったら分かってたんだからその辺の事を書いておいて欲しかったな。
835 名前:デフォルトの名無しさん mailto:sage [2022/09/24(土) 22:38:52.94 ID:Fvr5cAu6.net] wikiにはそこまで詳しい解説はなかったけど式みたらわかったけどな ⌊(m+1)/30.6⌋ という項 ⌊x/30.6⌋という関数は0,1,2,3,4となる値が 31,30,31,30,31,31,(繰り返し)‥① と変化してコレを周期153で繰り返す 月の長さは3月から見ると 31,30,31,30,31,31,30,31,30,31,31,28(29) となってるから①を一月分左に平行移動すれば良いとわかる からの⌊(m+1)/30.6⌋
836 名前:デフォルトの名無しさん mailto:sage [2022/09/24(土) 22:45:27.51 ID:Fvr5cAu6.net] >>795 間違えた ⌊m×30.6⌋という関数は0,1,2,3,4,‥の時の値が 31,31,30,31,30 の繰り返し 件の公式のmの項はコレを一月分ずらしてる
837 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 02:17:31.98 ID:UDkh+W3M.net] お題:4回呼び出したらその内の1回が失敗する関数を書け 失敗した場合は「failed」と表示、成功した場合は「ok」と表示せよ
838 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 09:47:46.29 ID:+QlM3L0o.net] seed変数はパラメータ渡しで良いですか
839 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 19:05:59.31 ID:WptV1D3q.net] >>797 c https://ideone.com/PIpRmD void f() { static int i = 0, j, k = 4; if (i == 0) j = rand() % k; puts(i == j ? "failed" : "ok"); i = (i + 1) % k; }
840 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 22:51:23.95 ID:7XofIB3A.net] >>797 Ruby def f $f_cnt||=0 puts$f_cnt==3||(rand(4)==~-$f_cnt+=1)?:failed: :ok end
841 名前:デフォルトの名無しさん [2022/09/30(金) 04:16:06.13 ID:F2zw9Wj+.net] >>797 Kotlin https://paiza.io/projects/QipeLOxxfW3_GNBarDA-8w Int型1つ分のワークエリアを呼ぶ側から与えてそこでカウントして必ず4回の内1回が失敗になる。 乱数を使うと4回の内1回失敗ではなくなる可能性があるので使っていない。 引数としてInt型の参照を渡しても中身を変えられないのでIntArray(Java なら int[] に相当)で1要素作ってIntArrayの参照を渡している。 クラスでやっても良かったが、わざわざクラス作るほどのことでもないと思ったのでこの方式にした。
842 名前:デフォルトの名無しさん [2022/10/01(土) 01:23:09.73 ID:I5nFps2z.net] >>797 Java https://paiza.io/projects/AOePb_OJDX44jb_jRddrsw?language=java
843 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] お題: あみだ https://imgur.com/6XtTF0E.png 画像のようなマス目の上に直線を引いたあみだを次のように表現することにします。 N: 縦線の本数(列数) M: 橋が架けられている行数 B: M行N-1列の二次元配列で、橋が架けられていたら1、そうでない場合は0が格納されています。 あらかじめ、あみだの入力には左から0〜N-1までの整数が割り振られていることにします。また、同じ行に橋が二つ連続で隣り合うことは禁止されています。 一応の制約: 2 <= N <= 100, 1 <= M <= 100 あみだに橋が1つも存在しない場合、M=1となり、Bは1行N-1列の大きさで、すべての要素が0の2次元配列になることにします。 お題1: N, M, Bが与えられるので、あみだの出力を求めてください。(入出力のフォーマットは各自で適宜変更してもいいです。) 入力例(画像のもの): 4 4 1 0 1 0 1 0 1 0 0 0 1 0 出力例: 3 0 1 2 お題2: Nとあみだの出力が与えられるので、Mをできるだけ小さくしたあみだを求め、Mと Bの一例 を表示してください。 入力例: 5 2 4 0 1 3 出力例: 3 0 1 0 1 1 0 1 0 0 1 0 0 あみだ関連のお題は過去スレで何回か見かけたがろくに相手にされていなかったのであげてみる。
844 名前:デフォルトの名無しさん mailto:sage [2022/10/10(月) 00:03:47.74 ID:Em47unOv.net] reduced expressionのまとめられる積を出来るだけまとめたものが必ず最短になるなら簡単なんだけどな
845 名前:デフォルトの名無しさん mailto:sage [2022/10/10(月) 12:25:25.51 ID:CId/Nblu.net] Gapとか使えばいいんじゃね
846 名前:デフォルトの名無しさん mailto:sage [2022/10/10(月) 15:00:17.69 ID:AiOpkeUk.net] reduced expression の長さ自体の計算は簡単だけどこの問題は"reduced expressionの長さを求めよ"ではないからそこまで数学的に単純じゃないよ
847 名前:デフォルトの名無しさん mailto:sage [2022/10/10(月) 20:53:48.73 ID:uiS3Rjx/.net] >>803 お題1 ttps://paiza.io/projects/tUaZay_JvtZRkIaUhjYF7Q お題2 ttps://paiza.io/projects/1yDZy-Vx-C9Q9Z_Oc03Mtw お題1とお題2でそれぞれ入力と出力をあわせるようにした Mをできるだけ小さくって難しいな これでいいのかわからん
848 名前:デフォルトの名無しさん mailto:sage [2022/10/10(月) 21:09:44.88 ID:TC3V9vEZ.net] アルゴリズムが存在するのは明らかだしひとつ答え見つけるアルゴリズムも簡単 でもreduced expression見つけるアルゴリズムと同程度のアルゴリズムとなると途端に難しくなる reduced expressionの場合には置換σのreduced expressionを見つけるには (1) σ = idであるか否か判定する、σ=idなら空列を返して終了 (2) そうでない場合σ(i) > σ(i+1)であるiを見つける、見つけたiに対してτ=σ(i i+1)とおいてτほreduced expression sを求める (3)
849 名前:デフォルトの名無しさん mailto:sage [2022/10/10(月) 21:16:09.04 ID:TC3V9vEZ.net] (3) s ( i i+1 )を返して終了 でもとまる ここでミソはreduced expressionの1番右は( i i+1 )と決め打ち出来ること、コレがあるから多項式時間で終わる しかしアミダの場合1番右の初手をそんなに簡単に決定出来るかが分からん 初手の可能性は転置全部の可換な集合のうち極大であるもの全体のいずれかに最短が入る事は簡単に示せるけど、そのような極大な可換集合をどれとっても必ずうまくいくことの証明がむずかしい 多分出来るんだとは思うけど正直数学板で話題にするような話でプロ板で出すような問題じゃない気がする
850 名前:441 [2022/10/11(火) 10:43:04.37 ID:Q+yx5xdI.net] >>803 最近やっとpythonを学び始めたレベルだから合ってるかわからん コメントとかもちゃんと書いたほうがいいのだろう
851 名前:か 暇な人添削してくれると嬉しい お題1 https://ideone.com/uQ0lEu お題2 https://ideone.com/IvtRj2 [] [ここ壊れてます]
852 名前:デフォルトの名無しさん [2022/10/11(火) 12:04:38.77 ID:xv8Y5zzF.net] しゃぶれよ
853 名前:96 mailto:sage [2022/10/13(木) 07:01:45.31 ID:JNehkz2R.net] >>773 自分でやれ
854 名前:デフォルトの名無しさん [2022/10/22(土) 02:49:22.02 ID:ql0xnxKt.net] やってるやん
855 名前:デフォルトの名無しさん [2022/10/24(月) 10:24:26.56 ID:sCRx2Xsd.net] お題 プリンタAは1分間に1ページ印刷できます プリンタBは3分間に1ページ印刷できます プリンタCは5分間に1ページ印刷できます プリンタを3台同時に動かして100ページを印刷します 100ページを印刷し終わるのに何分掛かるか求めてください
856 名前:デフォルトの名無しさん [2022/10/24(月) 12:38:35.85 ID:PxuF7JuF.net] >>814 perl5 https://paiza.io/projects/6hPV0H0VMJ6oloujnOVF8w