プログラミングのお題スレ Part20

■ このスレッドは過去ログ倉庫に格納されています
2021/06/19(土) 00:02:57.84ID:MQWrKSb7
プログラミングのお題スレです。

【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文
  結果がある場合はそれも

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/

宿題は宿題スレがあるのでそちらへ。

※前スレ
プログラミングのお題スレ Part19
https://mevius.5ch.net/test/read.cgi/tech/1606662245/
2022/09/09(金) 23:02:00.41ID:Un8DgV3E
>>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
2022/09/09(金) 23:46:43.88ID:3788iROh
>>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)
754753
垢版 |
2022/09/10(土) 00:24:11.29ID:4GiNoMjQ
>>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)
2022/09/10(土) 00:34:04.51ID:sDbT/M8A
みんな解くのはえーなぁ
75696
垢版 |
2022/09/10(土) 02:29:07.85ID:7pWsuKpo
>>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
2022/09/10(土) 11:29:46.54ID:q8enYz1J
>>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))
2022/09/10(土) 13:32:08.25ID:q8enYz1J
>>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;
}
759デフォルトの名無しさん
垢版 |
2022/09/10(土) 19:18:11.93ID:PLqR4TKQ
>>751
Kotlin

可能な限り漢字を使ったプログラムにしてみたが、余計にゴチャゴチャしてしまったかな?

https://paiza.io/projects/ay4L7Wchnt6lGUvkh6h21A

240 が 16, 17 ではなく 17, 16 のように出るが、まあよかろう。
(リストの順番で覚えているのでこうなる)。
760デフォルトの名無しさん
垢版 |
2022/09/10(土) 22:25:19.23ID:7X0yi8nW
お題

>>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の問題をしゃくとり法で解いてください
761デフォルトの名無しさん
垢版 |
2022/09/10(土) 22:51:25.27ID:7X0yi8nW
> 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます

これは間違いかも、これだと55を見つけられない
各自で考えていただければありがたく
762デフォルトの名無しさん
垢版 |
2022/09/10(土) 22:52:41.16ID:7X0yi8nW
いや、いいのか!? ダメだ混乱してきたもうパニックですわ
2022/09/10(土) 22:57:53.10ID:sDbT/M8A
おちつけ
764デフォルトの名無しさん
垢版 |
2022/09/10(土) 23:12:42.56ID:7X0yi8nW
>>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
765素数を数えるんだ
垢版 |
2022/09/10(土) 23:25:22.59ID:22kPJ9rf
2, 3, 5, 7, 11, 13, 17, 19......
766デフォルトの名無しさん
垢版 |
2022/09/11(日) 01:04:25.98ID:/LH0BDzE
お題
2~19までの素数を生成し掛け算の表を出力してください
767デフォルトの名無しさん
垢版 |
2022/09/12(月) 01:50:52.46ID:xawmAmgS
>>751
Java
https://paiza.io/projects/9bNWiYGC-KndYn1QmRsYIA
768デフォルトの名無しさん
垢版 |
2022/09/12(月) 10:44:10.79ID:VxR6iqOp
>>764
Kotlin
https://paiza.io/projects/caNg1GtDFhBF9Rk6AwC52Q

出力をHTMLにするとそれっぽく表示できた。
50は正方形の面積リストの最初に入れたが例の画像と同じような見た目になった。
2022/09/12(月) 18:32:56.65ID:eGlSQ2pk
>>751
ttps://ideone.com/mFYcmC

>>764
ttps://ideone.com/vwjQvN
770デフォルトの名無しさん
垢版 |
2022/09/13(火) 22:22:38.95ID:B0VHMNYc
>>766
C#
https://paiza.io/projects/mR6tnluHgitHnC0VJWc6Wg
771デフォルトの名無しさん
垢版 |
2022/09/13(火) 22:25:19.07ID:V4Kz63G0
お題:OpenGLで四角形を3つ描画せよ
一番下の四角形が1番大きく赤色
その上にのってる四角形は2番目に大きく緑色
さらにその上にのってる四角形は3番目に大きく青色
772デフォルトの名無しさん
垢版 |
2022/09/14(水) 12:47:57.36ID:LkrioAg+
お題

