1 名前:デフォルトの名無しさん mailto:sageteoff [2015/10/07(水) 20:19:06.64 ID:c4LYwtKo.net] プログラミングのお題スレです。 前スレ プログラミングのお題スレ Part7 peace.2ch.net/test/read.cgi/tech/1429195275/ 【出題と回答例】 1 名前:デフォルトの名無しさん お題:お題本文 2 名前:デフォルトの名無しさん >>1 使用言語 回答本文 【ソースコードが長くなったら】 (オンラインでコードを実行できる) ideone.com/ codepad.org/ compileonline.com/ rextester.com/runcode runnable.com/ code.hackerearth.com/ melpon.org/wandbox https://paiza.io/ 宿題は宿題スレがあるのでそちらへ。
51 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 21:26:04.46 ID:q9jqp7eP.net] 1/pow(n,floor(n/2))
52 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 02:51:13.95 ID:X1tUuUC+.net] >>49 ideone.com/sxblVg C++。モンテカルロ〜〜〜。なのか? あってるかは知りません。
53 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 02:52:48.94 ID:X1tUuUC+.net] どっちかっていうと分布確立の問題だからどういう分布を望んでるかで結果変わりそうかな? C++だったらディストリビュータ変えればいくらでもいじれる。
54 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 13:07:28.84 ID:C/77uVUj.net] >>51 n = 10 の場合は正しいようですがn = 11の場合が違うようです。 確率分布は良く知りませんが、単純な確率の問題ですよ。 ヒント: 約分できるので分子は必ず1になります
55 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 17:30:44.42 ID:X1tUuUC+.net] >>53 片方あってるんだったら、試行回数の問題だと思うのですが、 これ以上試行するとイデオンがタイムアウトするので無理です。 勇者の登場を待ちましょうか。
56 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 21:54:25.47 ID:zYgBhlkj.net] 回文なので前半が決まれば後半は1通りしか無い? 11^6 / 11^11 = 1 / 11^5 じゃね nが偶数なら 1 / n ^ (n / 2)
57 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 22:14:13.46 ID:fLaXb4KYb] なんで>>50 がスルーされているんだ…と.scの方に書いてみる
58 名前:デフォルトの名無しさん [2015/10/26(月) 22:16:43.98 ID:DXNKihF1.net] >>55 つまり>>50
59 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 02:10:42.88 ID:xGCQarhq.net] 方眼紙に均等に5×5=25個の点が打ってある。 ランダムに2点を決定して直線を複数作っていく。 (X=0〜4,Y=0〜4,のほうが解かりやすい?) しかし、3本の直線の端を頂点として三角形になった場合はその3本は 削除されるとする。いきなり三角形が複数できた場合は任意の 1個だけの三角形の3本の直線が削除されるだけでよい。 とにかく3角形ができた場合は、直線3本しか削除されなくて良い。 また、例えば3本の直線 直線(0,0)(4,0) 直線(0,0)(2,0) 直線(2,0)(4,0) は1本に見えるが、面積の無い3角形として3本の直線は削除されるとする。 (問題) この場合、残る直線はどんなに回数を多くしても収束してしまうか? またその数はどのくらいか? また10×10の場合など色々変えてどのくらいに収束してしまうのか確認せよ。
60 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 08:30:08.61 ID:4Bw9gOvg.net] >>58 2点を選んで(2,0)(2,0)を引いた場合、これを線分と認めるか無視するのか。 既に線分(0,0)(4,0)がある状態で(0,0)(4,0)を引いた場合、線分の重複を認めるのか無視するのか。
61 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 08:35:48.75 ID:D5hlxVUX.net] 消し方によって確率が変わりそうな気がするがそこらへんは大丈夫なん?
62 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 11:16:40.27 ID:nTHAaiUE.net] >>58 何度読んでも何言ってるのかさっぱり分からん。 「いきなり三角形が複数」とか「とにかく三角形ができた場合」って何のことよ。
63 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 12:30:53.45 ID:GiyDMn1h.net] >>59 それは長さが無いから線分としない。スキップ。 重複は認めるとしよう。 >>61 言い方が悪かった。同時に複数できたらってこと。 例えば、四角形ができていて、対角線が次にできたら 三角形は2個同時にできるけど、どちらか一方の三角形分の線分 3本を削除すればいいとういこと。また、例えばV字に何本も重複してて 1本追加で3角形が出来ても、重複分全部でなく、3本削除だけでいい。
64 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 19:12:54.11 ID:4Bw9gOvg.net] >>58 適当に回したらこれくらいになった 線分の重複を無視する場合 5x5 38.748293 10x10 315.085106 線分の重複を認める場合 5x5 54.334077 10x10 365.470484
65 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 00:20:15.77 ID:TbBvWlSz.net] >>62 解説ありがと なるほど既存の多角形を切り取る場合場合があるわけかw
66 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 13:29:39.48 ID:P6AfRAxK.net] 予想だと、プログラムの問題もあるが、乱数発生の仕方の問題でもある。 コンピューターの用意した人口的に散りばめた乱数だとすぐに収束。 自然界に近い完璧に近い乱数を発生なら収束しないかも。
67 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 14:34:56.09 ID:GTtq7s5w.net] メルセンヌ・ツイスタ使ったらどうよ
68 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 23:29:17.08 ID:FmImj1NY.net] みんなはこのスレだけじゃなくyukicoderとかでも出題してたりするの?
69 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 02:29:03.10 ID:izatGTy3.net] >>58 ideone.com/H3y5iK C++。作っては見たものの、品質は低い。ちょい自信ないな〜。 抜けがあったらごめん。
70 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 07:00:44.92 ID:VBv6nvKP.net] 5x5 https://paiza.io/projects/sAfl2ma6nkZHgBKSjhHWEA 52.87 10x10 https://paiza.io/projects/SUCBFmGQqvLsld23IOzgag 362.59
71 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 15:28:30.15 ID:79rh8PzW.net] お題: お題aの仕様は3日後に変更されます。仕様変更時、最小限の変更で対応できるようにお題aを実装してください。 お題a:入力される「Hello, World!」を逆順にして出力する。 例: in < Hello, World! out > !dlroW ,olleH
72 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 15:43:46.90 ID:T2ZXoWbN.net] >>58 5x5 100000回 10x10 10000回 C ideone.com/QyoAsj C 44.3 229.7ms 5x5 ideone.com/y0VaSp C 381.3 441.5ms 10x10 C++移殖(tuple+vector) ideone.com/qTrT0j C++ 41.5 426.3ms 5x5 ideone.com/WFYDCn C++ 351.2 972.4ms 10x10 結構変わるもんですね。
73 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 21:18:08.06 ID:izatGTy3.net] >>70 ideone.com/fDO24p C++。コードにして4行だから仕様変更かかったら全部書き直しても間に合う位だと思う。
74 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 21:22:41.58 ID:izatGTy3.net] >>58 >>68 のコードを1分くらい回してたら720くらいで増えなくなった。ちなみにCPUはスカイレーク。
75 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 00:24:00.79 ID:KHL3HLvQ.net] >>70 C ideone.com/SJqau8
76 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 01:26:03.69 ID:cJLCmHdm.net] >>70 どう仕様変更されるのか分からないとどうしようもない 入力文字列はもちろん、逆順という仕様も変更されるだろうし となると出来るだけ短く作るぐらいしかない。 #!/bin/sh read a echo "!dlroW ,olleH"
77 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 13:15:09.33 ID:rNKSig65.net] >>70 Haskell main = interact reverse
78 名前:デフォルトの名無しさん [2015/11/01(日) 15:34:04.71 ID:srdwxzCV.net] お題: 2つの文字列を引数としてとり、その2つの文字列の類似度をあらわす値x (0.0 ≦ x ≦ 1.0)を戻す関数fがあるとき、与えられた文字列のリストを 類似度が高い文字列がなるべく近くになるように整列する関数gを 作成してください。 (f "a" "a") => 1.0 (f "a" "b") => 0.0 (f "fukushima" "kyoto") => 0.0 (f "fukushima" "tokushima") => 0.7142857142857143 (f "fukushima" "tokyo") => 0.0 (f "kyoto" "tokushima") => 0.0 (f "kyoto" "tokyo") => 0.3333333333333333 (f "tokyo" "tokushima") => 0.2 (g '("fukushima" "kyoto" "tokushima" "tokyo") #'f) => ("fukushima" "tokushima" "tokyo" "kyoto")
79 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 17:54:16.22 ID:tjf5Il2M.net] >>77 fもつくる必要がありますか?
80 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 18:18:40.16 ID:V0olVSh1.net] gの要件曖昧過ぎw
81 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 19:57:17.19 ID:KHL3HLvQ.net] >>77 Ruby fは適当。 ideone.com/XPMHpO
82 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 21:25:08.29 ID:srdwxzCV.net] >>78 fもお願いします。 ここでは、たとえばtrigramを考えていました。 もっとよい実装があればお願いします。 (defun trigram (s1 s2) (flet ((decompose (s) (let* ((l (length s)) (n (if (>= l 3) (- l 3) 0)) (j (if (>= l 3) 3 l))) (loop for i from 0 to n collect (substring s i (+ i j)))))) (let ((l1 (decompose s1)) (l2 (decompose s2))) (let ((s1l2 (loop for i in l2 sum (funcall #'(lambda () (if (search i s1) 1 0))))) (s2l1 (loop for i in l1 sum (funcall #'(lambda () (if (search i s2) 1 0)))))) (/ (+ s1l2 s2l1) (float (+ (length l1) (length l2)))))))) >>79 gは、たとえば『列の各要素間の類似度に比例し距離の二乗に反比例する値の総和が最大になるような列に整列する関数』を考えていました。 もっとよい実装があればお願いします。
83 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 02:30:55.48 ID:LjXD9Pi/.net] >>77 ideone.com/p1w9Zs ギブアップ。Trigramはうまく移植できたと思うけど、うーむ。 うまいリレーの作り方が思い浮かばなかった。 意外と難しいなぁ。
84 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 06:33:43.86 ID:+TdI2Qwj.net] 類似度の定義は無いから単純に文字位置で文字一致する文字数を長いほうの文字列文字数で割ったのを類似度にしてもいいんだよね 簡単さ! あとは類似度でグラフの最小木っての作りゃいいんっしょ?
85 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 16:32:13.01 ID:+QiDphYI.net] >>70 の変更です。 お題a: 入力文字列(日本語含む)を逆順にして出力する。 入力される文字列は0 ~ 1024バイトの範囲。 例: in < Hello, World! out > !dlroW ,olleH in < Hello, わーるど! out > !どるーわ ,olleH
86 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 21:14:51.67 ID:LjXD9Pi/.net] >>84 ideone.com/hLXAqt C++。半分くらい書き換えた。C++はマルチバイトキツイ。
87 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 22:32:43.41 ID:fHTNy1N3.net] >>84 #! ruby -Ku a='Hello, わーるど!' p a.reverse
88 名前:デフォルトの名無しさん mailto:sage [2015/11/03(火) 11:13:37.98 ID:EjzY5wqb.net] >>85 例外飛んどるよ
89 名前:デフォルトの名無しさん mailto:sage [2015/11/03(火) 17:38:51.75 ID:tcH4gyT3.net] >>87 GCCのろーけるがタコなんじゃないですか? VCオンリーって書いてあるじゃないですか。
90 名前:デフォルトの名無しさん mailto:sage [2015/11/05(木) 16:28:22.05 ID:IhTKFi3p.net] >>84 setlocale (LC_ALL, "ja.utf8"); std::cout << "ja.utf8->" << setlocale(LC_ALL, 0) << std::endl; setlocale (LC_ALL, "utf8"); std::cout << "utf8->" << setlocale(LC_ALL, 0) << std::endl; setlocale (LC_ALL, "ja_JP.UTF-8"); std::cout << "ja_JP.UTF-8->" << setlocale(LC_ALL, 0) << std::endl; setlocale (LC_ALL, "ja_JP.utf8"); std::cout << "ja_JP.utf8->" << setlocale(LC_ALL, 0) << std::endl; setlocale (LC_ALL, "japanese"); std::cout << "japanese->" << setlocale(LC_ALL, 0) << std::endl; setlocale (LC_ALL, "JPN"); std::cout << "JPN->" << setlocale(LC_ALL, 0) << std::endl; setlocale (LC_ALL, "UTF-8"); std::cout << "UTF-8->" << setlocale(LC_ALL, 0) << std::endl; setlocale (LC_ALL, "japanese.sjis"); std::cout << "japanese.sjis->" << setlocale(LC_ALL, 0) << std::endl; 結果: ja.utf8->C utf8->C ja_JP.UTF-8->C ja_JP.utf8->C japanese->Japanese_Japan.932 JPN->Japanese_Japan.932 UTF-8->Japanese_Japan.932 japanese.sjis->Japanese_Japan.932
91 名前:デフォルトの名無しさん mailto:sage [2015/11/05(木) 16:32:51.81 ID:IhTKFi3p.net] ターミナルをUTF-8にしてUTF-8のソースをコンパイル。 ターミナルをSJISにして実行。 結果: !どるーわ wolleH
92 名前:デフォルトの名無しさん mailto:sage [2015/11/05(木) 20:59:19.34 ID:5zH1LNIS.net] BrainF**kでやろうかと思ったがUTF-8めんどくせw
93 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/11/10(火) 17:59:02.39 ID:IWmBcu9t.net] お題:粘菌のシミュレーション
94 名前:デフォルトの名無しさん mailto:sage [2015/11/10(火) 21:43:34.22 ID:0SseENg0.net] 頑張ってください!
95 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 01:05:44.32 ID:SL51g2Xb.net] >>92 C++ こんな感じ?よくわからんけど https://paiza.io/projects/39PM4p3agMPGdANgoHT0og
96 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 01:21:46.45 ID:NRLjC3dW.net] 粘菌ってWikipediaで調べただけでもたくさん種類あって種類によって全然違うしどいつをシュミレーションしろと?
97 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 17:27:12.29 ID:YwXMSyH6.net] お題:自然数nで何乗しても結果の最後がnで終わるnを求める、 例 25^3 = 15626 25^5 = 9765625
98 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 21:11:00.20 ID:YwXMSyH6.net] >>96 すみません 25^3 = 15625 でした
99 名前:デフォルトの名無しさん [2015/11/11(水) 21:37:45.64 ID:kvOX2kCa.net] >>96 Java https://ideone.com/tDxrjg
100 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 23:51:59.90 ID:kvOX2kCa.net] >>96 Java https://ideone.com/npEiYF 5と76から延ばす方向で
101 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 23:55:55.86 ID:kvOX2kCa.net] 何で76にしたし…
102 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 07:16:51.84 ID:TDqS/713.net] >>96 https://ideone.com/3DYhOi C++。アルゴリズムはあってると思うんだけど、浮動小数誤差でうまく数字が出てない気がする。 違う方法にすればよかったかなぁ・・・。Orz
103 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 15:29:35.14 ID:mg6U+sOG.net] >>96 1から32767までの間で調べた ideone.com/VK6T0A
104 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 16:34:27.03 ID:2RvUZ1HO.net] >>96 Java https://ideone.com/KfmF8v >>102 を見て>>98 を書き直し…シンプルになった >>96 Java https://ideone.com/bCSEWh 末尾5系統 初期値=5 ループ1回目 5 * 5 = 2[5] ループ2回目 25 * 25 = 6[25] ループ3回目 625 * 625 = 390[625] → 390の下位桁が0なのでその上の桁まで使う → 90[625] ループ4回目 90625 * 90625 = 82128[90625] → 8[90625] ループ5回目 890625 * 890625 = 793212[890625] → 2[890625] ループ6回目 2890625 * 2890625 = 以下略 末尾6系統 初期値=6 ループ1回目 6 * 6 = 3[6] → 10-3=7 → 7[6] ループ2回目 76 * 76 = 57[76] → 10-7=3 → 3[76] ループ3回目 376 * 376 = 141[376] → 10-1=9 → 9[376] ループ4回目 9376 * 9376 = 8790[9376] → 100-90 → 10[9376] ループ5回目 109376 * 109376 = 11963[109376] → 10-3=7 → 7[109376] ループ6回目 7109376 * 7109376 = 以下略 コネコネしてたらなんかこんな感じで出来たが、この計算だと抜け有ったりするかな?
105 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 22:28:56.44 ID:TDqS/713.net] >>96 ideone.com/UQTHRZ >>101 を修正。(バグフィックスとは言ってない。) 少しましになったかな?
106 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 22:41:27.02 ID:mg6U+sOG.net] >>104 それ答え間違ってると思うよ 問題は ***何乗しても*** なので、特定の場合(たとえば2乗や3乗)についてのみ成り立つような物は除外しないと
107 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 22:46:40.58 ID:TDqS/713.net] >>105 あーなるほど。勘違いしてた。 いい手がないなー。Orz
108 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 22:49:14.34 ID:TDqS/713.net] 可能性のありそうなものを篩にかける程度しかできてないか。 最近問題が難しくなってきたなぁ。
109 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 22:51:41.90 ID:TDqS/713.net] >>104 そだそだ。ご指摘ありがとう。
110 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/11/12(木) 22:53:02.41 ID:OJ9xT8J+.net] 位取りの数学だよな。例えば、二桁に限定すれば (10a+b)^2≡20ab+b^2(mod100) であり、 b≡b^2(mod10) であることがわかる。
111 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/11/12(木) 23:02:28.06 ID:OJ9xT8J+.net] 10進数の位取りでは自然数nは、 n=Σ_{k=0}^m 10^k * a_k と表せる。任意の正の整数pに対して n≡n^p (mod 10) n≡n^p (mod 100) ... n≡n^p (mod 10^m)
112 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/11/12(木) 23:12:11.82 ID:OJ9xT8J+.net] 1の位a_0は、明らかに0、1、5のいずれかである。 なぜなら0≡0^2かつ1≡1^2かつ5≡5^2 (mod 10)であり、それ以外は考えられないから。
113 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 23:15:35.02 ID:mg6U+sOG.net] >>107 n^2の結果の最後がnで終わっていれば何乗しても結果の最後がnで終わる 言い換えればn^2の場合についてのみ調べれば良い。 n^2の結果の最後がnで終わっていないようなnは題意にそぐわない 言語・ライブラリレベルで多倍長演算をサポートしてる言語を使うといいと思うよ
114 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 23:18:19.92 ID:2RvUZ1HO.net] >>111 6…
115 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/11/12(木) 23:20:39.98 ID:OJ9xT8J+.net] n≡n^2ならばn≡n^3である。 なぜならn≡n^2の両側にnを掛ける
116 名前:ニn^2≡n^3が得られ、 これとn≡n^2の推移律より明らか。 数学的帰納法より、n≡n^2ならばn≡n^pである。 [] [ここ壊れてます]
117 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 23:21:12.97 ID:Tt5I2ZgM.net] 変数xに0〜360までの角度を保持したいんですが、場合によってはこの範囲外の値が入る事が有ります。例えば500や-100など。そういう場合はそれぞれ140、260にしたいんですが、ifで場合分けする方法以外にスマートなやり方有りますか?
118 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 23:40:32.15 ID:2RvUZ1HO.net] x=(x%360+360)%360; mod2回とかひどいコードw
119 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 23:54:26.23 ID:qVN3pWO7.net] math.a.la9.jp/ansinc.htm ↑ これの大学院生の証明を信用すると A<10^nなるAに対してA^2=K*10^n+AとなるようなAは 各nに対してA=p*2^n(=α[n]),r*5^n(=β[n])の ちょうど2つあり、α[n]+β[n]=10^n+1を満たすことになる よって、α[n]かβ[n]のどちらか一方を求めればもう一方も求まる β[n]の構成方法は>>103 で求まるので、これで全ての解が網羅される…はず (ただし、α[4]=α[5]=9376やβ[3]=β[4]=625のように異なるnで解が重複することはあり得る)
120 名前:100 mailto:sage [2015/11/13(金) 00:50:19.24 ID:lCbsoecE.net] ここまで数学の話になると自分は門外漢だな。参ったなぁ。 自分はC/C++しか使えないので、C++に多倍長が入るまで待ちますです。 自分の能力を疑う。。。Orz
121 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 00:51:09.68 ID:lCbsoecE.net] ホント、数学怖い。
122 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 01:48:47.99 ID:oAcUw9gl.net] >>96 Ruby 16桁で2秒くらい。 ideone.com/DzwaXc
123 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 01:56:56.44 ID:oAcUw9gl.net] >>115 Rubyで。 ideone.com/YK6n9K
124 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 03:44:01.38 ID:lCbsoecE.net] >>96 ideone.com/GDW8iY C++。>>109-112 の話を信じてコードにした。 だいたい>>102 の劣化版になった。 >>102 優秀!
125 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 03:44:43.48 ID:lCbsoecE.net] 1と5と6の倍数のどれかって結論になるんかねー。
126 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 17:25:00.01 ID:3TzLZ92T.net] >>116 >>121 ありがとうございました。 JavaScriptでやりたいので 115 さんの方式でやることにしました。 Rubyの文法は良く分からないのですが、整数剰余 % は常に正の値を 返すのでしょうか?
127 名前:デフォルトの名無しさん [2015/11/13(金) 21:39:51.30 ID:VcgxUV6t.net] お題:お財布軽算法 レジの買い物で財布の中身が最も軽くなるような支払い方を求めよ 条件: ・買い物の金額は999円以下 ・硬貨(一円玉〜五百円玉)の重さは1とし、千円札の重さは0とする ・財布の中には、各硬貨が20枚以下と、千円札がちょうど1枚入っている (法律により同一硬貨20枚を超える支払いは店側が拒否できるらしい) ・お釣りはできるだけ価値の高い硬貨にまとめて支払われる (例:お釣り17円→十円玉1枚、五円玉1枚、一円玉2枚) ・両替目的の余分な支払いは禁止(例えば、10円の買い物で 一円玉20枚支払ってお釣りとして十円玉1枚を受け取るのは禁止) 入力: 財布の中の各硬貨の枚数と買い物の金額が空欄区切りで順番に与えられる (千円札は必ず1枚入っているので入力には含めない) 出力: 各硬貨および千円札の支払い枚数を空欄区切りで順番に返す 例: 0 0 0 0 0 0 1 -> 0 0 0 0 0 0 1 5 5 5 5 5 5 176 -> 1 1 2 1 1 0 0 1 2 3 4 5 6 789 -> 0 2 3 3 1 1 0 20 20 10 10 0 0 999 -> ?
128 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 22:05:01.72 ID:lCbsoecE.net] >>125 ナップザック問題よく見るなー。
129 名前:126 mailto:sage [2015/11/14(土) 04:44:47.09 ID:ruukGtIx.net] お題ボツ案 次に示すbrainf*ck亜種用のプログラムコードcode.txtを生成するプログラムを作成せよ brainf*ck亜種の仕様 命令対応表table.txtに記載された文字列を命令ワードとしてcode.txtを解釈する 命令ワード以外の文字はコメント文字として無視して読み飛ばす 命令対応表table.txtの仕様 1行目に>に相当する命令を表す文字列がコロン区切りで並べられる 2行目に<に相当する命令を表す文字列がコロン区切りで並べられる 3行目に+、4行目に-、5行目に[、6行目に]、7行目に,、8行目に.、のが同様に示される 未定義の命令はないものとする(つまりどの命令にも必ず対応する命令ワードが与えられる) 命令ワードに使えるのは半角の英大文字・英小文字・スペースで構成される1文字以上の文字列 生成するプログラムコードcode.txtについて (1) こちらが提示するtable.txtを命令ワードとするbrainf*ck亜種でcode.txtを実行する この実行でcode.txtは新しい命令対応表を生成する(リダイレクトでtable2.txtに保存される) (2) 先ほど生成されたtable2.txtを命令ワードとするbrainf*ck亜種で先ほどのcode.txtを実行する この実行でcodetxtはこちらが指定した文字列を出力する ※つまりcode.txtは同一のファイルで2種類のbrainf*ck亜種用のプログラムコードとして解釈されるということである ※code.txtはどちらの実行でも必ず停止するようにする(無限ループさせてはならない) code.txtのフォーマット 1文字のスペース区切りで並べられた実在する2文字以上の英単語と改行で構成される 各行2文字以上65文字以下で構成する必要がある、行末にスペースが来てはならない ※つまり人がcode.txtを開いて見た場合は英単語がでたらめに並べられているだけの文書ファイルのように見える
130 名前:126 mailto:sage [2015/11/14(土) 04:45:20.39 ID:ruukGtIx.net] お題ボツ案 続き (1)で使うtable.txt ====table.txt ここから en:an:me ry:ly:to ea:ro:at ou:is:
131 名前:of ed:oo:we es:ee:he ff:qu ll:th ====table.txt ここまで (2)で出力する文字列 Hello の5文字 例えば road eat attacked meet seat early of he month は +++[>++<-]. と解釈される 評価ポイント ・code.txtの英大文字を英小文字に変換した状態において単語の平均出現頻度が3以下になるほど加点、逆は減点 ・code.txtに出現する単語のうち「最短の長さの単語」の長さが4以上になるほど加点、逆は減点 ・code.txtのファイルサイズ(ようは全体の文字数)が小さくなるほど加点、逆は減点 ボツになった理由 評価ポイントは俺自身が出した答えのcode.txtのファイルサイズを基準に点数付けする予定だったが 俺自身がこの課題を満足するコードを書けなかった [] [ここ壊れてます]
132 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 07:36:05.43 ID:HECTDRcm.net] >>125 2つ目の例間違ってました 5 2 5 2 5 2 176 -> 1 1 2 1 1 0 0
133 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 01:14:20.57 ID:iZq4VH3S.net] >>127 いくらチューリング完全とはいえ、こんな暗号何に使うんだよ。 IS関係かよ。
134 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 13:23:12.14 ID:qzaifS3v.net] キレイにあいにいこう
135 名前:デフォルトの名無しさん [2015/11/17(火) 22:19:23.76 ID:qSlbRl0V.net] 突っ込みどころが幾つもあるからそりゃ書けんだろ
136 名前:デフォルトの名無しさん mailto:sage [2015/11/18(水) 10:07:53.97 ID:MW0MQlR6.net] お題:以下を出力する ABBACACBBA CBCBBBABC AAABBCCA AACBACB ABACBA CCBAC CACB BBA BC A
137 名前:デフォルトの名無しさん mailto:sage [2015/11/18(水) 11:15:42.88 ID:4sFoEFSe.net] >>133 Squeak/Pharo Smalltalk | str | str := 'ABBACACBBA'. Transcript open. [str isEmpty] whileFalse: [ Transcript cr; show: str. str := str overlappingPairsCollect: [:a :b | a = b ifTrue: [a] ifFalse: [('ABC' copyWithoutAll: {a. b}) first]]]
138 名前:デフォルトの名無しさん mailto:sage [2015/11/18(水) 16:23:59.84 ID:6s10vQob.net] >>133 C ideone.com/DJzS47
139 名前:デフォルトの名無しさん mailto:sage [2015/11/18(水) 18:06:15.56 ID:D8fsp1uM.net] >>133 c #include <stdio.h> int main() { char buff[] =
140 名前:デフォルトの名無しさん mailto:sage [2015/11/18(水) 18:23:26.04 ID:D8fsp1uM.net] >>133 c https://ideone.com/UAnRhr
141 名前:デフォルトの名無しさん mailto:sage [2015/11/18(水) 21:29:20.89 ID:4nC9re2c.net] >>133 Emacs Lisp (require 'cl-lib) cl-lib (defun f (l) (while l (let (m) (cl-mapl (lambda (s) (princ (car s)) (let ((s (let ((x (nth 0 s)) (y (nth 1 s))) (and y (if (eq x y) x (car (remove x (remove y '(A B C))))))))) (and s (push s m)))) l) (terpri) (setq l (reverse m))))) f (f '(A B B A C A C B B A)) ABBACACBBA CBCBBBABC AAABBCCA AACBACB ABACBA CCBAC CACB BBA BC A nil
142 名前:デフォルトの名無しさん mailto:sage [2015/11/18(水) 23:42:26.25 ID:YAZwGvpo.net] >>133 Haskell import Data.List main = putStr . unlines . takeWhile (/= []) $ iterate f "ABBACACBBA" f [_] = "" f (x:x':xs) = (if x == x' then x else head ("ABC" \\ [x, x'])) : f (x':xs)
143 名前:デフォルトの名無しさん mailto:sage [2015/11/19(木) 03:34:56.68 ID:phHpIHjD.net] よく法則性わかったな。全く分からんぞ。
144 名前:デフォルトの名無しさん mailto:sage [2015/11/19(木) 22:16:34.51 ID:uJ/1LVHK.net] 隣接した文字が同じならその文字、違うならそれ以外の文字 という法則性で書いてるようだけど問題中に指定はないから同じ出力ならなんでもいい この類の出題に対する簡単な解決法は出力例をそのままコピペすること
145 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 12:08:27.30 ID:GuOf3/Bz.net] >>141 だよねw それよりも長くなってしまうコードは冗長なのかも。
146 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 12:28:08.45 ID:FQy8dcw9.net] >>141-142 短いコード…つまりこうだな ideone.com/PrSnh2
147 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 01:49:25.12 ID:HxaRKQeG.net] >>133 Rubyで。 ideone.com/4sQ3ws
148 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 10:43:36.89 ID:jCDsTAiM.net] >>133 ruby 2.0.0 s = 'ABBACACBBA' s = s.tap {|s| puts s}.chars.each_cons(2).map() {|(a, b)| a == b ? a : 'ABC'.delete(a + b) }.join until s.empty?
149 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 21:57:54.41 ID:VKmO+9+0.net] JavaScriptスレで、以下の質問をしました。 1/3=0.33333 1/2=0.5 1/4=0.25 みたいに、実数値を文字列化する時に、割り切れない時は四捨五入で小数点以下5桁で、割り切れるならその全桁数をそのまま文字列化したいんですが、一発で出来る関数や手法は有りますか? と質問したら、曖昧で分かり辛いようだったので、もう少し詳しく、 では、桁数n (n<=30)を指定するとして、 割り切れない場合は小数点以下n+1桁目を四捨五入してn桁までを求める。 割り切れる場合は、その全部を文字列化する。ただしnを超える部分が有る場合は、四捨五入の方法を用いる。 これでいいかな? と質問したのですが、浮動小数演算の世界では割り切れるかどうか判定できないので無理だよ、という意見なのですが、 私としては、浮動小数点演算で割り切れるかどうか判定出来なくても、プログラムは書けると思います。 それが出力する結果が数学的な意味での正しい解答になっていればいいと思うので。 でも良く分からないので、レベルの高いここで質問します。よろしく。
150 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 23:57:27.64 ID:BzULhZcd.net] 適当に10^n倍して整数の範囲でやれ てかJavaScriptで簡単に30桁も扱いたいなら外部ライブラリでも使えよ
151 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 00:04:10.27 ID:O+sc6fcj.net] >>147 出来ないならレスしなくても良い