X



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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2019/07/28(日) 19:39:57.54ID:832c/ukY
プログラミングのお題スレです。

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

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

※前スレ
プログラミングのお題スレ Part14
http://mevius.5ch.net/test/read.cgi/tech/1558168409/
0952デフォルトの名無しさん
垢版 |
2019/11/13(水) 20:48:13.08ID:CMaH4qd1
>>941
C++ならSTLのequal_rangeを使えば、二分探索のコードを自前で書かずに済む。
https://ideone.com/KJ134u

この例の条件でしか判定しないなら、5つの定数値との比較にするのが一番簡単で
速そうだな。
https://ideone.com/ef553N
0955デフォルトの名無しさん
垢版 |
2019/11/13(水) 21:53:11.46ID:RzCRvdkP
まずは199との比較では?
あとは範囲を絞ったテーブルとか

int全てをカバーするテーブルも
intが32bitな64bit環境なら一応は可能
0956蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/11/13(水) 22:09:59.79ID:SHPlbPC2
お題: 自動塗り絵。

白地に黒い線で図形が描かれているモノクロ画像が与えられる。
白い領域をそれぞれ適当な単色で塗りつぶせ。可能ならOpenCVを使ってもいい。
0958デフォルトの名無しさん
垢版 |
2019/11/13(水) 23:03:48.70ID:CMaH4qd1
>>955
「一番速い」ではなく「一番簡単で速い」だからね。可読性とかバグの
混入しにくさとかも考えると、順番に5回比較するのが一番良いだろ。
特に https://mevius.2ch.net/test/read.cgi/tech/1573214616/3 への
回答としては、最も適している。
0959デフォルトの名無しさん
垢版 |
2019/11/13(水) 23:40:49.81ID:RzCRvdkP
一番速くもないし一番簡単でもない

一番「簡単で速い」?
簡単と速いは相反するので一番なんて無い
0961デフォルトの名無しさん
垢版 |
2019/11/14(木) 01:06:49.29ID:4AhPUV/Y
俺が一番
0962デフォルトの名無しさん
垢版 |
2019/11/14(木) 06:15:22.98ID:BnXMw1SX
>>941 Io
f:=method(a,x,
a map(v,list((v-x)abs,v))min last
)
d:=list(98,100,198,200,298)
f(d,120) println
実行結果
100
0963デフォルトの名無しさん
垢版 |
2019/11/14(木) 09:31:40.70ID:baSi3t2K
一番簡単で速いってなんだよ
一番簡単かつ一番速いなら一番速いって言えばいいだけだろ
ってC++の人かよ
0966デフォルトの名無しさん
垢版 |
2019/11/14(木) 13:27:39.39ID:isT1FYJS
それな
あと「頭悪いやつがよく言う」ってのも頭悪いやつよく言うセリフだわ
0968デフォルトの名無しさん
垢版 |
2019/11/14(木) 16:23:41.28ID:bZ2yXVXr
>>963
俺、よくmakehoge書いてる人だけど、その二分探査書いた人は別人。
偶に、俺じゃない人がC++書いてくことがある。
まぁ、俺も貢献度が高いかというと解らんけど。
0969デフォルトの名無しさん
垢版 |
2019/11/14(木) 22:16:17.11ID:ya/1xYDt
>>963
「一番簡単で速い」は「一番簡単」かつ「速い」という意味だよ。
一番簡単なコードを書いてみて充分に速ければ、さらに手を加える必要はないってこと。
昨今はCPUが速いので、簡単なコードをささっと書いて終わりにできる場合が多いし、
Cを使うまでもなくRやPythonなどでも実用に耐える。処理条件が変わって速度に
不満が生じたときだけ、書き直せば良い。
0971デフォルトの名無しさん
垢版 |
2019/11/14(木) 23:43:50.36ID:ya/1xYDt
>>970
>>941の最も近い値を求める処理(Aと呼ぶ)だけを複数回連続して行う場合はそうだが、
間に別の処理(Bと呼ぶ)がたくさん入る場合はキャッシュから外れるかも知れないし、
AよりもBの方で相対的にだいぶ長い時間がかかっているならば、Aを高速化する
意味はない。

