X



プログラミングのお題スレ Part11
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2018/04/24(火) 20:45:14.49ID:ZY7R7Sru
プログラミングのお題スレです。

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

【出題と回答例】
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/

宿題は宿題スレがあるのでそちらへ。
0510デフォルトの名無しさん
垢版 |
2018/05/28(月) 09:38:09.76ID:KmDsu5r7
人間の認識力はそんなもんなんだろうな。ちょっと似てると同じと判断しまう。そうやって脳は省力化してエネルギーあまり使わないようにしてるのかも知れない。脳を動かすには糖分沢山必要だからな。
0511デフォルトの名無しさん
垢版 |
2018/05/28(月) 11:55:04.24
単なる老化
0512デフォルトの名無しさん
垢版 |
2018/05/28(月) 16:45:42.01ID:3CvuwD8l
逆に言えばいちいち全部の文字を正確に認識してたらちょっと誤字脱字や書き損じがあっただけで意味がわからなってしまうぞ
0513デフォルトの名無しさん
垢版 |
2018/05/28(月) 19:20:35.39ID:wGAafxHd
わからなって
0515デフォルトの名無しさん
垢版 |
2018/05/28(月) 21:24:04.06ID:GjCLG5ws
ういね
0525デフォルトの名無しさん
垢版 |
2018/06/04(月) 21:34:02.48ID:i7Qhv+/y
あ、ごめん。テキストファイルじゃなくて標準入力からでもいい。
何処から入力するかはたいした問題ではない。
0528デフォルトの名無しさん
垢版 |
2018/06/04(月) 23:19:04.56ID:hdRuAjud
昔仕事で MUA 作った時に >>526 にある
folding white space をぶち込んでくる送信元がいて苦労した記憶が…
0529デフォルトの名無しさん
垢版 |
2018/06/05(火) 00:27:36.36ID:xCctA/+R
>>526
ここはお題スレだから不毛で良いんだよ。パズルを解くようなもんなんだから。
0531デフォルトの名無しさん
垢版 |
2018/06/18(月) 23:54:29.00ID:2+ok0PtZ
お題: バイオリズム計算

計算結果の出力だけでも良いが、なんだったらアスキーアートやGUIで波形の絵を出したりしても良い。その辺は自由。

バイオリズムとは何かについては Wikipedia 参照。
https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%82%AA%E3%83%AA%E3%82%BA%E3%83%A0

実際に計算して図を出すサイトもある。
https://keisan.casio.jp/exec/system/1231994137
0533デフォルトの名無しさん
垢版 |
2018/06/22(金) 00:11:10.49ID:3MP35Wby
お題:
ある数値nが与えられた時に、次の条件を満たす2つの数値a,bを求め、表示するプログラムを作成しなさい。
●aとbの最小公倍数がnとなる
●a<bかつaとbの差(b-a)が最小となる

例:n= 360→a= 36,b= 40
  n=1000→a=125,b=200


例が間違ってたらゴメン
0541デフォルトの名無しさん
垢版 |
2018/06/23(土) 00:40:06.00ID:5Wb6fwhK
数学板じゃなくてもさすがに最小公倍数くらいは
このスレならみんな知ってると思ってた
0542 ◆QZaw55cn4c
垢版 |
2018/06/23(土) 01:29:42.07ID:OlLfOCSW
>>541
公倍数は最小公倍数の倍数
公約数は最大公約数の約数

…当たり前のように思えて実際の証明は結構イメージしにくく、一回読んだだけではよくわからないのでした…
0543デフォルトの名無しさん
垢版 |
2018/06/23(土) 01:40:18.34ID:gWvFlQcl
お題:標準入力からhtmlが一行ずつ与えられるのでh1,h2などのhタグを階層化して出力しなさい。タグ内のテキストも一緒に出力し、タグ内にimgが含まれていたらそのaltを出力しなさい。

