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/

宿題は宿題スレがあるのでそちらへ。
0632デフォルトの名無しさん
垢版 |
2018/07/15(日) 14:14:11.66ID:9lve5q3D
>>619のもっと効率悪い奴だよ
元は100C4じゃなくて28C4だったけど
int cc[4][32][32];
こんな二次元の配列使ってた
0635デフォルトの名無しさん
垢版 |
2018/07/15(日) 14:33:39.46ID:ugn7dRUi
それの何が不満?
何をどう改善したいのかわからないと

テーブル作成の速度?
テーブル検索の速度?
コードサイズ?
バイナリサイズ?
コードの分かりやすさや移植性?
0639デフォルトの名無しさん
垢版 |
2018/07/15(日) 21:44:41.62ID:WaX+Eind
605、出題しておいて何だがこれめっちゃ難しいな
マップの大きさの制約があると通路引くのが難しすぎる
0644 ◆QZaw55cn4c
垢版 |
2018/07/16(月) 11:53:01.88ID:PLRcL5uS
>>643
一般に、再帰を非再帰に書き下すのは難しいのです…
0645デフォルトの名無しさん
垢版 |
2018/07/16(月) 13:51:43.31ID:yJ4dWfp7
お題
ポーランド記法による計算機を実装せよ
演算子は加算(+)と乗算(*)をサポートすること

* + 1 5 + 2 3
=> 30

* * * * 2 3 4 5 6
=> 720
0649デフォルトの名無しさん
垢版 |
2018/07/16(月) 14:36:11.63ID:dBK+PWCu
>>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
0651デフォルトの名無しさん
垢版 |
2018/07/19(木) 21:45:59.55ID:bv0mlJEL
お題

N個の整数(a_1, a_2, ..., a_n, ..., a_N)と*+/()を使った数式の値が、ある整数aにもっとも近い数式とその値(実数)を出力せよ

引き算はなし
a_n = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
0653デフォルトの名無しさん
垢版 |
2018/07/24(火) 10:08:13.30ID:Dnr6z2Ly
>>606
>>605のは要はローグライクの部屋を作れってことだろ

出題者の説明不足
画像の1枚でも張れば見て分かる

ttps://cdn-ak.f.st-hatena.com/images/fotolife/g/gaou2/20170905/20170905111314.png
0658デフォルトの名無しさん
垢版 |
2018/07/26(木) 01:28:14.71ID:NOsumJU/
いやさすがに数学板でやれや。
国際数学オリンピックて自分で言うてるやんけ
0660デフォルトの名無しさん
垢版 |
2018/07/26(木) 03:14:46.46ID:64IGnOgv
いやこれは総当たりでは計算量的に無理だろ
コードは書けるだろうけど
存在することを帰納法で証明するしかないから数学板の問題だ
0661デフォルトの名無しさん
垢版 |
2018/07/26(木) 09:13:59.71ID:1RynmuAu
まーた数学コンプレックスが暴れてるのか
数オリに出るくらいの賢さがないから計算機の力も借りて解くっていう方向性は別にスレチじゃないだろ
0662デフォルトの名無しさん
垢版 |
2018/07/26(木) 09:22:17.32ID:NOsumJU/
ここでレスリングの話しだして苦言を呈されると「まーたレスリングコンプレックスが暴れてるのか」
極端に言うとこういうこと。
レスリング板、数学板があるだろ。
わざわざここでオナニーしたいのは専門以外の板でマウント取りたいのかな?
そんなひねくれた根性だから現実世界でミジメな生活なんだよ。
0663デフォルトの名無しさん
垢版 |
2018/07/26(木) 09:30:59.20ID:1RynmuAu
早速暴れてて草
正攻法で数オリの問題を解く話を延々してたんならうざいけど
飽くまで計算機使って解いてみようぜって言ってる人にまでその理屈が当てはまるわけないだろ
それとも数学だけじゃなくて論理的思考もできないタイプか?それなら納得だわw
0664デフォルトの名無しさん
垢版 |
2018/07/26(木) 10:44:43.72ID:NOsumJU/
数学で解ける問題をわざわざコンピューターでムダな解き方するの??
突き詰めていくと数学で出した解法そのまま引き写すだけになるのが分かりきってるのに。
0665デフォルトの名無しさん
垢版 |
2018/07/26(木) 10:51:14.48ID:1RynmuAu
だからわざわざ「数オリに出るくらいの賢さがないから」って言ってるだろ日本語読めねえのかよ
そりゃ灘の入試レベルならその通りだろうけど数オリで正解率1割切ってたような問題なんだから計算機使ったアプローチしてみるのもプログラミングのお題としては面白いだろ
それともなんだ、円周率の計算だってペンと紙でできるんだから無駄だっていうのか?w
そんな極論言うレベルの頭だから数学もできないんだよw
0666デフォルトの名無しさん
垢版 |
2018/07/26(木) 11:36:12.38ID:64IGnOgv
そういう無駄に一般化した話も結構だけど、
個別具体的な話として>>597は計算機を併用することに効果が無いから数学の問題だと言ってるんだよ。

