[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/26 17:31 / Filesize : 264 KB / Number-of Response : 1042
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2020/03/13(金) 01:42:47.06 ID:0rEhys36.net]
プログラミングのお題スレです。

【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文
  結果がある場合はそれも

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
codepad.org/
compileonline.com/
rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
melpon.org/wandbox
https://paiza.io/

宿題は宿題スレがあるのでそちらへ。

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

175 名前:デフォルトの名無しさん [2020/04/16(Thu) 02:05:16 ID:oMF0NE5s.net]
急に語り出して劇寒

176 名前:デフォルトの名無しさん mailto:sage [2020/04/16(Thu) 02:06:03 ID:s4YIDkZq.net]
あげあしとりで終わりかよ
つまんねー

177 名前:デフォルトの名無しさん mailto:sage [2020/04/16(Thu) 02:08:57 ID:s4YIDkZq.net]
>>150
大体お前が悪いんだよ
もう少し考えて出題できませんかね

178 名前:デフォルトの名無しさん mailto:sage [2020/04/16(木) 02:21:19.79 ID:kjXrQDZb.net]
今までも同じようにあまりよろしくないお題を出してそのたびにスルーか同じように指摘され続けてるんだからこんなもんでは?
個人的には全く解いてみたいと思えないお題ばかり
お題作るのは難しいなぁとつくづく感じる

179 名前:デフォルトの名無しさん [2020/04/16(木) 02:24:22.48 ID:7PlP0fH8.net]
ここはすききらいをしゃべるすれではありません

180 名前:デフォルトの名無しさん mailto:sage [2020/04/16(木) 02:24:26.49 ID:GrYlaJ67.net]
お題作るのは難しいよ
ちょうどいい難易度が難しい

181 名前:デフォルトの名無しさん mailto:sage [2020/04/16(木) 02:25:43.69 ID:s4YIDkZq.net]
そりゃ気持ちはわかっけどさー
解いてみたいと思えないお題ばかり、ってことはさすがに無い。
お題によって回答したい、したくないはあるぞ、
時間が許せば、それには回答してきた

182 名前:デフォルトの名無しさん mailto:sage [2020/04/16(木) 02:27:00.67 ID:/gsmKway.net]
おまえ名言()とか好きそうだな

183 名前:デフォルトの名無しさん mailto:sage [2020/04/16(木) 02:27:53.73 ID:s4YIDkZq.net]
>>178
何か心に響いたか?



184 名前:デフォルトの名無しさん mailto:sage [2020/04/16(Thu) 04:43:54 ID:G88s3oE4.net]
糞コテのお題をスルーできてない時点でどっちもゴミ

185 名前:デフォルトの名無しさん mailto:sage [2020/04/16(Thu) 05:18:07 ID:FKJpjkAo.net]
お題、JAVA

ウインドウで、ボールを動かして、振り子にしろ。

186 名前:デフォルトの名無しさん [2020/04/16(木) 15:33:05.77 ID:CZ2awm/7.net]
>>181 js(Javaじゃなくてすまん)

https://codepen.io/as124680/full/yLYeRaN

187 名前:デフォルトの名無しさん [2020/04/16(木) 18:34:42.45 ID:Ao1pcPxo.net]
眠くなってきた

188 名前:デフォルトの名無しさん mailto:sage [2020/04/16(木) 19:17:37.16 ID:A3RNLqkM.net]


189 名前:デフォルトの名無しさん [2020/04/16(木) 19:18:52.09 ID:D2Oboa0/.net]
>>182
しゅごい・・・

190 名前:デフォルトの名無しさん mailto:sage [2020/04/16(Thu) 21:50:22 ID:yL7j0Eir.net]
お題:
2次元平面上の点が5つ与えられる。
これらを順番に線分で結んだとき、星形が構成できるかどうか判定せよ

0 0
1 2
2 0
0 1
2 1
=> true

0 0
1 2
2 0
0 2
2 2
=> false

0 0
0 1
1 2
2 1
2 0
=> false

0 0
5 5
0 5
1 0
1 6
=> true

191 名前:デフォルトの名無しさん mailto:sage [2020/04/16(木) 22:15:17.40 ID:A3RNLqkM.net]
線型代数の問題だな