出力例:
h1 5ちゃんねるにようこそ
....h2 クソスレ乙
........h3 逝ってよし
....h2 オマエモナー
0546デフォルトの名無しさん
垢版 |
2018/06/25(月) 15:39:38.08ID:NIfex5vk
任意の文字列を含む有効なビットコインのアドレスを生成するプログラムを作成せよ。有効な形式のアドレスでなければブロックチェーンエクスプローラで検索しても認識されない。ビットコインアドレスの形式については下記サイトを参照。
https://qiita.com/pokochi/items/4d536a4a24067505abea

例:下記サイトの二番目にあるようなアドレス、
https://bitflyer.com/ja-jp/glossary/address
0547533
垢版 |
2018/06/27(水) 00:31:17.62ID:vFJz85Ce
>>533
C++(使ってるのはほとんどCですが)
https://ideone.com/S4H5Mo

自分の考えてたアルゴリズムをCで記述してみました。
模範解答、とはとても言えない代物です。もっと改良の余地がありますし、バグも取りきれてないかもしれません。

それと>533出題時に考えてたアルゴリズム(手計算でやってましたが)を↓に記述してみました。
こちらは明確に誤った答が出されてしまいます。参考程度に orz
https://ideone.com/HdfYPe
0553デフォルトの名無しさん
垢版 |
2018/06/29(金) 09:46:26.83ID:8O35Zxb2
やれるものならやってみろ。

などと挑発してみるとアホが大漁に釣れるかも知れない。
0555デフォルトの名無しさん
垢版 |
2018/06/29(金) 10:00:35.27ID:8O35Zxb2
問題は釣れるのがアホなのでものすごく頑張った揚げ句たいしたものができない率が非常に高いことにある。
0556デフォルトの名無しさん
垢版 |
2018/06/29(金) 14:17:42.63ID:1XSLHtbi
やっとできた〜
0563デフォルトの名無しさん
垢版 |
2018/07/03(火) 10:14:17.19ID:2Hrfam1D
>>561>>562
それなんてエロゲ、じゃない、なんて言語?
0565デフォルトの名無しさん
垢版 |
2018/07/04(水) 21:23:39.48ID:N4SCi1OC
情報オリンピックの問題って組合せ最適化ばかりなのかなぁ?
ttps://www.ioi-jp.org/joi/problem_archive-light.html
0566デフォルトの名無しさん
垢版 |
2018/07/04(水) 21:52:08.71ID:gFgZc5FG
VXU
0569デフォルトの名無しさん
垢版 |
2018/07/08(日) 08:40:53.67ID:PyVF6x+z
鈴木貫太郎
灘中 中学入試 整数問題
https://youtu.be/okKan0C_--E

問1
4つの異なる数字、1, 3, 9, x から、
異なる数字を取り出して並べる、3桁の整数は24個あり、それらの平均値は555 である時、x は何の数字か?

問2
5桁の36の倍数で、2, 3, 5 のどれもが、
いずれかの桁に、1回以上現れる整数のうち、最小のものを求めよ

答え、問1 : 7、問2 : 13,572
0571デフォルトの名無しさん
垢版 |
2018/07/09(月) 14:21:35.87ID:RPo/jFjY
灘中の問題は、以下の性質を使うものが多い

2 の倍数は、下1桁が偶数
4 の倍数は、下2桁が4の倍数

3 の倍数は、各桁の数字を足したものが、3の倍数
9 の倍数は、各桁の数字を足したものが、9の倍数

だから数字を因数分解して、これらに該当するかどうかで、問題を判別できる
0572デフォルトの名無しさん
垢版 |
2018/07/09(月) 16:13:07.36ID:OMEWQnbN
いただきぃ!!
https://goo.gl/uAcy7u
0573569
垢版 |
2018/07/11(水) 18:04:55.63ID:I//Y0R5O
>>569
問1 を、Ruby で作った。
問2 は、難しくて作れない

nums_3 = [1, 3, 9]
nums_4 = nums_3 + [0]

(0..9).each do |num|
next if nums_3.include? num # 含まれていれば

nums_4[-1] = num

sum = 0
nums_4.permutation(3) { |a, b, c| sum += (a*100 + b*10 + c) }

