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

■ このスレッドは過去ログ倉庫に格納されています
2018/01/01(月) 11:15:04.40ID:2Vr1CPKy
プログラミングのお題スレです。

前スレ
プログラミングのお題スレ Part9
https://mevius.5ch.net/test/read.cgi/tech/1480579110/

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

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文

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

宿題は宿題スレがあるのでそちらへ。
2018/04/06(金) 11:36:10.59ID:Rm6bGaxB
お題にツリー構造って明記されてるから閉路は無いのでは
2018/04/06(金) 12:54:56.14ID:gBxcjV03
条件には書いてない
根が1個という条件だけ中途半端に書いてある
はて
2018/04/06(金) 13:12:46.44ID:6ssoNVnM
「〜で与えられるツリー構造」
2018/04/06(金) 13:39:17.95ID:VaxQogp+
条件には書いてない!(書いてある)
目か頭かどちらかあるいは両方おかしい。
頭の方ならこれからエクストリーム言い訳が来るだろうから楽しみにしてるw
2018/04/06(金) 14:45:17.05ID:gBxcjV03
「解無し」という答えに文句言ったくち?
583デフォルトの名無しさん
垢版 |
2018/04/06(金) 16:12:43.87ID:/oIeslo0
>>577以外のやり方以外のやり方考えるの面倒だな。
てか、いきなり最適解が出てしまった感あるな。
他の言語に書き換えるのは簡単だが移植しただけになってなんとなく無意味。
2018/04/06(金) 17:02:31.80ID:gBxcjV03
再帰じゃない解とか
585デフォルトの名無しさん
垢版 |
2018/04/06(金) 17:09:52.76ID:FoSTO+1D
階層構造なのに再帰使わないのは辛いなあ。自分でデータを積む事になるだろうし。しかしそれぐらいしかないか?
2018/04/06(金) 17:12:50.15ID:Vf6CoCVF
そだね
なにかアクロバティックな解法でもあれば面白いんだけど凡才で思いつけん
587デフォルトの名無しさん
垢版 |
2018/04/06(金) 18:06:53.73ID:mKIKE6t9
お題
5以上の素数が与えられたとき1番近い6の倍数を求める
2018/04/06(金) 18:13:50.95ID:4/E3/dCo
5以上の素数しか与えられない?
素数以外も与えられることもある?
2018/04/06(金) 18:15:51.07ID:wUq7JaWt
日本語読めないのか?
2018/04/06(金) 18:17:05.45ID:wUq7JaWt
(n+3)/6*6 かな
2018/04/06(金) 18:18:14.39ID:yx3PdwAt
素数列挙がメンドだから日本語で。
素数を6で割って、ラウンドして1プラスして、6倍する。
であってる?
2018/04/06(金) 18:19:17.00ID:yx3PdwAt
四捨五入の方がいいか?
2018/04/06(金) 19:32:58.29ID:EFVHWowI
>>588
5以上の素数が与えられなかった場合の動作については何も書かれてないので
好きに仕様を決めれば良いんだよ
2018/04/06(金) 19:36:58.77ID:EFVHWowI
エラー表示
動作不定
与えられるまでまつ
など

>>589
仕事だとそういうところでもめたりするのだ
今回は仕事じゃないので好きに決めればいい
2018/04/06(金) 19:41:53.07ID:wUq7JaWt
それ言い出したら、言語によっては実数も文字列も行列も与えられるし、きりがないよ
2018/04/06(金) 19:47:17.56ID:Q5AWbdER
int q587(int p){//pは5以上の素数
return (p % 6==1)? 6*(p/6):6*(p/6+1);
}
2018/04/06(金) 19:51:17.88ID:EFVHWowI
>>595
「今回は仕事じゃないので好きに決めればいい」
2018/04/06(金) 20:02:53.64ID:Vf6CoCVF
>>591>>592
7が与えられたら結果はいくつになるそれ?
2018/04/06(金) 20:08:15.85ID:/U4wFi2E
>>587
n - (-1)^(n%6/5)
2018/04/06(金) 20:13:35.02ID:/U4wFi2E
>>587
こっちの方がいいか。除算は切り捨て
n - 1 + n%6/5*2
2018/04/06(金) 20:34:39.42ID:/osLfhPv
>>587 Ruby
-~n/6*6
2018/04/06(金) 20:46:11.62ID:Vf6CoCVF
n+1 ってのを -~n と短縮してるわけか
面白い
2018/04/06(金) 21:04:40.65ID:zGB1Hjc3
一番近くない答えを出す回答が混ざってるのが面白い
2018/04/06(金) 21:06:03.82ID:EFVHWowI
面白いか?
どっちも
2018/04/06(金) 22:19:03.40ID:Zyva5DHv
お題
整数n(0 <= n < 2^32)を英語で表記する
0 => zero
134 => one hundred thirty four
1000000 => one million
4294967295 => ???
2018/04/06(金) 23:06:37.46ID:st3Hb+gI
その???のところどんな形式でもいいの?
それともtwo to the power of thirty two subtracted by oneじゃないとダメ?
2018/04/06(金) 23:22:09.18ID:rqOyDV9k
four billion なんちゃらだろjk
2018/04/06(金) 23:56:30.88ID:/U4wFi2E
>>605 Ruby

