1 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 10:09:07.13 ID:phwOkayR.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/ 宿題は宿題スレがあるのでそちらへ。 前スレ プログラミングのお題スレ Part10 https://mevius.5ch.net/test/read.cgi/tech/1514772904/ プログラミングのお題スレ Part11 https://mevius.5ch.net/test/read.cgi/tech/1524570314/
152 名前:デフォルトの名無しさん [2018/10/19(金) 20:39:51.48 ID:5dseSh/K.net] >>147 Python https://ideone.com/sT2p2O
153 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 03:08:59.15 ID:gD7ZVb6v.net] iso-8859-2を入力したら文字化けしたりUTF-7を入力したら文字化けしなかったりするのは美しくないから文字コードを指定させないといかん
154 名前:デフォルトの名無しさん [2018/10/20(土) 05:27:36.15 ID:qwv4GmvH.net] >>147 Kotlin https://paiza.io/projects/jg9Pa-PO2UCwSLFPL3draw 入力はデフォルトのエンコーディングで Java のライブラリ内部で Unicode に自動変換させ、出力は UTF-8 になると想定して作られている。 つまり元の Unicode で \x0080 以上は UTF-8 だと全てマルチバイトになるので化けるようにしてある。 化け方は2通りでサロゲートペアの文字は % になりその他は * になる。
155 名前:デフォルトの名無しさん [2018/10/20(土) 17:10:58.56 ID:hxCjYBWY.net] >>142 Io File standardInput contents print
156 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 17:46:57.83 ID:cv2X893a.net] お題: 超簡単なステートマシン 以下の3つのデータがランダムに入力される。 1: hi 2: wake up 3: sleep 1が入力された場合、状態がwake up
157 名前:であれば「hello」、状態がsleepであれば「zzz...」と出力せよ。 2が入力されたら状態をwake upに、3が入力されたら状態をsleepに移行せよ。 [] [ここ壊れてます]
158 名前:デフォルトの名無しさん [2018/10/20(土) 18:05:02.67 ID:Nttc2RvP.net] >>152 つまり、hi以外で2、3に該当しない奴も無視で良いの?(hiは無視で良いんだよね) データは勝手に標準入力にするけど。 (リダイレクトでファイルからに出来るし)
159 名前:デフォルトの名無しさん [2018/10/20(土) 18:08:05.20 ID:Nttc2RvP.net] あれ、違うぞ? hiが入力された時、「かつ」wake upだったら”hello”出力か。 んでsleepなら”zzz...”ね。 それ以外無視と。 了解。
160 名前:デフォルトの名無しさん [2018/10/20(土) 18:12:34.08 ID:Nttc2RvP.net] てか、1ー3の数字だけで良いわ。 状態の意味はわかったけど、状態の文字は要らんね。
161 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 18:16:14.29 ID:xvv7H8Vz.net] それ以外をどう考慮すべきかは書かれてないから、 ここは「3つのデータがランダムに入力される」を信じたフリをして手抜きをするのが吉 そんなことよりステートマシンなら初期状態は与えろよw
162 名前:デフォルトの名無しさん [2018/10/20(土) 18:28:45.80 ID:AUqXYm6F.net] >>152 python3 state = "sleep" while True: x = input("> ") if x == "hi": print("zzz..." if state == "sleep" else "hello") elif x == "wake up": state = "wake up" elif x == "sleep": state = "sleep" else: print("invalid input.")
163 名前:デフォルトの名無しさん [2018/10/20(土) 18:42:18.95 ID:Nttc2RvP.net] #include <stdio.h> #include <conio.h> int main(void) { char c,state = 0; while(1) { c = getchar(); switch(c) { case '1': if(state == '2') { printf("hello"); } else if(state == '3') { printf("zzz..."); } break;
164 名前:デフォルトの名無しさん [2018/10/20(土) 18:43:23.41 ID:Nttc2RvP.net] case '2': state = '2'; break; case '3': state = '3'; break; default: break;
165 名前:デフォルトの名無しさん [2018/10/20(土) 18:43:31.11 ID:Nttc2RvP.net] } } return 0; } バッファ 無い方がいいのかと思ってバッファ無し版。(押したら即時入力) conio.hは環境依存だけど、どうせWinだろ。 stdio.hのgetcだったら、バッファがあるからEnter押さないとだけど最初の1文字が入る。 面倒臭かったからステータスは数字に直さず文字そのまま使った。
166 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 20:20:44.01 ID:WvTfEY4N.net] お題 2つの区間の共通部分を出力せよ [1,3] [2,4] => [2,3] (1,2) [1,2] => (1,2) [0,100) (5,+inf) => (5,100) (-inf,2] [1,+inf) => [1,2] [1,2) [2,3) => {}
167 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 21:46:37.40 ID:O4sbTglp.net] >>152 ruby -nle"$_!=?1?($t=-$_.to_i):(puts %w[zzz... hello _][$t])"
168 名前:デフォルトの名無しさん [2018/10/21(日) 04:42:48.87 ID:sz/a4USN.net] >>152 Kotlin https://paiza.io/projects/RpML2-t6V1kplmMq_f0usw 初期状態は sleep にした。 wake up と sleep 以外の入力に対しては ERROR を出力して状態は変化させないようにした。 入力が何だったか分かるようにするために行頭に >> を付けて入力文字列を出すようにした。
169 名前:デフォルトの名無しさん [2018/10/21(日) 04:53:27.38 ID:sz/a4USN.net] >>152 Perl の1行プログラム perl -ne 'BEGIN{$s=0;%x=("sleep"=>0,"wake up"=>1);%r=(0=>"zzz...",1=>"hello")}print ">> $_";chomp;\ if(defined($x{$_})){$s=$x{$_}}elsif($_ eq "hi"){print"$r{$s}\n"}else{print "ERROR\n"}' 仕様は>>163 と同じ。 1行が長くなったので1行目の行末に \ を入れて2行に分けて書いてある。
170 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 09:26:11.61 ID:3Rh2KUxU.net] >>152 java https://ideone.com/fp
171 名前:KVdM [] [ここ壊れてます]
172 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 09:40:05.59 ID:UVDgsDD7.net] >>152 GNU Smalltalk 入力は、数値ではなくメッセージで 状態推移は、クラスチェンジで(つまりインスタンス変数なし&条件分岐なし) …な感じで、他言語では思いつきにくい実装で遊んでみました Object subclass: Machine [ wakeUp [ ^self ] sleep [ ^self ] hi [ self subclassResponsibility ] state [ ^self class displayNl ] Other := nil. ] Machine class extend [ new [ ^WakeUp basicNew ] ] Machine subclass: WakeUp [ hi [ 'hello' displayNl ] ] Machine subclass: Sleep [ hi [ 'zzz...' displayNl ] ] Machine extend [ Other := Sleep basicNew ] WakeUp extend [ sleep [ ^self become: Other ] ] Sleep extend [ wakeUp [ ^self become: Other ] ] | machine | machine := Machine new. machine state. "=> WakeUp " machine hi. "=> hello " machine sleep; state. "=> Sleep " machine hi. "=> zzz... " machine wakeUp; state. "=> WakeUp " machine wakeUp; state. "=> WakeUp " machine sleep; state. "=> Sleep " machine sleep; state. "=> Sleep " https://ideone.com/vyCRfq
173 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 11:09:36.22 ID:S2kctYlU.net] >>152 PowerShell、初期状態は 'Sleep' function StateMachine { param([parameter(ValueFromPipeline=$true)][string]$Event) begin { $InSleep = $true } process { switch($Event){ 'hi'{ Write-Host "$(if($InSleep){'zzz...'}else{'hellow'})"} 'wake up'{$InSleep=$false} 'sleep'{$InSleep=$true} } } } 'hi','sleep','hi','wake up','hi' | StateMachine
174 名前:デフォルトの名無しさん [2018/10/21(日) 18:51:44.61 ID:7SU77e8C.net] >>161 Python3 https://ideone.com/BBteSk infは対応してないので1億とか適当な大きい値で代用
175 名前:デフォルトの名無しさん [2018/10/21(日) 22:29:32.21 ID:4ZLg1Jin.net] >>142 Lua io.write(io.read("*a"))
176 名前:デフォルトの名無しさん [2018/10/22(月) 01:45:31.26 ID:mc31Kn/b.net] >>2 これおかしくね?
177 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 19:00:32.44 ID:eWhef4/P.net] >>117-118 返答遅れてすみません 数値はあってるようです 私の稚拙なコードでよければ参考までに Haskell https://www.ideone.com/9Z0xOX
178 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 21:37:05.53 ID:HCMpmlk6.net] お題 Excel列番号の数字表記とアルファベット表記を相互変換せよ A => 1 AA => 27 ABC => ? 26 => Z 266379 => ?
179 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 22:19:55.60 ID:kr01ah20.net] >>172 Part6の754ですでに通った道だった https://peace.5ch.net/test/read.cgi/tech/1418278634/754 そしてその時の俺の回答はこれだ ideone.com/SM0HXt
180 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 22:19:56.82 ID:UJUp/CV/.net] >>172 Ruby f=->n{n.to_s(26).tr('0-9a-p',r='@-Y').sub(/(.)@/){$1.tr('A-Z',r)+?Z}.delete ?@} g=->s{s.tr('A-Z','0-9a-p').to_i(26)+(26**s.length-1)/25} puts '%s => %s'%[$_.chop!,~/\d/?f[$_.to_i]:g[$_]]while gets # => A => 1 AA => 27 ABC => 731 26 => Z 266379 => ODAI
181 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 22:31:11.04 ID:fVBjYNqz.net] iか何かが無かったような?
182 名前:デフォルトの名無しさん [2018/10/23(火) 23:51:06.93 ID:H259Ae8g.net] var trans = alpha => parseInt((parseInt(alpha, 36) - parseInt('9'.repeat(alpha.length), 36)).toString(36), 26) trans('A') //=> 1 trans('AA') //=> 27 trans('ABC') //=> 731 順変換だけやってみたけどすごい不安… Aがゼロ的な物なのか1的な物なのかこんがらがる…
183 名前:デフォルトの名無しさん mailto:sage [2018/10/24(水) 00:17:51.17 ID:n2SwZ/Io.net] >>176 Aは0扱いでよい。 与えられた文字列を str にとして x = str[A-Zの26進数] に対して 求める数 f(x) f N\{0} -> N\{0} は f(x) = x + (26**g(x) - 1)/25 (g(x) := x == 0 ? 1 : [log_26(x)] + 1). f は全単射なので逆写像f^(-1)が存在するので f と f^(-1) が答え.
184 名前:デフォルトの名無しさん mailto:sage [2018/10/24(水) 00:19:21.73 ID:kOQJNkO6.net] マジカルインクリメント!マジカルインクリメントじゃないか!!
185 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 11:51:35.92 ID:3ObU9lli.net] >>172 Pharo/Squeak Smalltalk | fromExcelColm toExcelColm | fromExcelColm := [:str | str asByteArray reversed - 64 polynomialEval: 26]. toExcelColm := [:n | | nn digits | nn := n. digits := OrderedCollection new. [(nn := nn - 1) >= 0] whileTrue: [digits addFirst: nn \\ 26. nn := nn // 26]. (digits asByteArray + 65) asString ]. fromExcelColm value: 'A'. "=> 1 " fromExcelColm value: 'AA'. "=> 27 " fromExcelColm value: 'ABC'. "=> 731 " toExcelColm value: 26. "=> 'Z' " toExcelColm value: 266379. "=> 'ODAI' " fromExcelColm value: 'EXCEL'. "=> 2708874 " toExcelColm value: 2788185942068. "=> 'MICROSOFT' "
186 名前:デフォルトの名無しさん [2018/10/25(木) 12:50:39.12 ID:hw/Q19JU.net] >>176 それ Z の時に失敗しない? 他の言語でやってみて失敗したので足したり引いたりする数を色々ひねったらうまく行ったけどね。
187 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 16:24:37.58 ID:aKbYC4uC.net] >>172 python3 https://ideone.com/zOajDg ここにソースを書いたらブロックされたからideoneで
188 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 16:39:59.02 ID:wLNEFoo1.net] >>177 >Aは0扱いでよい。 >与えられた文字列を str にとして x = str[A-Zの26進数] に対して それだと "A" も "AAAAAA" も x = 0 になるから g がダメだな
189 名前:デフォルトの名無しさん [2018/10/25(木) 16:46:00.18 ID:9VVQwm/j.net] やっぱり36進数[0-9a-z]使った横着は出来ないのか…
190 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 17:18:04.60 ID:BFrEhhQu.net] perlのbasecalcだとマジカルなことができる
191 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 17:29:09.19 ID:/ssDOiD4.net] >>182 文字列にするときは適当な10*n[26進数]を足してやればよいからやはり基本は26進数でよい
192 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 17:46:06.11 ID:wLNEFoo1.net] デコードは A-Z を 1 から 26 とする 0 を持たない変則 26 進数として数値化すりゃあいいんだよ 以下J 26 #. _64 + a. i. 'ABC' ==> 731 26 #. _64 + a. i. 'ODAI' ==> 266379 エンコードはちょっと1行では説明しにくい
193 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 17:52:55.69 ID:Toapoewp.net] 27進だろ…
194 名前:デフォルトの名無しさん [2018/10/25(木) 17:53:10.85 ID:hw/Q19JU.net] >>183 もう一捻り必要なんだよ。 考えてくと何れわかる。
195 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 18:17:57.30 ID:wLNEFoo1.net] >>187 下からn桁目の重み付けが 26^n で(1番下を0桁とする)、 各桁の数字が1〜26なんだよ これで0以外の数は表記できる AAA は 1*26*26 + 1 *26 + 1 ABC は 1*26*26 + 2 *26 + 3 YAZ は 25*26*26 + 1*26 + 26
196 名前:デフォルトの名無しさん [2018/10/25(木) 19:37:38.82 ID:gO/HWAcm.net] >>172 この問題を思い出した riverplus.net/codeiq/DigitalTaboo.pdf
197 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 20:05:21.59 ID:na0fZQbz.net] 全くの素人質問で申し訳ありませんが、お知恵拝借したくお願いします。 www.cjh.com.cn/ の画面左まんなか辺りの 三峡水? 25日 19?00分 174.64 -(入) 15200(出) を自動で毎日夜21時に取得して https://egg.5ch.net/test/read.cgi/river/1507607675/ に自動で書き込む方法はありますでしょうか? 長年誰かが手写しでしたが、死屍累々でございます、、、、なのです、、
198 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 20:16:07.42 ID:na0fZQbz.net] >>191 www.cjh.com.cn/ は nweb.cjh.com.cn/sssqold.html からでもOKです。
199 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 20:33:47.72 ID:TSZxWHJ/.net] sssqold.htmlのソース見たが読むほうは簡単そうだな 書き込む方はしらん
200 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 20:33:50.34 ID:BSekExc/.net] スレタイ
201 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 23:54:56.07 ID:Hzy8+5Se.net] あらしのおもちゃになるソースを公開するのはさすがにちょっとなあ
202 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 23:59:06.56 ID:9OC64j5F.net] >>191 2chのcgiは仕様変更ちょいちょいあって追いかけるの面倒だから書き込みは自動保守ツールとか任せるとして、 powershellのスクリプトをタスクスケジューラで動かして出力をテキストファイルにリダイレクトして自動保守ツールに食わせりゃいいんじゃね スクリプトはこんな感じかね $html= Invoke-WebRequest -UseBasicParsing nweb.cjh.com.cn/sssqold.html $pattern = "`"oq`":`"(\d*)`",`"q`":`"(\d*)`"[^}]+`"三峡水库`",`"tm`":(\d+),[^}]+`"z`":`"([0-9\.]+)`"" if ($html.RawContent -match $pattern) { $time = (Get-Date "1970/1/1 0:0:0 GMT").AddMilliseconds($Matches[3]) "三峡水库 {2:dd}日 {3}m {1}(入) {0}(出)"-f $Matches[1],$Matches[2],$time,$Matches[4] }
203 名前:デフォルトの名無しさん mailto:sage [2018/10/26(金) 01:56:21.09 ID:zqmCYDLg.net] 無駄に一行だな
204 名前:デフォルトの名無しさん mailto:sage [2018/10/26(金) 03:39:31.47 ID:c84xrxY5.net] >>172 (fold + 0 (map-with-index (lambda (i c) (* (- (char->integer c) #x40) (expt 26 i))) (reverse (string->list "ABC"))))
205 名前:デフォルトの名無しさん mailto:sage [2018/10/26(金) 19:50:36.71 ID:/kG4owY9.net] お題 ぷよぷよの連鎖数を求めよ。0-9がぷよ、.が空きマスを表す。 0013 0123 122. 013. 0123 => 4 9.9.9.9.9.9 .9.9.9.9.9. => 1 0123 3012 2301 1230 => 0
206 名前:デフォルトの名無しさん mailto:sage [2018/10/26(金) 20:45:47.09 ID:yqPKU+uE.net] >>196 おお、素晴らしいアドレスありがとうございます。後は何とか頑張ってみます!!
207 名前:デフォルトの名無しさん [2018/10/26(金) 20:51:49.05 ID:8JGFizba.net] >>199 2番目のパターンは実際のゲームではあり得ないものだとは思うが、とにかく何もない所があれば落ちてそれから何連鎖するかを求めればいいのかな?
208 名前:デフォルトの名無しさん [2018/10/29(月) 19:22:44.11 ID:PHNS982/.net] >>172 Kotlin https://paiza.io/projects/1ZkMBpYcAWRTjh1ic8RIIQ 入力が A-Z なら数値に変換(小文字も可)、数字だけの文字列はいわゆるA1の形式に変換。それ以外は入力異常でエラー。
209 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 17:20:53.74 ID:xBpFVgTt.net] >>199 python3 https://ideone.com/DIFmAW 最適もへったくれもないゴリ押しですわ…
210 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 21:09:38.22 ID:RM3bKAov.net] お題: ページャーを実装してください。標準入力から以下のデータが与えられます。不正な入力にはいい感じに対応してください。 1行目: 現在のページ番号 2行目: 総ページ数 3行目: 表示するリンク数 例1 入力: 1 10 5 出力: [1] 2 3 4 5 例2 入力: 5 10 5 出力: 3 4 [5] 6 7 例3 入力: 10 10 5 出力: 6 7 8 9 [10]
211 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 22:21:08.83 ID:Mk80lxDb.net] >>204 perl $now = shift or die $! ; $all = shift or die $! ; $show = shift or die $! ; $x = 1 + int $show/2; $y = $all - $x + 1; if($now <= $x){ $start = 1; }elsif($y <= $now){ $start = $all - $show + 1; }else{ $start = $now - int $show/2; } $end = $start + $show - 1; print join " ", map{ $_ == $now ? "[$_]" : "$_" }($start..$end);
212 名前:デフォルトの名無しさん [2018/10/30(火) 22:51:09.23 ID:N8SwgYLQ.net] >>204 Python3 current = int(input()) total = int(input()) n_links = int(input()) assert 1 <= current <= total and n_links <= total if current <= n_links//2: seq = range(1, n_links+1) elif current >= total-n_links//2: seq = range(total-n_links+1, total+1) else: left = current - n_links//2 right = current + n_links//2 + (0 if n_links%2 == 0 else 1) seq = range(left, right) seq = ["[{}]".format(s) if s == current else str(s) for s in seq] print(" ".join(seq))
213 名前:デフォルトの名無しさん [2018/10/30(火) 22:54:52.47 ID:N8SwgYLQ.net] うまく貼れなかった https://ideone.com/2ch1r3
214 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 11:25:03.96 ID:b7bQuZgR.net] >>204 Squeak Smalltalk | fn | fn := [:pg :tot :wd | | start pages | start := pg - (wd // 2) min: tot - wd + 1 max: 1. pages := start to: start + wd - 1. (pages collect: [:x | (x = pg ifTrue: ['[{1}]'] ifFalse: ['{1}']) format: {x}]) joinSeparatedBy: ' ' ]. #((1 10 5) (5 10 5) (10 10 5)) collect: [:tri | fn valueWithArguments: tri] "=> #('[1] 2 3 4 5' '3 4 [5] 6 7' '6 7 8 9 [10]') "
215 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 23:41:59.56 ID:8MYT0pgk.net] 三峡水? 02日 23?00分 174.53 -(入)14700(出)
216 名前:デフォルトの名無しさん [2018/11/03(土) 04:09:45.11 ID:vg8hCxXN.net] >>204 Kotlin https://paiza.io/projects/Zb6Ey6FbQYsGjsi5GBK9lQ 折角日本語使えるんだからたまには使わないとな。
217 名前:デフォルトの名無しさん mailto:sage [2018/11/03(土) 08:08:00.00 ID:BMDI0yEn.net] >>172 rust https://ideone.com/xaLIC6 >>204 rust https://ideone.com/UxomHc
218 名前:デフォルトの名無しさん mailto:sage [2018/11/03(土) 23:34:36.36 ID:BMDI0yEn.net] >>172 c https://ideone.com/W9eW0R >>204 c https://ideone.com/pL0QmX
219 名前:デフォルトの名無しさん [2018/11/04(日) 13:46:33.88 ID:pidkuN2F.net] >>204 Haskell main = mapM_ put [(1,10,5),(5,10,5),(10,10,5)] put (x,y,z) = return (pager x y z) >>= print pager a b c | a <= (c `div` 2) = mklist a $ take c [1..b] pager a b c | a > (b - c `div` 2) = mklist a $ drop (b - c) [1..b] pager a b c = mklist a $ take c $ drop (a - c `div` 2 -1) [1..b] mklist a xs = [small a xs , jst a xs , big a xs] small a = filter (< a) big a = filter (> a) jst a = filter (== a) 結果 [[],[1],[2,3,4,5]] [[3,4],[5],[6,7]] [[6,7,8,9],[10],[]] [executed "pager.hs"]
220 名前:デフォルトの名無しさん [2018/11/04(日) 13:47:27.44 ID:pidkuN2F.net] 結果が切れた。。。 改めて結果。 [[],[1],[2,3,4,5]] [[3,4],[5],[6,7]] [[6,7,8,9],[10],[]] [executed "pager.hs"]
221 名前:デフォルトの名無しさん mailto:sage [2018/11/05(月) 17:57:48.99 ID:GRwYYoWB.net] お題 3つの自然数A,B,Cが与えられる。 初項A、第二項Bであるフィボナッチ数列に対してCがその数列に含まれるかを判定せよ。 含まれる場合は第何項
222 名前:であるかを返し、含まれない場合は偽を返すものとする。 [] [ここ壊れてます]
223 名前:デフォルトの名無しさん mailto:sage [2018/11/05(月) 20:17:41.49 ID:0wNeh4D8.net] >>215 python def fibo(a, b): _yield a _yield b _while True: __yield a + b __a, b = b, a+b def func(fb, n): _count = 1; _while True: __num = fb.next() __print "{} th term = {}".format(count, num) __if num >= n: ___if num == n: ____return count ___else: ____return False __count = count + 1 _return False a, b, c = 1, 1, 100 print func(fibo(a, b), c)
224 名前:デフォルトの名無しさん mailto:sage [2018/11/05(月) 20:25:58.31 ID:0wNeh4D8.net] 同じもの ttps://ideone.com/Dff2U9
225 名前:デフォルトの名無しさん mailto:sage [2018/11/05(月) 21:15:45.04 ID:b01o/g5T.net] >>215 rust https://ideone.com/8R5UmH
226 名前:デフォルトの名無しさん mailto:sage [2018/11/05(月) 23:33:04.48 ID:6d8cBeMO.net] >>215 Ruby require 'matrix' def hoge(a, b, c) rm, fm, im = Matrix[[1, 1], [1, 0]], Matrix[[1, 0], [0, 1]], Matrix[[b], [a]] (0..Float::INFINITY).each do |n| m = fm * im return m[1, 0] > c ? false : n if m[1, 0] >= c fm *= rm end end p hoge(0,1,88) #=> false p hoge(0,1,89) #=> 11 p hoge(0,1,90) #=> false
227 名前:デフォルトの名無しさん [2018/11/06(火) 03:12:12.75 ID:BD76rR44.net] >>215 Kotlin https://paiza.io/projects/aLPj37Gr548Ba0214az42Q
228 名前:デフォルトの名無しさん [2018/11/06(火) 07:54:03.24 ID:GFB90oOd.net] C 初項の次第二項って書いてるのに、みんな何故0始まりなの。。。 #include <stdio.h> int fibin(int,int,int); int main(void) { for(int i = 0;i < 6;i++) printf("%d:%d\n",i,fibin(1,1,i)); return 0; } int fibin(int fst,int snd,int num) { int i = 2,fib = fst; if(fst == num) return 1; if(snd == num) return 2; while(fib != num) { fib = fst; fib += snd; if(fib <= num) i++; else return -1; fst = snd; snd = fib; } return i; }
229 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 09:23:46.31 ID:jl2IXbjS.net] (A,B,C)が(0,0,0),(0,1,0),(0,1,1),(1,0,0),(1,0,1)の時はCが無限回、(1,1,1),(0,X,X),(X,0,X),(X,X,X)(2≦X)の時はCが2回出現することがあるが考慮した方が良いか?
230 名前:デフォルトの名無しさん [2018/11/06(火) 10:48:03.28 ID:VF9SVEaj.net] A,Bによっては無限ループになり得ないか?
231 名前:219 [2018/11/06(火) 11:49:20.62 ID:13CfGTjW.net] そういやa,bが0,0だと足しても0だからcも0じゃないと無限ループするかな。
232 名前:219 [2018/11/06(火) 11:52:26.86 ID:13CfGTjW.net] した。見事にした。 足してゼロなら特別扱いして終わらせる処理がないとダメだったということだな。 今さら直す気は起きんが。
233 名前:デフォルトの名無しさん [2018/11/06(火) 11:52:29.61 ID:GFB90oOd.net] >>222 今まで投稿されてるコード見る限りは最初に見つけた時点で停止。 >>223 自然数って指示だから止まるはずだけど、関数の引数側でunsigned指定して(Javaとかだとuint)おいた方が良いかもね。
234 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 12:34:42.11 ID:jAy4xbYh.net] >>215 Squeak/Pharo Smalltalk | fibGen fn | fibGen := [:fst :snd | Generator on: [:g | | a b | a := fst. b := snd. g yield: a. [b := a+b. g yield: (a := b-a)] repeat ] ]. fn := [:A :B :C | | count fib last | count := 1. fib := fibGen value: A value: B. [(last := fib next) < C] whileTrue: [count := count + 1]. last = C ifTrue: [count] ifFalse: [false] ]. fn value: 1 value: 1 value: 89. "=> 11 " fn value: 1 value: 1 value: 90. "=> false "
235 名前:デフォルトの名無しさん [2018/11/06(火) 14:46:16.34 ID:GFB90oOd.net] Haskell main = mapM_ (\x -> putStr (show x ++ ":") >> print (fibin 0 1 x)) [0..6] fibin 0 0 c | c /= 0 = Nothing fibin a b c = lookup c $ zip (take (10 + c) fib) [1..] where fib = a:b:(zipWith (+) fib (tail fib))
236 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 18:51:28.38 ID:2YnZy0Ze.net] >>215 ruby https://ideone.com/Q6aVfo AとB足してゼロ問題に対しては fib = ->a, b {Enumerator.new {|y| loop {y << a; a, b = b, a + b; break if b == 0}}}
237 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 22:17:30.30 ID:Nv8RqtnA.net] お題 xy平面上の点がn+1個与えられる(各点のx座標は互いに異なる) 与えられた点をすべて通る関数 y=a[i]x^n+...+a[1]x+a[0] の係数a[i]を求めよ [入力] 点の個数(n+1) x[0] y[0] ... x[n] y[n] [出力] a[n] ... a[0] 2 0 1 1 3 => 2 1 (y=2x+1) 1 100 100 => 100 5 0 1 -1 5 2 2 4 -1 1 0 => -2/15 4/15 49/30 -83/30 1
238 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 23:24:52.38 ID:bpzsP6yI.net] 【ラグランジュ補間】 Σ[i=1,n] )y[i]Π[k≠i](x-x[k])/ (x[i]-x[k]) この係数を計算するだけ。 こういう純数学的な処理は、お題としてはどうかな? 応用上、常に展開した係数を求めるのに意味がある とも限らんし、精度評価が重要だったりとか
239 名前:デフォルトの名無しさん [2018/11/06(火) 23:43:20.04 ID:iVEsbroy.net] >>230 線形代数は偉大 import numpy as np N = int(input()) x, y = [], [] for i in range(N): _x, _y = map(float, input().split()) x.append(_x) y.append(_y) x = np.array(x) y = np.array(y) px = np.array([x**k for k in range(N)]) a = np.dot(y, np.linalg.inv(px)) print(a[::-1])
240 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 23:51:57.59 ID:bpzsP6yI.net] [1 x[0] x[0]^2...x[0]^n] [a[n]] =[y[0]] [1 x[1] x[1]^2... x[1]^n] [a[n-1]]=[y[1] [1 x[2] x[2]^2...x[2]^n] [a[n-2]]=[y[2]] ... [1 x[n] x[n]^2 .... x[n]^n] [a[0] ]=[y[n]] を解かせたというわけか...
241 名前:デフォルトの名無しさん mailto:sage [2018/11/07(水) 00:03:06.07 ID:q3WQuIHF.net] また数学板から荒らしにきたのか
242 名前:デフォルトの名無しさん [2018/11/07(水) 00:56:30.16 ID:yYgCxC/p.net] お題: 四則演算の文字列を受け取って計算結果を返す 1+2+3+4 => 10 4+5*6-2*3 => 28 5+12*(2+9/3)/((2+3)*5-7*3) => 20
243 名前:デフォルトの名無しさん mailto:sage [2018/11/07(水) 00:58:06.61 ID:B66LtM9k.net] >>230 Ruby s = ->a, b{a.zip(b).map{|i, j| i - j}} t = ->a, k{a.map{|i| i * k}} n = gets.to_i - 1 m = $<.read.split($/).map{|e| f[n, *e.split.map(&:to_r)]} (1..n+1).each do |r| (nonzero = m[r- 1..-1].find_index{|e| e[r].nonzero?} + r - 1) && next m[r - 1], m[nonzero] = m[nonzero], m[r - 1] m[r - 1] = t[m[r - 1], 1/m[r - 1][r]] [*[*(0..n)] - [r - 1]].each{|i| m[i] = s[m[i], t[m[r - 1], m[i][r]/m[r - 1][r]]]} end puts m.transpose[0].map{|i| i.denominator == 1 ? i.to_i : i} * ' ' 2 0 1 1 3 #=> 2 1 (y=2x+1) 3 1 1 1 1 5 4 2 1 8 9 3 1 #=> -1/2 11/2 -4
244 名前:デフォルトの名無しさん mailto:sage [2018/11/07(水) 01:00:36.71 ID:B66LtM9k.net] >>236 訂正 尚複数解存在する時は最も次数の小さいものを出力 2 0 1 1 3 #=> 2 1 3 1 1 5 2 8 3 #=> -1/2 11/2 -4
245 名前:デフォルトの名無しさん mailto:sage [2018/11/07(水) 01:50:15.65 ID:B66LtM9k.net] >>235 ruby -nle'puts [$_,eval($_)]*" => "' 1+2+3+4 => 10 4+5*6-2*3 => 28 5+12*(2+9/3)/((2+3)*5-7*3) => 20
246 名前:デフォルトの名無しさん mailto:sage [2018/11/07(水) 02:11:40.28 ID:B66LtM9k.net] >>236 訂正 s = ->a, b{a.zip(b).map{|i, j| i - j}} t = ->a, k{a.map{|i| i * k}} n = gets.to_i m = $<.read.split($/).map{|e| f[n + 1, *e.split.map(&:to_r)]} n.times do |r| (nonzero = m[r..-1].find_index{|e| e[r].nonzero?} + r) || next m[r], m[nonzero] = t[m[nonzero], 1/m[nonzero][r + 1]], m[r] [*[*(0..n + 1)] - [r]].each{|i| m[i] = s[m[i], t[m[r], m[i][r + 1]/m[r][r + 1]]]} end puts m.transpose[0].map{|i| i.denominator == 1 ? i.to_i : i} * ' '
247 名前:デフォルトの名無しさん mailto:sage [2018/11/07(水) 12:58:28.67 ID:jk7t6Ngg.net] >>230 Squeak Smalltalk | fn | fn := [:points | | xs ys fi gi | xs := points collect: #x. ys := points collect: #y. fi := [:x :i | ((1 to: xs size) copyWithout: i) inject: 1 into: [:prod :k | prod * (x - (xs at: k))]]. gi := [:i | (0 to: xs size - 1) collect: [:n | n = 0 ifTrue: [1] ifFalse: [ (Array streamContents: [:ss | (xs copyWithoutIndex: i) combinations: n atATimeDo: [:comb | ss nextPut: (comb negated reduce: #*)] ] ) sum ]] ]. (ys * ((1 to: xs size) collect: gi) / (xs collectWithIndex: fi)) sum ]. fn value: {0@1. 1@3}. "=> #(2 1) " fn value: {100@100}. "=> #(100) " fn value: {0@1. -1@5. 2@2. 4@ -1. 1@0}. "=> {(-2/15) . (4/15) . (49/30) . (-83/30) . 1} "
248 名前:デフォルトの名無しさん mailto:sage [2018/11/07(水) 13:01:59.20 ID:jk7t6Ngg.net] >>230 Pharo Smalltalk w/PolyMath >>232 っぽく "Metacello new repository: 'github://PolyMathOrg/PolyMath:master/src'; baseline: 'PolyMath'; load" | fn | fn := [:points | | xs ys xp | xs := points collect: #x. ys := points collect: #y. xp := (PMMatrix rows: ((xs size - 1 to: 0 by: -1) collect: [:m | xs raisedTo: m])) transpose. (xp inverse * ys asPMVector) asArray ]. fn value: {0@1. 1@3}. "=> #(2 1) " fn value: {100@100}. "=> #(100) " fn value: {0@1. -1@5. 2@2. 4@ -1. 1@0}. "=> {(-2/15) . (4/15) . (49/30) . (-83/30) . 1} "
249 名前:デフォルトの名無しさん mailto:sage [2018/11/07(水) 18:36:22.03 ID:LRSzKna1.net] お題 Windows bitmap画像(.bmp)は通常、下から上に向かって画像が記録されているが、 高さに負の値を指定することで、上から下へ向かって画像を記録することができる。 これを利用してbmp画像の上下を反転せよ。
250 名前:デフォルトの名無しさん mailto:sage [2018/11/07(水) 18:45:22.44 ID:oTVd6hn3.net] どこが問題なのw 仕様に沿った解決法言っちゃってるじゃんw
251 名前:219 [2018/11/07(水) 19:20:37.53 ID:bimd4khF.net] >>243 プログラムを作るのがお題だろう。 ここはプログラミングのお題スレなんだからこれでいいんだよ。 むしろ人がある程度プログラムの仕様を考えなければならないような数学問題みたいなやつがダメなお題。
252 名前:デフォルトの名無しさん [2018/11/07(水) 20:13:22.48 ID:Uevtgk2mh] 社会貢献のための生成とはどうあるべきかについて考えればいいじゃないか。 それを無くしては単なる社会主義的生産物として生きていく日々だよ。