puts num if sum == 24 * 555 #=> 7
end
0574デフォルトの名無しさん
垢版 |
2018/07/11(水) 18:38:10.32ID:XuPZzMyT
じゃあ問2を酷いコードで
>>569 Java
java.util.stream.IntStream.range(10000, 100000).filter(i -> i % 36 == 0).mapToObj(Integer::toString).filter(s -> s.matches("(?=.*2)(?=.*3)(?=.*5).*")).findFirst().ifPresent(System.out::println);
0575デフォルトの名無しさん
垢版 |
2018/07/11(水) 21:04:09.51ID:9T5mO0zj
コンピュータを使ってブルートフォースで答えを探す方法はわかってもコンピュータを使わずに数学的に解く方法が思い浮かばない。
しかしそれを小学生が解いて入学するという現実。orz
0576デフォルトの名無しさん
垢版 |
2018/07/11(水) 23:18:42.60ID:83LTUfxJ
>>569 Squeak/Pharo Smalltalk

"問1"
((0 to: 9) copyWithoutAll: #(1 3 9)) detect: [:n |
| set |
set := Set new.
'139', n asString combinations: 3 atATimeDo: [:comb |
comb permutationsDo: [:perm |
perm first ~= $0 ifTrue: [set add: (perm as: String) asInteger]
]
].
set size = 24 and: [set average = 555]
] "=> 7 "

"問2"
((10000 roundTo: 36) to: 99999 by: 36) detect: [:n | n asString includesAllOf: '235'] "=> 13572 "
0577デフォルトの名無しさん
垢版 |
2018/07/12(木) 00:00:29.98ID:gpOSM7dO
このスレprologニキっていないの?
手続き型以外の解法見たい
あとJニキ最近見なくて寂しい
0578デフォルトの名無しさん
垢版 |
2018/07/12(木) 01:08:11.22ID:gc75XwOp
>>569
問1
4種の数字から作られる24個の数字の平均が555
→合計が1110になる12組の数字にまとめられる→どの桁も合計が10になる2組の数字の組合せで構成される
→1,3,9,xのうち1と9を除外した3と「足して10になる数」→x=7

問2
36の倍数→4の倍数かつ9の倍数
→5桁の数字は9の倍数なので各桁の数字の合計が9の倍数になる
→5桁の数字には「2,3,5」が少なくとも1つ以上含まれているので、この時点で各桁の数字の合計は10より多くなる。
→各桁の数字の合計は9ではないので、18とする。残り2桁の数字の合計は8。この中で一番小さな数が作れるのは1,7。
→「1,2,3,5,7」の組み合わせの内、下2桁が4の倍数で最も小さい数は13572となる。

かなり乱暴に書くとこんな感じで解けば良いのかな?
しかし、これをプログラムで表現しようとするのはかなり骨っぽい(数を1桁ずつ分解するのに余計な手間がかかりそう)。
それよりも総当たりで解いた方がコンピュータ的には手っ取り早い気がしますね。
0580578
垢版 |
2018/07/12(木) 07:07:01.02ID:gc75XwOp
>>579
作成される数字を順列とみなした時に
「ABCD ABDC ACBD ACDB ...」を逆順にした
「DCBA DCAB DBCA DBAC ...」という列を組み合わせたら…なんて考えてたんですが、後で見ると意味不明でした。申し訳ない。

問1について、それよりも単純な方法がありました。

xがどの桁で使用されてるかで場合分けし、それぞれを合計する
x不使用:139 193 319 391 913 931 :2886
xが1の桁:13x 19x 31x 39x 91x 93x :2860 + 6x
xが10の桁:1x3 1x9 3x1 3x9 9x1 9x3 :2626 + 60x
xが100の桁:x13 x19 x31 x39 x91 x93 :286 + 600x
上記をすべて合計:8658 + 666x
24個の数字の平均が555だから合計は 555*24=13320
8658+666x=13320
666x=4662 x=7

若干手続きはコンピュータ向けと言えなくもないですが、やはりプログラミングするには手間ですね。
0581デフォルトの名無しさん
垢版 |
2018/07/12(木) 07:41:52.96ID:KB59nVpm
問1
24=4! なので4個の数字はすべて異なる
24通りを並べると各桁1, 3, 9, x が同じ回数出現する
これらの平均が555なので
1, 3, 9, x の平均が5とわかる
1, 9の平均が5なので3, xの平均が5となる7が答え

問2
最小を求めるので10000の位が1になる数を考える
(考えて、なければ他を考える)
各桁の合計が9の倍数から1, 2, 3, 5, 7とわかる
この中で偶数は2だけなのでこれが1の位
1の位が4で割りきれないので10の位は奇数であれば4の倍数
つまり10の位が3, 5, 7のどれでも36の倍数になる
3, 5, 7を小さい順にならべて13572が答え
0583デフォルトの名無しさん
垢版 |
2018/07/12(木) 09:03:09.86ID:ax9CLQnp
問1
x = 111 * (24 * 5 - 6 * (1 + 3 + 9) ) / (6 * 111)
= 7
問2
5つの数を A, B, 2, 3, 5 とすると
A + B + (2 + 3 + 5) = 0 mod 9 <=> A + B + 1 = 0 mod 9
かつ末尾2桁が4の倍数になる
従って一番左の桁は1で確定し {A, B} = {1, 7}も確定
2が末尾に来ることは確定していてかつそのとき任意の並びで4の倍数になるため13572が題意を満たす数

以上が東大理学部物理学科卒の考え方
両方合わせて40秒くらい
0584デフォルトの名無しさん
垢版 |
2018/07/12(木) 09:17:45.00ID:kqFyQCjZ
やっぱ紙と鉛筆で解く問題だよね。
最初から解析的に解けない問題出して欲しい。
0585デフォルトの名無しさん
垢版 |
2018/07/12(木) 10:06:30.92ID:nIR9VMIg
>>580
小学生が解く場合に途中で 8658+666x=13320 のような数学的表現で考えるのはありなのか?
回答者個人にそれができるかできないかの問題ではなく小学校が教えている範囲にそれが含まれるのかの問題ね。
もし含まれていないとしたら他の方法で解く事が可能という事になる。
0587デフォルトの名無しさん
垢版 |
2018/07/12(木) 14:03:35.77ID:Jbx8ub/k
36の倍数は、4, 9 の倍数で、それらの特徴を利用できるかどうかだけ

捨て問題だろ。
考えたり解いたりすると、2問で10分使うから、落ちるだけ。
即座に無視しないといけない。
新パターンの問題は、時間を使わせるから無視しろっていう、受験テクニック

灘中高は、100%塾の生徒しか受からない。
灘用の受験技術だから、その授業を受けていないと受からない

文系が東大工学部に入る、受験技術のマンガ「ドラゴン桜」と同じ。
賢い者ではなく、塾代という貧富の格差で決まる

大型資格もそう。
TAC, 大原などに行ってないと受からない

貧富の格差、貧富の遺伝
0589デフォルトの名無しさん
垢版 |
2018/07/12(木) 18:14:20.08ID:ax9CLQnp
>>586
ものすごくかみ砕いて言うと
A + B + 1 = 0 mod 9 (A, B ∈ {0, 1, ..., 9}) を満たす A, B に関して
任意のAに対して対応するBが少なくとも1つは存在することは自明なので
A = 1 として 1XX32 という数を考えればこの数は36の倍数でありかつ 2, 3, 5 を各桁に含む
(XXには A = 1 に対応する B の値の内の1つと 5 が入る)
解は10000以上1XX32以下の整数なので左端の桁は1であると確定する
0593デフォルトの名無しさん
垢版 |
2018/07/13(金) 07:35:11.88ID:isSSIGbX
>>569
Rubyで問1。

def odai_11_569_1(a_ary, a_avg)
(a_ary.size + 1) * (a_avg / 111) - a_ary.inject(:+)
end

w_ary = [1, 3, 9]
w_avg = 555
p odai_11_569_1(w_ary, w_avg)

結果:7
0594デフォルトの名無しさん
垢版 |
2018/07/13(金) 08:03:43.23ID:isSSIGbX
>>569
Rubyで問2。

