プログラミングのお題スレ Part12
■ このスレッドは過去ログ倉庫に格納されています
回答一人で出題者からの返事がないとあってるかどうかわからないから困る お題 [0,1]の一様乱数をN個発生させ、小さい順に並べてa(1), ..., a(N)とする 同様にもうN個作って小さい順にb(1), ..., b(N)とする 同じ順位同士で(a(1), b(1)), ..., (a(N), b(N)) とペアを作った時、a>bとなるペアの個数は0〜N個になるが、その分布は? またa, bを一様分布以外の分布から取ってくるとどうなる? >>118 それはプログラミングで解くお題なのか? >>119 シミュレーションしてみるのも面白いかなと プログラミングで解くということに挑戦することから逃げるプログラマー 乱数全部同じパターンを引いてもその結果のみから分布を論じてかまわないというならそれでもいいがな ちょっとやってみた J で NB. monadic sort operator sort=: /:~ NB. monadic operator returns count of a_n > b_n NB. where a and b is sorted y-length array of rand(1000) do1=: verb define a =. sort ?y$1000 b =. sort ?y$1000 +/ (a>b) ) NB. dyad operator returns count of number x in array y count=: dyad define +/ (x = y) ) 続く >>118 Squeak/Pharo Smalltalkでシミュレーションのみ 擬似乱数発生器は Squeak の場合 Mersenne Twister(Pharo なら Park-Miller) | N M random bag | N := 10. M := 1e6. random := Random new. bag := Bag new. M timesRepeat: [ | pairs count | pairs := (random next: N) with: (random next: N) collect: [:a :b | {a. b}]. count := pairs count: [:pair | [:a :b | a > b] valueWithArguments: pair]. bag add: count ]. bag sortedElements "Squeak =>{ 0->981. 1->9873. 2->44008. 3->117136. 4->205258. 5->246203. 6->204286. 7->117345. 8->44247. 9->9702. 10->961} " >>118 Squeak/Pharo Smalltalkでシミュレーションのみ 擬似乱数発生器は Squeak の場合 Mersenne Twister(Pharo なら Park-Miller) | N M random bag | N := 10. M := 1e6. random := Random new. bag := Bag new. M timesRepeat: [ | pairs count | pairs := (random next: N) with: (random next: N) collect: [:a :b | {a. b}]. count := pairs count: [:pair | [:a :b | a > b] valueWithArguments: pair]. bag add: count ]. bag sortedElements "Squeak =>{ 0->981. 1->9873. 2->44008. 3->117136. 4->205258. 5->246203. 6->204286. 7->117345. 8->44247. 9->9702. 10->961} " 続き NB. 長さ100の配列で100000回試行 r =: (do1 "0) 100000$100 NB. r を表示 r => 43 77 58 31 23 36 59 26 85 15 73 72 4 34 0 26 22 26 85 70 95 2 64 46 22 84 22 86 78 39 51 34 92 94 68 98 47 38 68 92 48 43 19 97 80 18 13 65 76 79 17 88 19 39 72 74 16 54 32 11 99 3 80 32 94 25 87 91 ... NB. 0...100 の各数値の出現数 (i. 101) (count "0 1) r => 109 107 118 94 104 93 98 100 76 87 97 102 93 98 101 94 94 90 112 107 92 103 109 97 112 89 113 118 97 108 96 81 86 103 87 102 107 101 95 90 96 102 96 87 100 88 108 115 97 119 129 104 94 100 104 101 114... NB. グラフ化 plot (i. 101) (count "0 1) r https://i.imgur.com/QSKqVC6.jpg 一様分布っぽい だいぶ結果が違っててわろすw >>127 ソート忘れてないか? 理屈で考えると乱数がどんな分布でも a、b の分布が同じならコレの結果は常に同じ分布か なんか書き込めん… >>131 たしかに^^; pairs := (random next: N) sort with: (random next: N) sort collect: [:a :b | {a. b}]. で同じ分布になった >>134 echoかfizz buzzでもやれば >>137 echoコマンドの実装ってことじゃない? \0xxx や \n も解釈するようなの作ると初心者には結構勉強になるかも。 お題 標準入力から入力したデータをそのまま標準出力人出力する http://3dnchu.com/archives/tree-it/ このようなソフトはvisual studioで作るんですか? なんの言語がいいか教えてください iso-8859-2を入力したら文字化けしたりUTF-7を入力したら文字化けしなかったりするのは美しくないから文字コードを指定させないといかん >>146 Kotlin https://paiza.io/projects/jg9Pa-PO2UCwSLFPL3draw 入力はデフォルトのエンコーディングで Java のライブラリ内部で Unicode に自動変換させ、出力は UTF-8 になると想定して作られている。 つまり元の Unicode で \x0080 以上は UTF-8 だと全てマルチバイトになるので化けるようにしてある。 化け方は2通りでサロゲートペアの文字は % になりその他は * になる。 >>141 Io File standardInput contents print お題: 超簡単なステートマシン 以下の3つのデータがランダムに入力される。 1: hi 2: wake up 3: sleep 1が入力された場合、状態がwake upであれば「hello」、状態がsleepであれば「zzz...」と出力せよ。 2が入力されたら状態をwake upに、3が入力されたら状態をsleepに移行せよ。 >>151 つまり、hi以外で2、3に該当しない奴も無視で良いの?(hiは無視で良いんだよね) データは勝手に標準入力にするけど。 (リダイレクトでファイルからに出来るし) あれ、違うぞ? hiが入力された時、「かつ」wake upだったら”hello”出力か。 んでsleepなら”zzz...”ね。 それ以外無視と。 了解。 てか、1ー3の数字だけで良いわ。 状態の意味はわかったけど、状態の文字は要らんね。 それ以外をどう考慮すべきかは書かれてないから、 ここは「3つのデータがランダムに入力される」を信じたフリをして手抜きをするのが吉 そんなことよりステートマシンなら初期状態は与えろよw >>151 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.") #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; case '2': state = '2'; break; case '3': state = '3'; break; default: break; } } return 0; } バッファ 無い方がいいのかと思ってバッファ無し版。(押したら即時入力) conio.hは環境依存だけど、どうせWinだろ。 stdio.hのgetcだったら、バッファがあるからEnter押さないとだけど最初の1文字が入る。 面倒臭かったからステータスは数字に直さず文字そのまま使った。 お題 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) => {} >>151 ruby -nle"$_!=?1?($t=-$_.to_i):(puts %w[zzz... hello _][$t])" >>151 Kotlin https://paiza.io/projects/RpML2-t6V1kplmMq_f0usw 初期状態は sleep にした。 wake up と sleep 以外の入力に対しては ERROR を出力して状態は変化させないようにした。 入力が何だったか分かるようにするために行頭に >> を付けて入力文字列を出すようにした。 >>151 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"}' 仕様は>>162 と同じ。 1行が長くなったので1行目の行末に \ を入れて2行に分けて書いてある。 >>151 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 >>151 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 >>160 Python3 https://ideone.com/BBteSk infは対応してないので1億とか適当な大きい値で代用 >>141 Lua io.write(io.read("*a")) >>116-117 返答遅れてすみません 数値はあってるようです 私の稚拙なコードでよければ参考までに Haskell https://www.ideone.com/9Z0xOX お題 Excel列番号の数字表記とアルファベット表記を相互変換せよ A => 1 AA => 27 ABC => ? 26 => Z 266379 => ? >>171 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 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的な物なのかこんがらがる… >>175 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) が答え. マジカルインクリメント!マジカルインクリメントじゃないか!! >>171 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' " >>175 それ Z の時に失敗しない? 他の言語でやってみて失敗したので足したり引いたりする数を色々ひねったらうまく行ったけどね。 >>171 python3 https://ideone.com/zOajDg ここにソースを書いたらブロックされたからideoneで >>176 >Aは0扱いでよい。 >与えられた文字列を str にとして x = str[A-Zの26進数] に対して それだと "A" も "AAAAAA" も x = 0 になるから g がダメだな やっぱり36進数[0-9a-z]使った横着は出来ないのか… perlのbasecalcだとマジカルなことができる >>181 文字列にするときは適当な10*n[26進数]を足してやればよいからやはり基本は26進数でよい デコードは A-Z を 1 から 26 とする 0 を持たない変則 26 進数として数値化すりゃあいいんだよ 以下J 26 #. _64 + a. i. 'ABC' ==> 731 26 #. _64 + a. i. 'ODAI' ==> 266379 エンコードはちょっと1行では説明しにくい >>182 もう一捻り必要なんだよ。 考えてくと何れわかる。 >>186 下から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 全くの素人質問で申し訳ありませんが、お知恵拝借したくお願いします。 http://www.cjh.com.cn/ の画面左まんなか辺りの 三峡水? 25日 19?00分 174.64 -(入) 15200(出) を自動で毎日夜21時に取得して https://egg.5ch.net/test/read.cgi/river/1507607675/ に自動で書き込む方法はありますでしょうか? 長年誰かが手写しでしたが、死屍累々でございます、、、、なのです、、 sssqold.htmlのソース見たが読むほうは簡単そうだな 書き込む方はしらん あらしのおもちゃになるソースを公開するのはさすがにちょっとなあ >>190 2chのcgiは仕様変更ちょいちょいあって追いかけるの面倒だから書き込みは自動保守ツールとか任せるとして、 powershellのスクリプトをタスクスケジューラで動かして出力をテキストファイルにリダイレクトして自動保守ツールに食わせりゃいいんじゃね スクリプトはこんな感じかね $html= Invoke-WebRequest -UseBasicParsing http://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] } >>171 (fold + 0 (map-with-index (lambda (i c) (* (- (char->integer c) #x40) (expt 26 i))) (reverse (string->list "ABC")))) お題 ぷよぷよの連鎖数を求めよ。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 >>195 おお、素晴らしいアドレスありがとうございます。後は何とか頑張ってみます!! >>198 2番目のパターンは実際のゲームではあり得ないものだとは思うが、とにかく何もない所があれば落ちてそれから何連鎖するかを求めればいいのかな? >>171 Kotlin https://paiza.io/projects/1ZkMBpYcAWRTjh1ic8RIIQ 入力が A-Z なら数値に変換(小文字も可)、数字だけの文字列はいわゆるA1の形式に変換。それ以外は入力異常でエラー。 お題: ページャーを実装してください。標準入力から以下のデータが与えられます。不正な入力にはいい感じに対応してください。 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] >>203 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); >>203 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)) >>203 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]') " 三峡水? 02日 23?00分 174.53 -(入)14700(出) >>203 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"] 結果が切れた。。。 改めて結果。 [[],[1],[2,3,4,5]] [[3,4],[5],[6,7]] [[6,7,8,9],[10],[]] [executed "pager.hs"] お題 3つの自然数A,B,Cが与えられる。 初項A、第二項Bであるフィボナッチ数列に対してCがその数列に含まれるかを判定せよ。 含まれる場合は第何項であるかを返し、含まれない場合は偽を返すものとする。 >>214 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) ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる