プログラミングのお題スレです。
【出題と回答例】
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/
宿題は宿題スレがあるのでそちらへ。
前スレ
プログラミングのお題スレ Part10
https://mevius.5ch.net/test/read.cgi/tech/1514772904/
プログラミングのお題スレ Part11
https://mevius.5ch.net/test/read.cgi/tech/1524570314/
プログラミングのお題スレ Part12
■ このスレッドは過去ログ倉庫に格納されています
2018/09/28(金) 10:09:07.13ID:phwOkayR
741デフォルトの名無しさん
2018/12/01(土) 05:34:42.40ID:qLkjgui5 >>735 訂正
src = $<.read
i = 0
loop do
break if i >= src.size
case src[i]
when ?" then i += src[i..-1][/\A"(?:.*?[^\\])?(?:\\\\)*"/].size; next
when ?' then i += src[i..-1][/\A'(?:.*?[^\\])?(?:\\\\)*'/].size; next
when ?/ then src.sub!(/(?<=\A.{#{i}})(?:\/\/[^\n]*|\/\*.*?\*\/)/m, '')
end
i += 1
end
puts src
-*- input -*-
hoge(); // fuga
hoge('"'); // fuga ");
hoge("// \"fuga\"\\", /* fuga */ *"fuga");
hoge("/* fuga */"); /* fuga
fuga /* "fuga" // */; hoge
-*- output -*-
hoge();
hoge('"');
hoge("// \"fuga\"\\", *"fuga");
hoge("/* fuga */"); ; hoge
src = $<.read
i = 0
loop do
break if i >= src.size
case src[i]
when ?" then i += src[i..-1][/\A"(?:.*?[^\\])?(?:\\\\)*"/].size; next
when ?' then i += src[i..-1][/\A'(?:.*?[^\\])?(?:\\\\)*'/].size; next
when ?/ then src.sub!(/(?<=\A.{#{i}})(?:\/\/[^\n]*|\/\*.*?\*\/)/m, '')
end
i += 1
end
puts src
-*- input -*-
hoge(); // fuga
hoge('"'); // fuga ");
hoge("// \"fuga\"\\", /* fuga */ *"fuga");
hoge("/* fuga */"); /* fuga
fuga /* "fuga" // */; hoge
-*- output -*-
hoge();
hoge('"');
hoge("// \"fuga\"\\", *"fuga");
hoge("/* fuga */"); ; hoge
742デフォルトの名無しさん
2018/12/01(土) 07:52:53.53ID:U3mK8vlP743デフォルトの名無しさん
2018/12/01(土) 11:03:33.46ID:XKE5KJf3 >>742
生きづらそう
生きづらそう
744デフォルトの名無しさん
2018/12/01(土) 11:10:29.72ID:50ygxsN0745デフォルトの名無しさん
2018/12/01(土) 11:16:56.49ID:50ygxsN0 >>744
ゴメン再帰マッチは(?R)や(?1)だた
時間あればnest対応版書いてみたいけど
多分ないや…
こういうのは再帰降下パーサParse::RecDescentやPerl6のRule使うと楽に書ける
ゴメン再帰マッチは(?R)や(?1)だた
時間あればnest対応版書いてみたいけど
多分ないや…
こういうのは再帰降下パーサParse::RecDescentやPerl6のRule使うと楽に書ける
746デフォルトの名無しさん
2018/12/01(土) 12:39:50.92ID:U3mK8vlP747デフォルトの名無しさん
2018/12/01(土) 12:41:56.31ID:1eGLRG7/ いつもの単芝君やないか
この板に粘着して荒らしまわってる奴やで
意思疎通は不可能なのでNGするなりスルーするなりしてくれ
この板に粘着して荒らしまわってる奴やで
意思疎通は不可能なのでNGするなりスルーするなりしてくれ
748デフォルトの名無しさん
2018/12/01(土) 15:19:58.00ID:3EVAE812749デフォルトの名無しさん
2018/12/01(土) 17:02:07.43ID:3EVAE812 >>736も改造終了(URLは同じ)。
750デフォルトの名無しさん
2018/12/01(土) 17:34:49.88ID:XO3Kyvz4 >>706 F#
https://ideone.com/IUPK21
mandelbrotが2.86s
https://postd.cc/adventures-in-jit-compilation-part-1-an-interpreter/ を参考にした
https://ideone.com/IUPK21
mandelbrotが2.86s
https://postd.cc/adventures-in-jit-compilation-part-1-an-interpreter/ を参考にした
751デフォルトの名無しさん
2018/12/01(土) 17:37:04.95ID:XO3Kyvz4 >>750 はインタプリタでないので無視してください
752デフォルトの名無しさん
2018/12/02(日) 00:35:34.00ID:twRH93OM >>702
Kotlin
https://paiza.io/projects/MBp2uVW-Y0Kj2sRaZom3pA
1行1プログラムだが行が長くなると見辛いので行末に \ があったら次の行と連結している事にした。
Kotlin
https://paiza.io/projects/MBp2uVW-Y0Kj2sRaZom3pA
1行1プログラムだが行が長くなると見辛いので行末に \ があったら次の行と連結している事にした。
753711
2018/12/02(日) 16:02:26.97ID:aFBnTuDv >>702 c
https://ideone.com/6sLfPH
・ mandelbrotが4.24s→3.42s→3.24s→2.13s
・G: while (*dp) dp += ip->d; ip++; goto TOP; を追加
>>723
caseで分岐するほうが移植性あっていいよね( ^ω^)
https://ideone.com/6sLfPH
・ mandelbrotが4.24s→3.42s→3.24s→2.13s
・G: while (*dp) dp += ip->d; ip++; goto TOP; を追加
>>723
caseで分岐するほうが移植性あっていいよね( ^ω^)
754デフォルトの名無しさん
2018/12/02(日) 16:29:28.37ID:hHHhmr7T Python「・・・」
755デフォルトの名無しさん
2018/12/03(月) 22:04:03.50ID:cV13JBu4 [お題]
整数A,B(1<=A<B<=50万)と P(1<=P<=10)が順に与えられる。
A以上B以下の10進数の整数から異なる2つの整数を選ぶ。
その2つの整数を表現するのに使われている(各桁の)数字の種類が
ちょうどP種類である選び方は何通りできるか。
※ 先頭ゼロ詰禁止、実行時間一問1.5秒以内(ideone等で)
1) 8 11 2 --> 4
2) 10 1000 5 --> 207480
3) 44 44444 4 --> 33808313
4) 56785 113452 1 --> ?
5) 102345 480713 6 --> ?
6) 1 500000 7 --> 47440713600
例題1) の補足 "8 11 2" のとき
{8,9,10,11}から2整数を選ぶ。NCR(4,2)=6通りあるなかから
(8,9)(8,11)(9,11)(10,11) の4通りが答え。[]内を使用数字とすると、
例として、(8,11)は[8,1]の2種類, (10,11)は[1,0]の2種類からなる。
対象外は (8,10)は[8,1,0] (9,10)は[9,1,0]で ともに2種類ではない。
※解き方をパックて単純化した問題。
整数A,B(1<=A<B<=50万)と P(1<=P<=10)が順に与えられる。
A以上B以下の10進数の整数から異なる2つの整数を選ぶ。
その2つの整数を表現するのに使われている(各桁の)数字の種類が
ちょうどP種類である選び方は何通りできるか。
※ 先頭ゼロ詰禁止、実行時間一問1.5秒以内(ideone等で)
1) 8 11 2 --> 4
2) 10 1000 5 --> 207480
3) 44 44444 4 --> 33808313
4) 56785 113452 1 --> ?
5) 102345 480713 6 --> ?
6) 1 500000 7 --> 47440713600
例題1) の補足 "8 11 2" のとき
{8,9,10,11}から2整数を選ぶ。NCR(4,2)=6通りあるなかから
(8,9)(8,11)(9,11)(10,11) の4通りが答え。[]内を使用数字とすると、
例として、(8,11)は[8,1]の2種類, (10,11)は[1,0]の2種類からなる。
対象外は (8,10)は[8,1,0] (9,10)は[9,1,0]で ともに2種類ではない。
※解き方をパックて単純化した問題。
756デフォルトの名無しさん
2018/12/03(月) 23:49:23.73ID:CrTNh3lq 数え上げ系のお題はつまんない
757デフォルトの名無しさん
2018/12/04(火) 10:39:39.35ID:ZczbahAK パズルソルバーは制約・論理プログラミングが最適だね。
758デフォルトの名無しさん
2018/12/04(火) 13:11:47.75ID:vhrUEqnQ >>720 正規表現だけで書いてみた
regexp = /((?:([^"']*?)(?:\/\/[^\n]*|\/\*.*?\*\/))*)(("|').*?(?<!\\)(?:\\\\)*\4)?/m
puts <<~EOT.gsub(regexp, '\2\3')
hoge(); // fuga
hoge('"'); // fuga ");
hoge("// \\"fuga\\"\\\\", /* fuga */ *"fuga");
hoge("/* fuga */"); /* fuga
fuga /* "fuga" // */; hoge
EOT
# =>
hoge();
hoge('"');
hoge("// \"fuga\"\\", *"fuga");
hoge("/* fuga */"); ; hoge
regexp = /((?:([^"']*?)(?:\/\/[^\n]*|\/\*.*?\*\/))*)(("|').*?(?<!\\)(?:\\\\)*\4)?/m
puts <<~EOT.gsub(regexp, '\2\3')
hoge(); // fuga
hoge('"'); // fuga ");
hoge("// \\"fuga\\"\\\\", /* fuga */ *"fuga");
hoge("/* fuga */"); /* fuga
fuga /* "fuga" // */; hoge
EOT
# =>
hoge();
hoge('"');
hoge("// \"fuga\"\\", *"fuga");
hoge("/* fuga */"); ; hoge
759デフォルトの名無しさん
2018/12/04(火) 13:34:55.49ID:fo8RIf+e >>758 無駄な括弧があったので修正
regexp = /([^"']*?)(?:\/\/[^\n]*|\/\*.*?\*\/)?(("|').*?(?<!\\)(?:\\\\)*\3)?/m
puts src.gsub(regexp, '\1\2')
regexp = /([^"']*?)(?:\/\/[^\n]*|\/\*.*?\*\/)?(("|').*?(?<!\\)(?:\\\\)*\3)?/m
puts src.gsub(regexp, '\1\2')
760デフォルトの名無しさん
2018/12/04(火) 17:02:17.81ID:N7rAE58b761デフォルトの名無しさん
2018/12/04(火) 17:20:50.80ID:tkE9zz4k お題: テキストが入力されるのでそれがお題であれば1,お題でなければ0を出力せよ
762デフォルトの名無しさん
2018/12/04(火) 17:37:59.07ID:HMynH27O763デフォルトの名無しさん
2018/12/04(火) 17:43:36.31ID:evmq38l5 お題
C/C++言語のソースをHTMLに変換
・色分け(外部スタイルシートで色分け以外にも
サイズや種類など色々と細かく指定可能)表示
・コメント・クォート・マクロ定義部分・マクロ等に対応
・ローカル変数・グローバル変数・static関数・非static関数
ライブラリ変数/関数/マクロ(ヘッダ記載)・
ローカル型・グローバル型名の区別
入力:コマンドラインからファイル名(.c/.cpp)
出力:出力htm(l)ファイルとそれが参照するスタイルシート(.css)を
新規作成
C/C++言語のソースをHTMLに変換
・色分け(外部スタイルシートで色分け以外にも
サイズや種類など色々と細かく指定可能)表示
・コメント・クォート・マクロ定義部分・マクロ等に対応
・ローカル変数・グローバル変数・static関数・非static関数
ライブラリ変数/関数/マクロ(ヘッダ記載)・
ローカル型・グローバル型名の区別
入力:コマンドラインからファイル名(.c/.cpp)
出力:出力htm(l)ファイルとそれが参照するスタイルシート(.css)を
新規作成
764デフォルトの名無しさん
2018/12/04(火) 17:47:43.27ID:evmq38l5 あと、コードブロックや式の括弧のネストレベルに応じて
背景色を変えてほしい(要望)
コマンドラインからタブ=4,8とか指定できるようにもして欲しい
背景色を変えてほしい(要望)
コマンドラインからタブ=4,8とか指定できるようにもして欲しい
765デフォルトの名無しさん
2018/12/04(火) 17:58:45.10ID:0EeyK9d3 >>761
ruby -ne'p~/\Aお題\Z/?1:0'
ruby -ne'p~/\Aお題\Z/?1:0'
766デフォルトの名無しさん
2018/12/04(火) 18:05:08.94ID:HMynH27O 1. 好きなIDEのエディタで画面に表示。
2. PrtSc キーを押す。
3. ペイントを起動してペースト。
4. PNGファイルとして保存。
5. メモ帳を起動。
6. HTML を書き、imgで先の画像を表示するようにする。
7. 拡張子をhtmlにして保存。
8. ブラウザで表示。
9. 終了。
2. PrtSc キーを押す。
3. ペイントを起動してペースト。
4. PNGファイルとして保存。
5. メモ帳を起動。
6. HTML を書き、imgで先の画像を表示するようにする。
7. 拡張子をhtmlにして保存。
8. ブラウザで表示。
9. 終了。
767デフォルトの名無しさん
2018/12/04(火) 18:14:10.74ID:evmq38l5 型に応じて変数の色分け(スタイル変更)に対応できたら最高
忘れてたけど予約語の色分けは当然
ソースコードの構文エラー箇所以降は単色赤文字で表示
忘れてたけど予約語の色分けは当然
ソースコードの構文エラー箇所以降は単色赤文字で表示
768デフォルトの名無しさん
2018/12/04(火) 19:05:35.22ID:Ntdpy5BB >>761 PowerShell
[int]("お題" -eq $(Read-Host))
[int]("お題" -eq $(Read-Host))
769デフォルトの名無しさん
2018/12/05(水) 04:19:34.99ID:fABNAu0P770デフォルトの名無しさん
2018/12/05(水) 19:36:38.80ID:W3jESzak お題:ビュフォンの針をシミュレートして円周率の近似値を求めよ
771デフォルトの名無しさん
2018/12/05(水) 20:02:35.88ID:W3jESzak772デフォルトの名無しさん
2018/12/05(水) 23:06:27.91ID:dgv/Vo0c angleを計算するのに思いっきりπの値使ってるだろうし..www
773デフォルトの名無しさん
2018/12/05(水) 23:30:47.41ID:oCZO3Dfm wikipediaは日本語版だけその問題に言及して疑似コードも載ってるのな
>>772
そんなツッコミは初めてみました、うまいですね…
そんなツッコミは初めてみました、うまいですね…
775デフォルトの名無しさん
2018/12/05(水) 23:42:52.79ID:W3jESzak >>772
書いてて思ったけどめんどくさくなってそれ以上考えなかった
書いてて思ったけどめんどくさくなってそれ以上考えなかった
776デフォルトの名無しさん
2018/12/06(木) 01:36:29.15ID:Yn5Hc93r >>770 Squeak/Pharo Smalltalk
| length N rand needle nCrossed |
length := 10000.
N := 1e7.
rand := Random new.
needle := LineMorph from: length / -2 @ 0 to: length / 2 @ 0 color: Color black width: 1.
nCrossed := 0.
N timesRepeat: [
| crossed |
needle rotationDegrees: 90 * rand next; center: 0 @ (length * rand next).
crossed := length negated @ 0 to: length @ 0 intersects: needle firstVertex to: needle lastVertex.
crossed ifTrue: [nCrossed := nCrossed + 1]
].
N / nCrossed asFloat "=> 3.142226273599298 "
| length N rand needle nCrossed |
length := 10000.
N := 1e7.
rand := Random new.
needle := LineMorph from: length / -2 @ 0 to: length / 2 @ 0 color: Color black width: 1.
nCrossed := 0.
N timesRepeat: [
| crossed |
needle rotationDegrees: 90 * rand next; center: 0 @ (length * rand next).
crossed := length negated @ 0 to: length @ 0 intersects: needle firstVertex to: needle lastVertex.
crossed ifTrue: [nCrossed := nCrossed + 1]
].
N / nCrossed asFloat "=> 3.142226273599298 "
777デフォルトの名無しさん
2018/12/06(木) 01:57:54.87ID:CjS0UpEg こういうプログラム面手するのつらいだろうな
778デフォルトの名無しさん
2018/12/06(木) 02:09:23.51ID:7UXgAx11 >>771 Ruby
# length = 2; gap = 2
buffon_s = -> n {n.fdiv((1..n).count{rand < sin(rand(1e10))})}
p buffon_s[10**6]
# => 3.1421245789553063
# length = 2; gap = 2
buffon_s = -> n {n.fdiv((1..n).count{rand < sin(rand(1e10))})}
p buffon_s[10**6]
# => 3.1421245789553063
779755
2018/12/06(木) 20:58:20.17ID:fqSvUjwD >>755
需要はほぼなかったみたいだが、出題者コメントを
答えだすのに必要なものだけに前処理で集計。今回必要なのは
0-9数字使用の有無だけなので2^10に集約・集計できる( 50万→1024)
この数になればあとは、二重ループで集計をすればいい。
後半は集約にビットを使えば、popcountを使って簡潔に書けるパターン。
想定解(python by pypy) https://ideone.com/bujm1x
回答者さんとほぼ同じ。
あえて相違点は、pythonのpopcount相当が意外と重かったので、
前処理でテーブル化している。(高速に出れば、いらないはず?)
※制約の50万と1.5秒は、素の(標準だけの)pythonに合わせている。
(このコードも素のpythonだと、例題6)だけで0.8秒くらい)
需要はほぼなかったみたいだが、出題者コメントを
答えだすのに必要なものだけに前処理で集計。今回必要なのは
0-9数字使用の有無だけなので2^10に集約・集計できる( 50万→1024)
この数になればあとは、二重ループで集計をすればいい。
後半は集約にビットを使えば、popcountを使って簡潔に書けるパターン。
想定解(python by pypy) https://ideone.com/bujm1x
回答者さんとほぼ同じ。
あえて相違点は、pythonのpopcount相当が意外と重かったので、
前処理でテーブル化している。(高速に出れば、いらないはず?)
※制約の50万と1.5秒は、素の(標準だけの)pythonに合わせている。
(このコードも素のpythonだと、例題6)だけで0.8秒くらい)
780デフォルトの名無しさん
2018/12/06(木) 21:56:29.19ID:QyI+7EvW781デフォルトの名無しさん
2018/12/07(金) 15:14:44.93ID:wiJMm9Hc782デフォルトの名無しさん
2018/12/07(金) 22:19:34.17ID:x8xNXHP3 お題
1,3,4,6,7,9,10,12,…
のように1から始まり奇数, 奇数,偶数,偶数,
奇数,奇数,偶数,偶数…と続く場合2019番目はいくつになるか
1,3,4,6,7,9,10,12,…
のように1から始まり奇数, 奇数,偶数,偶数,
奇数,奇数,偶数,偶数…と続く場合2019番目はいくつになるか
783デフォルトの名無しさん
2018/12/07(金) 22:30:34.68ID:avhY9emJ floor(2019 * 1.5)
784デフォルトの名無しさん
2018/12/07(金) 22:32:31.84ID:avhY9emJ 結果書いてなかった
3028
3028
785デフォルトの名無しさん
2018/12/07(金) 22:35:02.23ID:avhY9emJ 計算量的に整数の乗算とシフト演算だけの n * 3 >> 1 のほうが良いか
786デフォルトの名無しさん
2018/12/07(金) 22:38:48.18ID:xSpw6JJG787デフォルトの名無しさん
2018/12/07(金) 22:47:23.26ID:avhY9emJ788デフォルトの名無しさん
2018/12/07(金) 22:48:51.29ID:xSpw6JJG789デフォルトの名無しさん
2018/12/08(土) 03:40:55.13ID:xmV4OmOO790デフォルトの名無しさん
2018/12/08(土) 08:09:08.92ID:JIGsOpwq 第n項=3n/2+(-1)^n/4-1/4
791デフォルトの名無しさん
2018/12/08(土) 09:20:01.90ID:vpfNpx82 プログラミング初心者なんですがJavaを覚えるのに良い課題下さい
言語の本は一冊読みました
言語の本は一冊読みました
792デフォルトの名無しさん
2018/12/08(土) 09:29:35.75ID:5PBkTMHJ Winならtypeコマンド(LinuxとかUnix系だとcat)と同じ機能を自作してみるとか、行番号も表示するようにするとかから始めては?
793デフォルトの名無しさん
2018/12/08(土) 09:53:44.58ID:Mku3deOK794デフォルトの名無しさん
2018/12/08(土) 09:59:51.42ID:Mku3deOK >>793
言語はJ
言語はJ
795781
2018/12/08(土) 12:53:06.37ID:JIGsOpwq 整数計算オーバーフローが発生していたのを修正
https://pastebin.com/FAzjRJn5
https://pastebin.com/FAzjRJn5
796デフォルトの名無しさん
2018/12/08(土) 15:30:02.59ID:dsjig1JQ お題:N×Nの盤面に石を置いていく。
どの4つの石も同一円周上に乗らないようにする場合、最大何個配置できるか?
ただし、一直線上に並ぶ配置は半径∞の円周上と考える。
N=3 => 5
N=4 => 7
5 => 9
6 => 11
9 => 18
どの4つの石も同一円周上に乗らないようにする場合、最大何個配置できるか?
ただし、一直線上に並ぶ配置は半径∞の円周上と考える。
N=3 => 5
N=4 => 7
5 => 9
6 => 11
9 => 18
797デフォルトの名無しさん
2018/12/08(土) 17:29:13.00ID:xmV4OmOO >>796
問題の意味がわからない。図とか描いてくれ。
問題の意味がわからない。図とか描いてくれ。
798デフォルトの名無しさん
2018/12/08(土) 17:33:47.41ID:kCA+QhwE >>796
石の大きさはゼロで格子点とでも考えればいいのかな
石の大きさはゼロで格子点とでも考えればいいのかな
799デフォルトの名無しさん
2018/12/08(土) 17:36:28.60ID:m52vxjN5 ああ共円か
有名なゲームだな
有名なゲームだな
800デフォルトの名無しさん
2018/12/08(土) 19:05:02.19ID:xmV4OmOO 共円でググってようやっとわかった。
801デフォルトの名無しさん
2018/12/08(土) 19:37:58.42ID:xPmIyiBg >>791
テトリス
テトリス
802デフォルトの名無しさん
2018/12/10(月) 02:09:47.01ID:3g7m60y1 >>782
1は0番目じゃなくて1番目だよね。念のため確認
1は0番目じゃなくて1番目だよね。念のため確認
803デフォルトの名無しさん
2018/12/12(水) 02:35:41.59ID:84v7sPOJ お題
2次元平面上で点(x,y)が点列(X1,Y1), (X2,Y2), ..., (Xn,Yn), (X1,Y1)を順に結んでできる多角形の内部にあるかどうか判定せよ
2次元平面上で点(x,y)が点列(X1,Y1), (X2,Y2), ..., (Xn,Yn), (X1,Y1)を順に結んでできる多角形の内部にあるかどうか判定せよ
804デフォルトの名無しさん
2018/12/12(水) 07:13:05.92ID:SVnAXs6w どのような多角形をなすかの
仮定で方法も違ってくるだろうけど、
一般的な場合を視野に入れる限り
複数の数学ライブラリを組み合わせて
扱うソリューションパッケージ的なものに
なりそうでお題としてはなんだかなって感じ
仮定で方法も違ってくるだろうけど、
一般的な場合を視野に入れる限り
複数の数学ライブラリを組み合わせて
扱うソリューションパッケージ的なものに
なりそうでお題としてはなんだかなって感じ
805デフォルトの名無しさん
2018/12/12(水) 08:10:30.84ID:3f3X1OW4 >>803
多角形の定義がひどい。
重なる事はあるのか、と、重なったときに内部はどうするのかとか。(抜けるのはめんどくさい)
重なってはいけないけど辺は突き抜けても良いのかとか。
描いた絵みたいな状態を許すかどうかでけっこう判定が変わる。
多角形の定義がひどい。
重なる事はあるのか、と、重なったときに内部はどうするのかとか。(抜けるのはめんどくさい)
重なってはいけないけど辺は突き抜けても良いのかとか。
描いた絵みたいな状態を許すかどうかでけっこう判定が変わる。
806デフォルトの名無しさん
2018/12/12(水) 08:27:43.91ID:3f3X1OW4 多角形を三角形に分割して、
(x1,y1)→(x2,y2)のベクトルと
(x2,y2)→(x3,y3)のベクトルと
(x3,y3)→(x1,y1)のベクトルを
それぞれ、
(x2,y2)→(x,y)
(x3,y3)→(x,y)
(x1,y1)→(x,y)
と外積をとって、正負が一致したらその点は多角形内部にある。
重ならないなら三角形に分割、は、
1,2,3、2,3,4、3,4,5…と使う頂点をスライドさせていくだけで良いんじゃないかな?どっかで裏返るかな。
(x1,y1)→(x2,y2)のベクトルと
(x2,y2)→(x3,y3)のベクトルと
(x3,y3)→(x1,y1)のベクトルを
それぞれ、
(x2,y2)→(x,y)
(x3,y3)→(x,y)
(x1,y1)→(x,y)
と外積をとって、正負が一致したらその点は多角形内部にある。
重ならないなら三角形に分割、は、
1,2,3、2,3,4、3,4,5…と使う頂点をスライドさせていくだけで良いんじゃないかな?どっかで裏返るかな。
807デフォルトの名無しさん
2018/12/12(水) 09:01:00.07ID:J4hfK+qs また数学か。数学板が嫌なら紙とえんぴつでやってろ
808デフォルトの名無しさん
2018/12/12(水) 09:21:43.03ID:YlPyc4+b ポリゴンで塗り潰してその色になれば真
809デフォルトの名無しさん
2018/12/12(水) 11:12:59.34ID:3f3X1OW4 数学になるの?
俺CAD関連と3DCG関連でこういうの書くけどな。
コード書こうと思って出題者に問うたつもりだけど。。
証明出来てないコード書いても無意味なんだから先にロジック書いたつもり。
ってかどうして数学?っぼい問題が嫌われるの?
脳筋コードが良いってこと?
俺CAD関連と3DCG関連でこういうの書くけどな。
コード書こうと思って出題者に問うたつもりだけど。。
証明出来てないコード書いても無意味なんだから先にロジック書いたつもり。
ってかどうして数学?っぼい問題が嫌われるの?
脳筋コードが良いってこと?
810デフォルトの名無しさん
2018/12/12(水) 11:17:02.00ID:rSdIoMBA >>803 Ruby 与えられるのは凸多角形のみとし、頂点は反時計・時計回りのいずれかで与えられるものとする
def diff(a, b); a.zip(b).map{|i, j| i - j}; end
def in_triangle?(p, a, b, c)
ap, ab, ac = [p, b, c].map{|v| diff(v, a)}
det = ab[0] * ac[1] - ab[1] * ac[0]
s = (ac[1] * ap[0] - ac[0] * ap[1]) / det
t = -(ab[1] * ap[0] - ab[0] * ap[1]) / det
[s, t].all?{|e| (0..1).include?(e)} && s + t <= 1
end
def in_con_polygon?(p, *vers)
vers[1..-1].each_cons(2).any?{|v1, v2| in_triangle?(p, vers[0], v1, v2)}
end
# 原点を左下の頂点とする長さ1の正方形の内部に(0.5, 0.5)は含まれるか
p in_con_polygon?([0.5, 0.5], [0, 0], [1, 0], [1, 1], [0, 1])
# => true
p in_con_polygon?([1.76, 1.75], [0, 0], [3, 0], [2, 1.5], [1, 2.5], [0, 3])
# => false
def diff(a, b); a.zip(b).map{|i, j| i - j}; end
def in_triangle?(p, a, b, c)
ap, ab, ac = [p, b, c].map{|v| diff(v, a)}
det = ab[0] * ac[1] - ab[1] * ac[0]
s = (ac[1] * ap[0] - ac[0] * ap[1]) / det
t = -(ab[1] * ap[0] - ab[0] * ap[1]) / det
[s, t].all?{|e| (0..1).include?(e)} && s + t <= 1
end
def in_con_polygon?(p, *vers)
vers[1..-1].each_cons(2).any?{|v1, v2| in_triangle?(p, vers[0], v1, v2)}
end
# 原点を左下の頂点とする長さ1の正方形の内部に(0.5, 0.5)は含まれるか
p in_con_polygon?([0.5, 0.5], [0, 0], [1, 0], [1, 1], [0, 1])
# => true
p in_con_polygon?([1.76, 1.75], [0, 0], [3, 0], [2, 1.5], [1, 2.5], [0, 3])
# => false
811デフォルトの名無しさん
2018/12/12(水) 11:40:32.38ID:rSdIoMBA 問題を勘違いしてたので一部修正
凸多角形でなくてもOK 順番も結ぶ順でOK
ただし>>805の星型の内部は多角形には含まれないとする
def in_con_polygon?(p, *vers)
vers[1..-1].each_cons(2).count{|v1, v2| in_triangle?(p, vers[0], v1, v2)}.odd?
end
凸多角形でなくてもOK 順番も結ぶ順でOK
ただし>>805の星型の内部は多角形には含まれないとする
def in_con_polygon?(p, *vers)
vers[1..-1].each_cons(2).count{|v1, v2| in_triangle?(p, vers[0], v1, v2)}.odd?
end
812デフォルトの名無しさん
2018/12/12(水) 11:56:39.21ID:3f3X1OW4 ベクトル係数の解法も綺麗だな。式も少ないし素晴らしいと思う。
813デフォルトの名無しさん
2018/12/12(水) 12:12:03.42ID:SeAXRl2+ >>803 Java
https://ideone.com/xJBcjx
わかんねーので言語任せw
non_zero: >>805の星型の内部も多角形に含まれる
even_odd: >>805の星型の内部は多角形に含まれない
https://ideone.com/xJBcjx
わかんねーので言語任せw
non_zero: >>805の星型の内部も多角形に含まれる
even_odd: >>805の星型の内部は多角形に含まれない
814デフォルトの名無しさん
2018/12/12(水) 12:14:30.79ID:ygJIxGmd815デフォルトの名無しさん
2018/12/12(水) 14:03:01.24ID:FdJbiO2G 数学の問題集から拾ってきただけみたいな雑な出題が叩かれてるんじゃなかったのか
問題文自体に不備があってそこを詰めるのが主になってしまうパターンもあるけど
問題文自体に不備があってそこを詰めるのが主になってしまうパターンもあるけど
816デフォルトの名無しさん
2018/12/12(水) 14:49:36.03ID:GETLERsG 純粋に数学だけで解けて解法の式を作ったら、あとはコードにベタ書きしてただ解を出力するだけ、という問題だったら、わざわざプログラム板でやる面白味はないなあと思う。
数学的に解いても、その後コードに起こす際にプログラミング固有の工夫とか言語による違いが見られるような物だと興味深い。
個人的な感想です。
数学的に解いても、その後コードに起こす際にプログラミング固有の工夫とか言語による違いが見られるような物だと興味深い。
個人的な感想です。
817デフォルトの名無しさん
2018/12/12(水) 15:01:41.06ID:LIx8RHBs 集合論的なのをリスト使うのと配列使うのだったら違いもあるだろうけど、
そういう問題出ないね。
A∪B := {x | x ∈ A ∨ x ∈ B}
はHaskellだと仮にx が{1,2,3,4,5,6,7,8,9,10}の要素で、Aが{3,4,5,6}、Bが{5,6,7,8}なら
setX = [1..10]
setA = [3..6]
setB = [5..8]
[x | x <- setX, x `elem` setA || x `elem` setB]
(Haskellは変数名の初めに大文字使えない)
これがCで配列縛りだとreallocでも使いながらなんじゃろか。。。
そういう問題出ないね。
A∪B := {x | x ∈ A ∨ x ∈ B}
はHaskellだと仮にx が{1,2,3,4,5,6,7,8,9,10}の要素で、Aが{3,4,5,6}、Bが{5,6,7,8}なら
setX = [1..10]
setA = [3..6]
setB = [5..8]
[x | x <- setX, x `elem` setA || x `elem` setB]
(Haskellは変数名の初めに大文字使えない)
これがCで配列縛りだとreallocでも使いながらなんじゃろか。。。
>>817
そういう問題はある種の順序関係を仮定してインプリメントしたいところです
そういう問題はある種の順序関係を仮定してインプリメントしたいところです
820デフォルトの名無しさん
2018/12/12(水) 23:47:12.93ID:V5rMC+dN >>817 Smalltalk
| X A B |
X := 1 to: 10.
A := 3 to: 6.
B := 5 to: 8.
X select: [:x | (A includes: x) or: [B includes: x]]
https://ideone.com/XSlcVz
| X A B |
X := 1 to: 10.
A := 3 to: 6.
B := 5 to: 8.
X select: [:x | (A includes: x) or: [B includes: x]]
https://ideone.com/XSlcVz
821デフォルトの名無しさん
2018/12/13(木) 00:26:45.67ID:ilwXN+sT >>817 Squeak/Pharo Smalltalk
| X A B |
X := 1 to: 10.
A := 3 to: 6.
B := 5 to: 8.
X intersection: (A union: B) "=> #(3 4 5 6 7 8) "
| X A B |
X := 1 to: 10.
A := 3 to: 6.
B := 5 to: 8.
X intersection: (A union: B) "=> #(3 4 5 6 7 8) "
822デフォルトの名無しさん
2018/12/13(木) 01:00:05.58ID:vQDTFPB2823デフォルトの名無しさん
2018/12/13(木) 09:40:48.46ID:wBrOfppZ824デフォルトの名無しさん
2018/12/15(土) 18:26:25.25ID:RxHR1YVb825デフォルトの名無しさん
2018/12/15(土) 18:51:24.63ID:Hf86DN+J >>824
ruby -pe'~/^42$/&&exit'
ruby -pe'~/^42$/&&exit'
826デフォルトの名無しさん
2018/12/15(土) 20:46:54.11ID:Du8iBFv1827デフォルトの名無しさん
2018/12/15(土) 23:34:07.15ID:2jxK776v828デフォルトの名無しさん
2018/12/15(土) 23:59:19.52ID:QTag+jm2 >>824 PowerShell
while (($var = (Read-Host)) -ne 42) { $var }
while (($var = (Read-Host)) -ne 42) { $var }
829デフォルトの名無しさん
2018/12/16(日) 03:36:20.47ID:X+FaDx+z830デフォルトの名無しさん
2018/12/16(日) 13:54:15.20ID:ob8ozoeg [お題] 来年と素数
今年も残りわずか、来年は2019年で平成31年。
1)"2019"の省略形の"19"について。
素数の和で19を作る、すべての素数配列を列挙せよ(できれば辞書順で)。
同じ素数を何個使ってもよいが、同じ素数同士は区別しない。
・例えば対象が"11"だと以下の6つ
{2, 2, 2, 2, 3}
{2, 2, 2, 5}
{2, 2, 7}
{2, 3, 3, 3}
{3, 3, 5}
{11}
以下 2)3)4)は種類計のみ答える(明細は多いので略)。
2)来年の初まりは平成31年で、"31"について。
素数の和で31を作る、その種類はいくつか。条件は1)と同様。
3)素数の和で2019を作る、その種類はいくつか。条件は1)と同様。
4)2019と31を続けた数 201931(=2019*100+31)について。
素数の和で201931を作る、その種類はいくつか。
但し、使用していい素数は31以下の素数かつ、
同じ素数は最大2019個までしか使えない。同じ素数は区別しない。
※ 3)4)は64bit整数を超えるので、下10桁だけの回答も可。
今年も残りわずか、来年は2019年で平成31年。
1)"2019"の省略形の"19"について。
素数の和で19を作る、すべての素数配列を列挙せよ(できれば辞書順で)。
同じ素数を何個使ってもよいが、同じ素数同士は区別しない。
・例えば対象が"11"だと以下の6つ
{2, 2, 2, 2, 3}
{2, 2, 2, 5}
{2, 2, 7}
{2, 3, 3, 3}
{3, 3, 5}
{11}
以下 2)3)4)は種類計のみ答える(明細は多いので略)。
2)来年の初まりは平成31年で、"31"について。
素数の和で31を作る、その種類はいくつか。条件は1)と同様。
3)素数の和で2019を作る、その種類はいくつか。条件は1)と同様。
4)2019と31を続けた数 201931(=2019*100+31)について。
素数の和で201931を作る、その種類はいくつか。
但し、使用していい素数は31以下の素数かつ、
同じ素数は最大2019個までしか使えない。同じ素数は区別しない。
※ 3)4)は64bit整数を超えるので、下10桁だけの回答も可。
>>830
年忘れ課題の時期になったんですね…
年忘れ課題の時期になったんですね…
832デフォルトの名無しさん
2018/12/16(日) 19:04:23.02ID:P931WLXH833830
2018/12/16(日) 19:54:33.15ID:GrZg6kve834デフォルトの名無しさん
2018/12/16(日) 19:56:19.00ID:pjubjjb0 >>833
自分も31は111だったわ
自分も31は111だったわ
835デフォルトの名無しさん
2018/12/16(日) 20:37:34.86ID:VvrWecHB >>830 Ruby 1)は省略
require 'prime'
def fuge(n, cand = Prime.to_a(n), h = {}, succ = 0)
c0 = cand[0]
return h[[n, c0]] if h[[n, c0]]
return 0 if n == 0 || !c0 || n < c0
return 1 if n == c0
x = succ == 2019 ? 0 : fuge(n - c0, cand, h, succ + 1)
h[[n, c0]] = fuge(n, cand[1..-1], h) + x
end
p fuge(19) # => 23
p fuge(31) # => 111
p fuge(2019) # => 576202207044176168646563
p fuge(201931, Prime.to_a(31)) # => 4021686887140718864271667825968903
require 'prime'
def fuge(n, cand = Prime.to_a(n), h = {}, succ = 0)
c0 = cand[0]
return h[[n, c0]] if h[[n, c0]]
return 0 if n == 0 || !c0 || n < c0
return 1 if n == c0
x = succ == 2019 ? 0 : fuge(n - c0, cand, h, succ + 1)
h[[n, c0]] = fuge(n, cand[1..-1], h) + x
end
p fuge(19) # => 23
p fuge(31) # => 111
p fuge(2019) # => 576202207044176168646563
p fuge(201931, Prime.to_a(31)) # => 4021686887140718864271667825968903
836デフォルトの名無しさん
2018/12/16(日) 20:50:18.98ID:P931WLXH837830
2018/12/17(月) 20:45:38.05ID:4p2KDXiR838830
2018/12/20(木) 20:26:37.78ID:W0v1JICZ >>830 python https://ideone.com/OFR7bn
間が空いたので、出題者コメント
1)問題文説明用に書いてみて、問題にもできると思った。
2)3)は"オイラー 31 DP"でググってください。
違いはコインの額面が素数に変わったくらいと、おおきさ。
なかには一つ一つ数えて、本問の2)しか溶けない回答があるので見分けて。
4)については、ソース上三種類書いて考察しています。
("201931"という変な数値は、3重ループ解を落とすのが目的だった)
間が空いたので、出題者コメント
1)問題文説明用に書いてみて、問題にもできると思った。
2)3)は"オイラー 31 DP"でググってください。
違いはコインの額面が素数に変わったくらいと、おおきさ。
なかには一つ一つ数えて、本問の2)しか溶けない回答があるので見分けて。
4)については、ソース上三種類書いて考察しています。
("201931"という変な数値は、3重ループ解を落とすのが目的だった)
839デフォルトの名無しさん
2018/12/21(金) 08:20:43.27ID:hMEdBbLv お題:
真理値表から2入力NANDで最小ゲート数回路を作れ。実用上最も重要な問題群
真理値表から2入力NANDで最小ゲート数回路を作れ。実用上最も重要な問題群
840デフォルトの名無しさん
2018/12/21(金) 08:38:52.94ID:choQhZIj 遅延時間とかファンアウトとかは考慮不要ってことでいいのかな
■ このスレッドは過去ログ倉庫に格納されています
