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

1デフォルトの名無しさん2018/09/28(金) 10:09:07.13ID:phwOkayR
プログラミングのお題スレです。

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

786デフォルトの名無しさん2018/12/07(金) 22:38:48.18ID:xSpw6JJG
>>782 Ruby
f = -> n {a, b = n.divmod(4); 6 * a + 2 * b + 3 / (b + 2)}
p f[2019]
# => 3030

787デフォルトの名無しさん2018/12/07(金) 22:47:23.26ID:avhY9emJ
>>786
1が0番目で計算してね?
https://ideone.com/8B4VVN

788デフォルトの名無しさん2018/12/07(金) 22:48:51.29ID:xSpw6JJG
>>787
あー本当だ
しかも n * 3 >> 1 でよかったんだね

789デフォルトの名無しさん2018/12/08(土) 03:40:55.13ID:xmV4OmOO

790デフォルトの名無しさん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:Mku3deOK
>>782
f=:+/@$&1 2

f 2019
3028

794デフォルトの名無しさん2018/12/08(土) 09:59:51.42ID:Mku3deOK
>>793
言語はJ

7957812018/12/08(土) 12:53:06.37ID:JIGsOpwq
整数計算オーバーフローが発生していたのを修正
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

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番目だよね。念のため確認

803デフォルトの名無しさん2018/12/12(水) 02:35:41.59ID:84v7sPOJ
お題
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…と使う頂点をスライドさせていくだけで良いんじゃないかな?どっかで裏返るかな。

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関連でこういうの書くけどな。
コード書こうと思って出題者に問うたつもりだけど。。
証明出来てないコード書いても無意味なんだから先にロジック書いたつもり。

ってかどうして数学?っぼい問題が嫌われるの?
脳筋コードが良いってこと?

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

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

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の星型の内部は多角形に含まれない

814デフォルトの名無しさん2018/12/12(水) 12:14:30.79ID:ygJIxGmd
>>809
このスレには解答者側に数学ができない人がいて、そういう人が文句を言ってる
かく言う俺も数学できないが文句は言わない

815デフォルトの名無しさん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でも使いながらなんじゃろか。。。

818 ◆QZaw55cn4c 2018/12/12(水) 20:48:43.83ID:5ElL+qNp
>>816
>純粋に数学だけで解けて解法の式を作ったら、あとはコードにベタ書きしてただ解を出力するだけ、
それは甘い、大甘だと私の経験は私の心に語ってくれています

819 ◆QZaw55cn4c 2018/12/12(水) 20:49:58.51ID:5ElL+qNp
>>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

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) "

822デフォルトの名無しさん2018/12/13(木) 01:00:05.58ID:vQDTFPB2
>>817 Ruby

x, a, b = [*1..10], [*3..6], [*5..8]
p x & (a | b)
# => [3, 4, 5, 6, 7, 8]

823デフォルトの名無しさん2018/12/13(木) 09:40:48.46ID:wBrOfppZ

824デフォルトの名無しさん2018/12/15(土) 18:26:25.25ID:RxHR1YVb
お題:標準入力から読み取った行を出力せよ
ただし42を読んだ場合は出力せずに終了する
https://ideone.com/vdWddB

825デフォルトの名無しさん2018/12/15(土) 18:51:24.63ID:Hf86DN+J
>>824
ruby -pe'~/^42$/&&exit'

826デフォルトの名無しさん2018/12/15(土) 20:46:54.11ID:Du8iBFv1
>>824 Common Lisp
https://ideone.com/QQzEQh

read-lineの第三引数にnil以外を使ったの初めてだ

827デフォルトの名無しさん2018/12/15(土) 23:34:07.15ID:2jxK776v

828デフォルトの名無しさん2018/12/15(土) 23:59:19.52ID:QTag+jm2
>>824 PowerShell
while (($var = (Read-Host)) -ne 42) { $var }

829デフォルトの名無しさん2018/12/16(日) 03:36:20.47ID:X+FaDx+z

830デフォルトの名無しさん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桁だけの回答も可。

831 ◆QZaw55cn4c 2018/12/16(日) 14:12:11.90ID:IjCemHtZ
>>830
年忘れ課題の時期になったんですね…

832デフォルトの名無しさん2018/12/16(日) 19:04:23.02ID:P931WLXH
>>830 Java
https://ideone.com/LgkDWF
あってんのかなー

8338302018/12/16(日) 19:54:33.15ID:GrZg6kve
>>832

2)の31からして自分のと違う。
自分のでは111だった。

javaのやついじって、112個の明細を出してみたら、[2,2,27] があった。
27は素数じゃないよね。いじり方が悪い?

834デフォルトの名無しさん2018/12/16(日) 19:56:19.00ID:pjubjjb0
>>833
自分も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

836デフォルトの名無しさん2018/12/16(日) 20:50:18.98ID:P931WLXH
>>833
まじだ・・・修正した
犯人は118行目だ!orz

新着レスの表示
レスを投稿する