192 名前:デフォルトの名無しさん mailto:sage [2020/04/16(木) 22:30:46.61 ID:+l2higCM.net]
お題
急減少列かどうかを判定せよ。
ただし急減少列とは、(末尾以外の)どの要素もそれ以降の要素の総和より大きい列のこと。

32,16,8,4,2,1 -> true
32,16,8,4,2,1,1 -> false
610,377,144,55,21,8,3,1 -> true
987,610,233,89,34,13,5,2,1 -> false

193 名前:デフォルトの名無しさん mailto:sage [2020/04/16(木) 22:37:52.73 ID:dbvXh7HJ.net]
逆順に並べた方が良いなあ
急増加列?



194 名前:デフォルトの名無しさん mailto:sage [2020/04/16(Thu) 22:57:42 ID:tWuPngtw.net]
>>188 Perl5

sub f {
 my $i = shift;
 my $r = f(@_) if @_;
 $i <= $r and die;
 $i + $r;
}
for ([32,16,8,4,2,1], [32,16,8,4,2,1,1], [610,377,144,55,21,8,3,1], [987,610,233,89,34,13,5,2,1]) {
 eval { f @$_ };
 $s = "$@" ? 'false' : 'true';
 $"=','; print "@$_ = $s\n";
}

実行
~ $ perl 17_188_shdec.pl
32,16,8,4,2,1 = true
32,16,8,4,2,1,1 = false
610,377,144,55,21,8,3,1 = true
987,610,233,89,34,13,5,2,1 = false

195 名前:デフォルトの名無しさん mailto:sage [2020/04/17(金) 00:26:03.00 ID:aBy1G2y60.net]
>>186 js

線分交差判定アルゴリズムはググった
https://ideone.com/0qMURh

196 名前:デフォルトの名無しさん [2020/04/17(金) 02:37:38 ID:GLu8MX8J.net]
>>188
Perl5
https://paiza.io/projects/nSByfwI4TBgbz-v4RPV_IA

単に逆順にして加算しながら比較しているだけの誰にでも出来る簡単なお仕事。

197 名前:デフォルトの名無しさん mailto:sage [2020/04/17(金) 09:07:37.71 ID:uUpf2Y3l.net]
>>186
https://ideone.com/NR1SvA

198 名前:デフォルトの名無しさん mailto:sage [2020/04/17(金) 09:10:52.22 ID:uUpf2Y3l.net]
直線と点の位置関係判別を6回に減らした

199 名前:デフォルトの名無しさん mailto:sage [2020/04/17(金) 16:03:16 ID:FcD+/8tF.net]
>>186 Perl5、PDL(Pythonで言うならnumpyとscipyを合わせたようなPerlモジュール)を使わせてもらいました

@t = ([[0,0], [1,2], [2,0], [0,1], [2,1]],
   [[0,0], [1,2], [2,0], [0,2], [2,2]],
   [[0,0], [0,1], [1,2], [2,1], [2,0]],
   [[0,0], [5,5], [0,5], [1,0], [1,6]]);
use PDL;
use PDL::Math;
for $ps (@t) {
 $ang = 0.0;
 for ([0,1,2], [1,2,3], [2,3,4], [3,4,0], [4,0,1]) {
  @p = map{pdl $$ps[$_]} @$_;
  $v1 = norm($p[0] - $p[1]);
  $v2 = norm($p[2] - $p[1]);
  $spro = sum($v1 * $v2);
  $ang += acos($spro);
 }
 $ang = abs($ang);
 $ans = ($ang > 3.14 and 3.15 < $ang) ? 'true' : 'false';
 print "$ans\n";
}

実行結果
~ $ perl 17_186_istar.pl
false
false
true
false

200 名前:デフォルトの名無しさん mailto:sage [2020/04/17(金) 17:08:25 ID:TdOLExdu.net]
>>195 間違えてた
× $ans = ($ang > 3.14 and 3.15 < $ang) ? 'true' : 'false';
○ $ans = (3.14 < $ang and $ang < 3.15) ? 'true' : 'false';

しかし、実行結果は
~ $ perl 17_186_istar.pl
true
true
false
true

二番目がtrueになってしまう…orz