フェアフィールドの公式は、西暦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
2022/09/14(水) 15:20:59.73ID:s+3MjQLV
>>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%
2022/09/15(木) 05:31:46.38ID:LgD4XKTt
//>>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)) {
/**//**//**//**//**//**/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;}
}
2022/09/15(木) 22:07:10.52ID:AaudQZzp
うるう秒のテーブルがないと求められなくない?
2022/09/16(金) 00:34:31.77ID:ETiYX3D6
400年で146097日増えるみたいだから適当にバイアス付けて146097で割る予感
2022/09/16(金) 00:35:51.49ID:ETiYX3D6
違う
適当にバイアス付けて÷365.2425だ
2022/09/16(金) 01:05:26.42ID:/mniU0r8
フェアフィールドの公式てwikipediaに書かれている出自不明な公式でも何でも無いでっち上げの記事でしょ
式の解説文がこれまた頭悪くて、なのに誰も修正しないという
2022/09/16(金) 01:13:35.77ID:mMDmJ4/Z
グレゴリオ歴のとこに解説載ってるよ
https://ja.m.wikipedia.org/wiki/%E3%82%B0%E3%83%AC%E3%82%B4%E3%83%AA%E3%82%AA%E6%9A%A6
780デフォルトの名無しさん
垢版 |
2022/09/16(金) 21:18:24.66ID:k/2PI65L
>>772
Java
https://paiza.io/projects/GkxKdFMCsjdM1lSoxk8mhQ
781デフォルトの名無しさん
垢版 |
2022/09/17(土) 17:48:30.91ID:fw6a0lZo
お題
2*2の整数行列がいくつか与えられる。
これらを適当な順番で掛け合わせる(行列積)ことで零行列を作ることが可能かどうか判定せよ。
ただし、同じ行列を2回以上使用してもよい。


[[1, 0], [0, 0]], [[0, -1], [1, 0]] =>可能(行列1*行列2*行列1==0)
[[1, 2], [3, 4]], [[0, -3], [2, 4]] =>不可能(正則行列だから)
2022/09/17(土) 18:42:03.76ID:ZMguHADz
>>781
零因子の発掘ですか、濃ゆいお題ですね…
2022/09/18(日) 11:34:42.07ID:qZaavGGf
お題:循環参照を開放せよ。

java
https://ideone.com/xe64l4
・ガベコレの対象になったのを確認まででヨシとす

c++
https://ideone.com/1gXTAX
784デフォルトの名無しさん
垢版 |
2022/09/18(日) 12:52:34.73ID:BMeW7wRv
>>783
Java
https://paiza.io/projects/KPlcyOa7-yBMKlBes0ImXg
785デフォルトの名無しさん
垢版 |
2022/09/18(日) 16:37:27.93ID:BMeW7wRv
>>783
Python
https://paiza.io/projects/xCNkUNUSXbwUSWTf8OEA-Q
786デフォルトの名無しさん
垢版 |
2022/09/19(月) 02:47:41.37ID:/08McGz8
>>783
Kotlin
https://paiza.io/projects/dZhh0NhaeEwnxD45W6V7Ng

Java VM 上で動くから Java と同じで参照している変数を null にして System.gc() するだけ。
2022/09/24(土) 01:13:05.90ID:uYRJl5GL
>>772
亀レスHaskell
https://ideone.com/y7jYXr
色々考えて結局テーブル作って処理という最後の手段
わざわざ公開するほどのもんでもないけど一区切りつけるため
暦の勉強になった
なんで大の月と小の月の配置はこんなみっともないことになってるんだろ?
歴史家が調べでよくわからんみたいだけど
788デフォルトの名無しさん
垢版 |
2022/09/24(土) 04:40:38.82ID:6vPOYH6k
>>772
だめ。その式に当てはめると必ずずれる。
2022/09/24(土) 07:42:29.88ID:aunrhsr3
うるう秒を考慮しないとずれる
2022/09/24(土) 09:42:29.34ID:v3rIJe0P
>>788
問題には書かれていないけれどその式は条件によって前処理が必要
・1-2月は前年として扱う。 1年を3-14月として計算
m=1 or 2 の時 y=y-1, m=m+12

