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/ 宿題は宿題スレがあるのでそちらへ。
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 出来ないならレスしなくても良い
152 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 00:20:18.37 ID:B5r/QkfM.net] 俺は出来ないから禁止じゃなくてよかったわ
153 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 01:02:10.19 ID:DvsQmrmL.net] >>147 自分も10^N思いついたわ。 泥臭いけど、正しい数字がほしかったら急がば回れだと思うわな。
154 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 02:12:43.93 ID:DvsQmrmL.net] うーん。暇だからいじってたけど失敗した。改良案募集中。 ideone.com/kC2jUa C++。指数いじってるだけなのに明確に誤差が出る。 一番楽なのはsprintfのソース嫁。だと思う。
155 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 02:34:57.37 ID:WgXGKPIm.net] >>146 有理数が割り切れるかどうかという話なら、既約分数の形で分母に2と5以外の素因数が含まれると 循環小数になる 整数に乗る範囲なら>>147 で同じことができる
156 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 03:14:52.14 ID:DvsQmrmL.net] >>146 ideone.com/MJYOa4 C++。数学ムズイな。log10(0.1)が-inf返す。理屈は知らん。 基本的なことは、 okwave.jp/qa/q3050160.html からパクってきた。 これ以上は俺のキャパ超えてますわ。頑張ってー。
157 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 08:08:20.28 ID:DvsQmrmL.net] 寝ようとしたらバグ思いついたのでフィックス。 ideone.com/KEG8so
158 名前: [] [ここ壊れてます]
159 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 09:36:21.17 ID:O+sc6fcj.net] >>154 素晴らしい。完璧です。
160 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 21:34:13.25 ID:DvsQmrmL.net] 一応、最初に案だした>>147 にも言っとけー。 それと何も違わんからな。
161 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 06:44:11.07 ID:et7wKfDy.net] お題:2ビットバイナリのソートと復元。 ideone.com/aBSpRb こういうコードを書きました。 不完全ですが、実用化に至ればどんなファイルも1kb程度に収まるすさまじい圧縮規格の草案デス。(妄想です) さて、ソートと復元にパーミテーションを使っているのですがこれが超重たいです。困りました。 そこでこれを差し替えて、ソートと復元を軽くしたいと思っています。 さてなんかいい方法ありませんでしょうか。処理速度はあんまり重視していません。 その代わり序数などを用意する場合、64BIT整数の範囲に入ることが望ましいです。 自由な発想で何か思いついてください。お願いします。 ちなみに、このコードの弱点はメモリ使用量で、元バイナリの256倍メモリを消費します。
162 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 00:48:49.92 ID:KmrpGp6z.net] >>157 その文章はネタなのかマジなのか… ideone.com/4EkJzF
163 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 04:53:54.49 ID:6OpYz5rj.net] ideone.com/nFKJnK メモリ使用量を256倍から8倍に抑えた。 そしたら、>>158 のコードが動かなくなった。Orz っていうか、序数が簡単に64ビット突破してしまうなぁ。 N!をどうにかしないと。 >>158 乗ってくれてありがとう。
164 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 06:33:12.85 ID:6OpYz5rj.net] 序数なくしたい・・・。(^q^)
165 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 23:19:41.07 ID:Wkj8zlJv.net] >>146 [実数値]は2進数の浮動小数点数で受け取るの? それとも分母と分子の2個の整数で受け取る?
166 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 11:53:42.59 ID:2flNGmiy.net] お題:楕円の長径と短径が与えられたとき、円周の長さを求める
167 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 22:05:37.72 ID:OagebEri.net] >>162 それは楕円積分じゃね? セイガクのとき勉強してうろ覚えだけど。
168 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 22:09:09.73 ID:4dGrKabk.net] https://ja.wikipedia.org/wiki/%E6%A5%95%E5%86%86%E7%A9%8D%E5%88%86
169 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 22:17:32.62 ID:OagebEri.net] 楕円の外周の計算方法- 数学 | 教えて!goo oshiete.goo.ne.jp/qa/439398.html 楕円の周の長さの求め方と近似公式 | 高校数学の美しい物語 mathtrain.jp/daennagasa こういった近似解法の存在を知らないと、 自力でアルゴリズムを発見するのは天才級の頭脳がいる問題だぜょ セニョール
170 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 23:34:24.64 ID:4dGrKabk.net] 「天才級」は言い過ぎでしょ
171 名前:デフォルトの名無しさん mailto:sage [2015/12/08(火) 04:57:10.08 ID:3EaU/rl6.net] >>162 ideone.com/cjVSmk 2分法かつモンテカルロ。 数学的に正しいかは知らんけど、一応近似はしてるんじゃないかと。 数学わかんねー。積分わかんねー。
172 名前:デフォルトの名無しさん mailto:sage [2015/12/08(火) 05:22:43.49 ID:3EaU/rl6.net] あれ?各種計算サイトと数字があわね・・・。 >>165 の計算法あってる?
173 名前:デフォルトの名無しさん mailto:sage [2015/12/08(火) 05:44:52.78 ID:3EaU/rl6.net] ideone.com/gtoI4q と、思ったら。 俺が計算パラメータ勘違いしてるだけだった。Orz うごごごご。すまん。
174 名前:デフォルトの名無しさん mailto:sage [2015/12/08(火) 09:59:25.88 ID:/HebolMS.net] 天才現る