201 名前:デフォルトの名無しさん mailto:sage [2020/04/17(金) 17:12:31 ID:tQG0pn8t.net]
>>196
内角の和が180°かで判定すると二番目のデータのような
星のひしゃげたような形も星型扱いされてしまう
交線計算が要るんじゃないかな

202 名前:デフォルトの名無しさん mailto:sage [2020/04/17(金) 18:56:51 ID:uUpf2Y3l.net]
>>193
条件が1個足りなかった
最低7回ですかね

203 名前:デフォルトの名無しさん mailto:sage [2020/04/17(金) 19:39:38.21 ID:uUpf2Y3l.net]
https://ideone.com/dAwxsI



204 名前:デフォルトの名無しさん [2020/04/17(金) 23:20:45 ID:GLu8MX8J.net]
>>188
Kotlin
https://paiza.io/projects/BBr9uBvBedkLv6sZKj1z2A

やってることは >>192 とほぼ同じ。reduce() という丁度良いやつがあったのでそれを使った。

205 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 04:51:44 ID:hOyj3UHi.net]
お題: クリックすると画面が上下左右に揺れまくるボタンを作りなさい

206 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 06:43:51.86 ID:YnXQesFn.net]
「五角形P0-P1-P2-P3-P4が星形である」と「五角形P0-P2-P4-P1-P3が凸五角形である」は同値でいいのかな

207 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 06:48:34 ID:N4WXNODD.net]
自明だね

208 名前:デフォルトの名無しさん [2020/04/18(土) 14:12:42.90 ID:IwpZ9OtG.net]
atan2とか要りそう
知らんけど

209 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 14:40:52 ID:rV7GPkSs.net]
内積とかでできそう
知らんけど

210 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 16:18:27.16 ID:/6mIZfhm.net]
>>203 同値ではない
>>186 の三番目のデータは凸五角形だが、順番に線分で結んでも星形にならない

211 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 16:34:26 ID:N4WXNODD.net]
>>206
3番目のデータに関して
「五角形P0-P1-P2-P3-P4が星形である」 => false
「五角形P0-P2-P4-P1-P3が凸五角形である」 => false

反例にはなっていないはずだが?

212 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 16:47:06 ID:30AxPVCB.net]
「五角形P0-P1-P2-P3-P4が凸五角形である」 => true
「五角形P0-P2-P4-P1-P3が星形である」 => true

多分言いたいのはこっちでしょ
いずれにしろ反例になってないけど

213 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 16:59:35 ID:oyi4MQQP.net]
結局コードは同じになりそう
知らんけど



214 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 17:09:16.93 ID:30AxPVCB.net]
そりゃ同値なんだから
点の指定順が変わるだけ

215 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 17:29:34 ID:8ogfpEcQ.net]
同値だと違うアルゴリズムでも同じコードになるのか
知らんかった

216 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 17:34:30 ID:30AxPVCB.net]
何を言ってるんだこの人は

217 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 17:37:26 ID:8ogfpEcQ.net]
なんだ違うのか orz

218 名前:デフォルトの名無しさん [2020/04/18(土) 18:04:17.09 ID:U3Va20gw.net]
いつものキチガイでしょ。

219 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 22:39:39.01 ID:9Ypi4rqk.net]
>>207
4番目のデータは?

220 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 22:46:42.32 ID:N4WXNODD.net]
>>215
「五角形P0-P1-P2-P3-P4が星形である」 => true
「五角形P0-P2-P4-P1-P3が凸五角形である」 => true

だから反例じゃねえだろ
つーか凸角形の定義と対角線の定義から同値性は自明だろ
何が分からないのかが素でわからん
というか日本語通じてんのかこれ

221 名前:デフォルトの名無しさん [2020/04/18(土) 22:48:13.84 ID:n1sMw7/h.net]
またキチガイが暴れてるのか…

222 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 22:50:15.61 ID:H1RDccYw.net]
>>216
4番目のデータの「五角形P0-P2-P4-P1-P3」は変な形してない?

223 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 22:50:52.43 ID:N4WXNODD.net]
>>218
綺麗な凸5角形ですがなにか



224 名前:デフォルトの名無しさん [2020/04/18(土) 22:52:15 ID:n1sMw7/h.net]
ID真っ赤やん