https://ideone.com/F3RT13
2018/04/07(土) 00:21:05.83ID:Bd1xKzd/
>>588
https://ideone.com/d3UrjB
C++。プライム検出をダメコードででっち上げて書いた。正直遅い。
2018/04/07(土) 00:24:29.61ID:Bd1xKzd/
>>598
下がる方考慮してなかったから考慮したコード書いたよ。
2018/04/07(土) 00:55:56.21ID:WL4rZ6s4
鈴木貫太郎
北海道大学 2種類の数字でできてるn桁の数字の個数
https://youtu.be/SHdUszy0qQs

2種類の数字だけでできている、4桁の数字は、いくつあるか?
答え、567

2種類の数字だけでできている、N桁の数字は、いくつあるか?
答え、81(2^(N-1) - 1)

N=5 の時も、求めて
2018/04/07(土) 01:12:51.88ID:cljYAf7A
>>611
普通に 81 * (2^(5 - 1) - 1) = 1215 なのに何を求めるの
10C2 * 5C2 - 9*5 + 10C2 * 10P2 - 9 * 10 = 1215 みたいに場合分けしてもう一度計算しろってことかね
613デフォルトの名無しさん
垢版 |
2018/04/07(土) 01:38:08.29ID:bMqQKRLP
>>587
その問題って元の値が素数かどうかは関係ないのでは?
Perl だとnが正の整数なら int((n+3)/6)*6 の計算で出来てしまうと思うが。
/ の割り算が整数で出るような言語なら整数化も不要。(C言語で int n だった場合等)。
2018/04/07(土) 01:39:34.76ID:WL4rZ6s4
素数は奇数だから、6 で割った余りのうち、1, 5 のみが素数になり得る。
つまり、6N + 1, 6N + 5 (6N ± 1)だけ。
6N + 3 は、3 の倍数になるので、素数にならない

この動画を参照

鈴木貫太郎
整数、素数、京都大学入試問題 数学
https://youtu.be/PCX6sqN9FhA

p, q が共に素数のとき、
p^q + q^p が素数になる、p, q をすべて求めよ

ヒント、どちらか一方は必ず、2 となる。
答え、(2, 3), (3, 2)

ちなみに、答えが合っていても、0点です。
それ以外に解が存在しないという、証明に加点される
2018/04/07(土) 02:02:01.73ID:cljYAf7A
n = p^q + q^p, p <= q とすると
n >= 8 なのでnは奇素数
よって p = 2, q >= 3
q > 3 の時 n = 2^q + q^2 = 2 + 1 = 3 mod 6 で矛盾
q = 3 の時 n = 17 で必要条件を満たしている
よって (p, q) = (2, 3), (3, 2)

でこれをSATソルバーでも使って解けっていうのかね
616デフォルトの名無しさん
垢版 |
2018/04/07(土) 04:51:35.83ID:bMqQKRLP
>>605
Kotlin
https://paiza.io/projects/z6BKEqpdH_DuzQpj6TtxZg

色々細かいことやって英語に近づけたので少し複雑なものになってしまったような気もする。
2018/04/07(土) 14:36:40.48ID:NmviPp4n
ttp://next.rikunabi.com/rnc/img/1820/o/0015904477.jpg
犯人は誰だ?
618577
垢版 |
2018/04/07(土) 23:23:36.77ID:ALsUA4nh
>>577
訂正
https://ideone.com/yYE1Jb

[-1, 0, 1, 2] の出力が
0
└─ 1
│ └─ 2
│ │ └─ 3
となって間違った枝が伸びてました。

文字列を積みながら再帰は気持ち悪いから
フラグのリストとかの方がいいかも。
619611
垢版 |
2018/04/08(日) 12:22:11.48ID:1mmlbc0v
>>611
N桁(4, 5桁)の数字の場合、どうプログラミングする?
ややこしい