>>789
UNIXTIMEにうるう秒なんて無い
2022/09/24(土) 11:33:11.17ID:aunrhsr3
>>790
日付に変換する過程でうるう秒考慮しないとずれるでしょう
2022/09/24(土) 12:13:55.28ID:v3rIJe0P
>>791
UNIXTIMEは「epocからの実時間の秒数」では無い
実時間から、うるう秒は加減され含まれず、1日は86400秒換算
だからそれを日時に変換しても「うるう秒の時刻を表せない」だけでズレなど発生しない
2022/09/24(土) 12:34:24.41ID:aunrhsr3
>>792
レスありがとう。不勉強だったわ。
794デフォルトの名無しさん
垢版 |
2022/09/24(土) 16:57:05.53ID:6vPOYH6k
>>790
出題ミスか。
これまでに作られたプログラムはその辺のことを考慮したプログラムになっていたのかな?
だったら分かってたんだからその辺の事を書いておいて欲しかったな。
2022/09/24(土) 22:38:52.94ID:Fvr5cAu6
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⌋
2022/09/24(土) 22:45:27.51ID:Fvr5cAu6
>>795

間違えた
⌊m×30.6⌋という関数は0,1,2,3,4,‥の時の値が
31,31,30,31,30
の繰り返し
件の公式のmの項はコレを一月分ずらしてる
2022/09/28(水) 02:17:31.98ID:UDkh+W3M
お題:4回呼び出したらその内の1回が失敗する関数を書け
失敗した場合は「failed」と表示、成功した場合は「ok」と表示せよ
2022/09/28(水) 09:47:46.29ID:+QlM3L0o
seed変数はパラメータ渡しで良いですか
2022/09/28(水) 19:05:59.31ID:WptV1D3q
>>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;
}
2022/09/28(水) 22:51:23.95ID:7XofIB3A
>>797 Ruby
def f
$f_cnt||=0
puts$f_cnt==3||(rand(4)==~-$f_cnt+=1)?:failed: :ok
end
801デフォルトの名無しさん
垢版 |
2022/09/30(金) 04:16:06.13ID:F2zw9Wj+
>>797
Kotlin

https://paiza.io/projects/QipeLOxxfW3_GNBarDA-8w

Int型1つ分のワークエリアを呼ぶ側から与えてそこでカウントして必ず4回の内1回が失敗になる。
乱数を使うと4回の内1回失敗ではなくなる可能性があるので使っていない。

引数としてInt型の参照を渡しても中身を変えられないのでIntArray(Java なら int[] に相当)で1要素作ってIntArrayの参照を渡している。
クラスでやっても良かったが、わざわざクラス作るほどのことでもないと思ったのでこの方式にした。
802デフォルトの名無しさん
垢版 |
2022/10/01(土) 01:23:09.73ID:I5nFps2z
>>797
Java
https://paiza.io/projects/AOePb_OJDX44jb_jRddrsw?language=java
2022/10/09(日) 17:49:59.08ID:tsulmG4c
お題: あみだ 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
あみだ関連のお題は過去スレで何回か見かけたがろくに相手にされていなかったのであげてみる。
2022/10/10(月) 00:03:47.74ID:Em47unOv
reduced expressionのまとめられる積を出来るだけまとめたものが必ず最短になるなら簡単なんだけどな
2022/10/10(月) 12:25:25.51ID:CId/Nblu
Gapとか使えばいいんじゃね
2022/10/10(月) 15:00:17.69ID:AiOpkeUk
reduced expression の長さ自体の計算は簡単だけどこの問題は"reduced expressionの長さを求めよ"ではないからそこまで数学的に単純じゃないよ
2022/10/10(月) 20:53:48.73ID:uiS3Rjx/
>>803
お題1
ttps://paiza.io/projects/tUaZay_JvtZRkIaUhjYF7Q

お題2
ttps://paiza.io/projects/1yDZy-Vx-C9Q9Z_Oc03Mtw

お題1とお題2でそれぞれ入力と出力をあわせるようにした
Mをできるだけ小さくって難しいな
これでいいのかわからん
2022/10/10(月) 21:09:44.88ID:TC3V9vEZ
アルゴリズムが存在するのは明らかだしひとつ答え見つけるアルゴリズムも簡単
でもreduced expression見つけるアルゴリズムと同程度のアルゴリズムとなると途端に難しくなる

reduced expressionの場合には置換σのreduced expressionを見つけるには
(1) σ = idであるか否か判定する、σ=idなら空列を返して終了
(2) そうでない場合σ(i) > σ(i+1)であるiを見つける、見つけたiに対してτ=σ(i i+1)とおいてτほreduced expression sを求める
(3)
2022/10/10(月) 21:16:09.04ID:TC3V9vEZ
(3) s ( i i+1 )を返して終了
でもとまる
ここでミソはreduced expressionの1番右は( i i+1 )と決め打ち出来ること、コレがあるから多項式時間で終わる
しかしアミダの場合1番右の初手をそんなに簡単に決定出来るかが分からん
初手の可能性は転置全部の可換な集合のうち極大であるもの全体のいずれかに最短が入る事は簡単に示せるけど、そのような極大な可換集合をどれとっても必ずうまくいくことの証明がむずかしい
多分出来るんだとは思うけど正直数学板で話題にするような話でプロ板で出すような問題じゃない気がする
810441
垢版 |
2022/10/11(火) 10:43:04.37ID:Q+yx5xdI
>>803
最近やっとpythonを学び始めたレベルだから合ってるかわからん
コメントとかもちゃんと書いたほうがいいのだろうか
暇な人添削してくれると嬉しい

お題1
https://ideone.com/uQ0lEu
お題2
https://ideone.com/IvtRj2
811デフォルトの名無しさん
垢版 |
2022/10/11(火) 12:04:38.77ID:xv8Y5zzF
しゃぶれよ
81296
垢版 |
2022/10/13(木) 07:01:45.31ID:JNehkz2R
>>773
自分でやれ
813デフォルトの名無しさん
垢版 |
2022/10/22(土) 02:49:22.02ID:ql0xnxKt
やってるやん
814デフォルトの名無しさん
垢版 |
2022/10/24(月) 10:24:26.56ID:sCRx2Xsd
お題
プリンタAは1分間に1ページ印刷できます
プリンタBは3分間に1ページ印刷できます
プリンタCは5分間に1ページ印刷できます

プリンタを3台同時に動かして100ページを印刷します
100ページを印刷し終わるのに何分掛かるか求めてください
815デフォルトの名無しさん
垢版 |
2022/10/24(月) 12:38:35.85ID:PxuF7JuF
>>814
perl5
https://paiza.io/projects/6hPV0H0VMJ6oloujnOVF8w
2022/10/24(月) 13:32:21.38ID:LLDppSf/
>>815
バグってるぞ
65分だと99枚しか印刷されない
2022/10/24(月) 14:17:54.79ID:l9s5dDsa
>>814 cmd
set /a "p=100, n=15*p/23+!!(15*p%23)"
2022/10/24(月) 15:31:07.39ID:FSEywfH4
haskell

pages n = sum $ map ( div n ) [ 1,3,5 ]
main = print $ head [ n | n <- [1..], pages n >= 100 ]
2022/10/24(月) 20:20:16.51ID:112hix5y
>>814
aow = 100
power = (1 + 1r/3 + 1r/5)
printf(aow / power) // => 65.21739130434783
2022/10/24(月) 22:40:57.89ID:SGYFZ2pJ
>>814 octave
https://ideone.com/BOXjxs
f = @(n) ceil(n * 15 / 23);
821デフォルトの名無しさん
垢版 |
2022/10/25(火) 01:46:09.54ID:m3snEfri
>>814
Kotlin

何も考えずただカウントして求めるように書いた。

https://paiza.io/projects/8SWBhDQ_Bfr2ICXJpLmxhQ
2022/10/25(火) 06:54:39.16ID:LZqPXT/2
>>817,820
逆算はページ数によってはダメ
例えば3ページの時、3分4ページが正解だけど
(B=2/3)+(C=2/5) で1繰り上がって2分が出て来る
2022/10/25(火) 07:50:54.84ID:V4E25MPr
A, B, Cでそれぞれ45/23, 15/23, 9/23ページ印刷すれば45/23分で3ページ印刷し終わるよ
824デフォルトの名無しさん
垢版 |
2022/10/25(火) 08:18:47.97ID:5cB2OctB
100ページだからセーフ
2022/10/25(火) 13:35:12.41ID:xp4U3IJL
>>814
JavaScript
https://paiza.io/projects/I8_n6kEMrNGxbh-vwbTkqQ
826デフォルトの名無しさん
垢版 |
2022/10/25(火) 20:38:44.30ID:Er29dtqL
甘えんな
印刷周期を一定と仮定した上で解として取りうる離散値のどれになるかを小数単位で求めるプログラムも書こうよ
827デフォルトの名無しさん
垢版 |
2022/10/25(火) 21:08:38.15ID:idE58GAF
すまん、1分に3枚じゃなくて3分に1枚かorz
828デフォルトの名無しさん
垢版 |
2022/10/25(火) 22:03:54.71ID:b0dw4lqu
>>814
Java
https://paiza.io/projects/3CptMd1jsIwuiYqU1IQYyg?language=java
829デフォルトの名無しさん
垢版 |
2022/10/25(火) 22:28:13.40ID:F6XUw+z/
じゃあ1分に1枚、3枚、5枚のプリンターでの印刷というお題も出すか。
2022/10/25(火) 22:38:49.46ID:d0t/LHiA
>>814 octave
https://ideone.com/0V6LlD
function m = f(n, m)
if nargin == 1
m = f(n, 0);
elseif sum(idivide(m, [1 3 5])) < n
m = f(n, m + 1);
end
end

>>814 ocaml
https://ideone.com/4iPTJS
let f n =
let rec aux m =
if n <= (m + m / 3 + m / 5) then m else aux (m + 1)
in aux 0
831デフォルトの名無しさん
垢版 |
2022/10/25(火) 23:47:11.01ID:b0dw4lqu
>>829
Java

public static void main(String[] args)
{
 var pages = 100;
 var s = IntStream.of(1, 3, 5).sum();
 System.out.println((pages + s - 1) / s);
}
832デフォルトの名無しさん
垢版 |
2022/10/26(水) 13:26:51.44ID:FciA0hc1
お題
オークA「ぐっふっふ…… 俺は媚薬を盛ってないぜ……」
オークB「ぐふっ…… 媚薬を盛ったやつはAかCのどちらかだぜ…」
オークC「オークBかDは嘘をついているぜ…ぐっふっふっふっ……」
オークD「ぐふふ…媚薬を盛った奴はB,Eの中にはいないぜ……ぐひっ…」
オークE「げひひっ……媚薬を盛ったやつは本当の事を言っているぞ…」
オーク達「ちなみに、お前に媚薬を盛ったのはこの中の一匹で、俺たちの中で一匹が嘘をついているぞ……」
女騎士「くうぅ…誰が嘘をついて誰が私に媚薬を盛ったんだ……!」
オーク達「ぐっふっふ……」

論理演算を用いて答えを求めてください
833デフォルトの名無しさん
垢版 |
2022/10/26(水) 13:33:52.83ID:FciA0hc1
オークCとオークEがめんどくさいな
2022/10/26(水) 15:30:35.63ID:DM8ZU7Du
全てが媚薬を盛って全員が嘘をついている

これで全員の発言と矛盾がないと思う
2022/10/26(水) 16:28:02.83ID:xzd5i3vP
さすがに
> オーク達「ちなみに、お前に媚薬を盛ったのはこの中の一匹で、俺たちの中で一匹が嘘をついているぞ……」
は正しいと仮定しないとなんでもありありになっちゃうだろ
2022/10/26(水) 18:06:43.51ID:VWCwwszG
さすがに
> オーク達「ちなみに、お前に媚薬を盛ったのはこの中の一匹で、俺たちの中で一匹が嘘をついているぞ……」