225 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 22:53:23 ID:r5aLC6gt.net]
>>219
「P0-P2-P1-P4-P3」のことを言っている?
「P0-P2-P4-P1-P3」を結んだ五角形みた?

226 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 22:54:18 ID:N4WXNODD.net]
>>221
「P0-P2-P4-P1-P3」が綺麗な凸5角形だと言ってる

>>220
お前は死ね

227 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 22:57:07 ID:N4WXNODD.net]
これ見てよく考えて

_4____
2____1
______
______
______
______
03____

228 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 22:59:19 ID:GFBeMLbL.net]
>>221
ホントだすまんおれの手元の描画ミス

検算プログラム書いたが4番目のデータ、0-2-4-1-3で一周回ってきたときの方向かえる角度の和が2piにならんのよね
ANG: -0.785398163397448 -1.03037682652431 -1.14103404769821 -0.896055384571344 -1.5707963267949
和: -5.42366074898621

なーにかが間違ってるのか…

229 名前:デフォルトの名無しさん [2020/04/18(土) 23:19:38 ID:3QrrEgXO.net]
五角形の内角の和は540度だぞw

230 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 23:23:05 ID:N4WXNODD.net]
内角じゃなくてどれだけ曲がったかの和を計算してるんだから2PIで良いだろ
数値があってんのかは知らんが

231 名前:デフォルトの名無しさん [2020/04/18(土) 23:50:57 ID:tXl890QR.net]
ニチャァ…

232 名前:デフォルトの名無しさん mailto:sage [2020/04/18(土) 23:58:10 ID:ZN+TZ1sR.net]
算数できないやつが単発IDで必死にマウント取ろうとしてて草

233 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 00:09:28 ID:10eyuplu.net]
>>224
どうやって計算したのか知らんが
3番目は2.0005586058915847だな



234 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 00:25:50 ID:suK8nNv5.net]
>>229
検算とヒントありがと、2.00055860589158 - (-1.14103404769821) = 3.14159265358979
プログラの間違い直せたら書き込むわ

235 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 00:29:16 ID:10eyuplu.net]
>>230
普通に余弦定理で内角求めてPIから引くだけだよな?

236 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 00:35:52.14 ID:suK8nNv5.net]
>>231
1)内積⇒arccos
2)外積⇒arcsin
凸判定には角度0や符号反転も要検出なので
2)でやってるがどっかに間違い入っちゃったかもしれなす

237 名前:デフォルトの名無しさん [2020/04/19(日) 00:56:56 ID:tNtEbJNg.net]
自演と思わないと精神保てないの草

238 名前:デフォルトの名無しさん [2020/04/19(日) 01:15:18.71 ID:kCjisW+o.net]
お題:マップの縮尺から画面の縮尺バーの長さを求めろ。

縮尺は、現実:画面 = 1:s
バーの長さは100以上で出来るだけ短くする。
バーの現実での長さの数値は 1, 2, 5 が頭にきて以降は0のみが続くもののみ許される。(1桁なら0がなくても良い)

例:
s = 0.003 → 150
0.01 → 100
0.4 → 200
0.96 → 192

239 名前:デフォルトの名無しさん [2020/04/19(日) 06:41:17.34 ID:J81tNU7x.net]
>>234
問題がよくわからない。

240 名前:デフォルトの名無しさん [2020/04/19(日) 07:17:30.86 ID:kCjisW+o.net]
説明が下手ですみません。

縮尺バーはGoogleマップの右下にあるようなバーで、画面上のバーの長さが現実では何キロメートルかを示しています。
その現実で何キロメートルかというのがバーの左に表示されています。
バーの長さはズームインしていくと連続的に伸びていき、伸びるすぎるガクッと縮んで、また連続的に伸びていきます。

そしてそのバーの左に表示される距離は2kmや50km、100kmなどの数値のみで中途半端な値は取りません。
この条件下で、縮尺とバーの長さの最小値を定めたときに、どんな長さでバーを画面に表示するかを求める問題です。
バーの長さは取りうるものの中で最小のものでお願いします。

241 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 07:38:33.09 ID:aJCN2KvM.net]
>>234
scheme
https://ideone.com/y3TCVC