誰か、N桁で一般化して、Ruby で書いて
2018/04/08(日) 12:34:02.96ID:wX43tNlZ
算数で止まってるから証明できないけどモンテカルロなら書けるよ。
2018/04/08(日) 12:49:35.30ID:ZTQwWTkx
Xがi個YがN - i個あるときの考えらえれる数字の数は
(10_C_2 - 9) N_C_i
だから
((10_C_2 - 9)/2) Σ{i in 1..N - 2}N_C_i
=(81/2)*(2^N - 2)
=81*(2^(N - 1) - 1)

81*(2^(N - 1) - 1)を計算すればいいだけなんだから算数でしょ
2018/04/08(日) 13:10:11.62ID:wX43tNlZ
https://ideone.com/YyAuGf
C++。というわけで書いた。
算数だとこんな感じになる。
2018/04/08(日) 13:11:04.05ID:wX43tNlZ
桁分割するときに%を&って書いてハマってた。><;
2018/04/08(日) 13:47:39.07ID:wX43tNlZ
とりあえず、書いたら止まるのやめてよ。
625611
垢版 |
2018/04/08(日) 14:23:00.89ID:1mmlbc0v
>>611
N桁(例えば4桁)で、aaaa 〜 bbbb までのすべての順列を作るのは、
どうプログラミングする?

4桁と限定せず、N桁で一般化して、誰かRuby で書いて

aaaa, aaab, aaba, aabb, abaa,
2018/04/08(日) 14:25:17.47ID:wX43tNlZ
無視されたのやめます。
2018/04/08(日) 14:25:26.83ID:k1onKASn
Rubyで宿題でも出てるのけ?
2018/04/08(日) 14:29:19.21ID:wX43tNlZ
>>625の態度が気に入らないので、日本語で書く。
桁数の文字をA分とB分をプッシュバックしてソートして順列回す。
文字が2種なのでオーダー爆発はあまり起きないと思う。
2018/04/08(日) 14:35:50.62ID:wX43tNlZ
というか、競プロこんな解き方してREDになっても全く意味がない。
最上級に上り詰めてかってに市ね。
2018/04/08(日) 14:39:16.28ID:xR9rWW4L
>>625 Ruby
[*0..9].combination(2).flat_map{|(a,b)|(1..n-1).map{|i|
([a]*i+[b]*(n-i)).permutation.uniq.reject{|e|e.first.zero?}.map{|e|e.join.to_i}}
}.flatten
2018/04/08(日) 14:45:24.65ID:wX43tNlZ
コンビネーションいいなー。頭悪いから実装できないし毎回実装したくない。
はぁ・・・。
632611
垢版 |
2018/04/08(日) 15:15:37.38ID:1mmlbc0v
Ruby に、product という順列を作るメソッドがある

[1,2].product([3,4],[5,6])
# => [[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]

これで考えてみる
633611
垢版 |
2018/04/08(日) 15:18:19.59ID:1mmlbc0v
可読性が低い、C++ を読んで解析するのが、面倒

スマソ
2018/04/08(日) 15:32:27.60ID:ZTQwWTkx
>>625 Ruby 2.5.0

def f(n)
return [] if n == 1
(1..9).flat_map{|i|
[10*i] + ([*1..9] - [i]).flat_map{|j| (10**n - 10)/9*i + j}
} + f(n - 1).flat_map{|e| e.digits.uniq.map{|i| 10*e + i}}
end
2018/04/08(日) 15:39:18.26ID:drN9+cfC
ruby限定で、
しかもアルゴリズムを競うわけでもない単なるコード例ならrubyスレでやってくれと強く感じる
2018/04/08(日) 15:48:31.89ID:ZTQwWTkx
訂正
def f(n)
return [] if n == 1
(1..9).flat_map{|i|
([*0..9] - [i]).flat_map{|j| (10**n - 10)/9*i + j}
} + f(n - 1).flat_map{|e| e.digits.uniq.map{|i| 10*e + i}}
end
637611
垢版 |
2018/04/08(日) 15:54:06.97ID:1mmlbc0v
プログラミングは、このスレのためのものだから、
他の言語でも何でも、自由にプログラミングして下さい

言語にこだわらず、やって下さい。
その言語をやってる人が見るはず
2018/04/08(日) 15:59:40.54ID:aVOeIiR5
言語を指定しないでください
宿題等の依頼は遠慮願います
2018/04/08(日) 16:04:05.60ID:b4O4Usd0
だな
640611
垢版 |
2018/04/08(日) 16:17:49.11ID:1mmlbc0v
宿題じゃない。プログラミングのお題

