出題に際しては - お題の意図を汲みやすい入出力例も示す - 事前に自分でもコードを書いてみる
このスレ久しぶりに来た 数学できない勢だけどよろすこ
>>6 過去ログから持ってきた訳じゃないんだけど、こういうお題を考えた 平面座標aとbが入力されます。bから見てaがおおよそ何時の方角にあるか時刻で出力してください。 例えば座標の方角が2時と3時の中間だった場合は両方の時刻を同時に出力してください。 座標が重なった場合は0時と出力してください。方角の精度は時刻み、分刻みから選択自由とします。 でも何か既視感あるんだよな 過去ログに似たようなお題があったかもしれない (逆)三角関数使わずにって制限つければまあまあ面白いかもしれない
数学じゃん。 紙と鉛筆で解いて算出は電卓でやれ。 プログラムでやっても電卓でできる程度のことしかしないじゃん。
>>7 Squeak Smalltalk | fn | fn := [:a :b | (a - b) theta negated / (2 * Float pi) * 12 + 3 \\ 12]. fn value: 6@12 value: 6@6. "=> 0.0 " fn value: 6+(2*3 sqrt)@12 value: 6@6. "=> 1.0 " fn value: 6-(2*3 sqrt)@12 value: 6@6. "=> 11.0 " fn value: 12@6 value: 6@6. "=> 3.0 " fn value: 6@0 value: 6@6. "=> 6.0 " fn value: 0@6 value: 6@6. "=> 9.0 " fn value: 6@6 value: 6@6. "=> 0.0 " 過去ログから、さすがにこれはプログラミングの問題でしょ お題: 下図のように山の麓(標高0)の両側にいるA君B君が頂上(標高10)を目指して同時に出発する ただし、A君B君のいる位置の標高はどの時刻でも等しくなるように登らなければならない (下図でA君が標高7の峠から標高3の谷へ下るときにはB君は来た道を引き返す必要がある) 標高1だけ上るor下るのに1時間かかるとして頂上まで最短で何時間かかるか求めよ 10 7 /\ /\/3 \ A 0/ \0 B 山の形状は以下のような文字列で表現する 1)文字列の先頭と末尾はA君B君のスタート地点(標高0)を表し、必ず'0'である 2)ゴールの頂上(標高10)の位置は':'で表す(文字コードがちょうど':'='0'+10なので) 3)途中の峠と谷の標高を'1'〜'9'で表す(上図の山の形状は"073:0"と表される) 4)途中の峠と谷は交互に現れるようにする(例えば"037:0"は無し) テスト例 "073:0" -> 18 "07362:450" -> 36 "06464:36470" -> 42 "0827171:28480" -> 66 "0737491:28180" -> 146 "05374734372747484:184618186912120" -> ?
>>12 あ、ごめん私が間違えてた 計算し直してくる スレの宿題のをやってみた (規制対象なのでurlに全角スペースいれてます) https://bi t.ly/2FdJBkh 以下のルール 全員が以下のルールを守って空席に決められた順に座るものとする ・全員の数字と着席順は皆が知っている ・スコアは上下左右の2~4セルの数値の合計 ・必ず空席のうちの最大のスコアになる席に座る ・最大のスコアの席が複数ある場合はどこに座っても良い ・「最大のスコアの席」とは、以降の人のルールに適う選択を考慮した上で決定される (現在スコア5の2つの空席A, B があったとして、全員がルール通り座った結果Aが8、Bが7に なる場合はAを選択しなくてはならない) 座席 〇〇5 〇9〇 12〇 に対して、 番号 3、4、6、77、8 がこの順でルール通り座ろうとすると下記の結果になった。 座る順の早い4番が77の隣に行けず6番に負けてしまうとかちょっとおもしろい 77 3 5 6 9 4 1 2 8 >スレの宿題のを 「前スレの宿題の」と書こうとしてミスしました。 実際のとこ宿題なのかどうかは知らないけど。
>>11 テスト例の最初のやつはなぜ18になるのか?7+3+7=17ではないのか? 7 + (7 - 3) + 7 = 18 あってるよ
>>12 最後の b++ は b -- の打ち間違いか >>11 の参考として戻る必要があるケースの例 05131:4501050 手計算では40時間。あってるかな [ ]がA君B君の位置、 左端はそのステップに要する時間 0 [0]5131:450105[0] 5 0[5]131:45010[5]0 5 [0]5131:4501[0]50 1 0[]5131:450[1]050 1 [0]5131:45[0]1050 5 0[5]131:4[5]01050 4 05[1]31:45[]01050 3 051[3]1:45[]01050 2 0513[1]:45[]01050 4 05131[]:4[5]01050 1 05131[]:[4]501050 9 05131[:]4501050 >>14 A, B, C の3人の順番で、 Bがaマスを選ぶと、Cには最高点になるx, y の2つの選択肢があり、 Cがxの場合、Bは10点、 Cがyの場合、Bは5点となる この場合、Bがaの場合は5点と考えるので、 Bがbの場合が7点なら、Bはbを採用する しかし、Bのbが5点なら、aと同じだから、どうなるんだ? >>11 理解できてなかったわ "07362:450" の解がもうわからん >>23 Bはa,bどちらも5点ならどちらを選んでも良い 各人は自分の順になったとき、 選択可能な各位置について「以降誰が何をしても最悪でも~点とれる」という点数を考え、 それが最大になる位置(のうちのどれか一つ)を選ぶ (何をしても、といってももちろん皆が上記のルールは守るものとする) ストレートなMin-Max戦略だなこれ >>24 0 [0]7362:45[0] 5 0[]7362:4[5]0 1 0[]7362:[4]50 3 0[7]362:[]450 3 07[]362:[4]50 1 07[]362:4[5]0 2 07[3]62:45[]0 2 073[]62:4[5]0 1 073[]62:[4]50 2 073[6]2:[]450 2 0736[]2:[4]50 1 0736[]2:4[5]0 3 0736[2]:45[]0 3 07362[]:4[5]0 1 07362[]:[4]50 6 07362[:]450 36時間 >>26 ありがとう 問題は理解できていて頭が悪いだけでした >>25 Bのa・b 戦略が、共に5点の同点で、その2つをA に戻すから、 Aは両方を比較しなければならないから、複雑だと思って >>11 やってみた https://ideone.com/LsjBLX 結果 "073:0" => 18 "07362:450" => 36 "06464:36470" => 46 "0827171:28480" => 66 "0737491:28180" => 146 "05374734372747484:184618186912120" => 400 一箇所だけ>>11 と違うな >>29 手計算 0 [0]6464:3647[0] 6 0[6]464:3647[]0 2 06[4]64:3647[]0 2 064[6]4:3647[]0 2 0646[4]:3647[]0 3 06464[]:364[7]0 3 0646[4]:36[4]70 2 064[6]4:3[6]470 2 06[4]64:3[]6470 2 0[6]464:3[6]470 3 0[]6464:[3]6470 3 0[6]464:[]36470 2 06[4]64:[]36470 2 064[6]4:[]36470 2 0646[4]:[]36470 6 06464[:]36470 >>30 無いんじゃね? ちょっと考えてみたけど至る所微分不可能な山ではない限り解は存在するね
適当に折り返すことによって山谷の数を合わせられる あとは略、って感じか
e^(z) + 1 = 0 を満たす全ての z∈C の絶対値の集合をSとする. この時、Sの中でN番目(N≦10^5)に小さい元を求めよ. なお, e = Σ{n∈N}(1/n!) である.
数学じゃん。まーたセンセか。 数学板で相手してもらえないのかな?
簡単なところで。 【お題】 与えられた整数のリストを、 すべての奇数がすべての偶数の前に来るよう並べ替えなさい。 ただし奇数、偶数、それぞれの順番は変えないこと。 [-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7] -> [-1, -9, -3, 5, 7, 9, 7, 2, 8, -2, -6, -10, -8]
J ((#~2&|),(#~2&|&>:)) -1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7 出力 _1 9 3 _5 _7 _9 _7 _2 _8 _2 _6 10 _8 (Jでは_が負の符号)
>>40 Perl @a = (1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7); @o = grep{$_ & 1} @a; @e = grep{!($_ & 1)} @a; use feature 'say'; use Data::Dump qw(dump); say dump [@o, @e]; $ perl 11_41.pl [1, -9, -3, 5, 7, 9, 7, 2, 8, -2, -6, -10, -8] > _1 9 3 _5 _7 _9 _7 _2 _8 _2 _6 10 _8 Jは全くわからんが、出力おかしくないけ? _1 _9 _3 5 7 9 7 2 8 _2 _6 _10 _8 になるはず?
>>44 おかしい。こんな短いものでバグ作るとは。 なんだJニキたいしたことなかったんだな。ガッカリだわ
>>42 >((#~2&|),(#~2&|&>:)) -1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7 こう書かなきゃダメだった ((#~2&|),(#~2&|&>:)) _1 2 8 _9 _2 _3 _6 _10 _8 5 7 9 7 カンマはあっても良いんだけど _2 を -2 と書くと ,- なる演算子のコンビネータで世にも奇妙な動きになる
違った 1,2,3 => 1 2 3 1, -2, 3 => 1 _2 _3 マイナスがそれまで連結したそれより右、 上の例だと 2 3 全体に作用してた
あー! ソートするだけか。グッと短くなるな J (\:2&|) _1, 2, 8, _9, _2, _3, _6, _10, _8, 5, 7, 9, 7 結果 _1 _9 _3 5 7 9 7 2 8 _2 _6 _10 _8
>>40 Squeak/Pharo Smalltalk | fn1 fn2 | fn1 := [:arr | (arr select: #odd), (arr select: #even)]. fn2 := [:arr | (arr sort: [:x | x odd asBit] descending) asArray]. fn1 value: #(-1 2 8 -9 -2 -3 -6 -10 -8 5 7 9 7). "=> #(-1 -9 -3 5 7 9 7 2 8 -2 -6 -10 -8) " fn2 value: #(-1 2 8 -9 -2 -3 -6 -10 -8 5 7 9 7). "=> #(-1 -9 -3 5 7 9 7 2 8 -2 -6 -10 -8) " >>40 # Rubyで。 def f040(a) a.select(&:odd?) + a.select(&:even?) end >>40 Perl @s = (-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7); push @{$a[$_ & 1]}, $_ for @s; ($e, $o) = @a; print "@$o @$e\n"; $ perl 11_40.pl -1 -9 -3 5 7 9 7 2 8 -2 -6 -10 -8 [[[ ][ ]]]\[[]] [[[]]]],[[[ [][] ]
>>36 って S = {(2m + 1)π / √((2nπ)^2 + 1)|(m, n)∈N^2}だから最小値存在しなくね? 複素数の複素数乗って多価関数だよね? >>61 e は実数で S = {(2n-1)π} じゃないの。 数学は良く知らんけど。 [[[{[{{]] を見て反省してJの良さが伝わりやすいように>>54 をわかりやすく書き直してみた 定義 data =: _1 2 8 _9 _2 _3 _6 _10 _8 5 7 9 7 modulo =: |~ ascending_sort_by = \: 実行 data ascending_sort_by 2 modulo data 結果 _1 _9 _3 5 7 9 7 2 8 _2 _6 _10 _8 これを分かりにくくして行くと>>94 になる 2項演算子 f と単項演算子 g から単行演算子 (f g)、 (f g) x の値は x f (g x) を作れる仕組み 2項演算子 f の左側引数をxに固定した単項演算子 x&f、(x&f) y の値は x f y を作れる仕組み これらを使って「2での剰余をキーとしてソートする 単行演算子」を作って data に適用する形に書き直すと (ascending_sort_by (2&modulo)) data これを直に書いて不要な空白や括弧を取ると>>94 の (\:2&|) data ↑ \ になってる文字は本来バックスラッシュ Jはスマフォアプリがあるので暇で困っている人にはパズル的に遊ぶのにお勧め
>>62 z := x + y*i (x, y∈R) e^z = -1 ⇔ exp((x + y*i)(p.v.Log|e| + i*arg(e))) = -1 ⇔ exp(x - 2nπy)*exp((2nπx + y)i) = -1 ⇔ x = 2nπy and 2nπx + y = (2m + 1)π ⇔ x = 2nπy and y = (2m + 1)π/((2nπ)^2 + 1) ⇔ z = (2m + 1)π/(2nπ - i) ⇒ |z| = |2m + 1|π/sqrt(4n^2π^2 + 1) (m, n∈N) だからS = {(2n-1)π}はありえないよ >>62 >>>61 >modulo =: |~ ~ はタイプミス(不要)でしたごめんなさい寝ます >>40 javascript var ary = [-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7]; // 条件判定が二倍走るのが気に食わない var ans = [...ary.filter(n => n % 2), ...ary.filter(n => !(n % 2))]; console.log(ans); // のでこうした。長い…読むとき引っ掛かりそう var ans = ary.reduce((acc, n) => n % 2 ? {odd: [...acc.odd, n], even: acc.even} : {odd: acc.odd, even: [...acc.even, n]}, {odd: [], even: []}); console.log([...ans.odd, ...ans.even]); // 結局俺にはこれが分かりやすくていいや var odd = [], even = []; ary.forEach(n => {n % 2 ? odd.push(n) : even.push(n);}); console.log([...odd, ...even]); >>40 ruby p [-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7].partition(&:odd?).flatten [[[ []]]]*[[ [][] ][] } } {} [[[
お題: 文字列をソートしなさい。ただし、英字のみをソートし他はそのままにすること。 例: "213cba213cba213cba" -> "213aaa213bbb213ccc"
>>77 Riby "213cba213cba213cba".yield_self{|v|r=/[a-zA-Z]/;s=v.scan(r).sort;v.gsub(r){s.shift}} #=> "213aaa213bbb213ccc" お題 二次元平面上の4点が与えられる。この4点で凸四角形を構成できるか判定せよ。 ※4点の順番は、時計回りや反時計回りとは限らない。 (0, 0), (1, 0), (1, 1), (0, 1) => true (0, 0), (1, 1), (1, 0), (0, 1) => true (0, 0), (2, 0), (1, 1), (0, 2) => false (0, 0), (1, 1), (2, 2), (3, 3) => false (0, 0), (0, 0), (0, 0), (0, 0) => false
そんな空気読めないから学生に不人気なんだよ数学板帰れ
>>77 Squeak/Pharo Smalltalk | fn | fn := [:str | | letters | letters := OrderedCollection new. ((str asArray gather: [:chr | chr isLetter ifTrue: [letters add: chr. '{', letters size asString, '}'] ifFalse: [chr asString]] ) as: String) format: letters sort ]. fn value: '213cba213cba213cba' "=> '213aaa213bbb213ccc' " >>77 Perl5 @s = split '', '213cba213cba213cba'; @i = 0..$#s; @k = grep{$s[$_] =~ /[a-z]/} 0..$#s; @l = sort @s[@k]; $s[$k[$_]] = $l[$_] for 0..$#k; use feature 'say'; say @s; $ perl 11_77.pl 213aaa213bbb213ccc >>83 @i = 0..$#s; この行、要らなかった、消し忘れた…orz >>77 C++ #include <iostream> #include <string> #include <algorithm> #include <boost/iterator/filter_iterator.hpp> template <typename FwdIt> void selection_sort(FwdIt first, FwdIt last) { for (auto it = first; it != last; ++it) std::iter_swap(it, min_element(it, last)); } int main() { std::string s; std::cin >> s; selection_sort(boost::make_filter_iterator(&::isalpha, s.begin(), s.end()), boost::make_filter_iterator(&::isalpha, s.end(), s.end())); std::cout << s << std::endl; } >>77 Haskell アルゴリズム自体は単純だけどコードが泥臭い もっと綺麗に書けそう import Data.Char import Data.List solve [] ys = ([],reverse $ sort ys) solve (x:xs) ys = if isAlpha x then let (vs,w:ws) = solve xs (x:ys) in (w:vs,ws) else let (vs,ws) = solve xs ys in (x:vs,ws) main = putStrLn $ fst $ solve "213cba213cba213cba" [] それは概念的な方?それとも実際に仕事に影響する方? 後者ならプレミアムフライデー列挙は0文字でできるが
あれ?strdup() で警告出てるな。strdup() って標準ではないか。 まあでもCコンパイラのアバウトな処理によって動くバイナリは作られたようだがw やりたいことは分かると思うのでそのままにしておく。
>>77 Squeak/Pharo Smalltalk | fn | fn := [:str | | letters | letters := (str select: #isLetter) sort readStream. str collect: [:chr | chr isLetter ifTrue: [letters next] ifFalse: [chr]] ]. fn value: '213cba213cba213cba' "=> '213aaa213bbb213ccc' " >>87 Squeak/Pharo Smalltalk | preKinsOf | preKinsOf := [:year | (year asInteger asYear months collect: [:month | (month dates select: [:date | date weekday == #Friday]) last] ) reject: [:date | date mmddyyyy beginsWith: '4/29'] ]. preKinsOf value: 2022 "=> {28 January 2022 . 25 February 2022 . 25 March 2022 . 27 May 2022 . 24 June 2022 . 29 July 2022 . 26 August 2022 . 30 September 2022 . 28 October 2022 . 25 November 2022 . 30 December 2022} " >>77 >>86 のアロー版 import Control.Arrow import Data.Char import Data.List solve ([],_) = ([],[]) solve ((x:xs),~yss@(y:ys)) = if isAlpha x then first (y:) $ second (x:) $ solve (xs,ys) else first (x:) $ solve (xs,yss) main = putStrLn $ loop (second sort . solve) "213cba213cba213cba" [[[ [ "[]" ]]] [] [][[[ [] ]][]
>>77 Emacs Lisp (defun f (a) (flet ((alphaumericp (c) (string-match "[A-Za-z]" (string c)))) (let* ((b (concatenate 'list a)) (c (sort (remove-if-not #'alphaumericp b) #'<))) (concat (mapcar (lambda (d) (if (funcall #'alphaumericp d) (pop c) d)) b))))) f (f "213cba213cba213cba") "213aaa213bbb213ccc" >>98 書き込んでから気がついたけど、お題の5個の入力では問題を起こさないが 差ベクトルが短すぎる場合や外積の面積が細過ぎる場合の打ち切りは、 nextで一階層ブロック脱出ではなく更にもう一階層外側のloopに脱出すべきか…orz ま、いいか、テヘペロ >>64 e^(πi) = e^(3πi) = e^(5πi) = ... = -1 じゃないの? >>100 e^z = -1 に対して z = (2m + 1)i は十分条件でしかないよ 必要十分条件は z = (2m + 1)π/(2nπ - i) なの で今 e^z = -1 を満たす「すべての」zって言われてるから十分条件じゃ意味なのは分かる? そもそも十分条件って言葉は知ってるかな? exp(x) と e^(x) が違うことはわかってる? お題 大人数で一斉にじゃんけんを行った 各人の手のリストが与えられるのでその中で勝者が何人いるか答えよ (g=グー,c=チョキ,p=パー) gccgc -> 2 ggggggg -> 0 cppcppppccpppppc -> 5 cppcppppccpgpppc -> 0
>>103 exp(z) := Σ{n∈N}z^n/n! pv log(z) := log(z)の主値 arg(z) := 複素数zの偏角 リンクの wolfram-alpha はそりゃ値が一致しないよ。前提が違うんだから >>101 >>105 >>101 z = (2m + 1)π/(2nπ - i) これを愚直に展開すると z = (2m + 1)・2nπ/(4n^2・π^2 + 1) + j(2m + 1)(4n^2π^2 + 1))…① 一方 複素指数関数を e^z = Σz^n/n! と定義して z = x + yj(x, y ∈ R) のとき、 |e^z| = |e^x|、かつ |e^yj| = 1 ここで e^z = -1 だから |e^z| = |e^x| = 1, x ∈ R x = 0 にしかならないけれども、①のzの実部はm, n によっていろいろ変わるのはおかしいね >>106 いやだから e^z(2.718281828...のz乗) と exp(z) は別物だって言ってんじゃん わざと嫌がらせしてる? >>102 Emacs Lisp (defun f (g) (let* ((c (concatenate 'list g)) (p (remove-duplicates c))) (if (= (length p) 2) (count (cdr (assoc (apply #'+ p) '((202 . ?g) (211 . ?c) (215 . ?p)))) c) 0))) (f "gccgc") 2 (f "ggggggg") 0 (f "cppcppppccpppppc") 5 (f "cppcppppccpgpppc") 0 >>107 え? z = x + yj exp(z) = Σz^n/n! と定義するのと exp(x + jy) = e^x・(cos(y) + j・sin(y)); x, y ∈R と定義するのとは同値でしょう? 後者を採用して、|exp(x + jy)| = |e^x| e^z = -1 より |e^x| = 1, x ∈ R だったら、やっぱり x = 0 しか取り得ないと思いますが… >>109 同じことを何度言えば理解してもらえるんですかね x = 2.71828...とすると x^z = exp(z log(x)) = exp(z(pv log|x| + i*arg(x)) = exp(z + 2nπzi) exp(z + 2nπzi)とexp(z)が一般に同値な訳ないでしょ 何度も言うけどわかりました? (2.718...)^z と Σ{n∈N}(z^n/n!)は全く別の値なんです ついでになんか勘違いしてるみたいだから指摘しておきますけど xが実数であっても exp(x) != (2.7...)^x じゃありませんからね(e.g. x=0.5などとすれば直ちに自明でしょう) 高校数学の感覚ではこれらは同じ値なのでしょうけど複素解析の文脈では指数関数は一般に多値関数ですからね
誤字 xが実数であっても exp(x) = (2.7...)^x じゃありません
>>112 z = x + yj,∈C, x, y ∈R において、 複素指数関数 exp(z) を exp(z) = Σz^n/n! と定義する…① exp(x + jy) = e^x・(cos(y) + j・sin(y)); x, y ∈R と定義する…② ①⇔②であることを前提とすれば、 x ∈R において exp(x) = e^x(cos0 + j・sin0)(∵②) = e^x(1 + j・0) = e^x で xが実数なら exp(x) = (2.7...)^x ですね でも >>110 の欠点がみえない exp(z) = exp(z + 2nπj)(複素指数関数の周期性) なのは理解しているつもりなんですが >>113 再三再四申し上げますが一般に exp(z) と ネイピア数のz乗は別物です あと何百回言えばこれを理解してもらえるんですかね 従って②の定義は「exp(x + jy) = exp(x)・(cos(y) + j・sin(y))」としなければならないし 偽な命題を前提とすればそりゃどんな結論だって導けるってものです というのも P ⊃ Q は P が偽の時常に真ですから プログラミングやってると数学学びたい欲求が出てくる
同値の意味も知らないような数学の素人がなにか言い合いしてますねえ
お題 o,d,a,iからなる文字列Sが与えられる。 Sからいくつかの文字を取り除くことで"odai"をN回繰り返した文字列が得られたとする。 Nの最大値を求めよ。 odaiodai -> 2 ooddaai -> 1 idao -> 0 ododoadioadioadioadioadioadiodaioadodioadiaodi -> ?
>>102 Perl5 use feature 'say'; for (<DATA>) { chomp; my ($i, %h); $h{$_}++ for split''; %gcp = (g=>c, c=>p, p=>g); delete @gcp{keys %h}; @r = keys %gcp; $k = $gcp{$r[0]}; say "$_ -> ", (1 == @r) ? $h{$k} : 0; } __DATA__ gccgc ggggggg cppcppppccpppppc cppcppppccpgpppc 実行結果 $ perl 11_102.pl gccgc -> 2 ggggggg -> 0 cppcppppccpppppc -> 5 cppcppppccpgpppc -> 0 >>77 javascript var{nums,wrds}=(str=>eval(`((nums,...wrds)=>({nums,wrds}))\`${str.replace(/[a-zA-Z]+/g,'\${"$&"}')}\``))('213cba213cba213cba') console.log(String.raw(nums,...(wSrt=>wrds.map(w=>wSrt.splice(0,w.length).join``))([...wrds.join``].sort()))) >>117 Perl5 use feature 'say'; for (<DATA>) { chomp; @k = qw{o d a i}; $j = 0; for ($n = 0; $n < length($_)>>2 ; $n++) { for $c (qw{o d a i}) { $i = index $_, $c, $j; goto L1 if $i < 0; $j = $i + 1; } } L1:; say "$_ -> ", $n; } __DATA__ odaiodai ooddaai idao ododoadioadioadioadioadioadiodaioadodioadiaodi 実行結果 $ perl 11_117.pl odaiodai -> 2 ooddaai -> 1 idao -> 0 ododoadioadioadioadioadioadiodaioadodioadiaodi -> 5 >>114 >一般に exp(z) と ネイピア数のz乗は別物です それは心得ているつもりです。 以下、結構雑に書きますが、 exp(z)=Σz^n/n!…① と定義する。 このときも①が収束すること、および exp(z1 + z2) = exp(z1)exp(z2), z1, z2 ∈C…② が成立することを暗黙の了解とする z∈C, z = x + jy, x, y ∈R のとき exp(z) = exp(x)exp(jy) …③(∵②) exp(x) = Σx^n/n! = e^x exp(jy) = 1 + (yj)/1! - y^2/2! - j・y^3/3! + y^4/4! + j・y^5/5! + … =(1 - y^2/2! + y^4/4! - …) + j ・ (y/1! - y^3/3! + y^5/5! - …) =cos(y) + j・sin(y) すなわち exp(z) = e^x・(cos(y) + j・sin(y))…④ 以上の議論は手元の教科書の引き写しです。 >>121 続き >従って②の定義は「exp(x + jy) = exp(x)・(cos(y) + j・sin(y))」としなければならないし 以上より exp(x + jy) = e^x・(cos(y) + j・sin(y)) …④で問題ありません。 だから、x ∈ R とすれば exp(x) = e^x(cos0 + j・sin0) = e^x になります つまり >>114 をより正確にいえば 「exp(x) は e^x の自然な拡張」となり、>>112 は誤りとなります また exp(z) の絶対値を考えると .(exp(x + jy)) = √((e^x・cos(y))^2 + (e^x・sin(y))^2) = e^x・√(cos^2(y) + sin^2(y)) = e^x すなわち |exp(z)| = |e^x| すなわち複素指数関数の絶対値は引数の実部によって決まり、引数の虚部の影響を受けません 以上の議論は https://ja.wikipedia.org/wiki/%E8%A4%87%E7%B4%A0%E6%8C%87%E6%95%B0%E5%87%BD%E6%95%B0 に書いてありました >>122 続き 今 exp(z) = -1, z ∈C >>122 ④より exp(x + yj) = -1, x, y ∈R e^x(cos(y) + j・sin(y)) = -1 e^x・cos(y) + j・e^x・sin(y) = -1…⑤ よって⑤の両辺の虚部が 0 だから e^x・sin(y) = 0 e^x > 0 より sin(y) = 0 y = nπ…⑤(必要条件) このとき cos(y) = ±1 このとき⑤の両辺の実部を比較して e^x(±1) = -1 e^x > 0 だから cos(y) = -1 となるのは⑤の中でも y = (2n + 1)π, n ∈Zのときのみ また y = (2n + 1)π のとき、e^x = 1, x = 0 >>109 exp(z) の絶対値は z の実部にのみ影響されます exp(z) = -1 から |exp(z)| = 1 |exp(z)| = e^x ですから e^x = 1 これを満たすのは x = 0 のみ、という推論はどうでしょうか? >>121-123 >exp(x) = Σx^n/n! = e^x なんでexp(x)とe^xを比較する議論の前提で、この2つが正しいことを利用してるの? 循環論法です。破綻しています >exp(jy) = 1 + (yj)/1! - y^2/2! - j・y^3/3! + y^4/4! + j・y^5/5! + … >=(1 - y^2/2! + y^4/4! - …) + j ・ (y/1! - y^3/3! + y^5/5! - …) exp(x)が収束することしか仮定されていないためこの変形は成り立ちません きちんと絶対収束(absolute convergence)することを示すか仮定しましょう。破綻しています よって以後の議論は全て誤りですので参考になりません 殊に循環論法による誤謬は致命的ですね あなたはまず複素解析の文脈で任意の実数xに対して exp(x) = (2.7...)^x となる事を証明しなければなりません 尤も、expは単射なのに対してa^zは多価関数なのでこれらが等しくないことは計算するまでもなく自明なんですが、 なんでここにこんなにつっかかってくるんですかね…… >>102 javascript var f = s => { var d = [...new Set(s)] return d.length == 2 ? ((a,b) => ({g:'c',c:'p',p:'g'})[a] == b)(d[0],d[1]) ? s.match(new RegExp(d[0],'g')).length : s.match(new RegExp(d[1],'g')).length : 0; } console.log(f('gccgc')) //=> 2 console.log(f('ggggggg')) //=> 0 console.log(f('cppcppppccpppppc')) //=> 5 console.log(f('cppcppppccpgpppc')) //=> 0 >>124 >>121 >>exp(x) = Σx^n/n! = e^x >なんでexp(x)とe^xを比較する議論の前提で、この2つが正しいことを利用してるの? >循環論法です。破綻しています いいえ循環論法ではありません 仮定は exp(z) = Σz^n/n! が z ∈ C で収束すること…① exp(z1 + z2) = exp(z1)exp(z2), z1, ze ∈C …② のみです z = x + jy と置いたとき exp(z1 + z2) = exp(z1)exp(z2), z1, z2 ∈C…② が成り立つ前提で z1 = x, z2 = yj とおいて exp(x + yj) = exp(x)exp(yj) と変形します もともと exp(z) = Σz^n/n! と置いたのですから x ∈R のとき、exp(x) = Σz^n/n! Σx^n/n! = e^x の収束は別途長い議論を経ないといけませんが、ここでは既知としています 最終的には >>121 は exp(x + jy) = e^x(cos(y) + j・sin(y)) を導きだすのが目的です >>125 ((a,b) => ({g:'c',c:'p',p:'g'})[a] == b)(d[0],d[1]) は単純に ({g:'c',c:'p',p:'g'})[d[0]] == d[1] でよかった。 最初関数として作ってあったもので単純化し忘れ。 >>77 Perl5 >>83 を書き込んだけど気に入らなかったので少し修正した。 @s = split '','213cba213cba213cba'; @k = grep{$s[$_] =~ /[a-z]/} 0..$#s; @s[@k] = sort @s[@k]; print @s,"\n"; 実行結果 $ perl 11_77_2.pl 213aaa213bbb213ccc >>126 >exp(x) = Σx^n/n! = e^x において e^x = Σx^n/n! と勝手にしているのが結果を先取り(しかも誤謬)していて宜しくないと言っているのです 「複素解析の文脈」では w^z = exp(z*(p.v. log|w| + i*arg(w))) なのです これは定義です。これが気に食わなくて、どうしても exp(x) = e^x を言いたいのであれば より妥当性がありwell-definedな w^z の定義を提示してください 繰り返します。あなたは「e^z = exp(z)が成立するように、任意の複素数w, zに対して w^z を定義する」必要があります >Σx^n/n! = e^x の収束は別途長い議論を経ないといけませんが、ここでは既知としています Σx^n/n!が収束するだけでは弱くて、 「絶対収束」(絶対に収束するという意味ではありません)を仮定する必要があると言っているんですけど まあ枝葉末節なので不問とします >>124 >exp(x)が収束することしか仮定されていないためこの変形は成り立ちません >きちんと絶対収束(absolute convergence)することを示すか仮定しましょう。 厳しいですね…手元の教科書(高木・解析概論、ただ結構いい加減な本だそうですが)の引き写しなんですが… 虚数単位を j と置いていることからもわかるように、工科系の出自で、厳密な話は苦手です >なんでここにこんなにつっかかってくるんですかね…… そのようなつもりはなく、純粋に数学的関心から書いているものです >>123-121 >>113 >>109 >>106 >>103 を見返しても問題はないと思いますが >あなたはまず複素解析の文脈で任意の実数xに対して exp(x) = (2.7...)^x となる事を証明しなければなりません >尤も、expは単射なのに対してa^zは多価関数なのでこれらが等しくないことは計算するまでもなく自明なんですが、 exp(z) = exp(z + 2nπj) なので exp(z) は周期関数であることはわかるのですが、 これ以上のことはちょっとわかりません、今日はここまででお休みします お付き合いくださりありがとうございました スレタイも読めない数学荒らしが一族郎党苦しんで死にますように。
そこまでのろわなくてもよい希ガスるけど、、 数学的お題でもいいけど、明快なお題を出すか、回答を書き込むかを重視し 解釈のかみ合わない議論は程々にした方が医院ジャマイカ
>>117 Emacs Lisp (defun f (S) (let ((s 0) (N 0)) (ignore-errors (loop (mapcar (lambda (c) (setq s (1+ (position c S :start s)))) "odai") (incf N))) N)) (f "odaiodai") 2 (f "ooddaai") 1 (f "idao") 0 (f "ododoadioadioadioadioadioadiodaioadodioadiaodi") 5 >>131 純粋に数学的関心ならもうプログラミング関係ないんだから、適切な板、スレを探してそっちで好きなだけやってこい 141 デフォルトの名無しさん 2018/05/01(火) 09:28:24.04
数学やってる奴は頭悪いってことは分かった
数学は別にいいんだが難しすぎるのはちょっとな 簡単なお題なら個人的に歓迎
>>117 Squeak/Pharo Smalltalk | fn | fn := [:str | | strm odai count | strm := str readStream. odai := 'odai' readStream. count := 0. [strm atEnd] whileFalse: [ ((strm skipTo: odai next) and: [odai atEnd]) ifTrue: [odai reset. count := count + 1] ]. count ]. fn value: 'odaiodai'. "=> 2 " fn value: 'ooddaai'. "=> 1 " fn value: 'idao'. "=> 0 " fn value: 'ododoadioadioadioadioadioadiodaioadodioadiaodi'. "=> 5 " >>102 Squeak/Pharo Smalltalk | numOfWinnersOf | numOfWinnersOf := [:jkStr | | arr set | arr := jkStr asArray collect: [:chr | 'gcp' indexOf: chr]. (set := arr asSet) size = 2 ifFalse: [0] ifTrue: [ | one other | one := set anyOne. other := set remove: one; anyOne. arr occurrencesOf: (one - other \\ 3 = 2 ifTrue: [one] ifFalse: [other]) ] ]. numOfWinnersOf value: 'gccgc'. "=> 2 " numOfWinnersOf value: 'ggggggg'. "=> 0 " numOfWinnersOf value: 'cppcppppccpppppc'. "=> 5 " numOfWinnersOf value: 'cppcppppccpgpppc'. "=> 0 " >>80 Squeak/Pharo Smalltalk | fn | fn := [:ps | ps asSet size = 4 and: [ ps noneSatisfy: [:p1 | [:p2 :p3 :p4 | (p3 - p2 crossProduct: p4 - p2) = 0 or: [p1 insideTriangle: p2 with: p3 with: p4] ] valueWithArguments: (ps copyWithout: p1) ] ] ]. fn value: {0@0. 1@0. 1@1. 0@1}. "=> true " fn value: {0@0. 1@1. 1@0. 0@1}. "=> true " fn value: {0@0. 2@0. 1@1. 0@2}. "=> false " fn value: {0@0. 1@1. 2@2. 3@3}. "=> false " fn value: {0@0. 0@0. 0@0. 0@0}. "=> false " >>117 お題のサンプル程度なら正規表現で十分かと PowerShell PS C:\> ([regex]'o.*?d.*?a.*?i.*?').Matches('odaiodai').Count >> 2 PS C:\> ([regex]'o.*?d.*?a.*?i.*?').Matches('ooddaaii').Count >> 1 PS C:\> ([regex]'o.*?d.*?a.*?i.*?').Matches('idao').Count >> 0 PS C:\> ([regex]'o.*?d.*?a.*?i.*?').Matches('ododoadioadioadioadioadioadiodaioadodioadiaodi ').Count >> 5 文字をATCGにして長さ1億くらいにすればプログラミングっぽくなるんじゃねえの
お題 大きさW×Hでポケットのないビリヤード台を想像してください。 左下の座標を(0,0)、右上の座標を(W,H)とします。 位置(0,0)から右上に向かって毎秒(a,b)の速度でボールを射出したとき、 ボールが位置(0,0)に戻ってくるのは何秒後でしょうか? ボールの大きさや摩擦などは無視します。 [input] W H a b (すべて正の整数) [example] 2 4 1 1 -> 8 3 4 2 1 -> 24 4 5 2 4 -> 20 1 2 10 5 -> 0.8
公式があるね。 周期=2WH/gcd(aH,bW) (gcdは最大公約数)
>>150 Perl5 use feature 'say'; for (<DATA>) { chomp; ($W, $H, $a, $b) = split; ($x, $y, $t) = 0x3; ($w, $h) = ($W, $H); do { ($w, $h) = (2*$w, 2*$h); ($tx, $ty) = ($w/$a, $h/$b); $t = ($tx < $ty) ? $tx : $ty; ($x, $y) = ($a*$t, $b*$t); } while ($x % (2*$W) != 0 or $y % (2*$H) != 0); say "$_ -> $t"; } __DATA__ 2 4 1 1 3 4 2 1 4 5 2 4 1 2 10 5 実行結果 $ perl 11_150.pl 2 4 1 1 -> 8 3 4 2 1 -> 24 4 5 2 4 -> 20 1 2 10 5 -> 0.8 >>151 やっぱ公約数に帰結するんだ、 >>152 書いてて繰り返し不要な解法がありそうだという気がしてきた まいいや自分で考えることも面白いから >>150 Squeak/Pharo Smalltalk | fn | fn := [:W :H :a :b | | time | time := 2 * W * H / (b * W gcd: a * H). time isInteger ifTrue: [time] ifFalse: [time asFloat] ]. fn valueWithArguments: #(2 4 1 1). "=> 8 " fn valueWithArguments: #(3 4 2 1). "=> 24 " fn valueWithArguments: #(4 5 2 4). "=> 20 " fn valueWithArguments: #(1 2 10 5). "=> 0.8 " >>117 javascript var f = s => {console.log((s.match(/o.*?d.*?a.*?i.*?/g)||[]).length)} f('odaiodai') //=> 2 f('ooddaai') //=> 1 f('idao') //=> 0 f('ododoadioadioadioadioadioadiodaioadodioadiaodi') //=> 5 >>147 と同じ お題 大きさが(X, Y, Z)のナップサックに大きさが(x_i, y_i, z_i)で価値がv_iの荷物を価値の総和が最大になるように詰めたい X Y Z N x_1 y_1 z_1 v_1 ︙ x_N y_N z_N v_N と荷物及びナップサックが与えられた時、最大の価値を求めよ 可能ならどれを詰めたかも求めよ なお荷物は回転させて詰めても良いものとする
お題 政令指定都市名を受け取り, 隣接する区を異なる色になるように塗り分けるのに必要な最少の色数を返す. f(Sagamihara) => 2 f(Yokohama) => 4
161 デフォルトの名無しさん 2018/05/01(火) 22:43:51.19
>>157 は、巡回セールスマン問題に並んで有名なナップサック問題である。 なお、この手の問題をNP完全問題だとかNP困難問題だとか呼ぶのは 「ナップサック」(NaPpsuck)に由来する。 自分が理解できないからって数学荒らし呼ばわりは惨めすぎるね
>>164 じゃロシア語で埋めてくな。 文句ないんだろ。 Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 11 апреля 2015; проверки требуют 20 правок. Бу́ря (шторм) — собирательное понятие, обозначающее очень сильный ветер (а также сильное волнение на море), возникающий по различным причинам и в разных областях Земли. Скорость приземного ветра (на стандартной высоте измерений 6—12 м над земной поверхностью) при буре составляет, по разным источникам, 15—20 м/с и более (21-25 м/с или 75-88 км/ч). Бури бывают снежные, песчаные и водные. Скорость ветра при буре гораздо меньше, чем при урагане, однако буря чаще всего сопровождается переносом песка, пыли или снега, что приводит к ущербу сельскому хозяйству, путям сообщения и другим отраслям экономики.
Буря может наблюдаться: при прохождении тропического или внетропического циклона; при прохождении смерча (тромба, торнадо); при шквале — кратковременном усилении ветра, связанном с местной или фронтальной грозой. К бурям по шкале Бофорта относятся ветры скоростью более 20 м/с (9 баллов), а к ураганам — ветры со скоростью более 32,6 м/с (12 баллов). Кроме того, по этой шкале различают: сильную бурю со скоростью 24,5-28,4 м/с (10 баллов); жестокую бурю со скоростью 28,5-32,6 м/с (11 баллов).
Термин «ураган» имеет также более узкое значение — тропический циклон. По месту образования тропические циклоны делят на: Субтропический шторм Тропический шторм Ураган (Атлантический океан) Тайфун (Тихий океан) Если скорость ветра в тропическом циклоне превышает 60 км/ч, ему присваивается собственное имя.
По мнению американских учёных, для областей, расположенных в северных широтах, снежной бурей можно считать зимний сильный ветер, во время которого скорость ветра достигает и превышает 15 м/с (56 км/ч). При этом температура воздуха опускается до −7 °C и ниже. Территория распространения снежной бури может быть сколь угодно обширной.
数学は少なくとも話してる本人は内容を理解している 一方お前のクソみたいなロシア語はお前はその内容を理解していない 一つ聞くが、お前がコピペした文章の中には原意が支配するという意味のロシア語の単語が出てくるが、 その単語の性数態をお前は適切にこたえられるか? 答えられないだろうな。奇を衒って知りもしない外国語の文章をコピペしただけなんだから
>>157 これは普通のナップザック問題と違って、荷物を積む積まないの選択肢のみならず それに加えナップザック中に残されているスペースの形状・大きさ、 荷物を積むならば配置する向きと位置 そういったすべての条件の組み合わせに配慮して、最終価値最大の解を探索せねばならず、 単に荷物の重さと価値のみに着目して動的計画法で価値最大化プログラムをちょいちょいと書く ような課題とは全然違った難しさがあるな… なるほど。じゃ落語で埋めてくわ。 本人が理解してりゃスレ違いでもいいらしいからな。
>>173 数学が理解できなくてそんなに悔しかった?? 自分がロシア語も理解できないのにコピペしたのがバレてそんなに悔しかった?? 本当に惨めだね。あ、僕は落語なら浜野矩随が好きだからよろしくね、ど低能くん^^ こんな話がございます。 両国の回向院に猫塚トいうものがございます。 猫が死にますト、飼い主が回向料とともに、猫の亡骸を持ち込みまして。 寺の僧侶がお経を読んで、猫を葬ってくれるという。 これは、この塚に最初に入ったという猫の話でございます。 八丁堀の玉子屋新道に、魚屋を営む定吉ト申す者がございました。 もっとも、魚屋とは名ばかりで、その実は博奕打ちでございます。 毎日を遊んで暮らしている。
この日も、朝湯の帰りに馴染みの三河屋という居酒屋に立ち寄りまして。 風呂あがりの一杯とばかりに、呑気に引っ掛けておりますト。 ポカッ、ポカッと、頭の上から妙な音が聞こえてくる。 博奕打ちというのは、我々とはものの考え方が異なっているようで。 ――板に何かを叩きつける音がする。 なるほど、やってやがるな――
ト、てっきり丁半博打の壺を伏せる音と勘違いいたしまして。 「おい、六さん」 店の者を呼びつけます。 「なんだい、水臭えじゃねえか。やってるならやってるで、教えてくれてもいいだろうに。俺も仲間に入れてくれ。取り次いでくんなよ」 「博奕ですか。滅相もない。うちではそういったことはさせません。二階は物置ですよ」
それでも、確かに音がするのは妙でございます。 店の者が二階へ上がっていって、やがて下りてまいりました。 「分かりました。あれは猫です」 こういった店は、商売柄、どうしても猫が寄ってくる。 今朝も早くに仕入れておいたイナダを、勝手に食ってしまったそうで。 あんまり腹が立つから、焼け火箸で目玉を刺してやろうかとも思ったが。 店の主人が、せめて橋の上から放り投げる程度にしてやれと言ったという。
「それで柱にふん縛っておいたんですがね。今、見に行ったら、なんとか逃げ出そうとして、立ち上がっては倒れてやがる。あれはその音ですよ」 定吉は柄にもなく、猫がちょっと不憫に思えまして。 死なせるくらいなら、自分が引き取って育てるからト。 金を渡して猫を貰い受けました。 差し毛の一本も見当たらない、正真正銘の黒猫です。 定吉は懐に入れるト、店を出て家に帰った。
家では女房のお滝が待っています。 定吉が懐から黒猫を取り出しますト、途端に渋い顔を浮かべまして。 「やだよ、そんなものを持って帰って。私は猫は嫌いなんだよ」 ト、そっぽを向いて風呂に行ってしまう。 定吉は、自分が命を救ってやった猫ですから。 恩を着せるわけではないが、やはり可愛い。 一人残った家の中で、猫を抱き上げて話しかける。
「そういや、名前を聞いてこなかったな。大抵の猫ならタマとかミケとか付けるんだが、お前はそんなガラじゃねえ。全身真っ黒で、熊みてえだもんな。そうだ。クマってのはどうだ」 するト、猫がにゃーごト鳴く。 「にゃーごだと。ヘヘ。鳴かなくていいから、恩返しのひとつでもしてみろよ。俺をちょっとは儲けさせてくれたら、拾った甲斐もあるってもんだ」 ト、猫に博奕の講釈をいたします。
「一つでやるのをチョボイチ、 二つ使うのを丁半、三つ使うのをきつねと言う。俺がやってるのは丁半だ。グニの半、二ゾロの丁ってな」 定吉は賽を湯のみに入れて、畳の上に伏せますト。 「どうだ。表から見たらどの目か分からないだろう。だから、銭を賭けて当てるんだ。猫は魔物というから、お前なら当てられるだろう。おい、なんとか言ってみろよ」 猫は相変わらず、にゃーごト鳴く。
「俺は、丁が出ると思うな。お前は何だ。にゃーごか。よし、俺が丁で、お前がにゃーご。勝負ッ」 ト、戯れながら湯呑みを開けますト、一二の半。 「おかしいな、半か。するってえと、お前のにゃーごは半か。ヘヘ、にゃご半か。それじゃあ今度は俺が半だ」 すると、今度は猫がにゃご、にゃごト、二回鳴く。
「なんだい、妙な鳴き方をしやがる。今度はにゃごにゃごの丁ってか」 ト、笑いながら湯呑みを開けるト、二ゾロの丁。 それから何度繰り返してみましても、猫がにゃーごと鳴くと半。 にゃごにゃごト、二回鳴くと丁が出ます。 「お前、本当に恩返ししてくれるつもりだな。こいつはいい」
それから定吉は、賭場へ行くたびにこの猫を懐に忍ばせていく。 にゃーごの半、にゃごにゃごの丁で、どんどん金が儲かりまして。 羽振りがよくなるト、兄い、親分と立てられるようになる。 猫を始終連れて歩くので、そのうちに猫定と呼ばれるようになった。
博徒の世界では、あだ名がついたら一人前ト申すそうでございますが。 一人前になるト、自然、悪評も目立つようになる。 そのうちに江戸にいられなくなり、ふた月ばかり旅に出ることにいたしまして。 定吉は、猫を女房に預けて家を出た。 これが惨劇の幕開けでございます。 ――チョット、一息つきまして。
数学厨よりひどいあらしだな スレが機能しなくなっちゃった
どこまでお話しましたか。 そうそう、博奕打ちの定吉が、猫の鳴き声で賽の目を当て、兄い、親分ト立てられるようになるところまでで――。 亭主の定吉が家を空けますト。 女房のお滝は、子分の若い者を家に引き入れるようになりまして。 長屋の住人たちが眉をひそめるのも、まったく気にしておりません。
数学ができないやつは論理的思考もできないということを示す良い例だな 頼むからスレから未来永劫消えてくれ
いてもいいけど荒らすな お題を出し 解答プログラムを書くこと
自分が理解できれば何を書いてもいいというのは数学厨が示したルールだが。 文句を言われたらこう言って開き直ればいいそうだ。 「自分が理解できないからって荒らし呼ばわりは惨めすぎるね」
そのうちに、人の噂も七十五日トばかりに。 ほとぼりが覚めた頃を見計らって、定吉が江戸に帰ってくる。 帰ってくるト、猫を連れてまたぞろ博奕へ出掛けます。 その夜。 お滝は、間男の若い者を呼びつけ、相談をした。 定吉がいては、お互い落ち着いて逢瀬を楽しむこともままならない。 いっそ、ひと思いに殺してしまってほしい。
>>192 数学は少なくともスレのお題と関係があったがお前のクソみたいなコピペはスレと無関係のただの荒らしだろうが どっちもウザイのは同じだが、一緒くたにすんなハゲ! 若い者は、親分の家の姉御に見込まれたことで、男が上がったつもりになり。 箒を斜に切って油をかけ、ジリジリと火で炙る。 これは竹槍を作っているのでございます。 そうして、鯵切り包丁を手ぬぐいで包みますト。 腰に差して、長屋を飛び出していきました。 定吉は、馴染みの賭場へやってきておりましたが。 その晩はどうしたことか、猫が一向に鳴きません。
体の具合が悪いのだろうか。 まあ、今まで稼がせてもらったのだから。 ト、この時にはすでに情が移っておりますから。 猫の具合を優先して、素直に帰ることにいたしました。 賭場を出るト、ポツポツと雨が降り出してくる。 定吉は猫を懐に大事にしまって、新橋の喜多川といううなぎ屋に駆け込んだ。 一杯やりながら、猫に鰻の切れ端をやるのが、この頃の楽しみでございます。 ところが、いつもはよく食う猫が、これまた今日に限って口をつけようといたしません。
責任転嫁すんなハゲ お前のせいで直近のお題が迷子だっつーの もう二度とこないでください
>>200 お前さんがやってる煽りも、ロシア語はってるいじけた小学生みたいな奴と同じレベルだよ。数学ができたとしても精神レベルは同程度。お前さんにどんな言い分があろうとも、周囲からはそう見える。 重み付き3次元箱詰め問題みたいなもんをここのお題に出すバカ 各都市の区の具体的なグラフが必要な問題をそれぞれのグラフも与えずに出すバカ 自分で解いて楽しいかどうか考えろよ
お題が流れたみたいなのでリンクまとめ >>11 "073:0" -> 18 "07362:450" -> 36 "06464:36470" -> 42 "0827171:28480" -> 66 "0737491:28180" -> 146 "05374734372747484:184618186912120" -> ? >>40 [-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7] -> [-1, -9, -3, 5, 7, 9, 7, 2, 8, -2, -6, -10, -8] >>77 "213cba213cba213cba" -> "213aaa213bbb213ccc" >>102 gccgc -> 2 ggggggg -> 0 cppcppppccpppppc -> 5 cppcppppccpgpppc -> 0 >>117 odaiodai -> 2 ooddaai -> 1 idao -> 0 ododoadioadioadioadioadioadiodaioadodioadiaodi -> ? お題:Hello, World!を10回出力してください。ただし、偶数文字を小文字、奇数文字を大文字にすること。さらに3の倍数の文字をランダムな英字にすること。
>>206 Perl5 use feature 'say'; @s = split'','Hello, World!'; @Az = ('A'..'Z', 'a'..'z'); for $i (0..9) { do {$s[$_ - 1] = $Az[int(rand(@Az))] if $_ % 3 == 0} for 1..@s; my @t; push @t, $i % 2 ? lc $c : uc $c while ($i, $c) = each @s; say @t; } 実行結果 $ perl 11_206.pl HeHlOg wQrLz! HeOlOp wOrLo! HeAlOh wMrLf! HeZlOs wJrLz! HeElOh wBrLg! HeBlOa wIrLy! HeFlOw wCrLb! HeTlOc wSrLp! HeOlOm wNrLx! HeJlOt wSrLl! >>206 Squeak/Pharo Smalltalk Transcript open. 10 timesRepeat: [ | hello | hello := 'Hello, World!' collectWithIndex: [:chr :idx | ((idx isDivisibleBy: 3) ifTrue: [Character alphabet atRandom] ifFalse: [chr]) perform: (idx even ifTrue: [#asLowercase] ifFalse: [#asUppercase]) ]. Transcript cr; show: hello ] => HeYlOz wJrLp! HeNlOe wArLr! HeBlOn wWrLi! HeSlOx wOrLk! HeKlOy wRrLb! HeIlOs wJrLw! HeMlOd wGrLm! HeElOz wLrLf! HeJlOw wUrLr! HeTlOe wMrLy! 210 デフォルトの名無しさん 2018/05/02(水) 11:55:19.15
お題 N項目のレーダーチャートを考える。 各項目の点数が配列A[N]で与えられるので、 項目の並べ方を調整して、レーダーチャートの面積を最大化せよ。 ※レーダーチャートの形状は正N角形であり、A[i]は中心からの距離を意味する。 {4,3,2,1,0} => 10.9371 //{0,1,3,4,2} {10,0,0,10,10,0,10,10} => 141.421 //{0,0,0,10,10,10,10,10} {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16} => 280.698
>>206 Emacs Lisp (defun* f (a &aux (b 0)) (map 'string (lambda (c) (let ((d (if (= (% (incf b) 3) 0) (+ ?a (random 26)) c))) (if (oddp b) (upcase d) (downcase d)))) a)) (mapc (lambda (x) (princ (funcall #'f x)) (terpri)) (make-list 10 "Hello, World!")) HeElOf wBrLb! HeAlOj wYrLk! HeZlOz wQrLd! HeBlOh wIrLm! HeMlOy wIrLb! HeZlOo wTrLk! HeRlOq wErLv! HeFlOn wKrLq! HeAlOg wQrLv! HeFlOa wRrLi! >>211 Emacs Lisp (defun* f (a &aux b c) (loop for i from 0 below (length a) do (if (< i 3) (setq b (append b (list (nth i a)))) (dotimes (n (length b)) (push (cons (+ (abs (- (nth n b) (nth i a))) (abs (- (nth (% (1+ n) (length b)) b) (nth i a)))) n) c)) (let ((d (1+ (cdar (sort (copy-seq c) (lambda (a b) (< (car a) (car b)))))))) (setq b (append (subseq b 0 d) (list (nth i a)) (nthcdr d b)))))) b) (defun g (a) (flet ((b (c d e) (when (> c d) (rotatef c d)) (if (= d 0) 0.0 (* d (sin (/ pi e)) d (cos (/ pi e)) c (/ (float d)))))) (let ((h (length a)) (i 0.0)) (dotimes (n h) (incf i (apply #'b (list (nth n a) (nth (% (1+ n) h) a) h)))) i))) (f '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) => (1 2 4 6 8 10 12 14 16 15 13 11 9 7 5 3) (g (f '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))) => 280.69829763979334 >>211 J 山型に並べるだけ。 証明は略 (谷がある並び順は谷底を移動してより大きく出来ることが示せる。 谷がない場合、頂上から左右に振り分けて行くのが最大と示せる) NB. sin α sinA =: 1&o.@((o.2)&%)@# NB. ズラして掛けた総和 s =: +/@(*(}.@,{.))"1 NB. 山型に並べる raz =: (/:[)/:(/:+/@(* ,~/"1)@(*\)@i.@#) NB. 山型に並べてズラして掛けた総和にsinα掛けて半分にする ans =: -:@(sinA*(s@raz)) 1行で書くと ans =: -:@(1&o.@((o.2)&%)@#*+/@(*(}.@, {.))"1@((/:[)/:(/:+/@(*,~/"1)@(*\)@i.@#))) 実行例 ans 4 3 2 1 0 10.9371 ans 10 0 0 10 10 0 10 10 106.066 ans 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 280.698 https://%62it.ly/2jlIjeo >>211 J 一応総当たりも (sinA, s は同じ) all =: A.~(i.@!@<:@#) min =: >./ ans2 =: -:@((sinA)*(min@(s@all))) 実行例 ans2 4 3 2 1 0 10.9371 ans2 10 0 0 10 10 0 10 10 141.421 ans2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |out of memory: all | ans2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 あれ?バグってるなこれ 総当たりの方は取り消します
>>216 正しくはこうでした sinA =: 1&o.@((o.2)&%)@# s =: +/@(*(}.@,{.))"1 raz =: ((\: [) {~ (/: (* <:@(2&*)@(2&|)))@i.@#) ans =: -:@(sinA*(s@raz)) 1行にするのは略 https://%62it.ly/2w3XF0m >>211 それ、俺の直感ではsortすればいいだけなんじゃあ? 証明できんけど。 >>223 >>211 … (ry > {4,3,2,1,0} > => 10.9371 //{0,1,3,4,2} _________~ ~ >>224 あー。ちょっと違うな。崖作らずに山作る感じか。 証明できんけどw >>225 「大きい方から順に取って、既存の列の大きい端の外側に配置」を繰り返せばいい 0 1 2 3 4 のときは 4 4, 3 2, 4, 3 2, 4, 3, 1 0, 2, 4, 3, 1 この時の面積は 1/2・sin 72° ・(0*2+2*4+4*3+3*1+1*0) = 10.9371 面倒なので証明しないで全パターンの面積を求めて最大のやつを出すように作ろうかと思ったが、 腹が減ったので飯食ってから考えよう。(というかこうするならほとんど考える必要ないなこれw)
問題思いついた後、ググって>>227 見つけたので出題した次第です。 最小化については上手い方法があるんだろうか? >>227 そのπってのが真ん中から左右に配置して行くインデックス列。 でその証明は不完全(*1)だけど結論は合ってる。 (*1) n-1個の時の最大になる列のどこかに n番目の数を挿入すればn個の時の解が得られる、 ということを証明せずに利用している。 小さくするには山谷の数を多くする(小さいのと大きいのがなるべく隣接するように置く) ってことは直感的にわかるんだけど具体的な構成法は考察がいるな >>211 Squeak/Pharo Smalltalk | fn | fn := [:arr | | strm res | strm := arr sorted readStream. res := OrderedCollection withAll: (strm next: 3). [strm atEnd] whileFalse: [ | next foundPos | next := strm next. foundPos := (1 to: res size) detectMax: [:idx | | a1 a2 | (a1 := res at: idx) + (a2 := res atWrap: idx+1) * next - (a1 * a2)]. res add: next afterIndex: foundPos ]. res := res asArray. (res * (2 * Float pi / res size) sin * ({res last}, res allButLast) / 2) sum -> res ]. fn value: #(4 3 2 1 0). "=> 10.937149937394265->#(0 1 3 4 2) " fn value: #(10 0 0 10 10 0 10 10). "=> 141.42135623730948->#(0 10 10 10 10 10 0 0) " fn value: #(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) "=> 280.6982976397934->#(1 2 4 6 8 10 12 14 16 15 13 11 9 7 5 3) " >>230 最小を目指して, 山谷の数を多くしてみました. (defun f2 (a) (let* ((b (sort (copy-seq a) #'<)) (c (/ (length b) 2)) (d (let ((e (subseq b 0 c))) (apply #'append (mapcar (lambda (x) (let ((y (pop e))) (if y (list x y) (list x)))) (reverse (subseq b c)))))) (h)) (loop for i from 0 below (length d) do (setq h (if (or (= (% i 4) 1) (= (% i 4) 2)) (append h (list (nth i d))) (append (list (nth i d)) h)))) h)) (f2 '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) (8 10 6 12 4 14 2 16 1 15 3 13 5 11 7 9) (g (f2 '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))) 157.47423241823444 234 デフォルトの名無しさん 2018/05/03(木) 01:32:09.14
>>233 無為に捨てられる何千もの’Hello, World!’がかわいそうすぎね?(´;ω;`) 【お題】 与えられた整数のリストで、 2つの要素の和が100になるすべての組を列挙せよ。 例: [1, 99, 20] -> [[1, 99]] [62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40] -> [[40, 60], [-16, 116], [-81, 181]] [100, 0, 100, 0] -> [[0, 100], [0, 100], [0, 100], [0, 100]]
>>236 Ruby。 ary.combination(2).select{|x|x.inject(:+)==100} >>236 Squeak/Pharo Smalltalk | fn | fn := [:arr | | bag | bag := Bag new. arr combinations: 2 atATimeDo: [:comb | comb sum = 100 ifTrue: [bag add: comb sorted]]. bag asArray ]. fn value: #(1 99 20). "=> #((1 99)) " fn value: #(62 116 181 86 60 98 -16 73 131 16 80 -81 40). "=> #((-81 181) (-16 116) (40 60)) " fn value: #(100 0 100 0). "=> #((0 100) (0 100) (0 100) (0 100)} " 241 デフォルトの名無しさん 2018/05/03(木) 11:34:54.61
>>236 Perl5 use Data::Dump 'dump'; for ([1, 99, 20], [62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40], [100, 0, 100, 0]) { sub c {my $d = shift; my @l = c(@_) if 1 < @_; @l, map{[$d, $_]} @_}; @s = grep{100 == $$_[0]+$$_[1]} c @$_; print dump($_)."\n->".dump(\@s)."\n"; } 実行結果 $ perl 11_236.pl [1, 99, 20] ->[[1, 99]] [62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40] ->[[60, 40], [181, -81], [116, -16]] [100, 0, 100, 0] ->[[100, 0], [0, 100], [100, 0], [100, 0]] ※実行にはperlのData::Dumpモジュールが必要ですが、 Ideoneのperl 24にはインストールされてないようでした >>236 javascript var f = l => { console.log( l.reduce((acc, m, i, ary) => [ ...acc, ...ary.slice(i+1) .filter(n => m + n == 100) .map(n => [m, n]) ], [] ) ) } f([1, 99, 20]) //=> [[1, 99]] f([62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40]) //=> [[116, -16], [181, -81], [60, 40]] f([100, 0, 100, 0]) //=> [[100, 0], [100, 0], [0, 100], [100, 0]] Smalltalk のメソッドの充実っぷりには毎回感心
それなりの規模の処理系(GUI付きOSモドキ)をセルフホスティングで構築・維持していると イディオムがイディオムとして認識・共有されやすく、さらにメソッドとしてまとめられやすいのかも たとえばスクリプト言語処理系でしかないGNU Smalltalkはあまり便利メソッドが増える感じがしないので
お題 10,000個の単純変数に1から10,000の整数を代入する
>>247 Ruby (1..10000).each{|i|instance_variable_set("@v#{i}", i} >>247 Perl for(1..10000){eval”\$a$_=$_”} こんなんでいいのか? >>250 シェルもperlみたいにeval使えば簡単だと思うよ。その他の言語も同様。 てかこれ、インタープリタの言語にはできてもコンパイルする言語の場合は普通の方法ではできないんじゃないかな。 トリッキーな方法使ってようやっとできるかも知れないって感じじゃないだろうか。 253 デフォルトの名無しさん 2018/05/04(金) 21:49:18.32
Cプリプロセッサでもやろうと思えばできるけど面倒だからやらない
256 デフォルトの名無しさん 2018/05/04(金) 23:16:59.35
>>255 分からないときは好きに解釈していいのがこのスレのルール >>254 Perl5 sub f {pop, shift, @_ ? f(@_) : ()} sub g {@_ ? do{my $a = shift; shift, g(@_), $a} : ()} use feature 'say'; sub pai { say "@pai"; @pai = f(@pai); say "@pai"; @pai = g(@pai); say "@pai"; } @pai = qw{1 2 3 4 5 6}; &pai; @pai = qw{a b c d e f}; &pai; 実行結果 $ perl 11_254_1.pl 1 2 3 4 5 6 6 1 5 2 4 3 1 2 3 4 5 6 a b c d e f f a e b d c a b c d e f f, g のような変換関数を作ること自体は簡単な感じがするが、それと「パイ生地の折り畳み」がどう関係するのかがわからんな。 単にここでは折り畳んだらそういう並びになるというルールなだけ?
半分に折る->後半部を逆順に 折重ねたまま元の大きさまで伸ばす->前半部に合成 パイ生地の作り方からの連想だとは思う
>>247 javascript eval('var ' + [...Array(10000)].map((_, i) => `a${i+1}=${i+1}`).join()) >>252 の通りやった >>258 分からないと言うことをいろいろ言うつもりは無いけどm >>254 のレスの内容とoctaveのコードから考えて 1 2 3 5 6 をパイ生地のように二つに折り畳んだ 1 2 3 6 5 4 を(下を先に選択して)リストで表すと 6 1 5 2 4 3 だということは想像に難くないので、そう解釈して解答を考えた。 gはその逆。誤解はあるかもしれない。 講釈がコードより長くなったけど、 「だけ?」って一体どういういみだよ? >>262 「パイ生地の折り畳み」という言葉に他の意味がないかってこと。 >>254 J l =: -: * -.@(2&|) r =: (# - -:@>:) * 2&| p_fold =: {~((l+r)@i.@#) 折りたたみちょっと面白いね 何度か繰り返し適用すると元に戻る 例えば4つだと p_fold^:3 (1 2 3 4) => 1 2 3 4 と3回適用すると元に戻る (^:n ってのはn回適用するJの仕組み) 同様に p_fold^:5 (1 2 3 4 5 6) =>1 2 3 4 5 6 p_fold^:4 (1 2 3 4 5 6 7 8) => 1 2 3 4 5 6 7 8 p_fold^:9 (1 2 3 4 5 6 7 8 9 10) => 1 2 3 4 5 6 7 8 9 10 >>254 Ruby 条件分岐を使わずにindexのみから求めてみた f=->a{a.size.times.map{|i|a[(i&1)*i-i/2-1]}} g=->a{(s=a.size).times.map{|i|a[~(4*i-2*s+3).abs/2]}} p f[[*1..6]] #=> [6, 1, 5, 2, 4, 3] p g[f[[*1..6]]] #=> [1, 2, 3, 4, 5, 6] 266 デフォルトの名無しさん 2018/05/05(土) 11:51:20.86
>>254 Squeak/Pharo Smalltalk | f g pie | f := [:arr | ((1 to: arr size) collect: [:idx | arr perform: (#(atLast: at:) atWrap: idx) with: (idx / 2) ceiling] ) as: arr species ]. g := [:arr | (((1 to: arr size) select: #even), ((1 to: arr size) select: #odd) reversed collect: [:idx | arr at: idx] ) as: arr species ]. pie := 'abcdefg'. pie := f value: pie. "=> 'gafbecd' " g value: pie. "=> 'abcdefg' " pie := (1 to: 7). pie := f value: pie. "=> #(7 1 6 2 5 3 4) " g value: pie. "=> #(1 2 3 4 5 6 7) " >>254 Squeak/Pharo Smalltalk >>265 っぽい方針も入れて書き直し | f g pie | f := [:arr | ((1 to: arr size) collect: [:m | arr atWrap: m * m even asBit - (m // 2)] ) as: arr species ]. g := [:arr | ((2 to: arr size by: 2), (1 to: arr size by: 2) reversed collect: [:idx | arr at: idx] ) as: arr species ]. pie := 'abcdefg'. pie := f value: pie. "=> 'gafbecd' " g value: pie. "=> 'abcdefg' " pie := (1 to: 7). pie := f value: pie. "=> #(7 1 6 2 5 3 4) " g value: pie. "=> #(1 2 3 4 5 6 7) " お題 N×Mのフィールドが与えられる。各マスの意味は以下の通りとする。 'S':始点 'G':終点 '.':通行可 '#':通行不可 連続して同じ方向に進むことができないという制約下で、 始点から終点までの最短距離を求めよ。 [example 1] S.... #.... ..#.. ....G => 9 [example 2] S.....G ....... => 12
>>269 配列の長さを L とすると、 f(パイをたたむ)は; i(0 <= i < L)番目の要素を元の配列の (~...~[i / 2]) % L 番目から持ってくればよい (~...~はビット反転を i 回繰り返したもの) g(パイを開く)は; i(0 <= i < L)番目の要素を元の配列の (- 0.5 - |2 * i - L + 1.5|) % L 番目から持ってくればよい [][][] [[[ ] X_[[[ [] ][ [] ][][[[]
今抱えてる課題 1から100までインクリメントする変数iを用いて 300から1までの実数を100個出力せよ i=1の時は300 i=100の時は1 となる式を考えてちょ(人・ω・)☆
>>273 300 - (299.0 / 99.0) * (i - 1) お題:文字駒を滑らせろ 四方を囲いで被われ駒がこぼれる心配のないM×Nマスのボードがある。 ここに英小文字が印字された正方形の駒が適当に配置されている。(駒のないマスは.(ドット)で表す) 与えられる、ボードを傾ける指示を完遂したときの最終盤面を表示せよ。 指示の方向はU(向かい方向)、D(手前方向)、L(左方向)、R(右方向)の四種類。 例1) solve([ '...', '.a.', '...', ], 'UR') // ↓ // [ // '..a', // '...', // '...', // ] https://jsfiddle.net/en6rd3vk/ ※盤面は文字列の配列にしているが文字の配列の配列など言語で扱いやすいよう好きにしてよい 例2) solve( [".....", ".d.i.", "kmegk", "..tu."], "LRRLLUDRRLRLRRURRRRLLLRULDUDULDLLRDULURULUDLDLUDDL" ) //=> [".....", "gk...", "km...", "dietu"] 暇な人は300×300、指示数50くらいでやってみてください。最適化しないと結構時間かかっちゃうと思いますが。 >>274 ありがとうございます(^○^) 範囲を等分してiと合わせるだけだったんですね これを思いつかないとは・・・寝てきます(・_・;) お題 Y円を支払うとき、同種の通貨の枚数を最小化する。 Y=500 => 1 (500*1, 同種の通貨は最大1枚) Y=300 => 2 (2*100+2*50, 同種の通貨は最大2枚) Y=40 => 3 Y=60 => 1
>>281 通貨の種類は 1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000? >>282 それでいいです。任意の種類に対応できたら尚良し >>281 => 0 (カード決済または電子マネー決済) 285 デフォルトの名無しさん 2018/05/06(日) 00:22:26.26
286 デフォルトの名無しさん 2018/05/06(日) 01:34:21.80
>>281 Ruby ぴったり払えない時は No Solutions と出力 currency = [1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000] sums = currency.size.times.map { |i| currency[0..i].sum } [74664, 55998, 37332, 500, 340, 300, 197, 161, 157, 60, 40].each { |yen| print '%d => ' % yen min = currency.zip(sums).reverse_each.map { |c, s| yen -= c * x = [yen/c, -(-yen/s)].min x }.max puts yen.zero? ? min : 'No Solutions' } #=> 74664 => 4 55998 => 3 37332 => 2 500 => 1 340 => 3 300 => 2 197 => 3 161 => 1 157 => 2 60 => 1 40 => 3 >>275 一度でも水平垂直の両方に傾けると 座標じゃなくて単に駒の二次元リストでいけると思うから 指示の短縮と合わせて早くできると思うけど どう書けばいいか悩んでる・・・ >>281 Ruby >>288 を修正 currency = [1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000] samples = [74664, 55998, 37332, 500, 340, 300, 197, 161, 157, 60, 40] cands = currency.zip(currency.reduce([]){|s, e| s << s.last.to_i + e}).reverse_each breakdown = lambda do |yen| x = cands.map{|c, s| yen -= c * x = [yen/c, -(-yen/s)].min; x}.max yen > 0 ? 'No Solution' : x end samples.each{|yen| puts '%d => %s' % [yen, breakdown[yen]]} #=> 74664 => 4 55998 => 3 37332 => 2 500 => 1 340 => 3 300 => 2 197 => 3 161 => 1 157 => 2 60 => 1 40 => 3 }]] [[《_["[[]]" 〈[]》》 [][][]0,1》》〈〉 [] } } "B,V,0%%%,*1BVLO,SASA1`}}//%\\0,1\"VL"\
はっ。それはもしや45の倍数・・・ おや?こんな夜中に誰だ?
>>289 それって例えば初期配置が以下のとき(■が駒) □■■□□■ □□■□■□ ■■□■□■ □□■■□□ □■□■□□ ■□■□□■ 最初に例えばULが来ると以下のようになって… ■■■■■■ ■■■■■□ ■■■■□□ ■□□□□□ □□□□□□ □□□□□□ □だけの行、□だけの列はこれからハブいてループ回せるじゃんってことだよね。この例だと下二行。 なるほど命令の最適化ばっかり考えてて全然気づかなかった。 >>292 Squeak/Pharo Smalltalk (1 to: 9) sum * (1 to: 9) "=> #(45 90 135 180 225 270 315 360 405) " ((1 to: 9) * (Array new: 9 withAll: (1 to: 9))) sum. "=> #(45 90 135 180 225 270 315 360 405) " ついでに全段の合計も ((1 to: 9) sum * (1 to: 9)) sum. "=> 2025 " ((1 to: 9) * (Array new: 9 withAll: (1 to: 9))) sum sum. "=> 2025 " (Matrix rows: 9 columns: 9 tabulate: [:x :y | x * y]) sum. "=> 2025 " ((1 to: 9) asArray +* (Matrix rows:1 columns: 9 contents: (1 to: 9))) sum. "=> 2025 " >>275 これの最適化したいんだけど誰か大きいボードのサンプルくれないかなあ >>296 Smalltalk なのに普通だ…いやtabulateが便利そう J 格段の和 +/(*/[)>:i.9 45 90 135 180 225 270 315 360 405 さらに足すと +/+/(*/[)>:i.9 2025 先に,で1次元化してから足せば1文字短く +/,(*/[)>:i.9 2025 >>292 Kotlin (1..9).forEach { a -> println((1..9).map { it * a }.sum()) } この1行をファイルに入れて kotlinc -script でファイルを指定するとスクリプトとして実行されて計算結果が出力される。 45 90 135 180 225 270 315 360 405 302 デフォルトの名無しさん 2018/05/09(水) 03:24:50.65
>>292 Nim import math const s1 = (sum[int]([1,2,3,4,5,6,7,8,9])) var s=0; for i in 1..9: s+=s1; echo s >>300 命令はもう LDRULDRU... で与えた方がいいかもね この256文字?命令も URDLURDLU まで最適化できちゃうわけだし >>300 Ruby >>289 を意識して最適化してみた https://ideone.com/zwyM7p 2回動かした後、適切に反転させて右下が開くようにしておけば、 abc- ed-- f--- ---- LとRは、 cba- de-- f--- ---- UとDは、 fdc- eb-- a--- ---- と垂直、鉛直方向にそれぞれ反転するだけでいい 最適化された命令は時計回りか反時計回りに回すことになるけど、((駒の数)! + 1)回以内には必ずでループするのでそれも考慮 が、1980x1080には4秒要する模様 >>295 マス単位で省けると思う [a....,bcd..,efghi]を[a,bcd,efghi]って表現して これを上に傾けて[acdhi,bfg,e]にする操作はこんなコードで出来る https://ideone.com/i7EmbB 他の方向へは対称性を利用すれば書けるから 今は左下に寄ってるみたいな情報を持ってればいいし その情報で行列表現にも戻せる まあ駒の数が多い場合は大して速くならないけど あとは2回目以降どうやって傾けても駒の配置は合同(かその反転)になるから 2回傾けた結果を使って4回目を求めて……ってやればO((駒の数)*log(最適化された命令の長さ))で済みそうだよね
>>305 面倒なループ書かなくても反転でいけたのか・・・ 数学力が足りなかった >>275 を>>300 のボードで こういう処理はCが速かろうということで何の工夫もないコードを書いてみた アクションの最適化なしで256回動かした場合 MacBook-Pro:tmp$ time ./a.out <data.raw > r.raw real 0m0.638s user 0m0.625s sys 0m0.009s 638ミリ秒 アクションの最適化だけ実装すると MacBook-Pro:tmp$ time ./a.out <data.raw > r.raw real 0m0.045s user 0m0.037s sys 0m0.006s 45ミリ秒 https://ideone.com/bZmXpg 補足 256回というのは>>300 にある256アクションをそのまま行うということ 目先を変えて Apple の GCD を使って8スレッド並列にしてみた 4コアのPCで3倍くらいになった アクションの最適化なし MacBook-Pro:tmp$ time ./c.out <data.raw > rc.raw real 0m0.218s user 0m1.190s sys 0m0.027s 218ミリ秒 アクションの最適化あり MacBook-Pro:tmp$ time ./c.out <data.raw > rc.raw real 0m0.023s user 0m0.058s sys 0m0.008s 23ミリ秒 100回繰り返すと1回あたり18msec程度になる模様 MacBook-Pro:tmp$ time for i in `seq 1 100` ; do ./c.out <data.raw >rc.raw ; done real 0m1.814s user 0m6.659s sys 0m0.589s https://ideone.com/ULrjTi (そして今試してわかったが dispatch_group は >>311 のように使いまわさず wait 後破棄してまた create する方が高速、と) スクリプト言語のわりには速いと言われるjsだけど当たり前なのかもしれないが桁違いにぜんぜん敵わんくて糞ワロタww
JS のは配列の初期化や文字列操作関数とかが足引っ張ってるんじゃないだろうか。 毎回メモリアロケートするからキャッシュも効きにくそうだし。 2次元配列に初期値セットしてからコードで操作した方が速い気がする。
PCの速度差がかなりあるだけかも知れんし後でjs版も計測してみる
317 デフォルトの名無しさん 2018/05/10(木) 08:16:30.90
各コマの最大可動範囲は最初に定まるし ターンが進むにつれ狭まりもするから それで最適化できん? 知らんけど
>>305 のやり方だと二回傾けて以降は駒の入れ替えだけでいいから numpyでboard[board!='.']=np.fliplr(board)[np.fliplr(board)!='.']とかやれば速いかな インデックスは毎回計算しなくてもいいけど 本当は数値計算みたいにもっと速い命令を使ってくれるかなと期待してたんだけど そういう上手くはいかなかった
>>275 のコードで>>300 のデータを C版を計測したMacのChromeで計測してみた 結果は>>300 と似たような数字で性能差はあまりなさそう actions(256個)そのまま 37.972秒 最適化した URDLURDLU を使用 1.861秒 じゃあArray版作るか… 思ったんだけどこれWebGLでGPU計算出来るかな?いやGPGPU向きの問題かどうかすら分かんないんだけど詳しい人いるかと思って。
>>275 J left =: (((#~-.),(#~))'.'&=)"1 right =: (((#~),(#~-.))'.'&=)"1 solve =: 3 : 0 : if. (#x) = 0 do. y return. end. action =. {. x actions_left =. }. x if. action = 'U' do. board =. |: left |: y elseif. action = 'D' do. board =. |: right |: y elseif. action = 'L' do. board =. left y elseif. action = 'R' do. board =. right y end. actions_left solve board ) Cシングルスレッド版の3.5~6.6倍遅い アクション(256個)そのまま 4.242秒 最適化した URDLURDLU を使用 0.161秒 https://%62it.ly/2rybKgZ 先頭2行のJらしい部分の解説 文字列を.と等しいか('.'&=)でマスク(#~) (#~'.'&=) '..a.b' => '...' その論理否定(-.)でマスク ((#~-.)'.'&=) '..a.b' => 'ab' ,で繋げる (((#~),(#~-.))'.'&=) '..a.b' => '...ab' これで右寄せ。反対に繋げれば左寄せ。 直感的で 読 み や す い
2つの普通のサイコロを 面と面をくっつけて直方体を作る 何種類の異なる直方体ができるか? 回転して同じものは同じ種類とする
335 デフォルトの名無しさん 2018/05/12(土) 13:04:25.66
>>330 C言語 #include <stdio.h> int main(){ printf("%d¥n", (6+5+4+3+2+1)*4); return 0; } >>330 直方体そのものは1つなのでは?各面に打ってある点の数は違うけど同じ直方体であることには変わりないよね。 などと言ってしまったら問題にならなくて全然面白くないので後で考えてみるよ。w まず数学的に考えると、6面の内の一面がくっつくのでこれで6種で、更にくっ付けられる面が6面なので6倍。そして4回回転できるので更に4倍。しかし同じ値の面がくっついた時はお互いに回転させても同じのができるのでこれを引く。 とすると6*6*4-6*4=6*4*(6-1)=6*4*5=120でいいのかな。
ま、しかし、数学的に答え出しちゃったらプログラム作る意味なくなるような気がするので全パターン作って確かめるようなの作るか。
342 デフォルトの名無しさん 2018/05/12(土) 17:25:20.83
>>337 1-1 1-2 2-2 1-3 2-3 3-3 1-4 2-4 3-4 4-4 1-5 2-5 3-5 4-5 5-5 1-6 2-6 3-6 4-6 5-6 6-6 すなわち (6+5+4+3+2+1)×4面 >>335 改行書くことすら惜しむくらいなら、「return 0;」省略すればいいのに・・・ >>338 そういうときはn面体に対するものにするとか、 m個くっつける場合のものにするとか、どこかの値を可変にすればいい。 >>339 そうか。何が違うのか今のところ俺にはわからない。 >>342 その説明の意味がわからない。何を表しているのか? 345 デフォルトの名無しさん 2018/05/12(土) 18:38:44.14
>>344 くっついている面の組み合わせ(サイコロを2つ振って出る目と同じ)×4回転 >>345 あ、そうか。例えば1、6は6、1と同じか。 6*7/2*4=6*7*2=84てことだな。 じゃ、あとは無理矢理全パターン出して全件チェックするブルートフォースなプログラムでもゆっくり作るとするか。
散々考えて作ったプログラムで 96 と結果が出てしまい、何がどう間違ってるのか探すの面倒なのでとりあえず休止。 またその内気が向いたらやってみよう。
よくある総当たり戦の試合数を求める問題の変形だろ いくらなんでも算数レベルはさすがに・・・
算数レベルだと不満があるみたいなので類題を 正五胞体の各面に1~10の番号が振られたサイコロが2つある 2つの正五胞体の面を合わせて新たな多胞体を作るとき、 面の模様の組み合わせ合わせてを合わせて何通り作ることができるか求めよ
面を合わせる操作で胞はどうなるんだろう 模範解答が欲しいな
無理だろ 問題のクラスがどこに属するかを確かめてから……ってのは
355 デフォルトの名無しさん 2018/05/13(日) 22:02:39.26
出題者は学校の宿題をコピペしてるだけなんだからそんなの分かるわけないだろw
円周上の格子点を求めるプログラムをしこしこ作ってるが、 マルチスレッドで動かしたらPentium G6950とAtom x5-Z8350タブレットでほとんど変わらなくて(´・ω・`)
これか 「自然数Nに対して、平面上の円で、その円周上の整数点がちょうどN個となる円の最小半径を求めよ」 例) x^2 + y^2 = 1の整数点は4つだがN=4の最小半径ではない。 (x-0.5)^2 + (y-0.5)^2 = 0.5の方が小さい。 4点は(0,0) (1,0) (0,1) (1,1)
ああ、自称数学が出来る人がアホな事を言ってたヤツだな 最小値は存在しないとか 最小値が存在する証明は簡単だとか言いつつまったく出来てなかったり
全く解いてないけど 力業しか方法は無いのかな? AVX512とかGPUとか使えたりする?
>>359 複数解があれば、その中で一番小さい物が最小値 という当たり前の定義に何か疑問でも? >>361 最小値が存在するためにはいくつかの条件があって その条件を全く考慮しないで「証明」と言い張ってたアホがいたと まさか君じゃないよね? それより数学のセンセが複素指数関数をなんだか誤解しているのを何とか説き伏せたいのだけれども…
>>364 多値関数のことを周期関数とか見当違いのことを言っていたあなたが何か言えることなんてあるんですか? でこの話題まだ続けたいの? なんか最小値とかでよほど辛い目にあったんだろうなw
せんせーともども数学板へどうぞ。 こいつら異世界転生もののアニメ見てそうだなワラ
仲間内じゃうだつが上がらないのかな、誉められたくてこんなとこまで来てチンコしごいてんのか気持ち悪い。 リアルで軽んじられてる理由が透けて見えるよ。ほんと迷惑な話。
>>369 みたいなアニオタは巣から出てくるな 不快な上に真面目に気持ち悪いわ お題 辺の長さと面の面積と体積の全てが整数である4面体を求める
>>368 もしかしてリーマン面とかも知らずに留数定理がどうのこうの言ってたのか? 厚顔無恥ってこのことだぜ >>375 言ってる事がよくわからないんだが? もしかしてくやしいの? 数学コンプがプログラミングに逃げたが やっぱり数学からは逃れられなかっただけ
>>350 問題そのものとは関係ないかもしれんが正五胞体の面同士を重ねても通常の多胞体にはならないんじゃ 次元をひとつ下げればふたつの正四面体の辺同士を重ねる操作にあたるよね その自称数学の専門家がなんでまたこんな場違いな板のスレに粘着してんの? お前も実は数学コンプなんだろ
もう数学問題に特化したお題スレ作った方が良いのでは?
>>382 趣味のプログラマーだから 数学的に面白いネタ探し >>384 プログラムで書きなさい printf("ない??n"); >>385 いちいちID変えてる時点でこいつが誰なのかすぐに分かってしまいますね 円マークかな?Unicodeだとバックスラッシュとはコードが違うよね。
前にLinuxの端末でバックスラッシュと円マークの両方が半角で普通に両方入力できて驚いたことがある。やっとまともになったのかとw
>>387 おれは誰なんだ? ごくたまにしか書き込んで無いけど datをバイナリエディタで見たら化けてる所は 0xfc 0xfc になってるが、なぜそれになるのかは知らん。
ていうかC言語等の文字のエスケープに使う文字は本来であればバックスラッシュだ。 円マークになってる入門書等が多い理由は歴史的な理由による。 どういう歴史的理由かは長くなるので省略。
中途半端な知識で語りたがりが多いな 数学といい文字コードといい
"\" 円(U+00A5) "\" バックスラッシュ(U+005C)
SIPやアプリや5chがどういう文字コードを扱ってどういう変換をしてるかがわからん これは調べたり実験しないと 教えたがりの書き込みは全く役に立ってないから 書かなくて良いよ 釈迦に説法
>>401 いちいち突っかかるお前も大概だがな 黙って見ているってこともできないのか 5ch はシフトJISだから1バイトのバックスラッシュは基本書けないし読めない (U+00A5に対応する文字コードがない) 実体参照の使用が許可されてる板なら実体参照でU+00A5の字も書ける fcfc はわかんないな ググるとfcfcはシフトjisのibm拡張文字領域で、 aixの修正された不具合の説明で文字コード変換の際に 意味のないコードfcfcになるのがどうのこうのというページがあったから libicu(ibmの文字コード関係ライブラリ。割と広く使われている)で そういう不具合のあるバージョンがあるんだろうな
>>404 の補足 5ch は投稿されたfcfcをそのまま出してるだけで、 誤変換しているのは投稿しているアプリ それはそれとしてこの板ではバックスラッシュ使いたいよね >>404 U+00A5がYen signじゃろ… 408 デフォルトの名無しさん 2018/05/15(火) 19:52:19.95
>>407 そっかごめん訂正 u+00A5 はシフトjisの0x5c に変換されて書けるけど、 ユニコードの u+005c のバックスラッシュは書けない、が正解だった。 バックスラッシュと言えば Visual Studio で c のソース編集時に バックスラッシュが表示されてて、文字コードはshift jisなのに何故? と思ってたが Visual Studio では0x5Cがどっちで表示されるかはフォント任せなんだな shift jis (cp932) では円マークと規定されてるのに。
>>396 何事も、ニワカな奴ほど語りたがるからしゃーない 数学コンプだけじゃなくて文字コードコンプまで発症したのかw
頭がおかしいんだから仕方ないね 精神科のお薬飲んで寝ろ
禁煙の立て札の前でタバコを吸う数学奴文字コード奴であった。
419 デフォルトの名無しさん 2018/05/16(水) 01:24:47.67
そんなに数学挑みたいならこれでもどうぞ お題 2つ以上の正の整数が与えられる この時、最後を除く自然数に対し四則演算及び括弧を使い数式を作ることで、最後の自然数と同値にせよ 複数の数式が考えられる場合、どれか1個を出力すれば良い 入力例1: 5 2 3 3 10 出力例1: -5+(2+3)*3=10 入力例2: 0 1 出力例2: Impossible
飲食禁止の貼り紙の前でクチャクチャと音を立ててキムチを食す数学奴
極度の数学コンプとそれを煽る人達のせいで訳わからなくなってるな 数学コンプの人らは数学に関するすべてを禁止したスレを立ててそっちに移住したほうが平和なんじゃないの
スレが荒れるなら分岐したほうがいいのかね プログラミングのお題スレ(数学) みたいに あんまり人がいないなら別にこのスレでも良いと思うがな(俺は)
>>423 なるほど、禁止するなら プログラミングのお題スレ(数学禁止 ) こうだな こっちでもいいな >>426 数学要素があること自体はいいんだけど、数学的に解いたら後は手計算の代わりに入出力と演算をプログラムにやらせるだけっていうお題は興醒めというか面白味がないね。 でもO(1)かどうか確かめられない人がほとんどなんでしょう
お題スレ Part9 では、 tan() の値が有理数になる場合についての 数学的証明が活発に議論されていたな
431 デフォルトの名無しさん 2018/05/16(水) 12:03:53.05
数学者がプログラミングの領域にしゃしゃり出てくんなや プログラミングはExcel方眼紙を操る文系の神聖不可侵領域なんや
ディープラーニングとかAIとかモロ数学(知識)では?
プログラミングも一応数学の一部ではあるけどな。計算手順だし。 しかしプログラミングのお題として数学問題そのまま出されると数学的に頭で考えるだけで解けてしまってあまり意味がないだろう。 コンピュータに計算をさせるという要素がなくなりプログラミングのお題にならない。それは数学のお題だ。
>>430 の過去スレの有理数・無理数の問題が数学問題で、 このスレの>>420 は、プログラミング問題だな。 >>420 「同値」の意味くらいは知っておいた方が良いかと >>428 プログラムってのはそういうもんだろ 人間が考えたアルゴリズムを言語という形にするだけ 数学ってアルゴリズム考える所までで終わりじゃない?算数や物理じゃないから式に値を入れて計算して答えを出す所までやる必要がなくて、式そのものを求めて終わり。
このスレで数学って言ってるのは 式だけじゃなくアルゴリズムまで含んでる気がするけど アルゴリズムは数学じゃないっていうなら >>420 なんか数学的要素ゼロになっちゃう プログラミング的な試行錯誤のあるお題を考えるのって難しくない? まぁ俺には数学的なお題を考えるのも難しいが
あらら、やっぱ>>420 はもう出てたか よくある設定だし既出かもなーとは思ったが >>439 まあ、式を複雑にしたのがアルゴリズムみたいなものかな。 で、コンピュータを使う理由は普通はプログラムを作るためではなくて、実際にプログラムを動かして計算させて結果を得るためだ。 正解となるプログラムを作った段階で終わりにはしない。 式とアルゴリズムは別物 計算アルゴリズムが存在しない式もある
やっぱり不気味だよ 例えば>>275 なんて最終盤面がU・D・L・R(上下左右)とUR・UL・DR・DL(左上・右上・左下・右下)の8つしか無いだろ 2回計算して終わりじゃん 448 デフォルトの名無しさん 2018/05/16(水) 22:18:33.87
2回かどうかは知らんが、最後に2パターンのうちの一つを作って回転もしくは反転させるだけだわな 入力ごとに馬鹿正直に駒を動かすようなプログラムを組む奴は壊滅的にセンスが欠けている
お題: 以下のように操作を繰り返して単一リストになったらその要素を返す [1,2,3,4,5,6,7,8,9] -> [5,1,13,2,21,3,29,4] -> [16,16,41,1,66,38,91] -> [8,8,124,69,33,19] (中略) -> [4,216] -> [2] テスト例: [1,2,3,4,5,6,7,8,9] -> 2 [9,8,7,6,5,4,3,2,1] -> 2496 [3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6] -> ?
456 デフォルトの名無しさん 2018/05/17(木) 00:59:40.10
>>455 要素が1個になるまで繰り返す 奇数の場合3で掛けて右の数値を足す 配列の右端を切り捨てる とか、どこ情報なの? こんなの読み取らなきゃいけないのなんて「プログラミングのお題」ではない こんな糞問題出すなや >>452 誰でも簡単に出来るお題じゃあつまらんから 数学だったりパズルだったりの要素があってもいいかと
460 デフォルトの名無しさん 2018/05/17(木) 01:25:32.48
なぜ朝鮮人はプログラムを書かないのか それは書かないからではなくて「書けない」からである
>>450 題意はわかってるけど頭の中でコマを動かせないんだと思うぞ >>488 例えばこんな風に動くとかわかる? よく考えてみて 元のボード abcdefghi. 12345678.. .......... 'DRUL' 適用 1abcdefgh. 2345678i.. .......... もう一度'DRUL' 適用 21abcdefg. 345678ih.. .......... さらに'DRUL' 適用 321abcdef. 45678ihg.. .......... ああ>>446 , >>448 は勝手に駒の区別をしないことにしたうえで難癖付けてたのか プログラミング以前に日本語のセンスが「壊滅的に欠けている」なw 日本語の問題なんだろうなとは俺も思った。それにしてもちょっとでもコーディングしてみれば勘違いに気づきそうなものだが… コーディングしない系プログラマなのか
×コーディングしない系プログラマ ◎コーディングはできない、プログラマでもない、人にいちゃもんつけるのが得意なだけの嫌われ者
469 デフォルトの名無しさん 2018/05/17(木) 12:19:48.40
>>465 俺はIQ高いから頭ん中でシミュレーションしてみたんだわ ただ、駒が全部真っ黒で見分けが付かなかった すまんな このスレもう4年以上経つのか 時の流れって怖すぎだよな
>>464 それってそんなにコマ沢山使わなくてもわかるよね。 3つのコマを2*2の4枠の中に入れれば傾けるだけでくるくる回せるから。 >>471 >>446 で本人が言っている8種 >>448 で反転だの言ってるからその倍にして16種 結果の盤面がそれ以下のバリエーションだと 「やっぱり8種類以下しかないじゃないか!」とかになるだけだろ もちろんもっと少ないコマでも結果が16種より多くなる盤面はあるけど、 幾らでも多くなるよというのをイメージしやすいように大きめにした
>>358 勉強をかねてこれやってるが、ある程度、できたところでアップしてみる。 考えてる方針が速いとはおもうが・・・ 477 デフォルトの名無しさん 2018/05/18(金) 00:27:29.87
お題 スペース区切りで入力された文字列をすべて含むリング状の文字列を出力し、 その後に、各入力文字列に対応するインデックスと長さを出力せよ 出力文字列の構成・格納順に関しては特に制約は設けない インデックスと長さは出力文字列の先頭からの最短マッチで求める [制約] (なくしてもいい) 文字列の構成文字は0と1の二種類とする 入力の各文字列長は最大9文字とする 入力要素数は最大255個とする [入力例1] 0 1 01 10 111 1001 [出力例1] 01110 (0,1) (1,1) (0,2) (3,2) (1,3) (3,4) [入力例2] 01 1000 1010 100 0 0010 110 0000 00 0111 101 0100 11 10 111 0110 1101 010 000 1 001 0001 011 1001 1011 1100 [出力例2] 010100001101110 (0,2) (3,4) (1,4) (3,3) (0,1) (14,4) (8,3) (4,4) (4,2) (10,4) (1,3) (2,4) (8,2) (1,2) (11,3) (7,4) (8,4) (0,3) (4,3) (1,1) (6,3) (5,4) (7,3) (13,4) (9,4) (12,4) 関連 >>378 >>419 >>474 じゃあ競争しよう 私はこれからスタートであまり時間もないので ちょっと時間がかかるかも知れないけど >>477 入力文字列を単純につなげば解の1個だが... 求める文字リングが短いほど良い解っていう条件? 480 デフォルトの名無しさん 2018/05/18(金) 08:20:20.07
>>479 そんな感じです ほどほどに圧縮できてれば必ずしも最短でなくても >>478 です とりあえずこれだけ出来ました 4770でシングルスレッドのC++で15分くらい 半径を倍にすると16倍くらいは時間がかかりそうなので マルチスレッド&アセンブラ&AVXでガシガシに最適化したくらいじゃ 大して検索範囲は増えなそう 何かアイデアがないか考え中 ---- 3 : r=1.178511 4 : r=0.707107 5 : r=5.892557 6 : r=2.500000 7 : r=23.890677 8 : r=1.581139 9 : r=15.320647 10 : r=12.500000 11 : r=57.536370 12 : r=3.535534 13 : r=111.621856 14 : r=62.500000 15 : r=76.603235 16 : r=5.700877 18 : r=32.500000 20 : r=17.677670 24 : r=12.747549 28 : r=88.388348 32 : r=23.505319 36 : r=45.961941 40 : r=63.737744 48 : r=52.559490 64 : r=117.526593 ピタゴラス素数(4n+1型の素数、5、13など)は2乗和で表わせて。 逆に、2乗和(X^2+Y^2)は、2とピタゴラス素数の積の表わせる、もしくはこの問題を考える上でそれだけに限定していいとおもってる。 2^i * 5^j * 13^k * ・・・・をピタゴラス合成数と名付けると。 X^2 + Y^2 = ピタゴラス合成数、の解とその個数は比較的カンタンに求まる。 それを利用して、拡大(縮小)と並行させたやつで、最小半径を与えるのは全て表せるはず。 具体的には、上の解が求まっていれば、 (mx + a)^2 + (my +b)^2 = ピタゴラス合成数、の解と個数もそれなりの低コストでもとまる。 mの剰余を考えれば、解があるaとbの範囲も限定できる。
ノーヒント、全て自力で求めようと思ってたんだけど だから競争って まあいいや 使えそうなら使わせていただきます
ピタゴラス素数は2乗和であらわせて。 (a^2 + b^2) (x^2 + y^2) = (ax + by)^2 + (bx - ay)^2 が常に成立するので、 ピタゴラス素数と 2 = 1^2 + 1^2 の積で、新たな2乗和の式が作り出せる。 この式から、解とその個数も求まるはず。 しかし、これがわかっても最小値を求めるのは簡単ではないとおもう。かなりの計算量がいるはず。
z = x + yiという複素数でいうと、このノルムは|
z = x + yiという複素数でいうと、ノルムは|z|^2 = x^2 + y^2 であって |z||w| = |zw|を満たすので、 >>484 の式は、新たな複素数 zwを作り出すことと一緒。 お題 ケブンリッジジェネレータ 知らない人のために解説すると、人間の認識力の問題で単語の最初と最後が正しいと途中の文字順序が違っていても正しい単語と見間違えるというのがある。 例えば「よこうそ」は「ようこそ」と見間違える。「およはう」は「おはよう」と見間違える。(これは違うと分かっていても見えてしまうという、空耳アワーの歌みたいでもある)。 以前2chでこのことについてケブンリッジで発見されたというような内容の文章がコピペされて広まり一時期有名になりそれ用の変換をするケブンリッジジェネレータのページ(JavaScriptで作られてたと思う)が作られたりもしていた。 今はもうないようだが今回のお題はこれである。つまり、入力された単語の最初と最後はそのままで途中の文字順序をランダムに入れ替えた結果を出力する。 日本語の文章は普通は単語と単語の間にスペースがないが、これについては処理を簡単にするためにスペースありで入力された文章しか正常に処理しないということにして良い。
>>487 Ruby str = <<~EOT Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, 'and what is the use of a book,' thought Alice 'without pictures or conversations?' EOT puts str.gsub(/(?<=\b\w)\w*(?=\w\b)/){|m| m.chars.shuffle.join} #=> Aclie was bngneniig to get very terid of sntitig by her seistr on the bnak, and of hnvaig nnthoig to do: ocne or twcie she had ppeeed into the book her sitser was rniadeg, but it had no piteucrs or cinsoentravos in it, 'and waht is the use of a book,' tohught Aclie 'wtihuot pricetus or coenrovanstis?' >>477 これってその条件内なら普通に最適解(圧縮度)出せる方法とか存在する? >>487 Squeak/Pharo Smalltalk | input nonLetters | input := 'Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, ''and what is the use of a book,'' thought Alice ''without pictures or conversations?'''. nonLetters := input reject: #isLetter. (input findTokens: nonLetters keep: nonLetters) inject: '' into: [:acc :token | (token first isLetter and: [token size > 1]) ifTrue: [acc, (token first: 1), token allButFirst allButLast shuffled, (token last: 1)] ifFalse: [acc, token] ] "=> Ailce was beingnnig to get vrey tierd of sttinig by her seitsr on the bank, and of hvanig nohintg to do: once or twice she had peeepd into the book her seitsr was riaendg, but it had no piercuts or coitnevnarsos in it, 'and what is the use of a book,' thuoght Alice 'wtiohut ptriecus or ctnaseinroovs?' " >>482 やってみたけど、 馬鹿正直に検索するのと大して変わらんね 半径1000以下を全て検索するのは厳しそう 円周を検索するする昔ながらのアルゴリズムは優秀だ >>487 Squeak/Pharo Smalltalk 日本語文章処理例 | input nonLetters | input := '以前2ch で このこと に ついて ケブンリッジ で はっけん された と いうような ないよう の ぶんしょう が コピペ されて ひろまり いちじき ゆうめい になり それよう の へんかん を する ケブンリッジ ジェネレータ の ページ(Java Script で つくられ てたと 思う)が つくられ たりも していた。 今 は もうない ようだが こんかい の お題 は これ である。つまり、にゅうりょく された 単語 の さいしょ と 最後 は そのまま で とちゅう の もじじゅんじょ を ランダム に いれかえ た 結果 を しゅつりょく する。 にほんご の ぶんしょう は 普通 は 単語 と 単語 の 間 に スペース が ないが、これ に ついては 処理 を かんたん に するため に スペース あり で にゅうりょく された ぶんしょう しか せいじょう に 処理 しない ということ に してよい。'. nonLetters := input reject: #isLetter. (input findTokens: nonLetters keep: nonLetters) inject: '' into: [:acc :token | (token first isLetter and: [token size > 1]) ifTrue: [acc, (token first: 1), token allButFirst allButLast shuffled, (token last: 1)] ifFalse: [acc, token] ] "=> 以前2ch で このこと に ついて ケブリンッジ で はっけん された と いうような なよいう の ぶんょしう が コピペ されて ひろまり いちじき ゆうめい になり そよれう の へかんん を する ケンブッリジ ジレェーネタ の ページ(Jvaa Spcirt で つくられ てたと 思う)が つくられ たりも しいてた。 今 は もうない ようだが こんかい の お題 は これ である。つまり、にりゅうょく された 単語 の さしいょ と 最後 は そのまま で とちゅう の もゅんじじじょ を ラダンム に いかれえ た 結果 を しょゅつりく する。 にほんご の ぶんしょう は 普通 は 単語 と 単語 の 間 に スペース が ないが、これ に ついては 処理 を かんたん に すたるめ に スーペス あり で にゅうりょく された ぶしんょう しか せょじいう に 処理 しない といこうと に してよい。" 496 デフォルトの名無しさん 2018/05/21(月) 21:36:05.44
>>495 ランダムに入れ替えるのはいいけど、元の単語と同じ並びは排除しないと期待外れの出力になるね 完全にランダムなんだから、結果が同じ並びでもそのまま出力するのが筋だろ 変更するなら日本語の文章の方だ
>>487 Squeak/Pharo Smalltalk 同じ並びは排除 | input nonLetters | input := '以前2ch で このこと に ついて ケブンリッジ で はっけん された と いうような ないよう の ぶんしょう が コピペ されて ひろまり いちじき ゆうめい になり それよう の へんかん を する ケブンリッジ ジェネレータ の ページ(Java Script で つくられ てたと 思う)が つくられ たりも していた。 今 は もうない ようだが こんかい の お題 は これ である。つまり、にゅうりょく された 単語 の さいしょ と 最後 は そのまま で とちゅう の もじじゅんじょ を ランダム に いれかえ た 結果 を しゅつりょく する。 にほんご の ぶんしょう は 普通 は 単語 と 単語 の 間 に スペース が ないが、これ に ついては 処理 を かんたん に するため に スペース あり で にゅうりょく された ぶんしょう'. nonLetters := input reject: #isLetter. (input findTokens: nonLetters keep: nonLetters) inject: '' into: [:acc :token | | middle | (token first isLetter and: [token size > 3 and: [(middle := token copyFrom: 2 to: token size - 1) asSet size > 1]]) ifTrue: [ | shuffled | [(shuffled := middle shuffled) = middle] whileTrue. acc, (token first: 1), shuffled, (token last: 1)] ifFalse: [acc, token]] "=> 以前2ch で ここのと に ついて ケンブッリジ で はけっん された と いううよな なよいう の ぶしょんう が コピペ されて ひまろり いじちき ゆめうい になり そよれう の へかんん を する ケリンッブジ ジネレェータ の ページ(Jvaa Srcpit で つらくれ てたと 思う)が つらくれ たりも しいてた。 今 は もなうい よだうが こかんい の お題 は これ である。つまり、にりょうゅく された 単語 の さしいょ と 最後 は そまのま で とゅちう の もじじんゅじょ を ラダンム に いかれえ た 結果 を しょつゅりく する。 にんほご の ぶしんょう は 普通 は 単語 と 単語 の 間 に スーペス が ないが、これ に つていは 処理 を かたんん に すたるめ に スーペス あり で にうりょゅく された ぶょんしう" 単語の最初と最後が正しいと途中の文字順序が違っていても正しい単語と見間違える というのは無いこともないが、やっぱりおかしな単語はおかしく見えるな
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 AI2XF
僕の 知合いりの 知合りいが できた パコソン 一台で お持れちにな金る やり方 役立につ かまれもしせん グルグーで 検るす索と いかいも 『 ネットぐ方稼で法 モヌレアフニノ 』 AXI2F
荒らし業者の連投規制回避の小さな変更 さっさとアク禁になれ
2個目はどう考えても業者じゃなくてスレ住人だろ… 業者はアク禁になってほしいのは同意
>>506 お前のレスがあるまでケブンリッジジェネレータなのに気付かなかったわw 人間の認識力はそんなもんなんだろうな。ちょっと似てると同じと判断しまう。そうやって脳は省力化してエネルギーあまり使わないようにしてるのかも知れない。脳を動かすには糖分沢山必要だからな。
511 デフォルトの名無しさん 2018/05/28(月) 11:55:04.24
単なる老化
逆に言えばいちいち全部の文字を正確に認識してたらちょっと誤字脱字や書き損じがあっただけで意味がわからなってしまうぞ
botの書き込みなんていちいち推敲モードで読まないからな
>>518 あ、ホントだ、恥ずかしいww 校正というべきだったか あ、ごめん。テキストファイルじゃなくて標準入力からでもいい。 何処から入力するかはたいした問題ではない。
昔仕事で MUA 作った時に >>526 にある folding white space をぶち込んでくる送信元がいて苦労した記憶が… >>526 ここはお題スレだから不毛で良いんだよ。パズルを解くようなもんなんだから。 計算式まで示されちゃってるから出力形式に凝らないと厳しいかな・・・
お題: ある数値nが与えられた時に、次の条件を満たす2つの数値a,bを求め、表示するプログラムを作成しなさい。 ●aとbの最小公倍数がnとなる ●a<bかつaとbの差(b-a)が最小となる 例:n= 360→a= 36,b= 40 n=1000→a=125,b=200 例が間違ってたらゴメン
>>533 n=1000だとa=200,b=250? 数学板じゃなくてもさすがに最小公倍数くらいは このスレならみんな知ってると思ってた
>>541 公倍数は最小公倍数の倍数 公約数は最大公約数の約数 …当たり前のように思えて実際の証明は結構イメージしにくく、一回読んだだけではよくわからないのでした… お題:標準入力からhtmlが一行ずつ与えられるのでh1,h2などのhタグを階層化して出力しなさい。タグ内のテキストも一緒に出力し、タグ内にimgが含まれていたらそのaltを出力しなさい。 出力例: h1 5ちゃんねるにようこそ ....h2 クソスレ乙 ........h3 逝ってよし ....h2 オマエモナー
やれるものならやってみろ。 などと挑発してみるとアホが大漁に釣れるかも知れない。
問題は釣れるのがアホなのでものすごく頑張った揚げ句たいしたものができない率が非常に高いことにある。
>>543 io !(?<_><.?>)(.)\k<_>! <- '\1' >>561 >>562 それなんてエロゲ、じゃない、なんて言語? 鈴木貫太郎 灘中 中学入試 整数問題 VIDEO 問1 4つの異なる数字、1, 3, 9, x から、 異なる数字を取り出して並べる、3桁の整数は24個あり、それらの平均値は555 である時、x は何の数字か? 問2 5桁の36の倍数で、2, 3, 5 のどれもが、 いずれかの桁に、1回以上現れる整数のうち、最小のものを求めよ 答え、問1 : 7、問2 : 13,572 灘中の問題は、以下の性質を使うものが多い 2 の倍数は、下1桁が偶数 4 の倍数は、下2桁が4の倍数 3 の倍数は、各桁の数字を足したものが、3の倍数 9 の倍数は、各桁の数字を足したものが、9の倍数 だから数字を因数分解して、これらに該当するかどうかで、問題を判別できる
>>569 問1 を、Ruby で作った。 問2 は、難しくて作れない nums_3 = [1, 3, 9] nums_4 = nums_3 + [0] (0..9).each do |num| next if nums_3.include? num # 含まれていれば nums_4[-1] = num sum = 0 nums_4.permutation(3) { |a, b, c| sum += (a*100 + b*10 + c) } puts num if sum == 24 * 555 #=> 7 end じゃあ問2を酷いコードで >>569 Java java.util.stream.IntStream.range(10000, 100000).filter(i -> i % 36 == 0).mapToObj(Integer::toString).filter(s -> s.matches("(?=.*2)(?=.*3)(?=.*5).*")).findFirst().ifPresent(System.out::println); コンピュータを使ってブルートフォースで答えを探す方法はわかってもコンピュータを使わずに数学的に解く方法が思い浮かばない。 しかしそれを小学生が解いて入学するという現実。orz
>>569 Squeak/Pharo Smalltalk "問1" ((0 to: 9) copyWithoutAll: #(1 3 9)) detect: [:n | | set | set := Set new. '139', n asString combinations: 3 atATimeDo: [:comb | comb permutationsDo: [:perm | perm first ~= $0 ifTrue: [set add: (perm as: String) asInteger] ] ]. set size = 24 and: [set average = 555] ] "=> 7 " "問2" ((10000 roundTo: 36) to: 99999 by: 36) detect: [:n | n asString includesAllOf: '235'] "=> 13572 " このスレprologニキっていないの? 手続き型以外の解法見たい あとJニキ最近見なくて寂しい
>>569 問1 4種の数字から作られる24個の数字の平均が555 →合計が1110になる12組の数字にまとめられる→どの桁も合計が10になる2組の数字の組合せで構成される →1,3,9,xのうち1と9を除外した3と「足して10になる数」→x=7 問2 36の倍数→4の倍数かつ9の倍数 →5桁の数字は9の倍数なので各桁の数字の合計が9の倍数になる →5桁の数字には「2,3,5」が少なくとも1つ以上含まれているので、この時点で各桁の数字の合計は10より多くなる。 →各桁の数字の合計は9ではないので、18とする。残り2桁の数字の合計は8。この中で一番小さな数が作れるのは1,7。 →「1,2,3,5,7」の組み合わせの内、下2桁が4の倍数で最も小さい数は13572となる。 かなり乱暴に書くとこんな感じで解けば良いのかな? しかし、これをプログラムで表現しようとするのはかなり骨っぽい(数を1桁ずつ分解するのに余計な手間がかかりそう)。 それよりも総当たりで解いた方がコンピュータ的には手っ取り早い気がしますね。 >>578 最初の「合計が1110になる12組の数字にまとめられる」が何故なのかわからん。 >>579 作成される数字を順列とみなした時に 「ABCD ABDC ACBD ACDB ...」を逆順にした 「DCBA DCAB DBCA DBAC ...」という列を組み合わせたら…なんて考えてたんですが、後で見ると意味不明でした。申し訳ない。 問1について、それよりも単純な方法がありました。 xがどの桁で使用されてるかで場合分けし、それぞれを合計する x不使用:139 193 319 391 913 931 :2886 xが1の桁:13x 19x 31x 39x 91x 93x :2860 + 6x xが10の桁:1x3 1x9 3x1 3x9 9x1 9x3 :2626 + 60x xが100の桁:x13 x19 x31 x39 x91 x93 :286 + 600x 上記をすべて合計:8658 + 666x 24個の数字の平均が555だから合計は 555*24=13320 8658+666x=13320 666x=4662 x=7 若干手続きはコンピュータ向けと言えなくもないですが、やはりプログラミングするには手間ですね。 問1 24=4! なので4個の数字はすべて異なる 24通りを並べると各桁1, 3, 9, x が同じ回数出現する これらの平均が555なので 1, 3, 9, x の平均が5とわかる 1, 9の平均が5なので3, xの平均が5となる7が答え 問2 最小を求めるので10000の位が1になる数を考える (考えて、なければ他を考える) 各桁の合計が9の倍数から1, 2, 3, 5, 7とわかる この中で偶数は2だけなのでこれが1の位 1の位が4で割りきれないので10の位は奇数であれば4の倍数 つまり10の位が3, 5, 7のどれでも36の倍数になる 3, 5, 7を小さい順にならべて13572が答え
問1 x = 111 * (24 * 5 - 6 * (1 + 3 + 9) ) / (6 * 111) = 7 問2 5つの数を A, B, 2, 3, 5 とすると A + B + (2 + 3 + 5) = 0 mod 9 <=> A + B + 1 = 0 mod 9 かつ末尾2桁が4の倍数になる 従って一番左の桁は1で確定し {A, B} = {1, 7}も確定 2が末尾に来ることは確定していてかつそのとき任意の並びで4の倍数になるため13572が題意を満たす数 以上が東大理学部物理学科卒の考え方 両方合わせて40秒くらい
やっぱ紙と鉛筆で解く問題だよね。 最初から解析的に解けない問題出して欲しい。
>>580 小学生が解く場合に途中で 8658+666x=13320 のような数学的表現で考えるのはありなのか? 回答者個人にそれができるかできないかの問題ではなく小学校が教えている範囲にそれが含まれるのかの問題ね。 もし含まれていないとしたら他の方法で解く事が可能という事になる。 36の倍数は、4, 9 の倍数で、それらの特徴を利用できるかどうかだけ 捨て問題だろ。 考えたり解いたりすると、2問で10分使うから、落ちるだけ。 即座に無視しないといけない。 新パターンの問題は、時間を使わせるから無視しろっていう、受験テクニック 灘中高は、100%塾の生徒しか受からない。 灘用の受験技術だから、その授業を受けていないと受からない 文系が東大工学部に入る、受験技術のマンガ「ドラゴン桜」と同じ。 賢い者ではなく、塾代という貧富の格差で決まる 大型資格もそう。 TAC, 大原などに行ってないと受からない 貧富の格差、貧富の遺伝
>>586 ものすごくかみ砕いて言うと A + B + 1 = 0 mod 9 (A, B ∈ {0, 1, ..., 9}) を満たす A, B に関して 任意のAに対して対応するBが少なくとも1つは存在することは自明なので A = 1 として 1XX32 という数を考えればこの数は36の倍数でありかつ 2, 3, 5 を各桁に含む (XXには A = 1 に対応する B の値の内の1つと 5 が入る) 解は10000以上1XX32以下の整数なので左端の桁は1であると確定する >>569 Rubyで問1。 def odai_11_569_1(a_ary, a_avg) (a_ary.size + 1) * (a_avg / 111) - a_ary.inject(:+) end w_ary = [1, 3, 9] w_avg = 555 p odai_11_569_1(w_ary, w_avg) 結果:7 >>569 Rubyで問2。 def odai_11_569_2(a_ary, a_base, a_col) a_ary.map!(&:to_s) w = 10**(a_col - 1) w = w / a_base - (w % a_base > 0 ? 0 : 1) w *= a_base loop do w += a_base next if (a_ary - w.to_s.split('')) != [] return w end end a_ary = [2, 3, 5] a_base = 36 a_col = 5 p odai_11_569_2(a_ary, a_base, a_col) # 結果:13572 rubyならさくっとワンライナーで p (10000-10000%-36).step(10**5,36).find{|i|(i.digits&[2,3,5])[2]} #=> 13572
>>569 Rubyで、問2 str_ary = %w(2 3 5) (10_000...100_000).select do |num| next unless num % 36 == 0 # 2, 3, 5 をすべて含む if str_ary.all? { |s| num.to_s.include? s } puts num #=> 13,572 break end end そろそろ新しいお題を。 既出なら申し訳ない。 お題: 再帰・スタックを使用しないマージソートを実装し、整数型のデータn個の配列をソートするプログラムを作成しなさい。 データの個数は不定とし、特定の条件を満たす個数の配列にのみ有効なプログラムは不可とします。 データの内容はランダムとします。乱数の生成法はお任せします。 出来ればソート完了後に配列(の一部)を表示する、正しくソート出来たかチェックする処理を追加してみて下さい。 追加お題: 上記のマージソート処理の際、作業領域を元のデータの半分の量しか確保せずにソートを実行するプログラムを作成しなさい。
1から100までの数字から4つを取り出したそれぞれに番号を振る速い方法ありますか? メモリもあまり使わずに 1 2 3 4 -> 1 1 2 3 5 -> 2 1 2 3 6 -> 3 96 97 98 99 -> 3921221 96 97 98 100 -> 3921222 96 97 99 100 -> 3921223 96 98 99 100 -> 3921224 97 98 99 100 -> 3921225
スタック不可だとスタック操作が隠蔽されてる高級言語はほぼ使用出来ない 無理やりCやC++でやるとしてもローカル変数や関数呼び出しを殆ど封印しなければならない これを良い問題と見るか悪い問題と見るかは分からないが俺はやる気が出ない
>>599 組み合わせか 北大の湊 真一のZDD とか。 本も出てる お題:Hello, World!を出力せよ。ただし出力系の関数を使ってはならない。
>>601 すみません。>598の「スタック」はデータ構造としての利用のみを想定していて、他関数呼び出しの禁止などは意図してませんでした。 問題文が不明瞭ですみません。 >>600 ご期待に添えず申し訳ない。他のお題を思いついたら、また出題させていただきます。 お題: マップの広さと部屋の個数及び部屋間の繋がりが与えられた時、ダンジョンを作成せよ ・ダンジョンは部屋と通路からなる ・部屋は少なくとも3x4の大きさを持つ ・通路の幅は1 ・部屋同士は接しない ・マップ外に部屋や通路は無い 一応、想定としては標準出力に'#'と'.'で表示を考えてる 生成方法は自由だからゲーム的面白さのあるマップ作っても良い
解釈がいろいろあり過ぎて コードに対して仕様の説明文が必要になるぞ
>>604 >>598 の問題はおもしろいし、お題として成立していると思います ・再帰を使用しないマージソートを実装 ・作業領域を元のデータの半分の量しか確保せずにソートを実行する で考えているところです >>603 出力せよといいつつ、出力系は使うなとは、まるで一休さんのような まて、関数は、とある つまりはシステムコールを直につかうんだ!
>>603 じゃあC言語で。 #include <stdio.h> int main() {] >>603 #include <stdio.h> int main() { system("echo Hello, World!"); return 0; } >>609 システムコールの内部は関数 だったりして >>609 クラスもありかも知れない。クラスの中にはメソッドがある。メソッドはメソッドであって関数ではない。 あるいは procedure でも良いのかも知れない。procedure は手続きであって関数ではない。 サブルーチンもありかも知れない。 昔のマイコン用のBASICでVRAMに直接 POKE で値を書き込んだりするのもありかも知れない。 もはや一休さん並のトンチであり言葉遊びである。 関数を使わないとなると int 21 とかじゃないの?
>>603 J 'Hello, World!' REPL な処理系なら簡単 cat Hello, World! もはやプログラムですらない。
>>599 100この中から4個を選ぶことだから完全最小ハッシュ関数が使える >>603 紙にペンでHello, World! と書く。 >>603 紙にペンでHello, World! と書く。 「何々禁止で何々を書け」って類いの問題で面白くなることはあんましないな
質問一回許すとなし崩しに宿題だらけになるぞ。警告はした。
これ宿題じゃないですよ ここに書く前にコードも書いてたしもっと効率いい方法ここの人達なら知ってそうだと思ったから
>>599 1 2 3 4 -> 001002003004 97 98 99 100 -> 097098099100 >>619 のもっと効率悪い奴だよ 元は100C4じゃなくて28C4だったけど int cc[4][32][32]; こんな二次元の配列使ってた それの何が不満? 何をどう改善したいのかわからないと テーブル作成の速度? テーブル検索の速度? コードサイズ? バイナリサイズ? コードの分かりやすさや移植性?
605、出題しておいて何だがこれめっちゃ難しいな マップの大きさの制約があると通路引くのが難しすぎる
いちおう解けるのを自分で確認してから出してくれないと困る
>>643 一般に、再帰を非再帰に書き下すのは難しいのです… お題 ポーランド記法による計算機を実装せよ 演算子は加算(+)と乗算(*)をサポートすること * + 1 5 + 2 3 => 30 * * * * 2 3 4 5 6 => 720
>>645 Ruby 2.5.0 [ "* + 1 5 + 2 3", "* * * * 2 3 4 5 6" ].each do |_exp| exp = +-_exp nil while exp.gsub!(/([^\d\s]+) +(\d+) +(\d+)/){$2.to_i.send($1, $3.to_i)} puts '%s => %s' % [_exp, exp] end #=> * + 1 5 + 2 3 => 30 * * * * 2 3 4 5 6 => 720 お題 N個の整数(a_1, a_2, ..., a_n, ..., a_N)と*+/()を使った数式の値が、ある整数aにもっとも近い数式とその値(実数)を出力せよ 引き算はなし a_n = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>606 >>605 のは要はローグライクの部屋を作れってことだろ 出題者の説明不足 画像の1枚でも張れば見て分かる これ見た目では普通だけどかなり横に長い部屋なんだよな
>>654 今だと全角文字で作ればいいかな。絵文字もまじえて。 いやさすがに数学板でやれや。 国際数学オリンピックて自分で言うてるやんけ
数学とか使わずに総当たりでやってるのに数学板に行けとな
いやこれは総当たりでは計算量的に無理だろ コードは書けるだろうけど 存在することを帰納法で証明するしかないから数学板の問題だ
まーた数学コンプレックスが暴れてるのか 数オリに出るくらいの賢さがないから計算機の力も借りて解くっていう方向性は別にスレチじゃないだろ
ここでレスリングの話しだして苦言を呈されると「まーたレスリングコンプレックスが暴れてるのか」 極端に言うとこういうこと。 レスリング板、数学板があるだろ。 わざわざここでオナニーしたいのは専門以外の板でマウント取りたいのかな? そんなひねくれた根性だから現実世界でミジメな生活なんだよ。
早速暴れてて草 正攻法で数オリの問題を解く話を延々してたんならうざいけど 飽くまで計算機使って解いてみようぜって言ってる人にまでその理屈が当てはまるわけないだろ それとも数学だけじゃなくて論理的思考もできないタイプか?それなら納得だわw
数学で解ける問題をわざわざコンピューターでムダな解き方するの?? 突き詰めていくと数学で出した解法そのまま引き写すだけになるのが分かりきってるのに。
だからわざわざ「数オリに出るくらいの賢さがないから」って言ってるだろ日本語読めねえのかよ そりゃ灘の入試レベルならその通りだろうけど数オリで正解率1割切ってたような問題なんだから計算機使ったアプローチしてみるのもプログラミングのお題としては面白いだろ それともなんだ、円周率の計算だってペンと紙でできるんだから無駄だっていうのか?w そんな極論言うレベルの頭だから数学もできないんだよw
そういう無駄に一般化した話も結構だけど、 個別具体的な話として>>597 は計算機を併用することに効果が無いから数学の問題だと言ってるんだよ。 2018を解けるほど効率化できるなら既に人力で解けているだろうからね。 それは総当たり以外にうまい方法が思い浮かばないから言えるだけでしょうよ。 あと素数判定アルゴリズムなんか考えればわかるけど、効率化できることと人力で解けることに相関はないぞ。 少なくともスレチではないと思うよ。
部外者だが 嫌なら回答しなきゃいいだけなのに 何文句言ってるの? って感じ
そんなことより野球のはなししようぜ!嫌なら無視すりゃいいだけ。
アプローチ以前に >>597 の問題って存在するの それとも無いの 作るのは無理な気がするがよーわからん 一番大きい数値 1+2+…2018 = 2037171 は差の絶対値で作れないので最下段確定 一番大きい数値を出来るだけ上段に伝搬させるために小さい数値(1~2017)と組み合わせていっても最上段に残るのは 2018 → 2019 以上と組み合わせると 2017 未満の数値がダブる 最下段で 2037171 と 1 を組み合わせた場合、 2037169 も最下段に設置する必要がある 2037169 は 1~2018 の大部分と組み合わせられないので上のほうまで伝搬できずにアウト
その長々とした理屈は2018が7でも6でも同様のことが言えるよね そして7や6には解がある
>>673 適当に作ったプログラム(>>657 )じゃ5までしか見つかっとらんのだけど、6や7にも解あるんか 5以下の場合は数字が足りなくなる前に最大値からの流れに合流出来てるんじゃね?
数オリ経験者、東大数学科卒だけど 今度挑戦してみるか
>>679 質問です。 n>99の場合はズレが生じてくると思いますが、その時はどうしますか? それともn≦99で範囲を絞ってもよろしいんでしょうか? まぁ、私が作れるかどうか分からないんですがorz 難しそうだが良いお題だな こういうお題を考えられるようになりたい
>>680 nの大きさに合わせて-の数を決めれば、歪にならないと思うよ。 >>685 へ~やっぱ n = 5 までしかないんだな 後でちゃんと読んどくわ 出題者は自分で書けるのを一度確認してから出題してほしいわ
>>688 BF +>+<-][+[->+[+>-<]<]<+[>+[.>]-]-] >>688 awk Linux 用 awk '{printf "%.3f℃n", $1 / 1000}' /sys/class/thermal/thermal_zone0/temp 実行例 56.000℃ あれ?\n が抜けた。 これね。 awk '{printf "%.3f℃\n", $1 / 1000}' /sys/class/thermal/thermal_zone0/temp
鈴木貫太郎 灘中 中学入試問題シリーズ 整数問題 VIDEO 6桁の整数、5AB,C15 が999 の倍数である時、ABC を求めよ 答え A=8, B=4, C=4 お題:与えられた正の整数nを2進数~16進数に変換して表示する。 11進数以降の10以上を表す文字はABCDEFを使用。 (10=A, 11=B, 12=C, 13=D, 14=E, 15=F) 例:12進数の11 ---> B 出力例: n=123456 base(2) ---> 11110001001000000 base(3) ---> 20021100110 base(4) ---> 132021000 base(5) ---> 12422311 base(6) ---> 2351320 base(7) ---> 1022634 base(8) ---> 361100 base(9) ---> 207313 base(10) ---> 123456 base(11) ---> 84833 base(12) ---> 5B540 base(13) ---> 44268 base(14) ---> 32DC4 base(15) ---> 268A6 base(16) ---> 1E240
>>696 500015 + <ABC00> = 0 mod 999 <=> 4151 + <ABC> = 0 mod 999 <=> 4151 + <ABC> = 999*5 <=> <ABC> = 844 >>699 Ruby #!ruby -p b, n = $_.scan(/\d+/).map &:to_i puts n.to_s(b).upcase #=> 12進数の11 B 2進数の123456 11110001001000000 3進数の123456 20021100110 16進数の123456 1E240 >>696 何も考えてないPerlのワンライナー perl -e 'for(0..999){$n=sprintf"5%03d15",$_;if($n%999==0){print"$n\n"}}' 584415 >>699 Linux等で動くGNUのbcコマンド プログラムをファイルに入れておいてbcの引数で指定し、変換させたい数値は標準入力から読ませる。 ibase = 10 n = read() for (i = 2; i <= 16; i++) { obase = 10 print "base(", i, ") --> " obase = i print n, "\n" } >>700 既出でしたか 失礼しました では追加でもう1つ お題: 時間を表わす文字列(hh:mm:ss形式の8文字)の秒数を求める 最上位の時間だけは99時間を超えた場合拡張される 例:123時間45分6秒 ---> 123:45:06 出力例: 01:23:45 = 5025 sec 333:33:33 = 1200813 sec 出題者の回答例:C言語 https://ideone.com/pnrcQ6 >>706 Ruby ゴルフ気分で #!ruby -palF: $_='%d sec'%(0..2).map{|i|$F[~i].to_i*60**i}.sum # input 01:23:45 333:33:33 # output 5025 sec 1200813 sec Ruby では百万までで、処理に数秒掛かって、78,498個の素数があった class PrimeNumber # 素数 def initialize (to = 20) @to = to @prime_numbers = [] end def add_table (n) limit = Math.sqrt(n).ceil @prime_numbers.each do |prime_num| # 割り切れたら、素数ではない return if n % prime_num == 0 # sqrt より大きいなら、確かめずとも素数である break if limit < prime_num end @prime_numbers.push n # 割り切れない end def print (2..@to).each do |n| add_table n end puts @prime_numbers.length end end
>>713 perl 一応これで理屈の上ではできるとは思うんだが、477577まで行ったところでアホらしくなって止めたw #!/usr/bin/perl use strict; use warnings; my @pn = (2); my $n = 1; print "$n: $pn[0]\n"; $n++; LOOP: for (my $i = 3; $i <= 10000000000000; $i += 2) { for (@pn) { next LOOP unless ($i % $_); } push(@pn, $i); print "$n: $i\n"; $n++; } >>713 昔やった アセンブラ & AVX & マルチスレッド 探してみる みつかりました そんなに昔じゃなかった 2年半前 41兆くらいまで求めてます マルチスレッドではありませんでした 処理内容はよく覚えていません 素数表作成 ビットパターン作成 ふるい のようなコメントがあります 105単位でなにかやってます
だんだん思い出してきました 6n+1, 6n+5 に対応するビット列を保持 小さな素数の倍数はマスクを作ってAVX命令でANDしていって 大きな素数の倍数はp(210n+48個の値) にしぼって ビット命令でひたすらふるう感じ キャッシュサイズを考えて小さなバッファでやってます
お題: ロト6で申込数字のいずれかが必ず5等以上に当選する 最小の申込数字の組み合わせを作ってください ロト6は01~43の数字から異なる数字6個を順番不問で選び 申込数字6個のうち3個以上が本数字と一致すれば5等以上に当選となります
>>721 ・5等の当選条件を満たしている ・5等以上のいずれかの当選条件を満たしている この2つは同値なの? >>723 1~5等に該当するならば必ず当選番号と同じ数字が少なくとも3つ入っているということがはっきりしない限り解けないでしょ ごめん 申込数字6個のうち3個以上が本数字と一致すれば5等以上に当選となります を 申込数字6個のうち3個以上が本数字と一致すれば5等に当選となります と読み間違えてたわ
>>724 は 3個以上一致 <===> 5等以上に当選 3個以上一致 ====> 5等以上に当選 のどちらかをたずねたのかと思った >>730 そもそもこっちが>>722 と>>724 で「申込数字6個のうち3個ちょうど本数字と一致すれば5等に当選」って誤解してたのが始まりなんだ わけわかんないこと言ってごめんね >>706 Squeak Smalltalk ('01:23:45' subStrings: ':') reversed polynomialEval: 60 "=> 5025 " ('333:33:33' subStrings: ':') reversed polynomialEval: 60 "=> 1200813 " Pharo Smalltalk (('01:23:45' substrings: ':') collect: #asInteger) reversed polynomialEval: 60 "=> 5025 " (('333:33:33' substrings: ':') collect: #asInteger) reversed polynomialEval: 60 "=> 1200813 " >>713 Squeak/Pharo Smalltalk で 100億まで | count | count := 0. Integer primesUpTo: 1e10 do: [:prime | count := count + 1]. count '=> 455052511 ' 組み込みだけど、書くとしても同じアルゴリズムで書くと思うので… https://ideone.com/zKMZYx >>734 >>721 って、 ・抽選される6個の数字が43C6通りのどの組み合わせでも5等以上が当たるようにくじを買う。 ・くじの購入数はできるだけ少なくなるようにする。 ってことじゃないのん? >>735 いいのかこんなんで? cd /etc grep localhost hosts >>735 訂正 お題:LANに繋がっているホストの一覧を出力しなさい >>741 Linux 等の UNIX 系OSで ping -b ブロードキャストアドレス とやると同じセグメントに繋がっているやつは ICMP ECHO を返して来て IP アドレスが分かるかも知れない。 但しファイヤーウォールの設定で返さないかも知れない。また他のセグメントにはパケット送らないのでわからない。 あ、ごめん。これは IPv4 限定の話かも知れない。
身長と体重がいくつか与えられるのでBMIを求めなさい なお身長と体重は1以上1000未満の整数とする 出力精度は小数第三位を四捨五入 各言語で一番短くかけた人が勝ち 例 ruby while gets end # input 150 50 160 55 180 120 # output
ミスった。 単位は身長cm, 体重kg 例 ruby while gets h, w = $_.split.map &:to_i puts '%.2f' % (1e4 * w / h**2) end # input 150 50 160 55 180 120 150 225 # output 22.22 21.48 37.04 100.00
鈴木貫太郎 灘中 VIDEO 6桁の整数、ABCDEF の一番上の位のAを、 一の位へ移動した数、BCDEFA が、元の数の3倍になるとき、 この条件を満たす、元の数をすべて(2つ)答えよ ヒント。x = BCDEF とおいて考える 答え、142857, 285714 >>744 Ruby 43 bytes #!ruby -pa $_='%.2f'%eval('1e4/'+$F*'**2*') >>750 3 * ABCDEF = BCDEFA ∧ A != 0 <=> 42857 * A = BCDEF ∧ A != 0 <=> 42857 * A = BCDEF ∧ A = 1, 2 <=> ABCDEF = 142857, 285714 お題:【構造のあるテキストの処理】各項目の内容をそれぞれソートして元のテキストに埋め込め。 ====== 標準入力 ========== * Fruit apple banana orange banana * Animal dog cat penguin ====== 標準出力 ========== * Fruit apple banana orange * Animal cat dog penguin 条件:ソートには外部コマンドを用いること。
ソートに外部コマンドを使うのは、テキストの処理を取り替える拡張を想定しています。 例えば sort -u コマンドを tr '[a-z]' '[A-Z]' に置き換えて * Fruit APPLE のようにできるようにしたい。 UNIXプログラミング質問スレにて、 このような処理はシェルスクリプトには荷が重く Powershell や Ruby が向いている、みたいなことを伺いました。 ぜひ回答を参考にしたいです。
>>758 Ruby ext_cmd = 'sort -u' ary = $<.read.scan(/\*.*?\n(?:(?=\n)|\z)/m) str = ary.map.with_index do |s, i| temp_fname = "temp#{i}" File.write(temp_fname, s[/\n\K.*/m]) heading = s[/\A.*/] execed = `#{ext_cmd} #{temp_fname}` File.delete(temp_fname) [heading, execed] * $/ end puts str * $/ catを使うように修正 catのヒアドキュメントさえ使えれば一時ファイル作らなくて済むんだけど ext_cmd = 'tr a-z A-Z' ary = $<.read.scan(/\*.*?\n(?:(?=\n)|\z)/m) str = ary.map.with_index do |s, i| temp_fname = "temp#{i}" File.write(temp_fname, s[/\n\K.*/m]) heading = s[/\A.*/] execed = `cat #{temp_fname}|#{ext_cmd}` File.delete(temp_fname) [heading, execed] * $/ end puts str * $/
>>758 zsh setopt rcquotes; sed -n '/^*/h; /^*/!{x;p;x;p;}' | paste - - \ | awk -F' ' -v OFS=' ' '$2 { print $1,$2 } ! $2 { printf "%c",0 }' \ | xargs -0 -n 1 -I@ -- zsh -c 'echo ''@'' | tee >(read -e | cut -f 1) | sed ''$d;'' | cut -f 2 | sort -u ;echo' null区切りでチャンク分け。構造がもっと複雑になるとこの方針では対応できない。 単純に、別々のファイルに、分割すれば良いのでは? * Fruit のファイル * Animal のファイル 各ファイルを、sort, unique する
一旦、別々のファイルにしたなら、PowerShell で、 cat .\test.txt | sort | gu gu は、Get-Unique のエイリアス。 漏れのPowerShell では、uniq のエイリアスは使えない
>>767 Linuxのディストリビューションでは最初からインストールされてるのがよくあってある程度有名で、sh互換でshしか知らなくても書けるからではないかな。 それとWebの実行環境があるというのも理由かも。こういう所で公開するのには都合が良い。 >>769 そうなんですね! みんなの回答見てると正規表現や少ないコードや難しい表現でコーディングできてて関心します‥ 自分にはとても到達出来ない‥ >>758 zsh setopt rcquotes; sed -E -e 's:^(\* .*):{ echo ''\1''; sort -u; echo } << *:' -e 's:^$:*:' | zsh xargsの区切り文字の辛さからは開放されたが、echo ''\1'' がイマイチだ。 なるほど、構造のあるデータはむしろファイル階層として表現したほうが自然か… >>758 Vim $ cat odai-pt11-758.input | vim -es '+:g /\%(^\*.*\n\)\@<=/,/[ \t\n]*\%(\n\*.*\|\%$\)/ !sort | tr a-z A-Z | nl' '+%p' '+:q!' /dev/stdin * Fruit 1 APPLE 2 BANANA 3 BANANA 4 ORANGE * Animal 1 CAT 2 DOG 3 PENGUIN $ 64ビットWindows10 なら、WSL で、Ubuntu を入れると、 bash, vim, Python は最初から入っている WindowsのExplorer では、BOMなしUTF-8 のファイルは検索できないから、 WSL でLinux側から、grep で検索している シェルスクリプトの欠点は、パイプラインがテキスト渡しになる。 オブジェクトの型が無くなって、すべて文字列になる 一方、PowerShell ではオブジェクト渡しだから、オブジェクトの構造・型が維持できる >>758-759 外部コマンドを切り替えるという抽象的な処理を、処理間にはさむのは難しい。 すべての処理の冒頭か最後で、一括でフィルターする方がバグらない >>773 なるほど… Powershellでの完全な回答例を見せていただけませんか? 標準入力からファイルに落として出力に吐くまで。オブジェクト渡しの雰囲気を感じたいです。 Set-PSDebug -Strict # 変数宣言を強制する $file = ( cat in.txt ) # 入力ファイル $dat_basenames = @() # 拡張子なしのファイル名の配列 foreach ( $line in $file ) { # 各行 if( $line.Length -eq 0 ){ continue } # 空行は処理しない if ( $line.Substring( 0, 1 ) -eq '*' ) { # 1文字目が、* なら $fname = $line.Substring( 2 ) $dat_basenames += $fname # 追加 $fname += '.dat' # 拡張子つき } else { Add-Content $fname $line # 追記 } } foreach ( $dbname in $dat_basenames ) { # 各 .dat ファイル $fname = $dbname + '.dat' # 拡張子つき $str = "* ${dbname}`r`n" $tmp = cat $fname | sort | gu # sort, unique $str += ( $tmp -join "`r`n" ) # 改行区切り echo $str } PowerShell で作った。 cd で、作業フォルダへ移動してから実行して 入力ファイル、in.txt から、各ファイルへ分割する。 分割後のファイル名を、Fruit.dat, Animal.dat として、各ファイルを処理した
点が10個一直線に並んでおり、各点が他の点との右方向の距離をいくつか知っている時、最も左にある点を求めよ 最も左にある点が求められない時はあと何の情報があれば求められるのかを最低個数で列挙すること 例1 a,b,cの点がある。 a点はb点が30右にあることを知っている。 b点は何も知らない。 c点はb点が-40右にあることをしっている。 結果 最も左にある点はa点 例2 a,b,c,dの点がある。 a点はb点が30右にあることを知っている。 b点は何も知らない c点はd点が20右にあることを知っている。 d点は何も知らない。 結果 求められない。必要な情報は a点からc点までの距離
>>776 実際に自分で書いてみて、求められたら解答例を提示できる? 「知っている」の主語が点に見えるけど そうじゃないよね? なんでそういう文にしたの?
連結リストを使って、出来上がったグラフが連結なら求められる つまり、出来上がったグラフが二つ三つそれ以上に分かれている非連結グラフになってると、距離は分からない ……直感的には多分こうだが、何かしらの証明は必要 「連結グラフだが距離が分からない」反例があればいい
>>776 点が10個あるなら例1,2両方とも判断不能。どっちもあと最低7個必要 しかも直線がRなのかR∪∞∪-∞なのかで解が変わるから提示しろ あと出力はともかくデータの与えられ方くらい提示しろ text = File.read 'in.txt' # 入力ファイル header = "" str_hash = { } result = [ ] def sort_string ( head, hash, res ) res.push head Hash[ hash.sort ].each_key { |key| res.push key } # sort hash.clear # 空にする end text.each_line do |line| # 各行 line.chomp! # 末尾の改行を削除する next if line.empty? # 空文字は処理しない if line.start_with? '*' # 先頭文字が、* なら sort_string( header, str_hash, result ) unless str_hash.empty? # 空でなければ header = line else str_hash[ line ] = true end end sort_string( header, str_hash, result ) puts result Ruby で作った。 PowerShell よりは断然、作りやすい。 ただ、sort_string( ) を2か所で呼ぶのが、ダサイ
お題 将棋の初期状態の駒40枚を 利き筋に他の駒がないように配置する
明記されてない条件は好きにしていいのがこのスレのルールですよ
お題を出す前に出題者は自分の解答を(解くことが可能かの確認も兼ね)作っておくのもルールだ 適切な入出力例や問題文にあるべき条件が抜けてるっていうのはそれをやってない証拠
>>782 有名な作品がいくつかあるね 全て同じ方向を向いたヤツも >>783 全ての組み合わせを数えた人がいるの? トランプの配置についてのアルゴリズムを考えてます。 トランプの横幅をX トランプの高さをYとし 並べるトランプは偶数枚 全てのトランプを配置した時の全体を、トランプ配置と呼ぶとして トランプ配置の横幅と縦幅の割合を、おおよそX:Yとしたい この場合、アルゴリズムはどう考えたらいいでしょうか?
ゴリ押しの総当たり 並べる枚数横にx縦にyが無尽蔵に大きくなれば比率に近づく 並べるトランプの上限が決まって無くて偶数枚だけが条件なら延々と並べる枚数を増やせばいい 一兆枚くらい並べれば比率はX/Yに近づく 1000000000億兆枚くらいのトランプを使えば横幅X高さYなんて充分に蟲出来るから全体の割合を調整するのは枚数が多ければ多いほどラク 10那由多ほど並べれば、本当にカードは点くらいなもので、縦横比率はx、yの枚数だけで決まる
>>787 おおよそとかいまいちよくわからん 例を示して >>788 バカなの? > 並べるトランプの上限が決まって無くて偶数枚だけが条件 なら、縦横2枚ずつ(計4枚)並べればいいだけ n枚をnX nYの長方形の対角線上に斜めにならべれば X:Yになるけど 問題あってる?
>>787 ┌─┐ │ ?│ └─┘ これを偶数枚並べて縦横比同じにするなら こうだよね ↓ ┌─┬─┐ │ ?│ ?│ ├─┼─┤ │ ?│ ?│ └─┴─┘ アルゴリズムもクソもないように思うのだが? 問題の書き方間違ってない? 枚数nに対して p * q = n を満たす正の整数 p, q の内 |p - q| / |p^2 + q^2| が最小になる組み合わせを求めるだけでしょ?
http://2chb.net/r/tech/1480579110/981 に引き続いて、現に困ってしまった問題を出題 windows コマンドラインの xcopy コマンドを実装せよ コマンドラインから「xcopy パス1 パス2」 と入力すると パス1 以下にあるファイルをすべてパス2以下にコピーするようにせよ ディレクトリについては、再帰的にコピーせよ ・現実の xcopy コマンドには色々なオプションがあるが、それは実装しなくてもよい ・読み込み対象のファイルの属性については考慮しなくてよい、読み込めるファイルのみ所定のパスにコピーできればそれでよい ・その他、コピーに問題のある状態が発生したときには、標準エラー出力にエラー内容を表示すればそれでいい Windows Update の度にPCが激遅になるのに堪えかねて、C ドライブを SSD に換えることにしました。OS は再度インストールしなおすつもりです。 現在の C ドライブの内容は別途コピーしておいて、困ったときには参照できるようにしたいと思いました。 ところが、「xcopy c: x:/tmp」とすると、「メモリーが足りなくなった」といって途中で止まるのです…困りました… >>795 条件を追加します ハードリンクやシンボリックリンクは考えなくともよい xcopy パス1 パス2 のパス2 がパス1 の下にある場合、実装がまずいと永遠にコピーし続ける困ったことになるが、それも考慮しなくてもよい (今回やりたいことは、「xcopy c: x:/tmp」であるので、これが問題なく動けばそれでよい…) >>795 Windowsならエクスプローラ使ってただコピーするのでは何か不都合があるのか? まあ、お題としてそういうのなしで作れというのはアリだが、なんとなくWindowsの場合はエクスプローラが使っているのと同じライブラリ関数を一回呼び出すだけで終わってしまいそうな気がしてならない。 xcopy ではなく、robocopy を使えば?
>>792 他の人も勘違いしてるけど、横縦比をx:yにする問題だよ。おおよそらしいけど。 >>802 トランプの横幅がYで高さがXでしょ? で、偶数枚並べてX:Yにするんでしょ? 4枚でなるじゃん。およそどころかぴったりX:Yに。 >>809 >適切なスレ って、あなたはどこを想定しているのですか? >>805 流石に与えられた枚数は全て使うだろ アスペかよw とりあえず>>787 はちゃんと問題書くか取り下げるかしろよ… >>813 近似値も想定している文意から汲めないならアスペ >>816 ぱっと見て カードの数nとカードの縦と横の長さx, yが与えられたときに 総てのカードを並べて作った矩形の縦と横の長さをX, Yとして |X/Y - x/y|が最小になるような(X, Y)を求める問題かと思ったんだけど というか>>787 は言葉足らず過ぎるしアスペ云々は言い過ぎだったわすまん n枚を矩形になるように並べる なんてことは書いてないけど あと 『|X/Y - x/y| が最小』 は数学的センスが無い x,yを入れ替えても値が変わらない誤差の定義にしたい
>>818 矩形じゃないと縦幅と横幅が定義できないからそこはいいんでない? >『|X/Y - x/y| が最小』は数学的センスが無い はその通りだね m := min{x, y}, M := max{x, y}, λ_x = X, λ_y = Y として として |m/M - λ_m/λ_M|の最小値を求めるべきだね >>819 前半 どんな形に並べても縦と横の方向が決まっていれば縦幅と横幅はある >>819 後半 さらにセンスが無い >>820 『どんな形に並べても縦と横の方向が決まっていれば縦幅と横幅はある』 これは偽 少しは検討してから書き込んだらどうなんだ 後半が理解できないなら「テンソル」で調べてね 横方向をx軸、縦方向をy軸としたx, y平面上に トランプを並べるとする 有限サイズ(>0)のトランプを有限枚(>0)並べるので トランプは有界で非空 xの上限 - xの下限 = 横幅 yの上限 - yの下限 = 縦幅
>>822 勝手な距離空間持ち出してこないでくれませんかねぇ 勝手な距離空間www 後に引けなくなってさらに痛くなる
はいはい。頭いいね坊や 今度からは算数をきちんと勉強してからレスしてね
お題:標準入力から(で始まり)で終わる顔文字が与えられる。この顔文字を太らせて標準出力に出力しなさい。
>>830 ちげーよ、出題者ならまともな条件追加してるわw 自分では何も提示しないのに難癖つけてくるアホがうざったいだけ トランプを並べる問題で 非ユークリッド空間を前提にしちゃう 頭がおかしい人
頓珍漢なオレオレ解釈提示してドヤってる方がウザいわ
>>787 並べるのが矩形に限らないのであれば >>791 のとおり任意の枚数で可能 矩形に並べるとして 枚数が与えられないなら>>792 のとおり4枚で可能 与えられるなら>>794 のとおり 与えられた自然数を最も僅差の2つの自然数の積で表す問題と同値 ただこの場合、問題文の不備を不問にしても >並べるトランプは偶数枚 って条件がなぜ必要になるのか疑問が残るが… いずれにしても問題としては終わってるので これ以上長引かせるのは不毛 × 問題としては終わってる ○ 人間としては終わってる
どこからも 矩形に隙間なく並べる とは読めないのだけど
書かれていない条件は勝手に解釈すればいい その条件の問題を解くのが楽しいと感じるならその条件で回答すればいいだけ グダグダと問題自体を統一する必要は無い
>>839 「問題を解く」という言葉がふさわしいような条件が見つからないから困っているわけで >>247 java pastebin,com/7cnjtkNG >>846 変数宣言を増やせばいくらでも行けるけどこれが限界かも リフレクションはやっぱりクソだな >>247 Squeak Smalltalk, インスタンス変数で254個まで | obj n limit | obj := Object new assureUniClass. n := 0. [[obj addInstanceVarNamed: 'i', (n := n + 1) asString withValue: n] repeat] ifError: []. limit := obj class instSize. "=> 254 " obj instanceVariableValues asArray = (1 to: limit) asArray "=> true " 自然数nに対して 3Σ_{k = 0}^{2n}(-2)^k / (2n + 1)^2 が整数となるnを総て求めよ
>>849 数式というか文字が何を表しているのか分からない。最初の { の直前の _ は何を意味するんだ? 更に { } で括った部分と ( ) で括った部分の違いは? まあわかったとしても解く気は起きないかも知れないので面倒なら解説しなくても良い。 >>849 じゃないけど _はΣの下 ^はΣの上 テキスト限定でのよくある表記 >>849 は数学オリンピックのマスターデーモンだな 答えはn=0, 1のみ >>857 あれ?そうなの? じゃあプログラム何か間違ってんのかなあ? >>860 double型の精度の問題 計算結果は指数関数が支配しているからnが大きくなると有効桁数が足りなくなる >>861 なるほど。とすると32以上はもうダメな値ってことだな。 かといってBigDecimalとか使って延々と計算しても意味ないな。 数学的に答え出てるし。 質問スレからパクってきた配列の易しい問題 質問者は他レス見るにプログラミング自体経験なさそうだが 893 デフォルトの名無しさん (アウアウカー Sa8f-aTuM [182.250.241.36])[sage] 2018/09/08(土) 21:43:04.65 ID:6/Xg/XCUa どこで質問するべき内容なのか迷っていたのですが調べているとプログラミング関係のようなのでここで質問させていただきます 例えば 1~50までの数字の中で数字を10個ランダムで選ぶ乱数ツールは検索するとすぐにでてきます しかし、自分が求めているものは2つあり ① 1~50までの数字の中で2.16.22.23.42.50を除いて10個ランダムで選ぶことができるもの ② 1.2.5.6.16.18.20.21.23.28.30.33.39.4047.49.50の選択した数字中から10個ランダムで選ぶことができるもの ①と②で挙げた数字は適当ですが場合によっては①で除外した数字や②の選択した数字は変えたいです このような場合自分でプログラミングしないといけないのでしょうか?
>>864 Squeak/Pharo Smalltalk "①" ((1 to: 50) copyWithoutAll: #(2 16 22 23 42.50)) shuffle first: 10. "②" #(1 2 5 6 16 18 20 21 23 28 30 33 39 40 47 49 50) shuffle first: 10. >>864 Ruby ([*1..50] - [2, 16, 22, 23, 42, 50]).sample(10) [1, 2, 5, 6, 16, 18, 20, 21, 23, 28, 30, 33, 39, 40, 47, 49, 50].sample(10) というか1~44までの数字の中で数字を10個ランダムで選ぶ乱数ツール使えばいいだけなのに質問者が謎 ロト6を当てたい一般人だろ そんくらいは察してやれよ
イ '、 / ハ ', i ハ ノ | i、 | r‐-、 ,...,, | リ从-ノ ノリノノ-)リ、 l :i! i! |: : i!| | リ ‐=・-; -・=‐ Y l イェ~イ~プログラミング好きなオタクみってるう?なんJ民デース! ! i!. | ;| . .i从 | ` ̄,:  ̄´ |从! i! ヽ | | i リ,i ゚人,,__,,人:. | リ} ゝ `-! :|! . ハ: i. , __ij..__ 、: 'iノ´ r'"~`ヾ、 i! 彡、 `Ⅶエlフ'´ /ミ ,.ゝ、 r'""`ヽ、i! 彡イ\ ` ̄´ / ト ミ !、 `ヽ、ー、 ヽ _/ ∧ > ―< ∧ \ | \ i:" ) ─ ' ¨: : : : | \ / |: : : \
なんj書き込んだキッズ 今度から一人で解決しようね🤗
ここになんjに助けを求めたガイジはいませんかー?🙋 負け犬は何処かな🤔
なんJにスレ立ててまでするチンパンジーが見れると聞いて来ました
恥ずかしがらずに出てこいよ😘 ガイジくん😁 それとも顔真っ赤で出てこれないかな?🤔
意味わからないんだがw ハンJでしょうもないプログラミングの質問した人がいたってことか?
また日本語怪しいじゃん君なんJでもまともに喋れなかったよね?
>>900 でなんjをハンjと打ち間違える時点で通報騒動知ってるやつやん >>872 で自分に都合の悪いレスつくと本人認定するような奴だしなんでもかんでも人のせいにしてきたんだろうな あ、これ俺に成りすまして他板でクソスレ立てて人をこっちに呼び込んでんのね 今理解したわ このスレの住人なら>>870-871 程度のことで他の板にスレ立てるわけないってわかってもらえると思うけど 荒れると嫌なんでしばらくROMりますわ 単発ばっかだし質問を小馬鹿にされた質問者が自演で荒らしてんだろ いちいち反応すんなkz
>>909 kzとかいつの時代やねん お前はミスターアンモナイトかwwwww a-zからなる単語のペアが与えられるのでそれぞれの元を辞書順にソートした上で同値類を求めなさい なお同一のペアが2度以上入力されることはなく、また出力時の各行は順不同とする 例 -*- input -*- goose pigeon cat dog eel goldfish goose duck horse dog cod eel dove pigeon dog rhino goldfish squid goose lark -*- output -*- dove duck goose lark pigeon cat dog horse rhino cod eel goldfish squid
>>912 入力のペア"A B"は A = B を表しているものとして等しいもの同士をグループにまとめて出力してねという問題 正確には「同値類に分割せよ」か「商集合を出力せよ」と言うべきだったか 例えば S = {A, B, C, D, E, F, G} に対して A = B, C = A, D = F, E = G ……(☆) が成り立っているとすると S の全ての要素は A = B = C と D = F と E = G っていう同じもの同士に分類できるよね で (☆) の下で A の S における同値類とは {A, B, C} のことであり、 (☆) の下での S の商集合とは {{A, B, C}, {D, F}, {E, G}} のことを言うよ 問題を解く上で数学的な要素は無いから数学の言葉を使わないで出題すべきだった >>911 Squeak Smalltalk | input groups | input := 'goose pigeon cat dog eel goldfish goose duck horse dog cod eel dove pigeon dog rhino goldfish squid goose lark'. groups := OrderedCollection new. input linesDo: [:line | | pair | pair := line subStrings. (groups detect: [:group | group includesAnyOf: pair] ifNone: [groups add: Set new]) addAll: pair ]. (groups collect: [:each | each asSortedCollection joinSeparatedBy: ' ']) asStringWithCr "=> 'dove duck goose lark pigeon cat dog horse rhino cod eel goldfish squid' " >>913 それは良いとしても>>911 の問題における同値類とはなんなのか? 例として出されているのは入力が動物の名前のようで、出力は重複をなくした上で大まかな種類ごとに分類されているようではある。 しかしこのそれぞれの分類は一体いかなる基準によって同じと判別したのか? もしこれが単語の意味、およびそれの分類(動物なら四つ足だとか哺乳類だとか)によって分けなければならないとすると、単語の意味やその分類がプログラムの側でわかっていなければならない。 しかも入力にはどんな単語が来るかわからないというのであれば辞書並みの単語数に関してそれを保持していなければまともに分類できない。 >>914 え?それでいいの?ペアになってるなつが同じ種類ってこと? なるほど。また最初の問題が不備で無限の回答が出るか一つも回答が出ないパターンだったと。
見た感じ問題に不備はない まだ何か勘違いしてるのでは
>>911 Squeak Smalltalk (>>914 は入力順等によっては機能しないので差し替え) | fn input | fn := [:str | | groups | groups := OrderedCollection new. str linesDo: [:line | | pair found | pair := line subStrings asSet. found := (groups select: [:group | group includesAnyOf: pair]) ifEmpty: [{groups add: Set new}]. groups removeAll: found; add: (found inject: pair into: #,) ]. (groups collect: [:group | group asSortedCollection joinSeparatedBy: ' ']) asStringWithCr ]. input := 'goose pigeon 以下略'. fn value: input. "=> 'cat dog horse rhino cod eel goldfish squid dove duck goose lark pigeon' " fn value: input, String cr, 'squid lark'. "=> 'cat dog horse rhino cod dove duck eel goldfish goose lark pigeon squid' " >>917 「それぞれの元を辞書順にソートした上で」 これは間違いってことね。 cat dog horse rhinoとかってアルファベット順に出力するよう要請してるのだから少なくともそのフレーズに間違いはないよ
>>911 「cat cat」とか重複するペアとか任意のペアが来てもオッケーなバージョン def qs(er) h = Hash.new Float::INFINITY erc = 0 er.each do |r| min = r.map{|e| h[e]}.min ern = min == Float::INFINITY ? erc += 1 : min r.each{|e| h[e] = ern} end h.group_by(&:last).values.map{|s| s.map(&:first).sort} end er = $<.readlines.map &:split puts qs(er).map{|a| a * ' '} * $/ #=> dove duck goose lark pigeon cat dog horse rhino cod eel goldfish squid >>926 よーわからんがペアの両方が既知の場合のマージ処理が抜けてない? A B C D A C の場合とか >>911 の例をマージが必要になる順とかにしといてくれてれば… >>911 perl %h; while(<>){ chomp; ($f, $s) = split/ /;#first, second undef $keyf; undef $keys; for $k (keys %h){ $keyf = $k if grep /$f/, @{$h{$k}}; $keys = $k if grep /$s/, @{$h{$k}}; } if(!defined $keyf and !defined $keys){ push @{$h{$.}}, $f; push @{$h{$.}}, $s; }else{ push @{$h{$keys}}, $f unless defined $keyf; push @{$h{$keyf}}, $s unless defined $keys; } } map{print join " ", (sort{$a cmp $b}@{$h{$_}}), "\n"}keys %h; >>927 両方が既に入ってるなら何もする必要ないと思うのだが。 >>911 >>932 %h; while(<>){ chomp; ($f, $s) = split / /;#first, second undef $keyf; undef $keys; for $k (keys %h){ $keyf = $k if grep /$f/, @{$h{$k}}; $keys = $k if grep /$s/, @{$h{$k}}; } if(!defined $keyf and !defined $keys){ push @{$h{$.}}, $f; push @{$h{$.}}, $s; }elsif( (defined $keyf and defined $keys) and !($f eq $s) ){#merge push @{$h{$keys}}, @{$h{$keyf}}; delete $h{$keyf}; }else{ push @{$h{$keys}}, $f unless defined $keyf; push @{$h{$keyf}}, $s unless defined $keys; } } map{print join " ", (sort{$a cmp $b} @{$h{$_}}), "\n"} sort{$a <=> $b} keys %h; >>932 あー。なるほど。そういうことか。 また考えよう。 >>935 差し支えなければ修正前のコードも別URLで再掲載してもらえますか? あるいは公開バージョンの履歴や差分を参照する機能がpaoza.ioにあったら教えてください くしくもマージを考慮「しない版」と「する版」が出揃ったのでどういう修正で対処したか調べると それぞれの言語の(あるいはアルゴリズムの)特徴が際立って面白いのではないかなぁとふと思ったので >>936 すまん。前の版はもうない。paiza.ioはそういう機能はない。 思い出して時間があったらなんとかする。 >>937 あーいやそこまでしなくても結構です。ありがとうございます! 結構みんな人の書いたコード読んでるんだな いい意味でびっくり
>>952 あくまでも過去の出題例、だからいいんじゃないですか? アウトかセーフか分からないときは答え公開しないほうが無難
>>955 アウトになる条件は、「エントリー後メールにて送付されるコーディング試験問題は、当社への応募以外の目的で無断使用しない」…① だが、>>951 のリンクの問題は「エントリー後メールにて送付されるコーディング試験問題」ではないから①に反しない…② さらに、無条件に誰でも見ることのできる問題であること…③ ②よりアウトではないと断定できるし、③が②の結論を補強する 結論として、>>951 のリンクの問題を公開しても問題ない >>955 「アウトかセーフかわからない」という結論にどういう道筋で到達したの? お題:コンプリートパネル(出展:高校生クイズ2018) 5×5のパネルが与えられる。各パネルは赤色か白色である。 各パネルに侵入すると、そのパネルの色が赤なら白、白なら赤に変化する。 最初のステップは、場外(左下のパネルの左隣)から左下のパネルへ侵入することである。 以降のステップでは、上下左右に移動することができる。 ただし、ひとつ前のパネルや場外に移動することはできない。 すべてのパネルを白色にするための移動経路を構成せよ。 WWWRR WWWWR WWWWR WWWRR RRRRW => 10 RRRRURUUUL (→→→→↑→↑↑↑←) WWWWW WWWWW WWWWW WWWWW WWWWW => 0 (移動の必要なし) WWWWW WWWWW WWWWW WRWWW WWWWW => 21 RRRRULULLDDRULURRDRDL (必ずしも最短経路である必要はない)
>ひとつ前のパネルや場外に移動することはできない 全部踏めばいいんだからライツアウトの解法の亜種で解けるんじゃねえの
状態を変えずに任意の場所まで移動できるなら 6箇所だけそれぞれ1つだけRだった場合を計算してあとは回転なりなんなりして重ね合わせればいけるな
↑ □□□ □□□→ 2*3の全パターンで、この二つの方向のどちらかに抜ける経路が存在すればいい あとは合成で何とかなる
うーん。これはブルートフォースでやろうとするとかなり無駄が多くなって時間とメモリを山盛りに食いそうな予感。
5x5=25マスの赤or白の2値だから25bit、現在位置25通り(5bit)に前回位置相対で4通り(2bit)、あわせて32bitパターン?
5x5は序の口で、100x100くらいが本命でしょう ついでに最短の最適解も 問題も作るだけならラクだから1000x1000だって0.1秒程度で作れる もちろん解くのは面倒
>>957 手でしか試してないけど 解けないパターンとかありそうな予感 プログラム考える以前に解くためのいいアルゴリズムが思い浮かばん
辺の長さが3以上の時は戻るの禁止ってルールは実質的に無視できそうだな というのも閉路を2周すれば元通りに戻るわけだから xxx x↓x x↑x 上に行ってまた下に戻るって進みたいときは →↓x ↑←x // 中央「←」を3回目に踏むときは下に進む x↑x ってすればいいわけで 2*2 かどちらかの辺が 1 の場合以外は任意のパターンで解があることになる
RWWWR WRWWW RWRWW RWWRW WRRWR 全てのパターンが解けて最長がこの形で44手かかる となったけどできたばかりだからまだまだバグがありそう
https://ideone.com/S7UA0k 表示までできるようになったので ここでは5秒超えるので結果表示されないみたい 10年前のノートで2分半かかる 結果はこんな感じ - - - - - - - - - - - - - - - - x - - - - - - - - RRRRULDRULLDL 13 x - - - x - x - - - x - x - - x - - x - - x x - x RRRRRUUUULLLLDDDDRRRURUULDLDDLUURDLURRUULLDL 44 >>962 の理屈上なら>>971 のstepの累積和が3,355,443,200(=25<<27)になった時点で全通り出たことになって最短の上限になるのかな? 連続殺人犯が全ての目撃者を消して完全犯罪を目論む 文字列のペアがn対与えられる。 s(1),t(1) ... s(n),t(n) この時、ペアを適切な数選び適切な順番で並べる事で s(a1)s(a2)...s(ak) = t(a1)t(a2)...t(ak) とできるかどうか判定せよ (ペアを重複して選ぶのもOK)
>>974 それって「s(i)=t(i)となるiが1つ以上存在するか」というだけのように思えるけど、違うかな? >>975 最初全く同じこと思ったわw でもこれって十分条件に過ぎないんだな a ab bc c s(1)s(2) = t(1)t(2) = 'abc' 応用だけは思い付いた ATCGTTGTAC, AAATTTCTCTCTTTCT GTGATGCGTTGCAGGT, ATGCCATGTGAC AAATTGCTGAC, ATGTTGCGTC ATGCGTACCCACG, AGTGCGTTCGTAC ...(以下、1万行続く)
重複しても良いってなっているのでどうやっていいか分からなくなった。 重複なしなら単に順列の問題で全パターン調べれば良いだけなんだけどな。
>>979 含むと何も並べなければOKって事になりそう >>981 結果じゃなくて入力に 一つも選ばないのがOKならそもそも問題として成立しないだろ 任意のパターンで解けることはここですでに言及されてるよ
エビングハウスの忘却曲線っていって人間のベストな復習間隔があるんだけど 例えば今日勉強したことは明日復習して3日後、1週間一ヶ月ごとに復習すると完全に長期記憶になる これをスマホアプリで管理するプログラミングしたい 理屈は簡単、カレンダーに今日覚えたことを「○○の20-40ページ」とか記入して 明日になったら今日やる復習を表示してくれるシステム プログラミングのプの字も知らんのだ どの言語を使うとかもわからんmacとxcodeはある どういう作り方すればいいかわからない教えてください個人用に使う
>>986 このスレはそういう質問するスレではなく、誰かがお題を出して回答したい人がプログラミングして回答するスレだ。 そういう質問はまずは既存のソフトでそういうことが出来るのがないか以下のスレで聞いた方が良いと思う。 気軽に「こんなソフトありませんか?」Part.176 http://2chb.net/r/software/1529929775/ それからどうしてもプログラムを自分で作ってみたいというのであれば何らかの言語を覚える必要があるが、 MacやiPhoneの場合は何が良いのか俺はよく知らない。この頃だと Swift なんだろうか? Swift は確か xcode 使って作れたと思うが、詳細は今の俺には分からん。MacOSやiOS関係のスレを探して聞いてくれ。 お前らってファイルそのものへの参照を禁止したうえでquineを自力で書ける?
lud20200705055841ca
このスレへの固定リンク: http://5chb.net/r/tech/1524570314/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。 TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「プログラミングのお題スレ Part11 YouTube動画>3本 ->画像>3枚 」 を見た人も見ています:・プログラミングのお題スレ Part9 ・プログラミングのお題スレ Part15 ・プログラミングのお題スレ Part13 ・プログラミングのお題スレ Part8 ・プログラミングのお題スレ Part22 ・プログラミングのお題スレ Part18 ・プログラミングのお題スレ Part19 (971) ・プログラミングのお題スレ ・プログラミング言語 Kuin Part 16#01 ・関数型プログラミング言語Haskell Part30 ・WPF(.NET4.x, .NET Core) GUIプログラミング Part23 ・WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part22 ・WPF(.NET4.x, .NET Core) GUIプログラミング Part24 ・プログラミング詐欺?情報商材屋マナブ(ねずみ男・アル中)ってどうよ? Part2 ・関数型プログラミング言語Haskell Part31 ・WPF(.NET, WinUI) GUIプログラミング Part30 ・WPF(.NET, WinUI) GUIプログラミング Part29 ・WPF(.NET4.x, .NET Core) GUIプログラミング Part25 ・WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part19 ・WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part21 [無断転載禁止] ・【プログラミング商材12万】情報商材屋マナブってどうよ? Part5【ブログ商材2万】 ・ネットワークプログラミング相談室 Port30 ・今日のプログラミングスレ ・安価でプログラミングの教科書を作るスレ ・ヒッキーの競技プログラミングするスレ 2完 ・プログラミング義務教育の全容について考えるスレ ・【アラビア】RTLプログラミング【ヘブライ】 ・Androidプログラミング質問スレ revision53 ・競技プログラミングにハマるプログラマのスレ 16 ・ネットワークプログラミング相談室 Port27 ・競技プログラミングにハマるプログラマのスレ 9 ・競技プログラミングにハマるプログラマのスレ 20 ・NHK総合を常に実況し続けるスレ 145682 プログラミング ・WPF(.NET, WinUI) GUIプログラミング Part33 (775) ・【悲報】新MacBook、DockerもVirtualBoxも使えないプログラミングに向かないゴミだった……FANZA用か? ・競技プログラミング総合スレ 64 ・競技プログラミング総合スレ 63 ・競技プログラミングにハマるプログラマのスレ 5 [無断転載禁止] ・Androidプログラミング質問スレ revision51 [無断転載禁止] ・プログラミング学習サイトについて語るスレ ・競技プログラミングにハマるプログラマのスレ 2 [無断転載禁止] ・競技プログラミングにハマるプログラマのスレ ・悪徳プログラミングスクール・悪徳教材屋観察スレ ・競技プログラミングにハマるプログラマのスレ 52 ・競技プログラミングにハマるプログラマのスレ 95 ・競技プログラミングにハマるプログラマのスレ 71 ・競技プログラミングにハマるプログラマのスレ 85 ・競技プログラミングにハマるプログラマのスレ 94 ・競技プログラミングにハマるプログラマのスレ 112 ・競技プログラミングにハマるプログラマのスレ 110 ・休みだから初心者が1日中プログラミングの勉強するスレ [無断転載禁止] ・動画プログラミング ・プログラミング始めたいんだが ・プログラミングやってみたいんやが ・C#とかいう欠陥プログラミング言語 ・プログラミング分かる奴ちょっと来て ・プログラミングに自信ニキ来て ・0からプログラミング始めたい ・サウンドプログラミング6 ・プログラミング初心者なんだが ・プログラミング言語 Rust 4 ・趣味でプログラミングやってみたいんだけど
22:11:23 up 62 days, 23:10, 0 users, load average: 9.34, 9.00, 9.34
in 0.036203861236572 sec
@0.036203861236572@0b7 on 061911