def odai_11_569_2(a_ary, a_base, a_col)
a_ary.map!(&:to_s)
w = 10**(a_col - 1)
w = w / a_base - (w % a_base > 0 ? 0 : 1)
w *= a_base
loop do
w += a_base
next if (a_ary - w.to_s.split('')) != []
return w
end
end

a_ary = [2, 3, 5]
a_base = 36
a_col = 5
p odai_11_569_2(a_ary, a_base, a_col)

# 結果:13572
0595デフォルトの名無しさん
垢版 |
2018/07/13(金) 08:58:11.48ID:IlVyAeDp
rubyならさくっとワンライナーで
p (10000-10000%-36).step(10**5,36).find{|i|(i.digits&[2,3,5])[2]}
#=> 13572
0596569
垢版 |
2018/07/13(金) 16:26:20.44ID:oo2UOY38
>>569
Rubyで、問2

str_ary = %w(2 3 5)

(10_000...100_000).select do |num|
next unless num % 36 == 0

# 2, 3, 5 をすべて含む
if str_ary.all? { |s| num.to_s.include? s }
puts num #=> 13,572
break
end
end
0598デフォルトの名無しさん
垢版 |
2018/07/14(土) 13:47:04.74ID:3J9Q4qmi
そろそろ新しいお題を。
既出なら申し訳ない。

お題:
再帰・スタックを使用しないマージソートを実装し、整数型のデータn個の配列をソートするプログラムを作成しなさい。
データの個数は不定とし、特定の条件を満たす個数の配列にのみ有効なプログラムは不可とします。
データの内容はランダムとします。乱数の生成法はお任せします。
出来ればソート完了後に配列(の一部)を表示する、正しくソート出来たかチェックする処理を追加してみて下さい。

追加お題:
上記のマージソート処理の際、作業領域を元のデータの半分の量しか確保せずにソートを実行するプログラムを作成しなさい。
0599デフォルトの名無しさん
垢版 |
2018/07/14(土) 15:13:06.98ID:QznZ4U7X
1から100までの数字から4つを取り出したそれぞれに番号を振る速い方法ありますか?
メモリもあまり使わずに

1 2 3 4 -> 1
1 2 3 5 -> 2
1 2 3 6 -> 3

96 97 98 99 -> 3921221
96 97 98 100 -> 3921222
96 97 99 100 -> 3921223
96 98 99 100 -> 3921224
97 98 99 100 -> 3921225
0601デフォルトの名無しさん
垢版 |
2018/07/14(土) 15:57:46.49ID:ETmmav0O
スタック不可だとスタック操作が隠蔽されてる高級言語はほぼ使用出来ない
無理やりCやC++でやるとしてもローカル変数や関数呼び出しを殆ど封印しなければならない
これを良い問題と見るか悪い問題と見るかは分からないが俺はやる気が出ない
0602デフォルトの名無しさん
垢版 |
2018/07/14(土) 16:00:11.93ID:4RxIMQwD
>>599
組み合わせか

北大の湊 真一のZDD とか。
本も出てる
0604デフォルトの名無しさん
垢版 |
2018/07/14(土) 18:41:01.92ID:3J9Q4qmi
>>601

すみません。>598の「スタック」はデータ構造としての利用のみを想定していて、他関数呼び出しの禁止などは意図してませんでした。
問題文が不明瞭ですみません。

>>600
ご期待に添えず申し訳ない。他のお題を思いついたら、また出題させていただきます。
0605デフォルトの名無しさん
垢版 |
2018/07/14(土) 20:04:39.81ID:wFLY+TGv
お題: マップの広さと部屋の個数及び部屋間の繋がりが与えられた時、ダンジョンを作成せよ
・ダンジョンは部屋と通路からなる
・部屋は少なくとも3x4の大きさを持つ
・通路の幅は1
・部屋同士は接しない
・マップ外に部屋や通路は無い
一応、想定としては標準出力に'#'と'.'で表示を考えてる
生成方法は自由だからゲーム的面白さのあるマップ作っても良い
■ このスレッドは過去ログ倉庫に格納されています

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