他の言語でも何でも、自由にプログラミングして下さい
2018/04/08(日) 17:05:29.95ID:aVOeIiR5
宿題、学習「等」が目的であればここではなく然るべきところで
2018/04/08(日) 17:47:47.72ID:FgO8HAKn
>>641
その宿題とやらが問題として面白いものであれば、それならそれを解くことは個人的にはありうることでしょうね
2018/04/08(日) 18:45:27.43ID:wX43tNlZ
競争性の放棄とコードも書かないのに他人を煽る。ギルティですね。
2018/04/08(日) 18:54:09.19ID:wX43tNlZ
俺は書いたけど、無視されるわ、あげく必要ないっていわれましたからね。
70行も読めないなんてたかが知れてる。
2018/04/08(日) 19:12:49.68ID:aVOeIiR5
こんな依頼者相手にコードを提供するのがおかしい
2018/04/08(日) 19:14:36.93ID:wX43tNlZ
最初はフラットなので、見分けるの大変なんですよ。
2018/04/08(日) 19:16:13.27ID:wX43tNlZ
>>645のことは考えてないですよ?611とやらに怒ってます。
やったこと無駄でした。ヒント与えなければよかった。
2018/04/08(日) 20:46:20.65ID:sgyAjV8F
お題
ビンゴゲームでリーチ数が最大の盤面をすべて列挙せよ
2018/04/08(日) 21:26:48.16ID:wX43tNlZ
そうですか。頑張ってください。
2018/04/08(日) 21:53:53.31ID:ZTQwWTkx
>>648 Ruby ただしπ/2回転させた解は省略
出力はi行目に穴の空いていないマスの列数(0〜4)を表示

[*1..4].combination(2).flat_map{|i,j|
[*1..4].combination(2).map{|k,l|
a = [4, 0, 1, 3, 2]
a[i], a[j] = a[j], a[i]
a[k], a[l] = a[l], a[k]
next if (1..4).any?{|i| a[i] == 4 - i} || a[2] + a[3] > 4 || a[1] + a[4] > 4
a
}
}.uniq.compact
#=> [[4, 0, 1, 3, 2], [4, 2, 0, 3, 1], [4, 1, 3, 0, 2], [4, 1, 0, 2, 3]]
2018/04/08(日) 22:15:08.50ID:TRlBW4xM
>>641
俺も>>642と同意見かな
出題者は勝手に出すだけ
回答者は勝手に回答するだけ
出題者の意図も回答者の意図もどっちも問わない

ただ、頼まれもしないのに延々糞コード書いて晒すやつは脳の障害とは思う
2018/04/08(日) 22:20:36.69ID:xR9rWW4L
回答者は回答するだけってのはまさにその通り
なんかc++の変なコードあげる人いるじゃん
変なコードは別に見ないからいいんだけど、その上 構ってちゃんなのがちょっとあれなのよね
2018/04/08(日) 22:22:09.19ID:TRlBW4xM
あ、おれが糞コードつってんのもそいつのことねw
といかこのスレで糞コードつったらそれしかないけど
まともにC++やってきた人間からしたら血圧上がるような糞コードなw
2018/04/08(日) 23:18:12.27ID:drN9+cfC
c++ で書いてるヤツなんて俺以外いないよ…と思ったがNGID解除してみるといた

ruby のコードは読みやすいからruby使った回答は歓迎なんだけど、
回答もしたいからあんまり限定して欲しくはないな
(rubyで回答するほど好きではないから)
2018/04/08(日) 23:31:45.71ID:FWiZcz2s
ダラダラ長ったらしく書かれたC++コードも、ぱっと見意味の掴みにくいワンライナーコードも、同じくらいクソだと思うんですが・・・
2018/04/08(日) 23:38:49.63ID:drN9+cfC
J言語好きとして読みにくいからクソというのには党派的に反対する
読みにくさを愛でる人もいる

でもさっきはうっかりしていた
ruby 限定とか C++ 禁止とかあってもいいと思います
2018/04/08(日) 23:53:13.66ID:b4O4Usd0
限定する目的がわからん
特定の言語だと簡単すぎるとか?
658デフォルトの名無しさん
垢版 |
2018/04/08(日) 23:58:04.55
ID:wX43tNlZ みたいなのをシャットアウトする目的なら限定してもいいだろう
2018/04/09(月) 00:06:52.35ID:4voddLA5
>>658
ええな
2018/04/09(月) 00:30:16.34ID:/QZ8FXxd
>>612
>>621
いきなり最後の式が出ると思うんだが
わざわざ知識をつかわなくても
2018/04/09(月) 00:37:01.24ID:/QZ8FXxd
最上位桁の数字は 1〜9 の9通り
最上位桁と異なる数字は 0〜9中で最上位桁以外 9通り
最上位桁以外の2種類の選び方は
N-1個それぞれが2個の数字から1個を選ぶ場合の数-全て最上位桁と同じになる場合の数 = 2^(N-1)-1