コレウソついてるのは一匹“だけ”つて意味だよね?
“少なくとも一匹はウソついてる”
じゃないよね?
2022/10/26(水) 18:20:40.38ID:S3XzLK/s
このタイプの論理問題ってよく見かけるな
初出ってどこなんだろうな
2022/10/26(水) 19:23:29.30ID:gD5qQ1ZG
>>836
> “少なくとも一匹はウソついてる”
だと、全員嘘つきでもいいからなんでもありになっちゃう気がする
2022/10/26(水) 20:30:42.10ID:dmTYCGjA
>>832
Haskell
まだ自信なし

https://ideone.com/7p50VK
2022/10/26(水) 21:23:18.21ID:OrdcPqRc
オーク達「」が真であることは、
この世界の神である出題者が保証してるわけだな?
2022/10/26(水) 21:38:57.12ID:Bjop1AC4
出題者が嘘をついていて、オークがそのような発言をしていない可能性もある
2022/10/27(木) 01:22:34.18ID:s7i1htqL
>>832
Haskell

一ヶ所間違ってたので訂正
あとウソつきはちょうど1人という条件つけたら解一個になった

https://ideone.com/vAXrzD
2022/10/27(木) 09:19:06.82ID:Uf+5HE/G
Haskell

ウソつき1人としてループを5×5に
5人しかいないので大して変わらないけど

https://ideone.com/zxaBcf
844デフォルトの名無しさん
垢版 |
2022/10/27(木) 14:26:07.23ID:QRorZadJ
>>832
Java
https://paiza.io/projects/VlDcOv5HhoHc1rQjRbF3dA?language=java
2022/10/29(土) 19:11:19.58ID:O3TXZpYa
お題
Kの倍数の桁の和
自然数nに対してf(n)をnの10進表示の各桁の和とします
(例 f(1024) = 1+2+4 = 7)
自然数kに対してg(k)を
g(k) = { f(n) | nはkの倍数である自然数 }
とします
入力kに対してg(k)を出力するコードを書いて下さい
2022/10/29(土) 19:33:57.73ID:uuZ1gbyy
>>845
g(k)って必ずしも有限集合にならなくない?
2022/10/29(土) 19:39:30.16ID:O3TXZpYa
>>946
orz
訂正
g(k) = min{ f(n) | nはkの倍数である自然数 }
848デフォルトの名無しさん
垢版 |
2022/10/30(日) 00:28:15.63ID:BQOGiCuF
お題
プレーヤーの前に閉じた3つのドアがあります
1つのドアの後ろには景品の新車があります
2つのドアの後ろにははずれを意味するヤギがいます
プレーヤーは新車のドアを当てると新車がもらえます
プレーヤーが1つのドアを選択したあとに司会のモンティが残りのドアのうちヤギがいるドアを開けてヤギを見せます
ここでプレーヤーは「最初に選んだドアを残っている開けられていないドアに変更してもよい」と言われます
ここでプレーヤーはドアを変更すべきだろうか?

乱数を使ったシミュレーションで答えを求めてください
849デフォルトの名無しさん
垢版 |
2022/10/30(日) 03:55:05.76ID:KHak5nKt
>>848
モンティ・ホール問題だな。

Kotlin
https://paiza.io/projects/8jlKawdSqlrp5JHr0uWC4w
2022/10/30(日) 08:09:55.23ID:oF72FRjI
ドアを変更するかどうかのところはランダムにする必要無くない?
二択なので一方に決めていれば残りが逆側の確率
2022/10/30(日) 10:05:48.56ID:Rpnmj8SE
まぁ
交換戦略「必ず交換する」
非交換戦略「決して交換しない」
確率交換戦略「ある分布に従って確率的に交換するかしないか決める」
で答えが変わる事を確認せよだからな
ある意味最初2つの戦略も最後の戦略の特別な場合
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況