242 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 07:56:27.14 ID:n5nVZY1D.net]
>>233
ひっでえブーメランで草

243 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 08:58:41.21 ID:OfVksrZS.net]
外角って言葉、最近は習わない?



244 名前:デフォルトの名無しさん [2020/04/19(日) 12:05:15 ID:bDqlqATM.net]
単発IDワラワラ

245 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 12:16:31 ID:ylCglSST.net]
ちょっと数学の話になる度にむきになって荒らすのが必ず一人いるからな

246 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 12:30:18.52 ID:6WjGzswu.net]
お題に答えろよ

247 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 13:11:54 ID:+exX8g3v.net]
日本語や説明が下手なお題だと考える気も起こらない

248 名前:デフォルトの名無しさん [2020/04/19(日) 14:11:18 ID:J81tNU7x.net]
>>236
現実:画面 = 1:s
という式の意味は?

249 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 15:33:55 ID:xgV79Bs/.net]
>>186 Perl5、P0-P2-P4-P1-P3が凸五角形であるか、で判定

@t = ([[0,0], [1,2], [2,0], [0,1], [2,1]],
   [[0,0], [1,2], [2,0], [0,2], [2,2]],
   [[0,0], [0,1], [1,2], [2,1], [2,0]],
   [[0,0], [5,5], [0,5], [1,0], [1,6]],
   [[0,1], [0,0], [1,0],[-1,-2],[-2,-1]]
   );
@s = qw{0 2 4 1 3 0 2};
use PDL;
use PDL::Math;
use PDL::Constants qw(PI);
use feature 'signatures';
sub f($v1, $v2) {
 my $sp = sum $v1 * $v2;
 $v2 = -$v2 if

250 名前: $sp < 0.0;
 my $ang = asin det pdl $v1 , $v2;
 $ang = $ang >= 0.0 ? -PI + $ang : PI + $ang if $sp < 0.0;
 $ang
}
for $ps (@t) {
 @vs = map{pdl $ps->[$s[$_]]} 0..6;
 @es = map{norm($vs[$_+1] - $vs[$_])} 0..5;
 $angs = pdl map{f $es[$_], $es[$_+1]} 0..4;
 $ans = 'true';
 $ans = 'false' if (grep{abs $angs->at($_) < 0.0001} 0..4)
            or $angs->min * $angs->max < 0.0;
 $ttl = sum $angs;
 $ans = 'false' if abs $ttl < 6.28 or abs $ttl > 6.29;
 print "$ttl = Σ$angs: $ans\n";
}
[]
[ここ壊れてます]

251 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 15:35:04 ID:dE29U5t1.net]
>>245 の実行結果

~ $ perl 17_186_convx_pent.pl
The signatures feature is experimental at 17_186_convx_pent.pl line 12, <DATA> line 207.
6.28318528610616 = Σ[ 1.5707963 0.78539816 1.5707963 0.78539816 1.5707963]: true
6.28318530717959 = Σ[ 1.5707963 1.5707963 0 1.5707963 1.5707963]: false
-12.5663706143592 = Σ[-2.2142974 -2.4980915 -2.677945 -2.677945 -2.4980915]: false
-6.28318530717959 = Σ[-0.78539816 -1.0303768 -2.0005586 -0.89605538 -1.5707963]: true
-12.5663706143592 = Σ[-2.0344439 -2.9996956 -2.4980915 -2.9996956 -2.0344439]: false

252 名前:デフォルトの名無しさん [2020/04/19(日) 16:09:00.64 ID:wiVZfWUn.net]
>>131
Java
https://paiza.io/projects/h7MLf_mTw3NEdN0Fc1t1cg

253 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 16:09:14.25 ID:9DMQwSqL.net]
https://mypage.syosetu.com/mypageblog/view/userid/1530630/blogkey/2539146/

知らねしね



254 名前:デフォルトの名無しさん [2020/04/19(日) 16:14:07 ID:o4nQ3+S9.net]
>>244
具体的には、地球上で1mの長さの直線の道路があった時、それを画面の地図上で 1m × s の長さで表示するということです。
s=0.01ならその道路は画面に1cmで表示されます。