よって81*(2^(N-1)-1)通り
2018/04/09(月) 00:42:15.33ID:kgPSL5h+
>>648
C++で書いた。コードは不明。
8分くらいで解いた。あってるかは知らない。
Count:1
Score:9
11110
11110
11110
11110
00000
2018/04/09(月) 00:43:45.37ID:kgPSL5h+
>>658
ちゃんとコード書いてても村八分にされるんですね。
ここは怖いインターネッツですね。
2018/04/09(月) 00:52:16.18ID:rENMvr1T
>>663
やることやってれば他は何してもいいという訳ではないのは、インターネットもリアルも同じ。
勉強できようが仕事ができようが、人から嫌われる言動をしてれば迷惑がられるのは当然。
まして、本人が得意気にできてると思ってるだけで実際は
大したことなければ尚更だろう。
2018/04/09(月) 00:52:41.77ID:kgPSL5h+
https://ideone.com/xQYd3O
バグがあったので直したら値変わった。
2018/04/09(月) 00:56:15.06ID:kgPSL5h+
>>664
ほう。大したことないとおっしゃる?どの口で?
まぁいいけど。さすがにムカツクな。
俺意外に上げてる人間ってそんなに多くないぞ?
アンタはあげたことあるんだろうね。自治気取りだけど。

ふむそういうことなら。そのように対応する。
2018/04/09(月) 01:09:33.57ID:kgPSL5h+
おい出て来いよ。
2018/04/09(月) 01:11:54.34ID:kgPSL5h+
なんか最近ビジネス色強いから裏で何やってるんだろうと思ってたけど。
くだらねーな。
2018/04/09(月) 01:24:20.55ID:kgPSL5h+
5CHで何言ってるか自覚ないみたいだな。
従順な奴隷でも探してろ。ばかやろー。
2018/04/09(月) 06:13:27.90ID:Y3Lep2Gi
言語を限定されてもそんなのに構わず好きな言語で回答してしまえばいいよ
2018/04/09(月) 07:53:04.73ID:3mzXDd2F
野糞落ちてるだけでも不快なのによ
得意げに野糞していく奴の存在とか
2018/04/09(月) 08:04:05.81ID:yXqzhiVB
>>670
そうそう
昔、一途に prolog で解きまくっている人がいて、すごくかっこいい、っておもっていました
2018/04/09(月) 12:31:23.52ID:M/BmQ9Z1
C++ は可読性が低くて、ビジネスロジックに無関係な、儀式部分が多いから、
読む方も、自分の時間を使うから、かなりの損。
書いている人は面白いのだろうけど

Ruby なら、ほぼビジネスロジックに集中できる。
だから多くのアルゴリズム・パズル本は、Rubyで書かれている

Rubyで書いてって頼まれても、言語指定を無視して書けばよいだけ。
他の言語で書いても、必ず見る人はいる
674デフォルトの名無しさん
垢版 |
2018/04/09(月) 12:44:33.93ID:pBiH2JPL
ま、ここはデフォルトでは言語指定なしだから書きたい言語で書けば良い。
2018/04/09(月) 13:13:38.81ID:rSzJcNe3
Pythonで書かれてるが。いつの時代の話だよw
676デフォルトの名無しさん
垢版 |
2018/04/09(月) 14:15:37.60ID:Ptdpw/63
2の倍数:下一桁が偶数
3の倍数:各桁の和が3の倍数
4の倍数:下二桁が4の倍数
5の倍数:下一桁が5の倍数
6の倍数:2の倍数かつ3の倍数

8の倍数:下三桁が8の倍数
9の倍数:各桁の和が9の倍数
10の倍数:下一桁が0
11の倍数:各桁を交互に足し引きした値が11の倍数
12の倍数:3の倍数かつ4の倍数
2018/04/09(月) 15:56:24.14ID:yXqzhiVB
>>676
7 の倍数、11 の倍数、13 の倍数は同一の事実にもとづいて判定できる
つまり 7 * 11 * 13 = 1001
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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