プログラミングのお題スレ Part4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/06/13(金) 10:14:53.01ID:GvJv3b6q前スレ
プログラミングのお題スレ Part3
http://peace.2ch.net/test/read.cgi/tech/1390525149/
プログラミングのお題スレ
http://toro.2ch.net/test/read.cgi/tech/1357191974/
出されたお題をコーディングして罵られるスレ
http://toro.2ch.net/test/read.cgi/tech/1354393458/
【出題と回答例】
1 名前:デフォルトの名無しさん
お題:お題本文
2 名前:デフォルトの名無しさん
>>1 使用言語
回答本文
【ソースコードが長くなったら】
http://codepad.org/
http://ideone.com/
宿題は宿題スレがあるのでそちらへ。
0153デフォルトの名無しさん
2014/06/24(火) 19:22:31.48ID:nNYqUb+/了解。
0154デフォルトの名無しさん
2014/06/24(火) 19:24:55.48ID:nNYqUb+/0155デフォルトの名無しさん
2014/06/24(火) 19:28:28.25ID:prMa5jfiひええ
凡人にはまねできません
0156デフォルトの名無しさん
2014/06/24(火) 19:28:49.85ID:+d9rugo5整数だから、剰余の絶対値でないとうまく行かない筈だけれど、例だけ見ていると、そんなことが窺えないということかな。
0157デフォルトの名無しさん
2014/06/24(火) 19:40:13.89ID:nNYqUb+/じゃー、マネしなくてもいいけど、バグってても出題者の自己責任ね。
0158デフォルトの名無しさん
2014/06/24(火) 19:44:15.76ID:+d9rugo53つの例で桁の定義問題は解決しているように思えるが。
0159デフォルトの名無しさん
2014/06/24(火) 19:46:52.99ID:nNYqUb+/ttp://ideone.com/RFgqBx
マップこれであってるの?
一通のはずが、小島がいくつか見られるが。
そういう場合どうするの?
0160デフォルトの名無しさん
2014/06/24(火) 19:50:30.27ID:nNYqUb+/俺バカだからわからなかったんだよ。
質問したけど無視されたし。
コード書き始めて割り切っていってやっと理解したような気がしたんだけどねぇ。
設計時さっぱりだった。
0161デフォルトの名無しさん
2014/06/24(火) 20:10:18.97ID:nNYqUb+/0162デフォルトの名無しさん
2014/06/24(火) 20:12:21.98ID:ESPrt6pD@Mathematica
numberOfAgreement[n1_,n2_]:=Module[{d1,d2,maxlen},
{d1,d2}={n1,n2}//
Map[IntegerDigits,#]&;
maxlen={d1,d2}//
Map[Length,#]&//
Max;
{d1,d2}//
Map[PadLeft[#,maxlen]&,#]&//
MapThread[List,#]&//
Map[If[#[[1]]==#[[2]],1,0]&,#]&//
Total
];
0163デフォルトの名無しさん
2014/06/24(火) 20:38:49.47ID:nNYqUb+/俺、>>148で2パターン書いたけど、どっちが正解っていえるか?または間違いを指摘できるか?
11,110 -> 2 とかなら、ああ左から比較するんだなとか。
0165デフォルトの名無しさん
2014/06/24(火) 22:25:42.63ID:nNYqUb+/でしょ。情報が圧倒的に足りない。
こういう仕様のいざこざはむっかしから絶えないんだよね。
0166デフォルトの名無しさん
2014/06/24(火) 22:34:58.79ID:6LnPDmO+それが数学というより一般的な「桁」という用語。
何「番目」とかなら、左からとか右からという話になる。
何も言わずに回答している人たちは当然桁という言葉を当然のように踏まえて受け取っている。
0167デフォルトの名無しさん
2014/06/24(火) 22:37:13.63ID:nNYqUb+/じゃー、例2の解法を言葉で説明してほしいなぁ。できたら全力で誤る。
0168デフォルトの名無しさん
2014/06/24(火) 22:39:59.03ID:6LnPDmO+0169デフォルトの名無しさん
2014/06/24(火) 22:43:56.45ID:nNYqUb+/0170デフォルトの名無しさん
2014/06/24(火) 22:47:28.09ID:UpeRHjTe空白を入れてるのはなに?子島とは?
0171デフォルトの名無しさん
2014/06/24(火) 22:49:53.79ID:nNYqUb+/空白は壁って言ってたから、末尾はデータ調整のために空白入れました。
それ以外はこのスレからのコピペです。
0172デフォルトの名無しさん
2014/06/24(火) 22:50:41.71ID:6LnPDmO+国語力に難があるようだね
0173デフォルトの名無しさん
2014/06/24(火) 22:56:02.69ID:nNYqUb+/俺には君の認識能力が特殊に見えるよ。
169>>1桁目は、1と2で、3桁目は3と4じゃないか?それとも二個目の数字の前に一桁あるのか?
合ってるか?
0175デフォルトの名無しさん
2014/06/24(火) 23:04:53.29ID:6LnPDmO+大間違い
0176デフォルトの名無しさん
2014/06/24(火) 23:05:33.48ID:+d9rugo5> お題:ふたつの整数が与えられたとき、数字が一致している桁の個数を求める。
> 例
> 110, 119 -> 2
> 1234, 214 -> 2
> 567, 23 -> 0
例の2
1234
214
^ ^
| |
| 1の 桁
|
100の桁
この二桁だけが同じ数字だから -> 2
0177デフォルトの名無しさん
2014/06/24(火) 23:09:42.24ID:nNYqUb+/214
ちがってるか?
0179デフォルトの名無しさん
2014/06/24(火) 23:12:06.14ID:WID+irzQこういう場合もっと例が何パターンかないとね
0180デフォルトの名無しさん
2014/06/24(火) 23:13:47.21ID:nNYqUb+/N番目まで厳密に規定してなくて並びが同じものを探す話?
0182デフォルトの名無しさん
2014/06/24(火) 23:16:41.04ID:nNYqUb+/これ、分割した数字を右から左に精査するんか。
0183デフォルトの名無しさん
2014/06/24(火) 23:17:24.35ID:+d9rugo5例2が意味するところは、
1) 1の桁と100の桁が4と2で揃っているから-->2
2) 上位桁から揃えるルールではない。それだと-->0 となるはず。
3) 桁の小さい方の整数を自由に移動できるルールだとしたら答えは 0または2になるが、
-->2と答えているから、自由に移動できるルールではない。
0184デフォルトの名無しさん
2014/06/24(火) 23:20:10.30ID:hFZ0LSQg0185デフォルトの名無しさん
2014/06/24(火) 23:23:51.66ID:9vAhTnrq2桁目=十の位
3桁目=百の位
0186デフォルトの名無しさん
2014/06/24(火) 23:26:16.35ID:nNYqUb+/これはすまんかった。算数だったな。根本的に失念していた。
俺のミスだわ。本当にごめんなさい。
しばらく反省するために書くのやめるか。
なんてこった。こんな基本的なこと忘れてるなんて。あいたたたたた。
どう誤ればいいのかよくわからんけど、ほんとにすまんかった。
0187デフォルトの名無しさん
2014/06/24(火) 23:28:49.66ID:+d9rugo5そうですね。位というのだった。
0188デフォルトの名無しさん
2014/06/24(火) 23:29:46.27ID:nNYqUb+/なぜ動いてるのかもわかりませーん。たまたま答えだけ合わせました。
ってことになるな。アー怖い。
0189デフォルトの名無しさん
2014/06/24(火) 23:30:51.58ID:+d9rugo5-1112,110 などがほとんど解答は上手く行かないのではないか。
0190デフォルトの名無しさん
2014/06/24(火) 23:31:51.46ID:WID+irzQ0191189
2014/06/24(火) 23:32:35.09ID:+d9rugo50192デフォルトの名無しさん
2014/06/24(火) 23:33:27.52ID:TXJiobF4そうかー?むしろ例は必要十分じゃね
>>132は問題文にちょっと不備があるけど、例で補えてると思うけどな
「数字が一致している桁の個数を求める」じゃなくて
「同じ位同士の数字を比較し、一致している個数を求める」
とかだったら例がなくても解けそう。
0193デフォルトの名無しさん
2014/06/24(火) 23:35:30.49ID:nNYqUb+/俺のuint64_tなので、裏返って何億とかの数字になっちゃうー。
0194デフォルトの名無しさん
2014/06/24(火) 23:36:32.98ID:6LnPDmO+今回の件で、どちらかというと認識が特殊な状態に陥ってたのは君の方だったね。
(相手が特殊と考えるより自分が先に特殊ではないのかと疑う)謙虚な態度でいた方が、一旦陥った罠から脱出はしやすいと思う。
IQテストとかだと、君のようにこういう「桁」という言葉の常識に囚われない見方も、大切ではある。
0195デフォルトの名無しさん
2014/06/24(火) 23:42:11.14ID:X3HExdh5一番早く正解できるのは誰かな
0196デフォルトの名無しさん
2014/06/24(火) 23:46:10.56ID:nNYqUb+/うん、ごめんね。
プログラムやってると、常識がうっとおしくなって忘却しちゃったんだよ。
それでうまくいってたしなぁ。うーん。こんな罠が・・・。Orz
気を付けてたはずなのに。うーむ。
いい経験になった。あいたたたたた・・・。
0197デフォルトの名無しさん
2014/06/24(火) 23:49:11.40ID:X3HExdh5例に沿って連続する文字をカウントするプログラムを作成せよ。
出力の最後に改行を挿入すること。
標準入力から以下の形式で与えられる。
S
例)
In:
aaaaaaaaaabbbbbbbbbbbbcccccccddddddddddeeeeeeefffffffffghiiiiiiiii
Out:
a10b12c7d10e7f9ghi9
In:
Out:
0
0198デフォルトの名無しさん
2014/06/24(火) 23:49:41.62ID:+d9rugo5>>132は数字の比較を求めていて、
-123,-3423 の場合、剰余数が -2 と -2、-3 と -3 で --> 2 となるのでも間違ってはいないが、
何か仕様と遠い気がする。 -2 と 数字の'2'は同じものではない。
0199デフォルトの名無しさん
2014/06/24(火) 23:50:24.19ID:X3HExdh5abcddd
Out:
abcd3
0200デフォルトの名無しさん
2014/06/24(火) 23:51:06.51ID:X3HExdh50201デフォルトの名無しさん
2014/06/25(水) 00:11:17.61ID:H0BLkDsiなんか不格好になっちゃったw
C
http://ideone.com/jtFVPF
0202デフォルトの名無しさん
2014/06/25(水) 00:20:29.98ID:B1Ok+FAFhttp://ideone.com/B0eki7
ほぼC。2番目か。残念。あってるかな?
結構ヤケになって書いたので間違ってるかも。
さて、しばらくミュートします。みなさま、また逢う日まで!
0203デフォルトの名無しさん
2014/06/25(水) 01:05:21.52ID:R/pd8eJN例:
110, 119 -> T
-110, -119 -> T
-110, 119 -> F
1234, 214 -> F
567, 23 -> F
567, -23 -> F
0204デフォルトの名無しさん
2014/06/25(水) 01:52:18.87ID:WPdQrCl70205デフォルトの名無しさん
2014/06/25(水) 04:22:41.38ID:/nsw1r0Ihttp://peace.2ch.net/test/read.cgi/tech/1313183984/757
0206デフォルトの名無しさん
2014/06/25(水) 04:48:41.24ID:/nsw1r0Ihttp://peace.2ch.net/test/read.cgi/tech/1313183984/758
ideone の runtime error ってなんだろう?
0207デフォルトの名無しさん
2014/06/25(水) 07:21:14.49ID:f3dQ4AsB'アルファベットの小文字aからzで成り立つS(0≦S≦100)が標準入力から与えられる。連続する文字をカウントする。出力の最後に改行を挿入すること。' :-
write('In: '),read(_文字列),
'連続する文字をカウントする'(_文字列,'',_出力文字列),
writef('Out:\n%t\n',[_出力文字列]).
'連続する文字をカウントする'('','') :- !.
'連続する文字をカウントする'(_文字列,_出力文字列) :-
文字列の先頭から同一文字を切り取る(_文字列,_連続文字,_連続文字数,_残り文字列),
'連続する文字をカウントする'(_残り文字列,_残り出力文字列),
atomic_list_concat([_連続文字,_連続文字数,_残り出力文字列],_出力文字列).
文字列の先頭から同一文字を切り取る(_文字列,_連続文字,_連続文字数,_残り文字列) :-
sub_atom(_文字列,0,1,_,_連続文字),
連続文字数と残り文字列を得る(_文字列,_連続文字,_連続文字数,_残り文字列).
連続文字数と残り文字列を得る(_文字列,_連続文字,_連続文字数,_残り文字列) :-
sub_atom(_文字列,_連続文字数,1,_,_文字),
\+(_連続文字 = _文字),
sub_atom(_文字列,_連続文字数,_,0,_残り文字列),!.
連続文字数と残り文字列を得る(_文字列,_連続文字,_連続文字数,'') :-
atom_length(_文字列,_連続文字数).
0208デフォルトの名無しさん
2014/06/25(水) 07:33:17.91ID:5ZruJZzNhttp://ideone.com/nftddV
>>203
http://ideone.com/NqH3JC
0209208
2014/06/25(水) 07:51:38.73ID:5ZruJZzN>>197 Perl
http://ideone.com/IAKmMX
0210デフォルトの名無しさん
2014/06/25(水) 08:00:42.64ID:f3dQ4AsB'2つの整数が与えられたとき、桁数が同じ場合を求める。 指数関数は使わないこと。'(_整数_1,_整数_2) :-
number_chars(_整数_1,_数字ならび_1),
number_chars(_整数_2,_数字ならび_2),
length(_数字ならび_1,_桁数),
length(_数字ならび_2,_桁数).
0211デフォルトの名無しさん
2014/06/25(水) 08:24:39.87ID:8w+cRTmXa := 0
c := 0
File standardInput foreach(v,
if(v != a,
write(if(c > 1, c, ""), v asCharacter)
c = 1
,
c = c + 1
)
a = v
)
c println
0212132
2014/06/25(水) 09:30:08.51ID:8w+cRTmXそれから>>203は別の人の出題です。
0213デフォルトの名無しさん
2014/06/25(水) 09:35:34.23ID:mgUMoqXVttp://ideone.com/GbaVHe
0214デフォルトの名無しさん
2014/06/25(水) 12:27:10.04ID:8w+cRTmXf=:[:;('1'-.~":)(L:0)@(~. (;"_1) (#/.)~)
echo f stdin''
f'aassd'
a2s2d
0215207
2014/06/25(水) 16:49:42.18ID:f3dQ4AsB'連続する文字をカウントする'(_文字列,'',_出力文字列),
% これ3引数で呼び出しているが、これは第二引数を削除し忘れ。
'アルファベットの小文字aからzで成り立つS(0≦S≦100)が標準入力から与えられる。連続する文字をカウントする。出力の最後に改行を挿入すること。' :-
write('In: '),read(_文字列),
'連続する文字をカウントする'(_文字列,_出力文字列),
writef('Out:\n%t\n',[_出力文字列]).
% が正しい。
0216デフォルトの名無しさん
2014/06/25(水) 19:09:52.11ID:AAkwOzRQそれらの共通部分の長方形を求めたいのですが、お手軽な方法はありますか?
P、Qは、以下のように4つの頂点座標が与えられているとして。
座標は整数値とします。
P12(x1p,y2p) P22(x2p,y2p)
P11(x1p,y1p) P21(x2p,y1p)
Q12(x1q,y2q) Q22(x2q,y2q)
Q11(x1q,y1q) Q21(x2q,y1q)
0217デフォルトの名無しさん
2014/06/25(水) 19:15:34.66ID:G8i3M3G9第9回 凸多角形の交差計算(前編)
http://gihyo.jp/dev/serial/01/geometry/0009
凸多角形の共通部分
http://www.prefield.com/algorithm/geometry/convex_intersect.html
0218デフォルトの名無しさん
2014/06/25(水) 20:11:25.97ID:AAkwOzRQ長方形の場合に限定して、誰かプログラム作ってください。
0219片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0
2014/06/25(水) 20:28:19.98ID:n7E3MpSB{
return rc->x0 >= rc->x1 || rc->y0 >= rc->y1;
}
bool intersect_rect(rect *dst,const rect*src1,const rect*src2)
{
if (is_rect_empty(src1) || is_rect_empty(src2) ||
src1->x0 >= src2->x1 || src2->x0 >= src1->x1 ||
src1->y0 >= src2->y1 || src2->y0 >= src1->y1)
return false;
dst->x0 = max(src1->x0,src2->x0);
dst->x1 = min(src1->x1,src2->x1);
dst->y0 = max(src1->y0,src2->y0);
dst->y1 = min(src1->y1,src2->y1);
return true;
}
0220デフォルトの名無しさん
2014/06/25(水) 20:36:42.95ID:QX6G9n4a2つの線分(x1p, x2p)、(x1q, x2q)が重なる場合は、
(x1p - x2q) * (x2p - x1) < 0
となる。
例えば下図のとおり。
x1p----------x2p
x1q---------------x2q
yについても同様に、重なり有無を判定出来る。
x, yの両方に重なりがあれば、重なる長方形エリアが有る、という事。
重なるエリアの座標の求め方。
まずxについては
(x1p, x2p, x1q, x2q)をソートした結果が(x1, x2, x3, x4)とすると
(x2, x3)が重なるエリアのx座標。
yも同様に求める。
0221デフォルトの名無しさん
2014/06/25(水) 20:58:06.95ID:fIlVvDUl@Mathematica
countSerialCharacter[s_]:=s//
Characters//
Tally//
Flatten//
Map[If[#==1,"",#]&,#]&//
Map[ToString,#]&//
StringJoin//
#<>"\n"&;
0222デフォルトの名無しさん
2014/06/25(水) 21:13:44.19ID:8w+cRTmX関係ないけど「凸多角形」をみると凸という字は凸多角形じゃないと思ってしまう
0223デフォルトの名無しさん
2014/06/25(水) 21:30:53.24ID:kfu/Y8iAimport re, sys
s = "aaaaaaaaaabbbbbbbbbbbbcccccccddddddddddeeeeeeefffffffffghiiiiiiiii"
if len(sys.argv) >= 2:
s = sys.argv[1]
print "".join(["{}{}".format(m.group(1),len(m.group(0))) for m in re.finditer(r"([a-z])\1*", s)])
0224デフォルトの名無しさん
2014/06/26(木) 06:49:20.73ID:3bBuyKJI0225デフォルトの名無しさん
2014/06/26(木) 09:15:51.05ID:anyqRfvP(format t "~{n=~D, ~D steps.~}~%"
(loop for n from 1 upto 10000
collect (loop for count upfrom 0
for i = n then (if (evenp i) (/ i 2) (* (+ i 1) 3))
until (= i 3)
finally (return (list n count)))
into seq
finally (return (first (sort seq #'> :key #'second)))))
出力:
n=7421, 239 steps.
0226デフォルトの名無しさん
2014/06/26(木) 09:47:24.38ID:jelhdoL6有難うございました。
たいへん感謝しております。さっそく利用させて頂きます。
>>220
解説ありがとうございました。理解できました。
皆さん頭いいですね。
0227デフォルトの名無しさん
2014/06/26(木) 11:06:46.24ID:j1I0ttpix0<=x1かつy0<=y1を前提にしていますのでご注意を。
0228デフォルトの名無しさん
2014/06/26(木) 11:47:23.22ID:SC8QqvR30229デフォルトの名無しさん
2014/06/26(木) 12:26:30.27ID:a5DVBYeG0230デフォルトの名無しさん
2014/06/26(木) 12:43:55.13ID:b6/TNK68http://ideone.com/1L8Dc1
0231デフォルトの名無しさん
2014/06/26(木) 18:05:42.04ID:oxBW6fYkこれはひどい
0232デフォルトの名無しさん
2014/06/26(木) 18:25:17.39ID:3bBuyKJIちゃんと理由も書かずにそんなことを言う方がひどい
0233デフォルトの名無しさん
2014/06/26(木) 21:02:03.97ID:UtgvthMy@Mathematica
g[nmax_]:=Module[{f},
f[n_]:=NestWhileList[
Which[
EvenQ[#],#/2,
True,3*(#+1)]&,
n,
#!=3&];
nmax//
Range[1,#]&//
Map[{#,Length[f[#]]-1}&,#]&//
Sort[#,#1[[2]] > #2[[2]]&]&//
First//
"n="<>ToString[#[[1]]]<>", "<>ToString[#[[2]]]<>" steps"&
];
0234デフォルトの名無しさん
2014/06/27(金) 01:15:21.35ID:z83xp8mBttp://ideone.com/thhLQG
0235デフォルトの名無しさん
2014/06/27(金) 06:05:09.55ID:6gnfhLnKとってもわかりやすく美しいコーディングだな
0236デフォルトの名無しさん
2014/06/27(金) 06:15:11.42ID:/tBLbKnnhttp://peace.2ch.net/test/read.cgi/tech/1393660194/
0237デフォルトの名無しさん
2014/06/27(金) 08:13:07.91ID:6gnfhLnKScheme
ステップ数を求める関数を再帰にしてみた。
Schemeなので末尾再帰の最適化が効いているとはいえシンプルなループより20%ほど遅い
http://codepad.org/Kv6PMM5u
0238デフォルトの名無しさん
2014/06/27(金) 08:13:34.08ID:6gnfhLnKそんな君は硬直頭乙
0239デフォルトの名無しさん
2014/06/27(金) 09:47:14.96ID:cYIjyZKJ0240デフォルトの名無しさん
2014/06/27(金) 10:25:12.24ID:+d6mrCHpすごくSchemeっぽくない
0242デフォルトの名無しさん
2014/06/27(金) 13:16:22.62ID:1+Sp/Gzhまあ、超初心者だし
Schemeぽくかくとどうなるの?
0243デフォルトの名無しさん
2014/06/27(金) 13:18:34.88ID:T6qhwk5cL(100≦L≦100)
標準入力から以下の形式で与えられる
S L
例を参考にoとxを配置せよ
例
3 2
oooxxx
oooxxx
oooxxx
xxxooo
xxxooo
xxxooo
2 3
ooxxoo
xxooxx
ooxxoo
1 1
o
2 1
oo
0244デフォルトの名無しさん
2014/06/27(金) 13:19:07.70ID:T6qhwk5c0245デフォルトの名無しさん
2014/06/27(金) 13:40:40.34ID:1+Sp/Gzhていうか、俺は勉強中だし短く書かない
0246デフォルトの名無しさん
2014/06/27(金) 14:03:08.81ID:TynlDK3k0247デフォルトの名無しさん
2014/06/27(金) 14:13:23.67ID:IIJLJhWZ「出力例から仕様を推測せよ」というお題は苦手
0248デフォルトの名無しさん
2014/06/27(金) 14:18:03.91ID:6gnfhLnK0249デフォルトの名無しさん
2014/06/27(金) 14:29:40.92ID:jrf75mY10250デフォルトの名無しさん
2014/06/27(金) 14:32:19.40ID:6gnfhLnK規則1 一つのブロックの長さはS
規則2 一列の長さはS*L
規則3 げ・・わからなくなった
0251デフォルトの名無しさん
2014/06/27(金) 14:34:06.26ID:6gnfhLnKそこは(1≦L≦100)の間違いだろ(と見なした)
0252デフォルトの名無しさん
2014/06/27(金) 14:34:31.27ID:6gnfhLnK■ このスレッドは過去ログ倉庫に格納されています