255 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 18:05:16.51 ID:3h7RKaJW.net]
>>234 Perl5 (問題の意図をくみ取り違えていなければ、下記で良い筈…ただし実の距離が一桁以下の場合はNGかも…)

for $s (qw{0.003 0.01 0.4 0.96}) {
 $d = 1;
 while ($s * $d < 10) { $d *= 10 }
 if (50 <= ($s * $d)) {
  $d *= 2;
 } elsif (20 <= ($s * $d)) {
  $d *= 5;
 } else {
  $d *= 10;
 }
 print "$s -> ", $s * $d, "\n";
}

実行結果
~ $ perl 17_234_scale_bar_len.pl
0.003 -> 150
0.01 -> 100
0.4 -> 200
0.96 -> 192

256 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 20:22:34 ID:3rSuzVma.net]
>>250 もっとスンナリ書けるんだった…

for (qw{0.003 0.01 0.4 0.96}) {
 $d = $_;
 while ($d < 10) { $d *= 10 }
 if  (50 <= $d) { $d *= 2 }
 elsif (20 <= $d) { $d *= 5 }
 else       { $d *= 10 }
 print "$_ -> ", $d, "\n";
}

257 名前:デフォルトの名無しさん mailto:sage [2020/04/20(月) 06:02:04 ID:C+lKY/AM.net]
>>234 Ruby
def scale( s )
i = (100.0 / s).ceil
j = 100 * 10 ** - Math.log10( s ).to_i
s * j * [ 1, 2, 5 ].each{|k| break k if i <= k * j; 10 }
end

[ 0.003, 0.01, 0.4, 0.96 ].each{|x| puts "%-6g → %d" % [ x, scale(x) ] }

258 名前:デフォルトの名無しさん mailto:sage [2020/04/20(月) 16:12:46 ID:EsvxpnHB.net]
>>181 Perl5 (Javaじゃなくてスマソ、ActivePerlなどのTkxモジュールがインストールされている環境で実行ください)

use Tkx;

$top = Tkx::widget->new('.');
$c = $top->new_canvas(-width => 300, -height => 300);
$c->g_pack(-expand => 1);

($x0, $y0) = (150, 50);
$r = 200;
($v, $theta) = (0, 3.1415 * 40 / 180);
($x, $y);
$dt = 20;

sub show {
 ($x, $y) = ($x0 + $r * sin $theta, $y0 + $r * cos $theta);
 $c->coords($st

259 名前:ick, $x0, $y0, $x, $y);
 $c->coords($ball, $x-7, $y-7, $x+7, $y+7);
 Tkx::after($dt, \&show);
 $a = -0.00098 * sin $theta;
 $a *= $a * $v > 0 ? 0.95 : 1/0.95; # dumping
 $dv = $a * $dt;
 $dtheta = ($v + $dv/2) * $dt / $r;
 $theta += $dtheta;
 $v += $dv;
}
show;

$stick = $c->create_line($x0, $y0, $x, $y, -width => 2.0);
$ball = $c->create_oval($x-7, $y-7, $x+7, $y+7, -fill => 'gray');

Tkx::MainLoop();
[]
[ここ壊れてます]

260 名前:デフォルトの名無しさん [2020/04/20(月) 17:09:22.78 ID:CQO/p7b7.net]
最下点付近での近似だな

261 名前:デフォルトの名無しさん [2020/04/20(月) 17:15:47 ID:CQO/p7b7.net]
いや普通のだったわ、すまん

262 名前:デフォルトの名無しさん mailto:sage [2020/04/20(月) 18:33:21 ID:SXRlK0qI.net]
>>181 Python3 (Javaじゃなくてスマソ >>253 をインプリ, tkinterのインストールされている環境で実行ください)

import math, tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root, width=300, height=300)
canvas.pack()
x0, y0 = 150, 50
r = 200
v, theta = 0, 3.1415 * 40 / 180
x, y = x0 + r * math.sin(theta), y0 + r * math.cos(theta)
stick = canvas.create_line(x0, y0, x, y, width=2)
ball = canvas.create_oval(x-7, y-7, x+7, y+7, fill='gray')
dt = 20
def show():
  global v, theta, x, y
  a = -0.00098 * math.sin(theta)
  a *= 0.95 if a * v > 0 else 1/0.95 # dumping
  dv = a * dt;
  dtheta = (v + dv/2) * dt / r
  theta += dtheta;
  v += dv;
  x, y = x0 + r * math.sin(theta), y0 + r * math.cos(theta)
  canvas.coords(stick, x0, y0, x, y)
  canvas.coords(ball, x-7, y-7, x+7, y+7)
  root.after(dt, show)