Aを簡単に書き終え、Bを書き進めてプログラム全体を完成させ、各部分の実行時間を
デバッガで分析し、Aを高速化する必要があるか判定するのが効率的な開発方法。
必要なときだけAを書き直してみて、元のAと実行時間を比較し、顕著に速い場合だけ
採用する。あまり変わらない場合は元の簡単な方に戻す。
0973デフォルトの名無しさん
垢版 |
2019/11/15(金) 06:11:01.44ID:/dDy1LQy
中途半端に最適化するくらいなら
意味通りをそのまま記述した方が良いよ

トリッキーなマクロとか使わないで普通にループでいいし
0974デフォルトの名無しさん
垢版 |
2019/11/15(金) 07:24:03.38ID:YlbiRAmO
>>941 J

f =: 4 : 0
{. x /: | x - y
)

a =: 98 100 198 200 250 298
a f 199
198
0985デフォルトの名無しさん
垢版 |
2019/11/15(金) 18:45:17.65ID:YlbiRAmO
>>941 Ruby

def f(a,x)
a.min_by{|v|(v-x).abs}
end
0988デフォルトの名無しさん
垢版 |
2019/11/16(土) 09:38:56.12ID:R3eXoa4h
お題: 標準入力から読み取った文字列に対して変換候補の単語を表示するスクリプトを作れ
変換候補は https://www.cs.cmu.edu/~rgs/alice-table.html のテキストを元にし、英文のみの対応とする

例:
in < on
out > ['on', 'once', 'one', 'only']
in < we
out > ['well', 'went', 'were']
099010-11
垢版 |
2019/11/16(土) 11:43:03.30ID:nyexrMnj
Mathematica
ビットテーブル使ったからいまいち

f[x_]:=Round[Exp[x*49/2^9]*10]+Mod[BitShiftRight[8518656,x],2]

f[Range[0,23]]
{10,11,12,13,15,16,18,20,22,24,27,30,33,36,39,43,47,51,56,62,68,75,82,91}
0991デフォルトの名無しさん
垢版 |
2019/11/16(土) 13:01:44.00ID:9Ne+J8hx
>>988-989 PowerShell
$Words = ([RegEx]"\w+").Matches((Invoke-WebRequest 'https://www.cs.cmu.edu/~rgs/alice-I.html').Content) | Select-Object -ExpandProperty 'Value' | Sort-Object -Unique
'on', 'we' | %{ "'$_' => ['$($Words -cmatch "^$_.*$" -join ''', ''')']" }
--
'on' => ['on', 'once', 'one', 'only']
'we' => ['well', 'went', 'were']
0993デフォルトの名無しさん
垢版 |
2019/11/16(土) 20:00:42.94ID:ycfnvugG
>>987
誤解がないように一応言っておくが、同一人物なのは943, 952, 958, 969, 971, 993だけで、
978や986は別人ね。
0997990
垢版 |
2019/11/17(日) 15:37:45.58ID:WMPUR+bY
BitGet使うんだった(Mathematicaに慣れてないのばればれ)
(* 49/2^9 = 0.095703125 *)
f[x_]:=Round[Exp[x*0.095703125]*10]+BitGet[8518656,x]

もう少し頑張っても16ビット以内にビットテーブルは縮小出来ず…。
(* 785/2^13 = 0.0958251953125 *)
f[x_]:=Round[Exp[x*0.0958251953125]*10]+BitGet[130048,x]
0998デフォルトの名無しさん
垢版 |
2019/11/21(木) 12:06:42.30ID:p+kY48sO
>>941 julia
a=[98,100,198,200,250,298]
f(a,x)=a[argmin(map(abs ,a.-x))]
f(a,50)
0999デフォルトの名無しさん
垢版 |
2019/11/21(木) 17:12:54.10ID:x85mexbT
>>988-989 Squeak Smalltalk。関数で。

| contents words fn |
contents := (HTTPClient httpGet: 'https://www.cs.cmu.edu/~rgs/alice-I.html') contents.
words := (contents replaceAll: Character lf with: Character space; asTextFromHtml) asString subStrings: ' !"''()*,-.:;?`'.
words := words asSet asSortedArray.

fn := [:in | words select: [:word | word beginsWith: in]].
fn value: 'on'. "=> #('on' 'once' 'one' 'only') "
fn value: 'we'. "=> #('well' 'went' 'were') "

"for Pharo => http://ws.stfx.eu/DK48GF5ZH8SF "
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 116日 0時間 21分 10秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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