2018を解けるほど効率化できるなら既に人力で解けているだろうからね。
0667デフォルトの名無しさん
垢版 |
2018/07/26(木) 13:48:16.24ID:YvrMO5FL
それは総当たり以外にうまい方法が思い浮かばないから言えるだけでしょうよ。
あと素数判定アルゴリズムなんか考えればわかるけど、効率化できることと人力で解けることに相関はないぞ。
少なくともスレチではないと思うよ。
0668デフォルトの名無しさん
垢版 |
2018/07/26(木) 14:31:11.72ID:v+At+/4W
部外者だが

嫌なら回答しなきゃいいだけなのに
何文句言ってるの?
って感じ
0672デフォルトの名無しさん
垢版 |
2018/07/27(金) 00:30:20.41ID:1FlI+KkW
作るのは無理な気がするがよーわからん

一番大きい数値 1+2+…2018 = 2037171 は差の絶対値で作れないので最下段確定
一番大きい数値を出来るだけ上段に伝搬させるために小さい数値(1~2017)と組み合わせていっても最上段に残るのは 2018
→ 2019 以上と組み合わせると 2017 未満の数値がダブる
最下段で 2037171 と 1 を組み合わせた場合、 2037169 も最下段に設置する必要がある
2037169 は 1~2018 の大部分と組み合わせられないので上のほうまで伝搬できずにアウト
0673デフォルトの名無しさん
垢版 |
2018/07/27(金) 01:35:56.64ID:DQ/IIgai
その長々とした理屈は2018が7でも6でも同様のことが言えるよね
そして7や6には解がある
0676デフォルトの名無しさん
垢版 |
2018/07/27(金) 04:54:59.02ID:1FlI+KkW
5以下の場合は数字が足りなくなる前に最大値からの流れに合流出来てるんじゃね?
0680デフォルトの名無しさん
垢版 |
2018/07/27(金) 19:00:06.01ID:2ZGMtSH+
>>679

質問です。
n>99の場合はズレが生じてくると思いますが、その時はどうしますか?
それともn≦99で範囲を絞ってもよろしいんでしょうか?

まぁ、私が作れるかどうか分からないんですがorz
0683デフォルトの名無しさん
垢版 |
2018/07/28(土) 12:28:46.99ID:SHZi2qln
まずは数学から入るか

中心つき六角数 - 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
0689デフォルトの名無しさん
垢版 |
2018/08/01(水) 15:31:54.60ID:3rDDnIHy
ちょっと待ってね。温度計持ってくるから。
0692デフォルトの名無しさん
垢版 |
2018/08/02(木) 00:18:21.78ID:vClc7nAi
>>688
awk
Linux 用

awk '{printf "%.3f℃n", $1 / 1000}' /sys/class/thermal/thermal_zone0/temp

実行例

56.000℃
0693デフォルトの名無しさん
垢版 |
2018/08/02(木) 01:04:29.34ID:vClc7nAi
あれ?\n が抜けた。
これね。

awk '{printf "%.3f℃\n", $1 / 1000}' /sys/class/thermal/thermal_zone0/temp
0696デフォルトの名無しさん
垢版 |
2018/08/10(金) 02:32:41.77ID:3Gbr2Rmh
鈴木貫太郎
灘中 中学入試問題シリーズ 整数問題
https://youtu.be/98U2qVDQltc

6桁の整数、5AB,C15 が999 の倍数である時、ABC を求めよ

答え
A=8, B=4, C=4
0699デフォルトの名無しさん
垢版 |
2018/08/10(金) 04:27:27.01ID:MBG3l1c9
お題:与えられた正の整数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
0701デフォルトの名無しさん
垢版 |
2018/08/10(金) 10:02:14.32ID:GIxLf6/p
>>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
0702デフォルトの名無しさん
垢版 |
2018/08/10(金) 10:56:59.12ID:EBuB6o8O
>>696
何も考えてないPerlのワンライナー

perl -e 'for(0..999){$n=sprintf"5%03d15",$_;if($n%999==0){print"$n\n"}}'
584415
0703デフォルトの名無しさん
垢版 |
2018/08/10(金) 11:16:24.27ID:EBuB6o8O
>>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"
}
0706デフォルトの名無しさん
垢版 |
2018/08/10(金) 14:48:17.70ID:MBG3l1c9
>>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
0710デフォルトの名無しさん
垢版 |
2018/08/10(金) 18:30:15.99ID:GIxLf6/p
>>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
0712709
垢版 |
2018/08/10(金) 19:22:50.97ID:q2LOavXt
>>711
あ、そうか。その方が簡単だな。
0714デフォルトの名無しさん
垢版 |
2018/08/11(土) 00:01:26.30ID:DgZEeL87
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
0715デフォルトの名無しさん
垢版 |
2018/08/11(土) 02:38:16.74ID:7kLiHGgf
>>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++;
}
0718デフォルトの名無しさん
垢版 |
2018/08/11(土) 07:37:04.51ID:N9ICkOCi
みつかりました
そんなに昔じゃなかった
2年半前
41兆くらいまで求めてます

マルチスレッドではありませんでした
処理内容はよく覚えていません

素数表作成
ビットパターン作成
ふるい

のようなコメントがあります

105単位でなにかやってます
0719デフォルトの名無しさん
垢版 |
2018/08/11(土) 09:37:18.90ID:y6G1YdWM
だんだん思い出してきました
6n+1, 6n+5 に対応するビット列を保持
小さな素数の倍数はマスクを作ってAVX命令でANDしていって
大きな素数の倍数はp(210n+48個の値) にしぼって
ビット命令でひたすらふるう感じ

キャッシュサイズを考えて小さなバッファでやってます
0721デフォルトの名無しさん
垢版 |
2018/08/12(日) 13:15:41.49ID:DNU8qmV7
お題:
ロト6で申込数字のいずれかが必ず5等以上に当選する
最小の申込数字の組み合わせを作ってください

ロト6は01〜43の数字から異なる数字6個を順番不問で選び
申込数字6個のうち3個以上が本数字と一致すれば5等以上に当選となります
0722デフォルトの名無しさん
垢版 |
2018/08/12(日) 14:21:49.33ID:ZHEExUj+
>>721
・5等の当選条件を満たしている
・5等以上のいずれかの当選条件を満たしている
この2つは同値なの?
0724デフォルトの名無しさん
垢版 |
2018/08/12(日) 15:09:35.79ID:ZHEExUj+
>>723
1〜5等に該当するならば必ず当選番号と同じ数字が少なくとも3つ入っているということがはっきりしない限り解けないでしょ
0725デフォルトの名無しさん
垢版 |
2018/08/12(日) 15:11:11.96ID:ZHEExUj+
ごめん
申込数字6個のうち3個以上が本数字と一致すれば5等以上に当選となります

申込数字6個のうち3個以上が本数字と一致すれば5等に当選となります
と読み間違えてたわ
0730デフォルトの名無しさん
垢版 |
2018/08/12(日) 15:29:22.68ID:1gNSypiF
>>724
3個以上一致 <===> 5等以上に当選
3個以上一致 ====> 5等以上に当選
のどちらかをたずねたのかと思った
0731デフォルトの名無しさん
垢版 |
2018/08/12(日) 15:39:13.61ID:ZHEExUj+
>>730
そもそもこっちが>>722>>724で「申込数字6個のうち3個ちょうど本数字と一致すれば5等に当選」って誤解してたのが始まりなんだ
わけわかんないこと言ってごめんね
■ このスレッドは過去ログ倉庫に格納されています

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