show()
root.mainloop()

263 名前:デフォルトの名無しさん [2020/04/20(月) 19:55:58 ID:qCtnBvYT.net]
そろそろオレ二重振り子見たくなってきちゃったなァ



264 名前:デフォルトの名無しさん mailto:sage [2020/04/20(月) 20:37:59.21 ID:7fNLbA/z.net]
double pendulumはカオスだからNG

265 名前:デフォルトの名無しさん [2020/04/20(月) 21:50:54 ID:3yxFdBsA.net]
>>135
Java 操車場アルゴリズム
https://paiza.io/projects/8rhXD8X0uio122Y78-g_8w

266 名前:デフォルトの名無しさん mailto:sage [2020/04/20(月) 22:11:41.07 ID:7fNLbA/z.net]
>>259
すげえな。
どうやって考えたの?

267 名前:デフォルトの名無しさん [2020/04/20(月) 22:36:14 ID:arq8EuUU.net]
考えたわけじゃなくね?

268 名前:デフォルトの名無しさん mailto:sage [2020/04/20(月) 23:51:34 ID:RmTF1U13.net]
これダイクストラなのか

269 名前:デフォルトの名無しさん mailto:sage [2020/04/21(火) 00:32:44 ID:2I58wt93.net]
スタックに積んで処理していくっていう昔ながらの方法と何か違うの?

270 名前:デフォルトの名無しさん mailto:sage [2020/04/21(火) 00:35:59 ID:2I58wt93.net]
ウィキペディアにあった

271 名前:デフォルトの名無しさん [2020/04/21(火) 19:01:08.06 ID:Nu/0ktL2.net]
>>258
数値計算にカオスとか関係なくね?

272 名前:デフォルトの名無しさん [2020/04/23(Thu) 02:45:01 ID:40I0QciX.net]
>>135
bash
https://paiza.io/projects/Qm3KvIJsWVgdXJ1VKJR7DA

eval は使ってないw

273 名前:デフォルトの名無しさん [2020/04/23(Thu) 05:19:07 ID:GeQlI54q.net]
>>265
ウルトラマンカオス。



274 名前:デフォルトの名無しさん mailto:sage [2020/04/23(木) 22:15:50.71 ID:CuZLC5Yi.net]
>>181 Common Lisp (SBCL) + CLX。X Window Systemが使える環境で。>>253, >>256を参考に
(require "asdf")
(asdf:load-system "clx")
(defpackage #:pendulum (:use #:common-lisp #:xlib))
(in-package #:pendulum)
(defvar *display* (open-default-display))
(defvar *screen* (display-default-screen *display*))
(defvar *window* (create-window :parent (

275 名前:screen-root *screen*)
         :x 0 :y 0
         :width 300 :height 300
         :background (screen-white-pixel *screen*)))
(defvar *gcontext* (create-gcontext :drawable *window*))
(defparameter *x0* 150)
(defparameter *y0* 50)
(defparameter *r* 200)
(defparameter *theta0* (/ (* pi 40) 180))
(defparameter *dt* 0.03)
(map-window *window*)
(loop for v = 0 then (+ v dv)
  for theta = *theta0* then (+ theta dtheta)
  for x = (+ *x0* (floor (* *r* (sin theta))))
  for y = (+ *y0* (floor (* *r* (cos theta))))
  for a = (let ((a (* -0.00098 (sin theta)))) (funcall (if (> (* a v) 0) #'* #'/) a 0.95))
  for dv = (* a *dt*)
  for dtheta = (/ (* (+ v (/ dv 2)) *dt*) *r*)
  do (progn
    (draw-line *window* *gcontext* *x0* *y0* x y)
    (draw-arc *window* *gcontext* (- x 7) (- y 7) 14 14 0 (* 2 pi) t)
    (clear-area *window*)))
[]
[ここ壊れてます]






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<264KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef