プログラミングのお題スレ Part8at TECH
プログラミングのお題スレ Part8 - 暇つぶし2ch361:デフォルトの名無しさん
16/03/06 15:24:05.92 /EFFTfcH.net
>>342 C
>>344 を参考に
URLリンク(ideone.com)

362:デフォルトの名無しさん
16/03/07 10:29:38.19 +tQLURZK.net
>>351
ありがとうございます。自分で作ったのに比べると格段にすっきりしてます。
each_with_indexもto_hもgroup_byも初めて知りました。勉強になります。

363:デフォルトの名無しさん
16/03/11 08:14:24.51 fvdAjVDF.net
あら、新規来ないと思ったら移動してたか。
>>335
ある程度起動してから気づいたから遅かった。
>>337
別の目的で作ったコードなので、これ用というわけじゃなかったのです。
追記型がほしかったので作りました。

364:デフォルトの名無しさん
16/03/11 08:17:33.24 fvdAjVDF.net
>>340
URLリンク(ideone.com)
C++。作ってあったコードをいじっただけなので変なコードになってます。
多分あってると思います。

365:デフォルトの名無しさん
16/03/11 08:49:31.19 fvdAjVDF.net
>>347,348
URLリンク(ideone.com)
C++。デバッグはほとんどしてない。手を抜いたから遅いよ。

366:デフォルトの名無しさん
16/03/11 09:16:36.16 fvdAjVDF.net
>>342
URLリンク(ideone.com)
C++。最近、あんまり効率考慮したコードが書けてないな~。

367:デフォルトの名無しさん
16/03/11 23:07:01.52 4PxK/ADg.net
変数A1, A2, A3, A4, A5 に整数が入っているとして、
全部同じか、そうでないかを判定したいのですが、
もっとも効率よい方法教えて下さい。
if(A1==A2&&A2==A3&&A3==A4&&A4==A5){
 ...
}else{
 ...
}
みたいなのしか思いつきません。

368:デフォルトの名無しさん
16/03/11 23:55:40.35 fvdAjVDF.net
それ以外だとSIMD使うとかになりそうな・・・。

369:デフォルトの名無しさん
16/03/14 11:38:06.21 7hslT/Gl.net
お題:平和な動物園を作ろう
URLリンク(www.hisenkei.net)

370:デフォルトの名無しさん
16/03/14 12:34:29.93 DTR/fUtN.net
宿題じゃね?

371:デフォルトの名無しさん
16/03/14 13:20:59.04 W5wCaIkX.net
NP困難問題とか総当りするぞ

372:デフォルトの名無しさん
16/03/14 19:24:58.74 MNFRtT1Y.net
>>362
相性度の大小が逆じゃない?相性が悪いほど相性度の数値が大きくならないと‥

373:デフォルトの名無しさん
16/03/14 22:37:30.95 DTR/fUtN.net
よーしぱぱ、ねくすとぱーみゅてーしょんつかっちゃうぞー。

374:デフォルトの名無しさん
16/03/14 23:24:37.10 DTR/fUtN.net
>>362
URLリンク(ideone.com)
C++。かき捨て。デバッグ一切してないのでバグってたら御免。
だって、スカイレークのリリースで11秒かかるんだもん。

375:デフォルトの名無しさん
16/03/16 00:17:53.91 a7Xs+q4N.net
不満度2160であってるんかね

376:デフォルトの名無しさん
16/03/16 00:31:47.47 a7Xs+q4N.net
>>367
Calc内のstd::vector<DType> Angryとstd::vector<DType> Lengthが毎回作られてるから遅いんじゃね?

377:デフォルトの名無しさん
16/03/16 00:40:17.12 6w3U5gAP.net
std::arrayを使ってはどうか

378:デフォルトの名無しさん
16/03/16 01:13:48.78 PW1OJjjf.net
>>368
知らんよ。適当に書き捨てただけだし。
>>370
リリースで消えてる事をただ願うだけ。2重ループ何回も起動してるから遅いもんだと・・・。
>>370
カスタマイズはご自分で。
特にこだわりはないから、MITライセンスでどうぞ。

379:デフォルトの名無しさん
16/03/16 01:14:38.03 mfi8kYDa.net
>>368
俺も(2160,[6,9,3,8,7,4,1,5,10,2])になった。

380:デフォルトの名無しさん
16/03/16 01:19:02.65 PW1OJjjf.net
あ、バグってら。たぶん。
2重ループの中ループの初期値間違ってるかも。
今、ひらめいた。
多分不満度結果の半分くらいだと思う。
まぁいいや。

381:デフォルトの名無しさん
16/03/16 01:23:09.89 a7Xs+q4N.net
URLリンク(ideone.com)
何も考えずにstd::vector<DType> Angryとstd::vector<DType> Lengthを外に出しただけで1.74s

382:デフォルトの名無しさん
16/03/16 01:24:01.73 PW1OJjjf.net
URLリンク(ideone.com)
こうかもしれん。
静的変数にしたら超絶早くなった。

383:デフォルトの名無しさん
16/03/16 01:25:15.50 PW1OJjjf.net
あいたたた・・・・。
まぁ、宿題を真面目にやる気はないんで、適当にごまかしてください。

384:デフォルトの名無しさん
16/03/16 05:12:24.47 /v9qNF/y.net
arrayにしたらかえって遅くなった
URLリンク(ideone.com)

385:デフォルトの名無しさん
16/03/16 07:06:29.01 PW1OJjjf.net
>>377
>>375は微妙にコード最適化してるからねぇ。
リザルト変わってるし。
一応それとしては早くなってるんじゃないかと。

386:デフォルトの名無しさん
16/03/16 11:48:35.59 j8iobkYx.net
>>362 Squeak/Pharo Smalltalk
| N animals cages ans |
N := 10.
animals := #(
 (0 2 6 4 6 2 4 4 2 4) (2 0 4 2 2 2 2 2 2 6)
 (6 4 0 2 6 8 8 6 4 8) (4 2 2 0 4 2 6 6 2 6)
 (6 2 6 4 0 2 4 4 2 4) (2 2 8 2 2 0 6 6 6 8)
 (4 2 8 6 4 6 0 6 6 4) (4 2 8 6 4 6 6 0 6 6)
 (2 2 4 2 2 6 6 6 0 6) (4 6 8 6 4 8 4 6 6 0)).
cages := #(
 (0 3 4 5 8 10 9 6 2 4) (3 0 4 4 7 9 9 8 5 9)
 (4 4 0 2 4 7 5 4 4 8) (5 4 2 0 3 5 5 5 5 9)
 (8 7 4 3 0 3 5 6 8 12) (10 9 7 5 3 0 4 7 10 14)
 (9 9 5 5 5 4 0 3 8 11) (6 8 4 5 6 7 3 0 5 8)
 (2 5 4 5 8 10 8 5 0 4) (4 9 8 9 12 14 11 8 4 0)).
ans := Set new -> Float infinity.
(1 to: N) permutationsDo: [:perm |
 | sum |
 sum := 0.
 1 to: N do: [:i |
  1 to: N do: [:j |
   sum := ((animals at: (perm at: i)) at: (perm at: j)) * ((cages at: i) at: j) + sum]].
 ans value = sum ifTrue: [ans key add: perm copy].
 ans value > sum ifTrue: [ans := (Set with: perm copy) -> sum]].
^ans "=> a Set(#(6 9 3 8 7 4 5 1 10 2) #(6 9 3 8 7 4 1 5 10 2))->2160 "

387:デフォルトの名無しさん
16/03/16 13:31:34.17 NZyRjPzO.net
>>377
VSでプロファイラ取ってみたらCalcとstd::next_permutationの2つで全体の半分位
時間食ってんな
特に単純ループのCalcが全体の1/3ほど食ってる
std::next_permutationは仕方ないとしてCalcはどこか改善できんかな
配列の配列の要素取ってるから出来るだけ連続したキャッシュに乗る単なる配列の方がいいのかも
連続してないクラスの配列の配列取るもんだから、こういう単純なループがインライン展開されてないのも
原因の一つかと

388:デフォルトの名無しさん
16/03/16 15:44:17.23 NZyRjPzO.net
×インライン展開
○ループのアンロール

389:デフォルトの名無しさん
16/03/16 17:59:47.71 PW1OJjjf.net
ねくすとぱーみゅてーしょん切って動的計画法に切り替えるとかがベターかもしれん。
アッチはメモリめちゃくちゃ食うけど、早い。
しかし、俺は動的計画法を理解してないのだ・・・。Orz

390:デフォルトの名無しさん
16/03/16 18:03:36.31 VFJu78ei.net
>>362
なんか計算が微妙に合わないなと思ったら
ニシキヘビとカバの相性度が対象になってないわ
あー時間を無駄にした

391:デフォルトの名無しさん
16/03/16 18:37:37.89 PW1OJjjf.net
>>362の資料いくつか間違いがあるっぽい。
不満度も重複に計算してるし、なんか仕様表として欠陥がある。

392:デフォルトの名無しさん
16/03/20 08:30:05.20 e/Ot8AcY.net
お題:ダーツのダブルアウトの組み合わせ
問題の前にダーツのルール(501ゲーム)を簡単に説明。
1~20のマス目があって、それぞれにダブル(最外周の細い領域)と
トリプル(中間の細い領域)があり、ダブル、トリプルは得点が2倍、3倍になります。
中心の2重円は最内の円がダブルブル(50点)、その外側の円がブル(25点)。
持ち点501点から1ターン(1ラウンド)3投ずつプレイして当たった得点を減算していき、
最後残り点数がちょうど0になれば勝ち。
ただし、最後はダブルに当ててフィニッシュする必要があります(ダブルアウトという)。
例:最後5点残っていた場合は、5点は直接狙えず、1点を当ててから2点のダブル(計5点)、
あるいは3点を当てて1点のダブル(計5点)のように最後がダブルになるようにフィニッシュします。



393:考動画 https://www.youtube.com/watch?v=GfC17dQntFA この動画の下のスコアで、残り点数が少なくなってくると左側にT20 T18 D16のような表示が 出てきますが、これは次の3投で上がれる組み合わせの一例を示しています。 この動画だと1:45あたりで残り146点のフィニッシュの組み合わせ例として出ていますね。 (数字の頭のDはダブル Tはトリプル 20x3 + 18x3 + 16x2 = 146) 問題: 1.残り点数を与えられた場合に、1ラウンド3投でフィニッシュできる全ての 組み合わせを求めてください。 例:残り4の場合は[D2][2 D1][D1 D1][1 1 D1]の4通り 例として残り10の場合を求めてみてください。 2.1ラウンド3投以内のフィニッシュで最も組み合わせの多い残り点数を求めてください。 解答例:http://ideone.com/LWu1WM (C言語 合ってるかちょっと自信ない)



394:デフォルトの名無しさん
16/03/20 09:03:48.16 e/Ot8AcY.net
>>385
外した場合を考えてませんでした。
残り10をD5でフィニッシュする場合、1投目でフィニッシュと、1投目はずして(0点)
2投目でフィニッシュ、同じく1,2投目はずして3投目でフィニッシュがありますが、
これは全て[D5]に含むこととします。(外した分は無視)
外した分も考慮して組み合わせを考えてみても面白いかもしれません。
(上の例だと[D5][0 D5][0 0 D5]に分かれることになります)

395:デフォルトの名無しさん
16/03/23 03:54:21.46 SSV1rQef.net
お題:配列やリストの累積和を求める
90 10 54 3 6 22 77 78 75 16 -> 90 100 154 157 163 185 262 340 415 431

396:デフォルトの名無しさん
16/03/23 04:48:29.17 dWvJC0mF.net
>>387
URLリンク(ideone.com)
C++。適当に書いた。結構短くかけたと思う。

397:デフォルトの名無しさん
16/03/23 16:03:47.29 NkT0dmTC.net
>>387
haskell
map sum.tile.inits

398:デフォルトの名無しさん
16/03/23 19:13:26.12 l5rfZdo+.net
>>387
C++
URLリンク(ideone.com)

399:デフォルトの名無しさん
16/03/23 20:01:16.70 1UFsClL1.net
>>387 F#
Seq.scan (+) 0

400:デフォルトの名無しさん
16/03/23 20:59:24.58 NkT0dmTC.net
scanいいなーと思って探してみたらhaskellにもあった
しかも標準ライブラリだった。
scanl1(+)

401:デフォルトの名無しさん
16/03/23 21:07:05.34 NkT0dmTC.net
標準ライブラリじゃなくて、Preludeでした、すみません。

402:デフォルトの名無しさん
16/03/23 21:24:19.74 jwiGmJgq.net
>>387 Python3
itertools.accumulate(L)
もはや標準ライブラリの紹介、ジェネレーターを返すので煮るなり焼くなりして使う

403:デフォルトの名無しさん
16/03/24 13:07:49.70 5hctbNOo.net
>>387
C
URLリンク(ideone.com)

404:デフォルトの名無しさん
16/03/24 14:14:51.89 BKOgASSO.net
>>387
C++
URLリンク(ideone.com)
長くなり過ぎワロタ

405:デフォルトの名無しさん
16/03/25 23:54:10.03 aGSq1f0l.net
>>387
PowerShell
もっと短くできなかったものかなあ
function Accumulate() {
$t = @(); $args | % {$t += $t[-1] + $_}; $t
}

406:デフォルトの名無しさん
16/03/26 00:50:33.88 /XUmDgkC.net
>>342
PowerShell
function SortGroupByCount($o) {
 $o.GetEnumerator() | group | sort Count -d | select Group | %{ Write-Host -n "$($_.Group) " }
}
> SortGroupByCount "Hello world"
l l l o o H e w r d
> SortGroupByCount 3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6
3 3 3 3 5 5 5 9 9 9 1 1 4 4 2 2 6 6 8 8 7

407:デフォルトの名無しさん
16/03/26 00:57:47.15 /XUmDgkC.net
>>398
よく見たらselect Groupいらんかった
function SortGroupByCount($o) {
 $o.GetEnumerator() | group | sort Count -d | %{ Write-Host -n "$($_.Group) " }
}

408:デフォルトの名無しさん
16/03/26 06:52:33.07 lsHN8L8S.net
@Mathematica
In[1] := x = {90, 10, 54, 3, 6, 22, 77, 78, 75, 16};
In[2] := x//
     Accumulate
Out[2] = {90, 100, 154, 157, 163, 185, 262, 340, 415, 431}

409:デフォルトの名無しさん
16/03/27 01:17:51.47 7ndxGIoM.net
>>387 Io
f := method(a,
s := 0
a map(v, s = s + v)
)

410:デフォルトの名無しさん
16/03/28 00:26:57.54 K457tFb7.net
>>387
Ruby
a=%w(90 10 54 3 6 22 77 78 75 16).map(&:to_i)
a.inject(0){|acc,e|acc+=e;p acc}

411:デフォルトの名無しさん
16/03/28 13:28:14.63 ObwLfSdF.net
>>387 Squeak/Pharo Smalltalk
| fn |
fn := [:arr | arr inject: #() into: [:a :x | a, {x + (a at: a size ifAbsent: 0)}]].
fn value: #(90 10 54 3 6 22 77 78 75 16)
"=> #(90 100 154 157 163 185 262 340 415 431) "

412:デフォルトの名無しさん
16/03/28 13:51:42.42 ObwLfSdF.net
>>342 Squeak/Pharo Smalltalk
| fn |
fn := [:seq |
 | rule |
 rule := [:a :b |
  a key > b key or: [
   a key = b key and: [(seq indexOf: a value) < (seq indexOf: b value)]]].
 seq class streamContents: [:ss |
  (seq asBag sortedCounts sort: rule) do: [:kv |
   kv key timesRepeat: [ss nextPut: kv value]]]
].
fn value: 'Hello world'.
"=> 'lllooHe wrd' "
fn value: #(3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6).
"=> #(3 3 3 3 5 5 5 9 9 9 1 1 4 4 2 2 6 6 8 8 7) "

413:デフォルトの名無しさん
16/03/29 23:25:45.53 UAhYeBNf.net
sage>>402
>a.inject(0){|acc,e|acc+=e;p acc}
これって
a.inject(0){|acc,e|p acc+e}
でいいんじゃないの

414:デフォルトの名無しさん
16/03/30 02:01:04.35 00BHzwP5.net
>>342
Rubyで。
a=[3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6]
a=a.inject({}){|acc,e|
acc[e]||=0
acc[e]+=1
acc
}
p a
.to_a
.sort_by
.with_index{|s,i| [s[1], i] }
.reverse
.map{|e|e[0].to_s*e[1]}
.join

415:デフォルトの名無しさん
16/03/30 05:39:51.79 ij4V+9+M.net
>>>342 Python3
def f(L):
 return sorted(L, key=lambda x: (-L.count(x), L.index(x)))
print("".join(f("Hello world")))

416:デフォルトの名無しさん
16/03/30 08:05:32.53 ZA7ECi0z.net
URLリンク(ideone.com)
どうでもいいんだけど、追記型素数検出器を書き直した。
爆速になった。イデオンで動かす感じで27ビット2.4秒。
要するにエラトステネスの篩なんだけど、思ったより早かったなぁ。
肝心の追記はまだ試してない・・・。Orz

417:デフォルトの名無しさん
16/03/30 09:35:35.02 ZA7ECi0z.net
URLリンク(www.dotup.org)
ウラム螺旋に移植した。一応小さい解像度では試してるがデカいのは知らん。
素数列挙は超早くなったが、画像生成がまだ重ひ。
暇な人むけ。

418:デフォルトの名無しさん
16/04/01 00:36:24.19 oZji/N9B.net
>>406
実行結果が
"333399955588662244117"
になってしまいます

419:デフォルトの名無しさん
16/04/04 21:56:44.86 w9r+G2YN.net
お題:nで始まる最小の素数を求める
n=4 -> 41
n=777 -> 77711
n=403 -> 40343

420:デフォルトの名無しさん
16/04/04 22:48:25.37 mfUNWB3k.net
>>411 Java
URLリンク(ideone.com)

421:デフォルトの名無しさん
16/04/05 21:02:49.40 V1X87Hw6.net
>>411 C
URLリンク(ideone.com)

422:デフォルトの名無しさん
16/04/05 21:05:24.30 ZlseDTbh.net
フリーセルソルバー
問題によっては1秒内で終るものもあれば3分かかったり
評価関数色々用意したがすべて1秒以内にできるようにしたいが...

423:デフォルトの名無しさん
16/04/06 01:55:40.63 HGCmMFVS.net
>>411
URLリンク(ideone.com)
C++。コードの半分は以前のものを流用した。
なんかランタイムエラーになってるけど、よくわからん。
答えはあってると思う。

424:デフォルトの名無しさん
16/04/06 02:00:45.11 HGCmMFVS.net
>>414
フリーセル自作しないといけないのでめんどくさい。
フリーセルってここ数年やってないなー。

425:デフォルトの名無しさん
16/04/08 13:12:03.72 opSE2XAx.net
>>411
Rubyで。
require 'prime'
def func1 n
nStr = n.to_s
nLen = nStr.length
Prime::instance.each{|e|
return e if e.to_s[0, nLen] == nStr
}
end
p func1 4
p func1 777
p func1 403

426:デフォルトの名無しさん
16/04/08 20:22:10.75 JfY7ulrA.net
>>415
20 32 51 あたりの結果がおかしいんじゃないかな?
20 -> 2003になるところが2011になってる。

427:デフォルトの名無しさん
16/04/08 20:59:33.30 OyooKXkj.net
>>411 Io
isPrime := method(n,
if(n < 2, return(false))
if(n < 4, return(true))
if(n % 2 == 0, return(true))
for(i, 3, n sqrt, 2, if(n % i == 0,return(false)))
true
)
f := method(n,
a := 1
loop(
for(i, n * a + 1, n * a + a - 1, 2,
if(isPrime(i), return(i))
)
a = a * 10
)
)
Io> list(1,777,403)map(v,f(v))
==> list(11, 77711, 40343)

428:デフォルトの名無しさん
16/04/09 00:47:11.89 8UqsZWln.net
>>418
あーそれバグですな。失礼。
ゼロ埋めは試してないのでそういう結果になってます。
思いつきもしませんでした。ごめんなさい。
どう書けばいいかちょっと妙案が思いつかないので保留。

429:デフォルトの名無しさん
16/04/09 23:01:46.01 UGeAL8lU.net
お題:各桁の数字が奇数、偶数、奇数、偶数...のように
最上位の桁から奇数と偶数が交互並ぶ自然数を考える。
小さい方からn番目のこのような数を求める
n=1 -> 1
n=10 -> 18
n=1000 -> ?

430:デフォルトの名無しさん
16/04/10 00:12:29.27 0xtkUQ3n.net
>>421 Java
URLリンク(ideone.com)

431:デフォルトの名無しさん
16/04/10 03:27:38.19 GVWrhGxP.net
>>411
>>418
URLリンク(ideone.com)
C++。半ば暇なのとか色々まざってぶち切れ気味に書き直した結果。
なおったかな?
手を抜いて新規構造考えたまではよかったが結局古い道を選ばざるを得なかった。
ゼロパティングなんてふつう考えないがこういうケースもあるんだな。勉強になった。
以上。

432:デフォルトの名無しさん
16/04/10 04:31:37.37 GVWrhGxP.net
>>421
URLリンク(ideone.com)
C++。なんかつじつまが合わないので>>422をの結果を参考にさせてもらった。
どうにも盛大に勘違いしてたようだ。
しかし、先頭が必ず奇数であるとは書いてないので混乱した。

433:デフォルトの名無しさん
16/04/10 11:04:10.71 yfpRB3fX.net
>>421
@Mathematica
URLリンク(ideone.com)

434:デフォルトの名無しさん
16/04/10 22:30:50.62 SKXiL2tD.net
>>421
F#
URLリンク(ideone.com)
お題スレ参加は半年ぶりくらい。。。
さらにF#の勉強開始して1ヶ月程度なので、ちょっとアレな感じかもしれませんが・・・

435:425
16/04/10 23:49:40.35 SKXiL2tD.net
>>421
F#
URLリンク(ideone.com)
たびたびスマン・・・ちょっとブラッシュアップしました
見た目がちょっとキレイになった

436:デフォルトの名無しさん
16/04/11 19:11:43.16 U9aEtrvs.net
>>411 Squeak/Pharo Smalltalk
| primeStartsWith |
primeStartsWith := [:n |
 | exp min max ans |
 exp := 0.
 [ min := n * (10 raisedTo: exp).
  max := n+1 * (10 raisedTo: exp).
  ans := (Integer primesUpTo: max) detect: [:prime | prime >= min] ifNone: nil.
  exp := exp + 1.
  ans notNil.
 ] whileFalse.
 ans
].
primeStartsWith value: 4. "=> 41 "
primeStartsWith value: 777. "=> 77711 "
primeStartsWith value: 403. "=> 40343 "

437:デフォルトの名無しさん
16/04/11 19:31:44.71 U9aEtrvs.net
>>421 Squeak/Pharo Smalltalk
URLリンク(ideone.com)

438:デフォルトの名無しさん
16/04/12 06:07:51.10 IvlGS


439:XDX.net



440:デフォルトの名無しさん
16/04/13 23:39:53.84 xdVnQQp5.net
>>387
F# 勉強中
URLリンク(ideone.com)
ローカル環境だとList使って実装して動いたんだけど
ideoneだと動かなくて、調べたらideoneのF#のバージョンが低いのかもしれない
Arrayを使って書き直したら動いた

441:デフォルトの名無しさん
16/04/13 23:56:54.81 49N/1I8V.net
>>421 Io
f := method(n,
a := list
while(n > 0,
n = n - 1
a = a prepend(n % 5)
n = (n / 5) floor
)
a map(i, v, v * 2 + (i + 1) % 2) join asNumber
)

442:デフォルトの名無しさん
16/04/14 22:38:40.17 hWzlQv+3.net
お題:効率は無視してコードをできるだけ単純にしたバブルソート

443:デフォルトの名無しさん
16/04/14 23:39:12.31 rplj63Da.net
>>4
F# 勉強中
URLリンク(ideone.com)
プログラム自体はちゃんと動いてるっぽいが、
コードがF#的になんかいろいろと間違えてるような気がする・・・

444:デフォルトの名無しさん
16/04/15 02:29:59.73 7tix3D6p.net
>>433
Ruby
def mysort a
(a.length - 1).times{|i|
if a[i] > a[i + 1]
a[i], a[i + 1] = a[i + 1], a[i]
mysort a
end
}
a
end
a = (1..10).map{rand(10000)}
p a
p mysort a

445:デフォルトの名無しさん
16/04/15 05:28:13.90 UEolzSKG.net
>>433
URLリンク(ideone.com)
C++。残念なコードになった。こんなコード書きたくなーい。Orz

446:デフォルトの名無しさん
16/04/15 21:30:03.75 uCMMU+7S.net
>>433 F#
let rec sort = function
| ([] | [_]) as x -> x
| l::rs ->
let r::rs = sort rs
if l < r then l::sort(r::rs) else r::sort(l::rs)
let r = System.Random()
let xs = List.init 10 <| fun _ -> r.Next 10
printfn "%A = sort %A" xs <| sort xs

447:デフォルトの名無しさん
16/04/16 01:41:35.90 8gZGJMh1.net
>>433
F# 勉強中
URLリンク(ideone.com)
勉強中ゆえ(?)、>>437のコードとか正直よく分からん・・・
とりあえず、自分の理解できる範囲で書いてみたら
殆ど手続き型と変わらん作りになってしまったw

448:デフォルトの名無しさん
16/04/16 21:13:38.41 uCxyrvwI.net
>>436
選択ソート?

449:デフォルトの名無しさん
16/04/16 23:39:51.82 LiAu7R50.net
>>439
え?バブルソートでしょ。ちょっと調べてくる。

450:デフォルトの名無しさん
16/04/16 23:43:07.03 LiAu7R50.net
URLリンク(ja.wikipedia.org)
これの疑似コードのちょっと悪い感じ?
シンプルにするためにオーダー悪くなってる。

451:デフォルトの名無しさん
16/04/16 23:47:56.31 LiAu7R50.net
おっとー、交換条件がおかしいか。
そんなの些細な違いよ!

452:デフォルトの名無しさん
16/04/16 23:56:43.13 8gZGJMh1.net
>>37
F# 勉強中
URLリンク(ideone.com)
2進⇔10進変換の復習ができてよかった

453:デフォルトの名無しさん
16/04/17 20:39:22.16 cB2Ml+fZ.net
>>433
@Mathematica
URLリンク(ideone.com)

454:デフォルトの名無しさん
16/04/17 20:55:49.84 cB2Ml+fZ.net
調べたらこんなのもあった。
@Mathematica
「パターンと規則を使ってバブルソートアルゴリズムを実装する」
URLリンク(reference.wolfram.com)

455:デフォルトの名無しさん
16/04/17 21:55:03.28 8hbCthlc.net
>>440
隣同士の要素を比較・交換するのがバブルソートだと思うけど

456:デフォルトの名無しさん
16/04/17 22:19:43.05 chPSqpJT.net
>>411
F# 勉強中
URLリンク(ideone.com)
素数判定はWikipediaの同名項目に書かれてるCソースの丸パクリです・・・
あと、最初に挑戦したときは>>418と全く同じ症状だったので断念・・・
なんだか、イマイチな感じなので後でコッソリとリファクタリングするかもです

457:デフォルトの名無しさん
16/04/17 22:30:35.60 DiLcHZEv.net
4×4の15パズルの、解ける盤面を作るのに、
空いているマスに、ランダムに100回ほど移動して、
盤面を作っている本を読んだが、
ランダムに盤面を作って、それが解ける問題かどうか、簡単に判別できる方法はないの?
3×3の盤面で、ランダムに盤面を作って、解ける問題かどうかを判別して。
上は解ける。下は解けない
0,1,2
3,4,5
6,7,空
0,1,2
3,4,5
7,6,空

458:デフォルトの名無しさん
16/04/18 01:55:07.16 v1FL9ptr.net
>>448
c++で適当に書いた。URLリンク(ideone.com)
以下を参照したが実装が少し違うのであってるかわからん
URLリンク(homepage2.nifty.com)

459:片山博文MZ ◆T6xkBnTXz7B0
16/04/18 14:39:50.41 6ER+VIie.net
15パズルの偶奇性
URLリンク(www.geocities.jp)

460:デフォルトの名無しさん
16/04/18 15:49:05.97 vrHU0PJO.net
1と4と空白を所定に合わせて
あとは偶奇性

461: ◆QZaw55cn4c
16/04/18 19:33:23.43 h2Yzyofc.net
>>441
いや,オーダーはやはりΟ(n^2)で変わらない.
どんなコードを想定していたの?

462:デフォルトの名無しさん
16/04/18 20:53:46.45 zW4NHiQV.net
>>452
デバッグなしで書くと。
for(i=0;i<size-1;i++){
for(j=i+1;j<size;j++){
if(a[i]<a[j]) swap(&a[i],&a[j]);
}}
こういうコードを初心者のころどうも発明(バグ製造)したらしくてずーっと使ってるんだけど、それの簡略版。
forの間にIssorted相当を仕込めばオーダ不安定ソートになる。
俺は長い間これをバブルソートだと思っていた。Orz

463:デフォルトの名無しさん
16/04/18 20:57:27.48 zW4NHiQV.net
バブルソートからどうやってコムソート創造したんだよ。
と長い間思っていたが、ベースから間違っていた。Orz

464:デフォルトの名無しさん
16/04/18 21:02:36.79 zW4NHiQV.net
オーダーっていうか、実行効率だな。些細なことだけど。

465:デフォルトの名無しさん
16/04/18 22:43:04.02 h2Yzyofc.net
>>455
そうそう,オーダー表現は n!, n^2(n^c), nlogn, 1 などで表現する.定数倍は無視するんだ, 正確な定義は知らないがたぶん極限が収束するかどうかで見るんだろう.
>>453 もΟ(n^2)

466:デフォルトの名無しさん
16/04/18 23:45:25.46 zW4NHiQV.net
>>456
なるほどわからん。
まぁ、そういう勘違いを積み重ねるだけの人生だった。Orz
いや、死んでないけどさ。

467:デフォルトの名無しさん
16/04/19 00:24:10.72 5fHK1dXS.net
>>456
n>cのときg(n)<d*f(n)が成り立つようなc,dが存在すれば関数g(n)=O(f(n))って感じじゃね
イメージ的に

468:デフォルトの名無しさん
16/04/19 01:07:43.67 ZMwgfCfL.net
数学で会話できる人かっこいいなー。

469:デフォルトの名無しさん
16/04/19 17:18:01.67 93zFzB0Z.net
>>458
かっこいいー
もしかして大学出ですか?

470:デフォルトの名無しさん
16/04/19 23:30:31.84 iVQa/t2n.net
>>342
F# 勉強中
URLリンク(ideone.com)
なんかSQLいじってる気分になった

471:デフォルトの名無しさん
16/04/20 16:20:19.87 bv/Q/2uG.net
>>433 Squeak/Pharo Smalltalk
| simpleBubble |
simpleBubble := [:arr |
 | stream |
 stream := arr readStream.
 arr size - 1 timesRepeat: [
  arr size - 1 timesRepeat: [
   stream next > stream peek ifTrue: [
    arr swap: stream position with: stream position + 1]].
  stream reset
 ].
 arr
].
simpleBubble value: (1 to: 10) asArray shuffled "=> #(1 2 3 4 5 6 7 8 9 10) "

472:デフォルトの名無しさん
16/04/20 20:06:02.61 ARUL8qdV.net
>>433 c
URLリンク(ideone.com)

473:デフォルトの名無しさん
16/04/20 22:18:59.00 +sWW+qMV.net
>>433 Io
f := method(a,
 i := 0
 while(i < a size,
  if(a at(i) > a at(i + 1),
   a swapIndices(i, i + 1)
   i = 0
  ,
   i = i + 1
  )
 )  
 a
)

474:デフォルトの名無しさん
16/04/21 13:03:18.17 5MDUs+Ed.net
>>433 Squeak Smalltalk (PositionableStream>#lastが無いのでPharoではNG。為念)
>>464 等を参考にループを >>462 よりシンプルにした版。
| simplerBubble |
simplerBubble := [:arr |
 | stream |
 stream := arr readStream position: 1.
 [stream atEnd] whileFalse: [
  stream last > stream next ifTrue: [
   arr swap: stream position - 1 with: stream position.
   stream position: 1
  ]
 ].
 arr
].
simplerBubble value: (1 to: 10) asArray shuffled "=> #(1 2 3 4 5 6 7 8 9 10) "

475:デフォルトの名無しさん
16/04/23 01:46:03.15 3vhuTo00.net
>>433 Rust
URLリンク(ideone.com)

476:デフォルトの名無しさん
16/04/30 21:02:40.94 f9UktSYx.net
お題:170の階乗の先頭10桁を求める

477:デフォルトの名無しさん
16/04/30 21:05:19.27 f9UktSYx.net
お題:170の階乗の先頭10桁を求める

478:デフォルトの名無しさん
16/04/30 22:13:46.81 ih9K+Dlj.net
>>467
Rubyで
p (1..170).inject(&:*).to_s[0,10]
# 実行結果
# "7257415615"
# [Finished in 0.1s]

479:デフォルトの名無しさん
16/04/30 23:37:54.35 DWppbW2i.net
>>467
F# 勉強中
URLリンク(ideone.com)
少しはF#分かってきたような、そうでもないような・・・

480:デフォルトの名無しさん
16/05/01 00:25:30.55 3nNxkvii.net
>>468
FBasic
'170!
Dim i As Integer
Dim ii As Double
Dim f As Double
f= 1.0
For i= 2 To 170
ii = CDbl(i)
f = f * ii
Next
Print f
Sleep
End
7.257415615307994e+306

481:デフォルトの名無しさん
16/05/01 01:30:49.70 PVJV1HwV.net
>>467 Io
Io> a:=1;for(i,1,170,a=a*i);(a/(10**(a log10 floor-9)) )floor asString(10,0)
==> 7257415615

482:デフォルトの名無しさん
16/05/01 05:22:39.61 k8Y2io+T.net
>>467 Python3
関数を定義したり制御構文を使ったりライブラリをimportしたりするのは負けた気がするので捻った
>>> str((lambda f, n: f(f, n))((lambda g, m: m * g(g, m-1) if m > 0 else 1), 170))[:10]
'7257415615'

483:デフォルトの名無しさん
16/05/01 07:00:07.79 Jp0j1ueK.net
>>467 Squeak/Pharo Smalltalk
170 factorial asString first: 10 "=> '7257415615' "

484:デフォルトの名無しさん
16/05/01 09:24:40.00 i1tpwyoc.net
>>467
@Mathematica
170 // Factorial // ToString // StringTake[#, 10] &

485:デフォルトの名無しさん
16/05/01 09:37:49.41 tKi6j9CT.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
URLリンク(twitter.com)
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw

The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません


486:デフォルトの名無しさん
16/05/01 14:28:23.75 XECCJNE2.net
>>467 F#
printfn "%s" <| (Seq.reduce (*) {1I..170I}).ToString().[..9]

487:デフォルトの名無しさん
16/05/01 21:02:15.79 PVJV1HwV.net
>>467 R
> substr(sprintf("%f",prod(1:170)),1,10)
[1] "7257415615"

488:デフォルトの名無しさん
16/05/02 07:53:08.55 JrdSjVB4.net
お題: n!の上位桁が10^x-1になる最小のnを求める (xは正の整数)

x=1: n=96 (9916779348...)
x=2: n=96 (9916779348...)
x=3: n=261 (9996811196...)
x=4: n=17411 (9999777368...)
x=5: n=583104?

489:デフォルトの名無しさん
16/05/02 11:11:18.30 ybUtGNCd.net
>>479 Squeak/Pharo Smalltalk
| fn |
fn := [:x |
 | factFloat factStr n nines |
 n := 0.
 factFloat := 1.0.
 nines := String new: x withAll: $9.
 [ n := n + 1.
  factFloat := factFloat * n.
  factFloat := factFloat / (10 raisedTo: factFloat log asInteger).
  factStr := factFloat asString copyWithout: $. .
  factStr first = $0 ifTrue: [factStr := factStr allButFirst].
  factStr size >= x and: [(factStr first: x) = nines]
 ] whileFalse.
 {#x->x. #n->n. factStr truncateWithElipsisTo: 13}
].
fn value: 1. "=> {#x->1 . #n->97 . '9916779348...'} "
fn value: 2. "=> {#x->2 . #n->97 . '9916779348...'}"
fn value: 3. "=> {#x->3 . #n->262 . '9996811196...'} "
fn value: 4. "=> {#x->4 . #n->17411 . '9999777368...'} "
fn value: 5. "=> {#x->5 . #n->583104 . '9999906872...'} "
fn value: 6. "=> {#x->6 . #n->2064173 . '9999993058...'} "

490:デフォルトの名無しさん
16/05/04 08:45:55.56 GSs/8kUx.net
>>479
@Mathematica
URLリンク(ideone.com)

491:デフォルトの名無しさん
16/05/04 21:22:23.48 WvfFbq7M.net
>>479 Io
f := method(x,
 d := 10 ** (x - 1)
 q := 10 ** x - 1
 a := 1
 n := 0
 while(q != (a * d) floor,
  n = n + 1
  a = a * n
  a = a / 10 ** a log10 floor
 )
 n
)
Io> f(1)
==> 96
Io> f(3)
==> 261
Io> f(5)
==> 583104

492:デフォルトの名無しさん
16/05/04 22:35:23.32 qgnKpMBO.net
//┏┳┳┳┳┓
//┣╋╋╋╋┫
//┣╋╋╋╋┫
//┣╋╋╋╋┫
//┣╋╋╋╋┫
//┗┻┻┻┻┛
//上記の6X6の通路を左上から右下へ到達する時に
//同じ場所を通らずにたどり着くルートは何通りあるか?
嫌儲のプログラミングスレで盛り上がってるこの問題どうすかね

493:デフォルトの名無しさん
16/05/04 22:37:44.31 h5NbJg5S.net
おねえさん・・・

494:デフォルトの名無しさん
16/05/05 00:59:50.49 muAMBl7W.net
>>483
以前、お題スレ Part6の984 の問題で作ったものをそのまま流用。
左上から部屋番号1,2,3,...36(右下)として、部屋同士の接続を定義。
言語C++: URLリンク(ideone.com)
5x5なら1秒以内で終わるのですが、6x6はideoneではタイムオーバーでした。
計算するときはn=6にして計算して下さい。自分のところでは計算に70秒程度。
正直合ってるかどうかわかりません。
結果:
6x6:
全1262816通り
最短距離10(252通り)
最長距離34(10180通り)
ちなみに・・・
2x2:全2通り
最短距離2(2通り)
最長距離2(2通り)
3x3:全12通り
最短距離4(6通り)
最長距離8(2通り)
4x4:全184通り
最短距離6(20通り)
最長距離14(32通り)
5x5:全8512通り
最短距離8(70通り)
最長距離24(104通り)

495:デフォルトの名無しさん
16/05/05 01:32:14.77 muAMBl7W.net
>>483
元のスレ見にいったら、問題にもう1行あったよ
//ただし、同じ交差点は何度通ってもいい
これあるなら>>485は取り消しします

496:デフォルトの名無しさん
16/05/05 02:48:54.24 PH/e0da8.net
>>479
F# 勉強中
URLリンク(ideone.com)
※ただし、UInt64(Max 10進数で19桁)で計算してるので誤差が生じはじめると・・・
ideone上だとx=5が限界、以下ローカルでの実行結果
x=1: n=96 (9916779348...)
x=2: n=96 (9916779348...)
x=3: n=261 (9996811196...)
x=4: n=17411 (9999777368...)
x=5: n=583104 (9999906872...)
x=6: n=2064173 (9999993058...)
ちなみに、x=5がローカル(i7-3537U)で30秒くらいかかるのにideoneだと6秒未満だし
やっぱ性能いいのねぇ・・・
あと、階乗の手抜きっぽい計算はPAIZAの彼女を作るゲームの水着ゲット問題で研究しますたw

497:デフォルトの名無しさん
16/05/05 15:33:45.25 SQKTrz0M.net
>>486
それは発展版の方でですね
最初は482で次問が交差点を何度もです
ちなみに交差点を何度もではかなり気をつけないとCではスタックオーバーみたいですね

498:デフォルトの名無しさん
16/05/05 17:16:35.94 PH/e0da8.net
>>483
F# 勉強中
URLリンク(ideone.com)
ideoneでは残念ながら制限時間超過・・・
ローカル(i7-3537U 8GB mem)では1,262,816通り、実行時間およそ42秒
末尾再起にするため、やむを得ずmutableを使ったのだが、もっとうまいやり方はあるのだろうか・・・・

499:デフォルトの名無しさん
16/05/05 18:24:52.73 ZdWJcfSQ.net
>>488
482発展版? by c++ n=6まで
URLリンク(ideone.com)
手元で時間がかかったがn=7も確認

500:デフォルトの名無しさん
16/05/06 07:33:20.07 +i3ap6tD.net
>>490
489は、非発展版でした。
発展版はn=5が限界だった。あのビデオ通りの動きだな
URLリンク(ideone.com) 上書き
n=3の経路見てみてあっているような感じ。
それ以上のnは確認ができてない。
数列辞典で引ける程度でたので、これかな
URLリンク(oeis.org)

501:デフォルトの名無しさん
16/05/07 23:52:58.29 qCADCCRG.net
>>467
URLリンク(ideone.com)
C++。スレが専ブラの画面外に行ってたのでチェックしてなかった。
C++で作った割には誤差が出なくてよかった。たぶん。
>>469つかって検算させてもらった。thx.

502:デフォルトの名無しさん
16/05/08 00:03:58.77 r8xFef3w.net
>>483はC++やってる人がいるのでパス。
それ以上のコードはかけなさそう。Orz

503:デフォルトの名無しさん
16/05/08 00:04:20.89 r8xFef3w.net
あ、日付かわった。

504:デフォルトの名無しさん
16/05/08 21:11:37.01 WelKIVWp.net
お題:1から16までの連続した自然数をA,Bの二つのグループに分ける。
Aの要素の総和とBの要素の総和が等しく、Aの要素の2乗の総和と
Bの要素の2乗の総和も等しく、さらにAの要素の3乗の総和と
Bの要素の3乗の総和も等しくする。

505:デフォルトの名無しさん
16/05/08 23:07:10.56 3m2Dr+7v.net
{2,3,5,8,9,12,14,15}

{1,4,6,7,10,11,13,16}
だけ?

506:デフォルトの名無しさん
16/05/08 23:23:03.64 3m2Dr+7v.net
あ、共通部分があってもいいんだな
A=B={1,2,...,16}とか
まだありそう

507:デフォルトの名無しさん
16/05/08 23:38:34.59 r8xFef3w.net
5秒では終わらんなー。まぁ暇だからやってみようかなぁ・・・。

508:デフォルトの名無しさん
16/05/09 00:30:22.73 pUXvKib1.net
>>495
URLリンク(ideone.com)
C++。一応こういうコードを書いてみた。ろくにデバッグできなかったのでバグってる可能性が高い。
コンビネーションほしー。16!とかほぼ無理なので、絶望した。

509:デフォルトの名無しさん
16/05/09 01:03:48.60 yYTJyO7B.net
Haskellならマイクロ秒のオーダーで計算できますよ?
未だにC++に固執するのは宗教ですか?

510:デフォルトの名無しさん
16/05/09 01:22:53.38 pUXvKib1.net
特に宗教じゃないけど、ほかの言語を覚える気にならないだけ。
真面目にゲーム作るときに使おうと思って覚えたのが動機だから、ゲーム基準なの。
constexprがもうちょっと高機能になったらいいなーと思ってる。

511:デフォルトの名無しさん
16/05/09 01:25:19.28 pUXvKib1.net
>>500
というか、煽ってないでコードだしてよ。
ハスケール読めないけど。

512:デフォルトの名無しさん
16/05/09 03:01:39.37 2YrVj7rY.net
>>497
グループ分けだから共通は無しじゃないの

513:デフォルトの名無しさん
16/05/09 15:09:43.81 9C2z/2Vf.net
>>495
URLリンク(ideone.com)
16だけだと寂しかったので、答えが多数出てくる24も追加してみた。
1は必ずAグループに入るようにしている。
(A,Bを特定した時、全く逆の組み合わせも存在するが、今回は表示してない)

514:デフォルトの名無しさん
16/05/09 20:05:26.31 t+bzhO52.net
>>495 Io
for(i, 1, 2 ** 15,
 a := list
 for(j, 1, 16,a push(if(i at(j - 1) == 1, j, -j)))
 if(a map(**3) sum == 0, a println)
)
実行結果
list(-1, 2, 3, -4, 5, -6, -7, 8, 9, -10, -11, 12, -13, 14, 15, -16)
正の数をひとつのグループ、負の数をもうひとつのグループというこで

515:デフォルトの名無しさん
16/05/10 00:08:20.11 E+X0dc0Z.net
>>495
URLリンク(ideone.com)
C++。重複なし版。相変わらず16!は解決してない。
>>504 これ早いなー。すごいなー。Orz

516:デフォルトの名無しさん
16/05/10 19:41:46.28 2fCl6+HU.net
31の場合は何通り?

517:デフォルトの名無しさん
16/05/10 20:56:18.35 0+ZmZvza.net
40通り

518:デフォルトの名無しさん
16/05/10 21:01:50.08 TdrM46fl.net
>>495
@Mathematica
URLリンク(ideone.com)

519:デフォルトの名無しさん
16/05/11 02:23:15.24 zcj8oTfj.net
>>495 Java
URLリンク(ideone.com)

520:デフォルトの名無しさん
16/05/11 05:59:04.20 71pkMQnc.net
>>510
爆速だね。Core i7 4Gで
n=40で3646
n=47で173351
n=48で291482
個見つかった。所要時間1分くらいか

521:デフォルトの名無しさん
16/05/11 21:27:01.99 zcj8oTfj.net
listupがメモ化とかで速くできそうな気がするけど頭が動いちょらん

522:デフォルトの名無しさん
16/05/12 19:27:31.92 fkcp4aHY.net
>>495 Squeak/Pharo Smalltalk
| elems sets |
sets := Set new.
elems := (1 to: 16) asArray.
(1 to: elems size - 1) do: [:n |
 elems combinations: n atATimeDo: [:comb |
  | rest |
  rest := elems difference: comb.
  ((1 to: 3) allSatisfy: [:pow | (comb raisedTo: pow) sum = (rest raisedTo: pow) sum])
   ifTrue: [sets add: {comb copy. rest} asSet]
 ]
].
^sets "=> a Set(a Set(#(2 3 5 8 9 12 14 15) #(1 4 6 7 10 11 13 16))) "

523:デフォルトの名無しさん
16/05/13 20:53:50.90 6rd1u1gc.net
>>495
@Mathematica, リファクタリング後
URLリンク(ideone.com)

524:デフォルトの名無しさん
16/05/14 16:09:50.16 LEy4i3xG.net
>>495
スレ汚しスマソ
@Mathematica, さらにリファクタリング
URLリンク(ideone.com)
testGroup の条件を書き換えて、枝刈り。
計算時間が半分に。

525:デフォルトの名無しさん
16/05/22 16:51:30.35 QTcku1ZG.net
昔ダイナムで雪降ってたのでゴム長で行って
朝一大ヤマト1/498で一発入ったら艦長が
『戦闘配置につけ!』って出たのを思い出した。
2連で終わったけど。

526:デフォルトの名無しさん
16/05/22 16:52:01.87 UXQjq3mC.net
どこの誤爆だw

527:デフォルトの名無しさん
16/05/22 16:59:37.57 ZCteEarO.net
そういや昔のパチンコ雑誌はZ80のアセンブラの解析記事とか載ってたなw

528:デフォルトの名無しさん
16/05/25 05:32:56.17 4GANdY7B.net
>>483
@Mathematica
URLリンク(ideone.com)

529:デフォルトの名無しさん
16/05/27 20:18:44.31 2AExo9Gt.net
お題:n角形を隣接行列で表す

530:デフォルトの名無しさん
16/05/28 04:06:02.91 t8+ZEFcK.net
>>520
URLリンク(ideone.com)
C++。こういうこと?かしらかしらごぞんじかしら。

531:デフォルトの名無しさん
16/05/28 12:17:02.17 MAzFniKU.net
全然違うし何でそういう発想になったかわからん

532:デフォルトの名無しさん
16/05/28 16:19:17.65 XDR4NRkL.net
おれはこれ以外に解釈できない

533:デフォルトの名無しさん
16/05/28 18:12:21.03 t8+ZEFcK.net
>>522
線引いてみればわかるけど、N角形になるよ。
問題文が端的過ぎる。

534:デフォルトの名無しさん
16/05/28 18:15:28.59 t8+ZEFcK.net
出題者でてきてー。

535:デフォルトの名無しさん
16/05/29 01:35:58.98 l7Z0+24R.net
マジで出題者どこ行った。解こうにも解けないじゃないか。
ダメならダメでいいから出てこい。

536:デフォルトの名無しさん
16/06/01 20:35:38.46 4RXp3JbO.net
>>520 J
f=:(_1&|. +. 1&|.) @ = @ i.
f 4
0 1 0 1
1 0 1 0
0 1 0 1
1 0 1 0

537:片山博文MZ ◆T6xkBnTXz7B0
16/06/04 22:13:22.70 9azu721e.net
お題:C/C++とWindowsに限定。レジストリ全体を記憶し、
変更があれば変更点を表示する。
Windows 2000で動作しなければならない。
GUIは必要ない。Enterキーを押したタイミングで差分を表示する。
報酬3000円。銀行振込、WebMoney、ビットキャッシュ、Amazonギフト券の中から選べる。
ただし、メールで連絡が取れること。

538:デフォルトの名無しさん
16/06/04 22:13:38.13 9azu721e.net
あげ

539:デフォルトの名無しさん
16/06/05 00:23:56.68 bEHxSIM9.net
DB全体のスナップショット機能と同じやん

540:デフォルトの名無しさん
16/06/05 07:15:50.35 VJ6TUrY4.net
ブラック企業かよw

541:デフォルトの名無しさん
16/06/06 08:41:23.90 6BPcdog/.net
Windows7以上?ではレジストリにアクセス権が設定できるんですが?

542:デフォルトの名無しさん
16/06/14 17:21:21.81 ylR65uF/.net
N個の具材を3つ選んでハンバーガーにトッピングすることが出来ます。
合計285通りの組み合わせが出来ます。
必要な具材の最低個数と最高個数を求めてください。

543:デフォルトの名無しさん
16/06/14 19:38:38.50 Eohj2elN.net
286個では

544:532
16/06/14 20:27:38.82 Wnl/zMEq.net
いいえ285であってるはずです
「マクドナルド 裏メニュー」の285通りから問題を作りました

545:デフォルトの名無しさん
16/06/14 21:21:13.32 F0Va16Jg.net
この出題じゃその例にはならないぞ

546:デフォルトの名無しさん
16/06/14 23:44:42.75 43s0H04y.net
>>533
ちょっと言ってる意味が解らないですね。
オーダーしてくる確率が決まってるならまだしも、イーブンに注文してくるなら最高値と最低値は一緒になるのでは?
初見でそう思った。
C++にコンビネーションを・・・。Orz

547:デフォルトの名無しさん
16/06/14 23:46:00.30 sBc8t+V7.net
ハンバーガーにも種類があるのはググって分かったけど、それでも何を解答させんとしているのかはよくわからないね
URLリンク(ideone.com)

548:デフォルトの名無しさん
16/06/17 19:43:08.29 ZJPgf/2E.net
>>535
表に1個有るんだろ。
計286通り。

549:デフォルトの名無しさん
16/06/26 01:19:32.87 BV3PG4b+.net
お題: 2つの異なる字幕ファイルをマージする
映画の字幕ファイルが2つ(日本語版と英語版)あります
また、2つのファイルはそれぞれ別の人が同じ映画から作成しました
ファイルのフォーマットは以下のように決まっています
[ フォーマット ]
発声開始時間 --> 発声終了時間
台詞1
発声開始時間 --> 発声終了時間
台詞2



550:[ フォーマット例 ] 00:02:11,706 --> 00:02:13,196 banana. 00:02:14,509 --> 00:02:17,842 apple. 1つのファイルには台詞が1000以上あります 作成者が異なるのでぞれぞれのファイルの台詞の時間はバラバラに記録されています 近しい時間帯の台詞が出来るだけ綺麗に連なるように2つのファイルをマージしてください



551:デフォルトの名無しさん
16/06/26 01:27:48.70 ifKGTnOo.net
データをフォーマット通り読んでってソートするお仕事?

552:デフォルトの名無しさん
16/06/26 01:33:13.09 BV3PG4b+.net
>>541
作者が異なるので記録する台詞も個人差(詳細だったり大雑把だったり)があります
ソートしたらダメでした…(´・ω・`)

553:デフォルトの名無しさん
16/06/26 01:37:53.46 ifKGTnOo.net
データがなさ過ぎてなんとも言い難いなぁ。一抜け。

554:デフォルトの名無しさん
16/06/26 01:55:05.38 ifKGTnOo.net
まぁ、ぼやっと思う感じでは、
1、ファイルAソート。時間で。
2、ファイルBソート。時間で。
3、両方を別バッファに取り込み。
4、一本化バッファ作成。
5、バッファA[i]の時間とバッファB[j]の時間を比較。
6、小さいほうを一本化バッファの後ろに追加。
7、追加したほうのインデックサをインクリメント。追加しなかった方はそのまま。
8、5にループ。
9、余ってるほうを全部突っ込む。
end。
って感じに思えるが。メンドクセー。

555:デフォルトの名無しさん
16/06/26 02:35:16.23 xbYmT3r1.net
>>542
ソートしてダメならプログラムでやる意味ないじゃん
よくわからんお題だな

556:デフォルトの名無しさん
16/06/26 08:12:11.46 a+kSsv7i.net
>>540
二つのファイルをマージするとどんなメリットがあるの?

557:デフォルトの名無しさん
16/06/26 13:48:43.10 kOUAeqMS.net
とりあえずそのファイルをどこかに置いて見れるようにしとけよ。話はそれからだ。

558:デフォルトの名無しさん
16/06/26 14:42:47.48 VC0ezbuZ.net
>>540
発生開始時刻と発生終了時刻の相加平均値でソートしてはどうでしょうか?

559:デフォルトの名無しさん
16/06/28 21:40:42.79 JU4eR3PY.net
レス遅れてすまんが、お題としてはイマイチだったかな
URLリンク(www.opensubtitles.org)
URLリンク(www.opensubtitles.org)
>>546
英語の練習がしやすい

560:デフォルトの名無しさん
16/06/29 02:19:12.68 sVTYBpM+.net
タダの準備不足。
人を動かす材料が足りない。

561:デフォルトの名無しさん
16/06/29 23:31:32.20 OPqpBspr.net
そうか。すまんかった

562:デフォルトの名無しさん
16/06/29 23:49:35.70 frOOdHyw.net
入力だけじゃなく出力も提示しないとわからんよ

563:デフォルトの名無しさん
16/07/03 21:08:39.04 KvQk5E4z.net
>>540
JAVA ソース
URLリンク(ideone.com)
jarなど
URLリンク(www1.axfc.net)

564:デフォルトの名無しさん
16/07/05 11:21:22.75 ALuHk1mL.net
レスがつかないのでいいのか悪いのかさっぱりわからん
無責任なやつだな

565:デフォルトの名無しさん
16/07/21 20:01:41.38 rb76Qzme.net
お題:
いくつかの非負整数を区切り記号を略して書き並べてあります。
区切り記号の挿入箇所の組み合わせは全部で


566:何通りありますか?



567:デフォルトの名無しさん
16/07/21 20:05:24.57 rb76Qzme.net
>>555
あれ、例が抜けてた↓
"150301" -> 18
"150031" -> 16
"015000" -> 8
"2432902008176640000" -> ?

568:デフォルトの名無しさん
16/07/21 23:07:45.64 8Nf0PhCE.net
>>555-556
C++
あってるかどうかは知らん
URLリンク(ideone.com)

569:デフォルトの名無しさん
16/07/22 12:57:04.31 M/7Z6G3a.net
>>556
↓のような分割かと思ったが・・・
0,15000
01,5000
015,000
0150,00
01500,0
0,1,5000
0,15,000
0,150,00
0,1500,0
0,1,5,000
0,1,50,00
0,1,500,0
0,15,0,00


570:デフォルトの名無しさん
16/07/22 15:32:49.00 JXjdchXx.net
>>555
C言語 URLリンク(ideone.com)
例からすると区切り無しも含むのですかね

571:デフォルトの名無しさん
16/07/24 06:35:51.96 el9EgK1j.net
>>555
Haskell
URLリンク(ideone.com)

572:デフォルトの名無しさん
16/07/24 23:19:04.90 IHR53C+P.net
久しぶりにこのスレ開いたけど
何か過疎ってね?

573:デフォルトの名無しさん
16/07/24 23:34:50.13 253cC3eo.net
俺は最近はyukicoderとかpaizaとかでお題解いてるよ

574:デフォルトの名無しさん
16/07/25 03:46:54.86 0UVAPYM3.net
「プログラマ脳を鍛える数学パズル」
2016、技術書部門の大賞、受賞作
図書館では、予約している人が10人ぐらいいて、
とても読めそうにないので、今日、買ってきた
Ruby, JS などで書いてある

575:デフォルトの名無しさん
16/07/28 11:19:50.57 XvUIxyvW.net
>>555
URLリンク(ideone.com)
URLリンク(ideone.com)
C++。数字が合わんがな。何か間違えてるかなぁ。
ルールの把握があいまいなのであってるか知らん。
もしかしたら、stringstreamでやってるwhileでカウントすればいいかもしれん。
それと対象ナンバーが64ビット超えたらたぶん動かない。
まぁいいや。せっかく作ったのでそれだけ認めてくれ。

576:デフォルトの名無しさん
16/07/28 20:19:22.73 IfzkZoT6.net
>>564
150301だったら
1,5,0,3,0,1
1,5,0,30,1
1,5,0,301
1,50,3,0,1
1,50,30,1
1,50,301
1,503,0,1
1,5030,1
1,50301
15,0,3,0,1
15,0,30,1
15,0,301
150,3,0,1
150,30,1
150,301
1503,0,1
15030,1
150301
の18通りだと思うけど

577:デフォルトの名無しさん
16/07/29 03:27:05.93 11+SH8DV.net
>>555
>>565
URLリンク(ideone.com)
URLリンク(ideone.com)
C++。いじってみたけど、数字が合わず。何が間違ってるのかもわからない。
ルールを把握できないって、ぼけてきてるのかなぁ・・・。Orz
最近、思考してないし。

578:デフォルトの名無しさん
16/08/01 04:25:27.15 4Q/skcnH.net
>>555
Pythonの勉強がてらやってみました
URLリンク(codepad.org)
>>566
最も愚直な方法は考えられる分け方を全て列挙し、その中から認められない分け方を除外して数えればいい
1,5,03,01の03と01のように二桁以上で先頭が0であるような分け方は認められないと思われる

579:デフォルトの名無しさん
16/08/02 02:02:12.74 YLg91Q2/.net
>>555
>>567
URLリンク(ideone.com)
C++。やっと数字があった。
皆さま、愚かなワタクシメをお許しください。ラーメン。Orz

580:デフォルトの名無しさん
16/08/07 22:49:29.00 K0guDqg3.net
>>555
>>567
URLリンク(ideone.com)
C++でさっくりと。
>>557にあるファイルからの入力受け取る方法いいすね

581:デフォルトの名無しさん
16/08/09 11:14:00.48 92/o3tci.net
>>569
checkの返り値はboolなのにそのまま足しちゃうの?

582:デフォルトの名無しさん
16/08/10 03:08:08.02 inQKn798.net
>>570
bool型はtrue=1,false=0なので次のコードは同じ
if(flag)ans++;
ans+=flag;

583:デフォルトの名無しさん
16/08/10 07:54:16.90 rXBd1I+h.net
>>571
ん?

584:デフォルトの名無しさん
16/08/10 11:18:58.21 eCSVoJoG.net
三流のROM専だけど、trueはnot0と思ってたし、trueを数値として扱うのは違和感すごいの。

585:デフォルトの名無しさん
16/08/10 11:21:37.91 eCSVoJoG.net
少し訂正
boolを数値として使うのは違和感

586:デフォルトの名無しさん
16/08/10 12:30:53.29 Gdje5e7d.net
言語による。Cなら普通におk

587:デフォルトの名無しさん
16/08/10 12:35:35.23 j6o9ee9V.net
普通でもおkでもねえよw

588:デフォルトの名無しさん
16/08/10 19:34:37.97 87OBHkNz.net
c++のbool型のtrueは1
if文のtrueがnon0であることとbool型の定義は別ってことを理解していれば使っていいんじゃないの?
URLリンク(ideone.com)

589:デフォルトの名無しさん
16/08/10 20:05:43.36 6wlopmtf.net
じゃあ\0とNULLを混同して使っても(実際こんな人わんさといるけど)何も問題ないな

590:デフォルトの名無しさん
16/08/10 20:20:05.28 R4BTC7dG.net
つか0(0x30)とNULL(0x00=\0)を混同だろ、お前まで間違えても何ら問題ない

591:デフォルトの名無しさん
16/08/10 20:22:43.02 5BOEqgkW.net
Pythonのboolはintのサブクラスで数値演算に混ざっても警告やエラーなし
互換性捨てたPython3でもそのままでintから独立させる気配がない

592:デフォルトの名無しさん
16/08/10 20:29:02.04 sHDHYt88.net
偽ではないものが真です。言語によって偽の定義が異なる。

593:デフォルトの名無しさん
16/08/10 20:48:14.92 qB+vEzvD.net
if(韓国人の言うこと==true)
return false;
else if(中国人の言うこと==true)
return false;
else
return true;

594:デフォルトの名無しさん
16/08/10 20:48:26.57 O/fexyuH.net
>>576
C に bool はない,だから普通にOKだ,C99 はしらんが

595:デフォルトの名無しさん
16/08/10 21:08:56.81 6wlopmtf.net
>>579
言ってるそばから混同してる奴が出て来たけど、
\0とNULLはまったく意味が違う。

596:デフォルトの名無しさん
16/08/10 21:12:11.66 6wlopmtf.net
>>583
型としてboolはなくても真偽の概念はある。

597:デフォルトの名無しさん
16/08/10 21:23:29.03 6bflnq0j.net
boolをintにキャストして使うとお前らが怒ることはわかった
じゃあなんのためにキャスト出来るようになってるん?数値として扱うべきでないならキャストを禁止すべきだ

598:デフォルトの名無しさん
16/08/10 21:56:03.25 6wlopmtf.net
>>586
別に目的があってキャストできるようにしてるわけじゃない。
単にif文等を機械語に翻訳する時に都合がいいからfalseを0にしてるだけ。

599:デフォルトの名無しさん
16/08/10 22:17:30.88 aUoQ61q7.net
ブール値が無い、C89でも、実質的なブール値という概念がある。
真偽値を返す、比較演算 if(a == b)
これを、if(int型)などと書くのは、MISRA-Cなどではコーディング規則違反
偽は0だが、真は0以外で、1とは限らないかも
\0 は、NUL文字。文字列の最後に使う、番兵。
NULL は、無効なポインタで、0とは限らないかも

600:デフォルトの名無しさん
16/08/10 22:33:17.47 20SNjYRS.net
C++なら問題ないよ
検索すりゃ分かるけどbool->intは0/1になることが言語仕様で決まってる

601:デフォルトの名無しさん
16/08/10 22:48:50.81 6wlopmtf.net
>>589
だからそういう「問題」じゃないってばw
そういう話ならNULLと\0も混同しても問題ないことになるよ。

602:デフォルトの名無しさん
16/08/10 23:10:16.36 aUoQ61q7.net
まあ、0, 1 とか暗号みたいな数値は、使わない方がいい
false, \0, NULL, 全ビット0 など、意図がわかるようにすべき

603:デフォルトの名無しさん
16/08/11 00:10:30.93 yzOHsc1F.net
「私」は「言語」として考えたらboolをboolとして使いたいし、intとしては無しだと思ってます。
でも「プログラミング」としては有りだと思ってます。
宜しければ、bool論争をここで終結としませんか?

604:デフォルトの名無しさん
16/08/11 09:47:35.13 EgW5aVb5.net
return (韓国人の言うこと)?false:!中国人の言うこと;

605:デフォルトの名無しさん
16/08/11 10:23:51.85 TQheNK/m.net
>>586
べつにキャストする必要はない

606:デフォルトの名無しさん
16/08/11 18:35:49.99 5aKqGy8m.net
くだらないことで争ってんな
正しく動きゃいいんだよ、んなもん

607:デフォルトの名無しさん
16/08/12 12:46:03.49 W0ObG9Gv.net
これだから型安全でない言語は糞なんだよ

608:デフォルトの名無しさん
16/08/14 11:38:09.80 uRifR0NT.net
YukiCoderたのしー。
3問目を解説見ながら解いた。
幅優先探索は苦手だ。Orz

609:デフォルトの名無しさん
16/08/14 19:57:07.32 HA8B0Krx.net
縦H横Wのマスの中に現れるa→b→cの順に辿れる道は全部で何通りあるか出力しなさい。
存在しない場合は-1と出力しなさい。
移動は縦横のみできる。斜めに移動はできない。
H==W、3<=(H,W)<=1000とする
問題例
--c-
cab-
cbac
答え 4
--c-|----|--c-|----
-ab-|----|--b-|-a--
----|cba-|--a-|cb--

610:デフォルトの名無しさん
16/08/14 20:29:36.17 itqO338w.net
>>598
問題例に不備があるじゃないか。

611:デフォルトの名無しさん
16/08/14 21:16:51.46 HA8B0Krx.net
訂正

問題例
--c-
cab-
cbac
----
答え 4
--c-|----|--c-|----
-ab-|----|--b-|-a--
----|cba-|--a-|cb--
----|----|----|----

612:デフォルトの名無しさん
16/08/15 01:18:23.97 ATOVcA82.net
全てのbの上下左右にあるaの数*cの数を足せば良いんだな。

613:デフォルトの名無しさん
16/08/15 05:08:48.91 VvgCdVoy.net
>>598
>>600
URLリンク(ideone.com)
C++。Yukiだとサンプルしか通らなそうなコード。
まぁ、これが俺の地だしなぁ。
俺は俺にガッカリだよ。Orz

614:デフォルトの名無しさん
16/08/15 05:19:59.98 VvgCdVoy.net
>>598
>>600
URLリンク(ideone.com)
C++。>>601メソッド??
ちょっとすっきりした。

615:デフォルトの名無しさん
16/08/15 13:40:01.81 YWGtPoG/.net
お題
ズッカーマン数(Wikipediaより)
ズッカーマン数(-すう、Zuckerman number)は自然数で、各桁の数字の総乗が元の数の約数
であるような数である。例えば315は各桁の数字の積が 3×1×5=15 であり、15は


616:315の約数で あるので315はズッカーマン数である。 ズッカーマン数を最初から100個求めよ。



617:デフォルトの名無しさん
16/08/15 13:49:14.49 /RUSPZDT.net
梅干し食べて...
なんか力技でやるしかなさそうな感じだな

618:デフォルトの名無しさん
16/08/15 14:10:04.63 VvgCdVoy.net
>>604
URLリンク(ideone.com)
C++。あってるかな?

619:デフォルトの名無しさん
16/08/15 20:11:53.65 NvOrOVSG.net
こんな感じでいいのか?
URLリンク(ideone.com)

620:デフォルトの名無しさん
16/08/15 20:38:01.87 /9WWz1kS.net
なぜいいと思った

621:デフォルトの名無しさん
16/08/15 21:21:48.34 cQHsobNS.net
C
URLリンク(ideone.com)

622:デフォルトの名無しさん
16/08/16 01:56:24.06 fBfaZTKr.net
>>604 F#勉強中@半年
URLリンク(paiza.io)
Wikipediaに書いてある数字との照らし合わせはしました
あと、paiza.ioのを貼るのは初めてなのでうまく貼れてるかどうか・・・
ちなみに、F#は主にyukicoderで鍛えてます、少しは分かってきたかも

623:デフォルトの名無しさん
16/08/16 02:08:11.71 q0PyZcrj.net
>>598 >>601のやり方で C言語
URLリンク(ideone.com)
>>604 C言語
URLリンク(ideone.com)

624:デフォルトの名無しさん
16/08/16 14:43:03.45 9WgV32AQ.net
>>604
@Mathematica
URLリンク(ideone.com)

625:デフォルトの名無しさん
16/08/17 08:55:07.31 5k4XIPv4.net
>>604 Squeak Smalltalk
| Zuckerman |
Zuckerman := Generator on: [:g |
 1 to: Float infinity do: [:n |
  (n isDivisibleBy: ((n asString asArray collect: #digitValue) reduce: #*))
   ifTrue: [g yield: n]
 ]
].
Zuckerman next: 100

626:デフォルトの名無しさん
16/08/20 20:32:51.59 vgYTWLvl.net
>>604
Rubyで。
class Zuckerman
# @param [Int] num チェック対象数値
# @return [Bool] true:入力値がズッカーマン数, false:ズッカーマン数でない
def self.zuckerman num
w = num.to_s
.split(//)
.map {|e|e.to_i}
.reduce(:*)
w == 0 ? false : num % w == 0
end
def self.func1
cnt = 0
(1..Float::INFINITY).map { |e|
(cnt += 1; p e) if self.zuckerman e
break if cnt >= 100
}
end
end
Zuckerman.func1

627:デフォルトの名無しさん
16/08/21 01:56:15.80 bS7dpt9A.net
プログラミングのお題で言語間のコード量競うってか
いかに数学的アルゴリズムを考えるスレか?

628:デフォルトの名無しさん
16/08/21 04:07:51.39 //fxd30H.net
競プロの故郷じゃよ。なんて。
俺算数で解いてるんだぞ・・・。Orz

629:デフォルトの名無しさん
16/08/21 07:18:31.83 DtQd7MF/.net
問題を解く早さ、
計算時間の速さ、
コードの短さ、
コードの美しさ、
色々あるね。

630:デフォルトの名無しさん
16/08/22 00:07:09.67 x59Y2UAa.net
お題
フィボナッチ数列の先頭に近い数字の合計が、入力値になるように求める。
入力値の例--->出力
1 ---> 1
2 ---> 1,1
3 ---> 1,2
4 ---> 1,3
5 ---> 1,1,3
6 ---> 1,2,3
7 ---> 1,1,2,3
8 ---> 1,2,5

631:デフォルトの名無しさん
16/08/22 00:37:32.44 RW2M/REU.net
30人の生徒がいるクラスで、同じ誕生日の子がいる、確立を求めて
1年を365日とする

632:デフォルトの名無しさん
16/08/22 00:49:12.07 3wW8ItwJ.net
>>619
「確立」は求められないけれど,「確率」なら求められる…というのはさておき,
同じクラスで誕生日が同じ子がいる確率の問題は,
森口繁一『応用数学夜話』
に解説があるのだが,その本が本の山の中に
埋もれていて,いま探し出せないのが残念。

633:618
16/08/22 01:14:27.85 RW2M/REU.net
1 - 全員が異なる誕生日である確率
で求めて

634:デフォルトの名無しさん
16/08/22 01:18:50.34 38ySFfYc.net
URLリンク(ideone.com)
C++。数列に1を含んでいるので、例のようにやろうとすると全部1で分解しようとする。かも。
例がちょっと懇意なので、俺にはこれが限界やったわ。

635:デフォルトの名無しさん
16/08/22 01:27:31.25 38ySFfYc.net
>>622 -> >>618
安価忘れた。

636:デフォルトの名無しさん
16/08/22 01:53:51.46 38ySFfYc.net
>>619
>>621
URLリンク(ideone.com)
C++。確率の問題なんてだーいきらい。あってるか知らんけど大体こんな感じか?

637:デフォルトの名無しさん
16/08/22 02:06:45.94 P8rthkb+.net
>>621を出された時点で理論的確率を求めて欲しいのは明らかだけど、それだとプログラムを組む意味がない
要するにスレチ

638:デフォルトの名無しさん
16/08/22 02:15:23.57 38ySFfYc.net
>>625
算数でそれは無理なので、俺には無理だー。
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \

639:デフォルトの名無しさん
16/08/22 02:31:12.36 ze8O1aG1.net
>>625
いやいや、簡単な数式で表現できても人力で数値解を求めるのは
大変なんだから、それってまさに計算機の出番ではあるよ。
お題として楽しいかどうかは別にしてw

640:デフォルトの名無しさん
16/08/22 03:39:29.64 PiS6AnEW.net
>>619 Java
URLリンク(ideone.com)

641:デフォルトの名無しさん
16/08/22 03:55:16.97 38ySFfYc.net
あ、勘違いしてた。>>624の結果逆だ・・・。Orz

642:デフォルトの名無しさん
16/08/22 10:05:22.23 6SPK9Sy9.net
お題
やじろべえの左右の腕に交互に重りを吊るしていく
ただし、左右の重りの重量差が10gを超えたらバランスを崩してしまう
重りの重量が順に与えられるので最後までバランスを保ったままかどうか判定せよ

643:デフォルトの名無しさん
16/08/22 10:32:46.57 38ySFfYc.net
>>630
右と左を引き算してABS取ればいいのはわかるんだけど、重りのサンプル無いかい?

644:デフォルトの名無しさん
16/08/22 18:46:34.40 FFKbVhI+.net
>>618 Common Lisp
URLリンク(ideone.com)
64個でタイムアウト
遅すぎるよねこれ
もっと速く解ける気がするけど分からなかった

645:デフォルトの名無しさん
16/08/22 19:23:14.70 3wW8ItwJ.net
>>619
森口繁一『応用数学夜話』(ようやく見付けました)によると、この問題は、von Misesとのことです。
結果だけ書くと、k人からなるクラスで誕生日がだれひとりとして同じにならない確率は
(1/n^2):*(n!/(n-k)!)
で、kはひとクラスjの人数、nは場合の数で、閏年を考えなければ
n=365となります。
この本によると、この確率が0.5を超えるのは
k=23
の時だそうです、つまり24人以上のクラスからなる学校では、
誕生日の重なるクラスが多くなるということになります。

646:デフォルトの名無しさん
16/08/22 22:39:24.73 RW2M/REU.net
24人で、0.5を超えるのか。不思議な感覚だな
漏れの感覚では、24人で、0.15ぐらい

647:デフォルトの名無しさん
16/08/23 00:06:33.47 nbfEIr8Y.net
>>618
DP?
C言語
URLリンク(paiza.io)
URLリンク(out.paiza.io)

648:デフォルトの名無しさん
16/08/23 00:26:56.57 nbfEIr8Y.net
>>635
出力整形した
URLリンク(paiza.io)
URLリンク(out.paiza.io)

649:デフォルトの名無しさん
16/08/23 05:09:43.19 1XZ2ZUlZ.net
URLリンク(ideone.com)
ベンチマークしようとしたら、先に出力エラーになった。

650:デフォルトの名無しさん
16/08/23 13:54:31.44 nbfEIr8Y.net
>>637
5,6,7は>>618の結果と違うようだけど

651:デフォルトの名無しさん
16/08/23 14:03:36.67 nbfEIr8Y.net
そうかフィボナッチ数列はすぐ大きくなるから項数はそんなに大きくならないからgreedyでもいいのか
オーダーのことは未だよく分からないけど
たぶんDPよりgreedyのほうがいいのかな?
>>637がgreedyで求めてたので何となくそう思いました

652:デフォルトの名無しさん
16/08/23 14:13:51.47 nbfEIr8Y.net
>>639
あ、greedyだから題意を完全に満たさない結果になってるのか
やはりメモ化探索か
brute forceはキツそうだし

653:デフォルトの名無しさん
16/08/23 14:21:20.64 1XZ2ZUlZ.net
>>638
ちょっとよくわからないけど、バグかなぁ。>>635とかできてるしなぁ。
俺が悪かった。忘れてくれ。

654:デフォルトの名無しさん
16/08/23 14:47:31.03 nbfEIr8Y.net
自分の解答>>635>>636は題意を満たしてに可能性があるかも
先頭に近い数字という条件を
構成数が最も多くなるうち最初に見つかったものという勝手解釈したが
そうじゃなく辞書順的に小さい数を含むほうを選択する必要あるなら構成数が最大になるとは限らないかも
俺も自分の解答>>635>>636を取り下げます

655:デフォルトの名無しさん
16/08/23 14:52:37.15 nbfEIr8Y.net
>>642
となると、今のところbrute forceしかアイデアない

656:デフォルトの名無しさん
16/08/23 15:46:43.07 8juwdgVG.net
>>618
C++で貪欲法
フィボナッチ数を小さなフィボナッチ数に分解するところはもっといいやり方があると思う
URLリンク(paiza.io)

657:デフォルトの名無しさん
16/08/23 16:13:11.72 1XZ2ZUlZ.net
>>644
おぉ、すごいな。上手い。

658:デフォルトの名無しさん
16/08/23 16:59:17.93 nbfEIr8Y.net
>>642のさらに考察してDPで問題なさそうだと思って>>636のを辞書順に選択するように変えてみたけど結果変わらなかった
URLリンク(paiza.io)
URLリンク(out.paiza.io)
>>636とのdiff取った、同じと出た
URLリンク(paiza.io)

659:デフォルトの名無しさん
16/08/23 17:06:57.99 Z+VJIz/8.net
>>618 Squeak Smalltalk
| fn |
fn := [:N |
 | fibonacciUpTo elems ans |
 fibonacciUpTo := [:m |
  Array streamContents: [:ss |
   | a b |
   ss nextPut: (a := b := 1).
   [(a := b flag: (b := a + b)) < m] whileTrue: [ss nextPut: a]
  ]
 ].
 ans := nil.
 elems := fibonacciUpTo value: N.
 [:exit |
  elems size to: 1 by: -1 do: [:m |
   elems combinations: m atATimeDo: [:comb |
    comb sum = N ifTrue: [ans := comb. exit value]
   ]
  ]
 ] valueWithExit.
 ans
].
^(1 to: 10), {100. 1000} collect: [:N | N -> (fn value: N)]
"=> {1->#(1) . 2->#(1 1) . 3->#(1 2) . 4->#(1 1 2) . 5->#(1 1 3) . 6->#(1 2 3) .
7->#(1 1 2 3) . 8->#(1 2 5) . 9->#(1 1 2 5) . 10->#(1 1 3 5) . 100->#(1 2 3 5 13 21 55) .
1000->#(1 1 3 8 21 34 89 233 610)} "

660:デフォルトの名無しさん
16/08/23 17:07:07.82 nbfEIr8Y.net
>>644
何これめっちゃすごいな・・・
フィボナッチ数列に関する定理があるのか

661:デフォルトの名無しさん
16/08/23 22:31:24.67 xhPJKCKw.net
>>618
Rubyで。
URLリンク(ideone.com)

662:デフォルトの名無しさん
16/08/24 00:02:28.52 hGPUmbYi.net
良問まとめありますか?

663:デフォルトの名無しさん
16/08/24 00:04:45.93 IQL/zjWi.net
競プロなんてどうでしょう

664:デフォルトの名無しさん
16/08/24 06:31:48.04 emWUYHC0.net
>>618 C言語
URLリンク(ideone.com)
>>619 C言語
URLリンク(ideone.com)
>>630 C言語
URLリンク(ideone.com)

665:デフォルトの名無しさん
16/08/24 12:37:09.73 IQL/zjWi.net
>>652
N =< f(0) + f(1) + ... +f(k) となるkを見つけたときにf(k-1)が>>618の題意を満たすフィボナッチの数の1つで再帰的にN := N - f(k-1)で貪欲法的に求められるのか
理屈が全然分からん
数学は奥が深すぎ

666:デフォルトの名無しさん
16/08/24 15:34:01.41 DjG9ToKL.net
f(0)+f(1)+...+f(k)=f(k+2)-1だから
N>=f(k+1)&&N<f(k+2)を満たすkを探してf(k-1)を選びN-f(k-1)を次のNとして再帰と言い換えたほうがわかりやすい
条件を満たす場合をちょっと式変形すると2f(k)>N-f(k-1)>=f(k)で
フィボナッチ数列の今てきとーに考えたガバ不等式だと2f(k)>=f(k+1)>=f(k)で考えたら再帰の途中で
N-f(kー1)>=f(k+1) && N-f(k-1)<f(k+2)
みたいなkが存在しててもおかしくなさそうだけど大丈夫なのかー

667:デフォルトの名無しさん
16/08/24 16:45:04.33 38RcxOvs.net
>>653 N:=N-f(k)やんか!ならf(k+1)>N-f(k)>=f(k-1)になるから帰納法で展開可能なことはすぐに証明出来そうだね
おそらく>>652はフィボナッチ数の大きい方から順に、自然数をフィボナッチ部分列で展開できるギリギリの大きさのフィボナッチ数を選んでる

668:デフォルトの名無しさん
16/08/24 17:22:27.06 hGPUmbYi.net
そもそも理解があやしいから確認したいが・・・
フィボナッチ数列でなるべく小さいNをとって、集合{f(1), ・・・,f(N)}で
その部分の和をある数と一致させるって話?

669:デフォルトの名無しさん
16/08/24 17:30:24.68 hGPUmbYi.net
>>656とすると、Nの下限は>>652のように総和を計算すればすぐ求まるな。
しかし、任意の数はフィボナッチ数列の部分集合の和で表現できるかとか、
上でf(N)を引き算した数がN-1以下の部分集合の和で表現できるとかは簡単か?

670:651
16/08/24 20:06:38.41 emWUYHC0.net
>>655の言うように展開できるぎりぎりの数を順に選んでます。
とりあえず、f(0)+f(1)+...+f(n)=sum(n) とした場合、
1~sum(n)の整数はf(0)~f(n)の部分和で表すことができる
例)フィボナッチ数列の最初の6つ[0,1,1,2,3,5]を使えば1~12までの数を表せる
というのを前提に、与えられた数がsum(n)より大きくsum(n+1)以内なら
必ずf(n+1)が含まれるということを、残りの数が0になるまで再帰的に計算しています。
最初の前提は、数列を一辺とした正方形をつなげていくというあの形から
直感的になんとなく。1~sum(n)がf(0)~f(n)の数列の組み合わせで表せるなら
sum(n)>=f(n+1)(n>=1の場合)
なので1~sum(n+1)もf(0)~f(n+1)の数列の組み合わせで表せるということに
なるんじゃないのかなぁと。正直全く自信ないです。
自分が書いたコードは、求めたフィボナッチ数列を配列に保存していたけど
その必要全くなかったですね。 URLリンク(ideone.com)

671:デフォルトの名無しさん
16/08/24 20:50:39.06 Gt3DCYIG.net
>>618
@Mathematica
URLリンク(ideone.com)

672:デフォルトの名無しさん
16/08/25 19:55:54.39 1lQyPTY4.net
>>657
>上でf(N)を引き算した数がN-1以下の部分集合の和で表現できるとかは簡単か?
f(0)=0,f(1)=1,f(2)=1,f(3)=2,...のようにインデックスを決めておく。
命題:k>=1のときf(k+2) > N >=f(k+1)を満たす任意の自然数Nは{f(0),...,f(k)}の部分集合の和で表せる。
k=1のとき自明
k>=1で成立を仮定しk+1で命題が成り立つことを示す。
書き下すとf(f+3)>N>=f(k+2)を{f(0),...,f(k+1)}の部分列の和で表せればおk。
そこで部分列の一番大きなf(k+1)で全体を引き算すると
f(k+3)-f(k+1)>N-f(k+1)>=f(k+2)-f(k+1) ⇔ f(k+2) >N-f(k+1) >=f(k)
となり仮定よりN-f(k+1)は{f(0),...,f(k+1)}の部分列の和で表せる。
以上から帰納法で命題は正しい。
簡単すぎwwww

673:デフォルトの名無しさん
16/08/25 19:59:23.41 1lQyPTY4.net
>>660
>となり仮定よりN-f(k+1)は{f(0),...,f(k+1)}の部分列の和で表せる。
×N-f(k+1)は{f(0),...,f(k+1)}
〇N-f(k+1)は{f(0),...,f(k)}

674:デフォルトの名無しさん
16/08/26 00:23:54.59 iNPRC5gr.net
速度が向


675:上したのかどうか計るためのベースとして簡単なベンチマークテスト作った。 適当にウェイトいれて、機種・コンパイラの偏りをなくすようにしてみた。 http://ideone.com/KceBs4 ここ参考にした。 http://www001.upp.so-net.ne.jp/y_yutaka/labo/math_algo/calcbench.html



676:661
16/08/26 00:28:49.61 iNPRC5gr.net
ちょい疑問がシフト演算は早いという定説はあるとおもうが。
実際、計測比較してみると足し算、引き算よりも遅い。
オーバーフローが原因で遅くなってる気はするが・・・

677:デフォルトの名無しさん
16/08/26 00:34:55.42 46yZwIqt.net
>>663
コンパイラが最適化しちゃうからじゃね?

678:デフォルトの名無しさん
16/08/26 00:47:03.70 iNPRC5gr.net
最適化対策として、計算結果を引き継ぐことで、ループ無視は防止できてるはず・・・

679:デフォルトの名無しさん
16/08/26 01:07:03.15 iNPRC5gr.net
計算途中で、内部でオーバーフローか型変換が起こって遅くなってると予測してみて、
整数値で扱えない範囲にならないように、足し算のところビットORで代替してみたけど同速度だった。
単純にシフト演算が遅いだけっぽい。

680:デフォルトの名無しさん
16/08/26 01:29:53.53 rbtqc2qT.net
gccのo3でコンパイルしてみたけど確かにShiftが一番遅かった
どうしてこうなるかはアセンブリみれば一瞬でわかるよ

681:デフォルトの名無しさん
16/08/26 01:53:05.11 rbtqc2qT.net
shiftも早くなるようにおまじないかけといたよ
URLリンク(ideone.com)

682:デフォルトの名無しさん
16/08/26 01:54:53.90 rbtqc2qT.net
すまんローカルだと早くなってたんだが
Shift 421.0ms → 101.0ms

683:デフォルトの名無しさん
16/08/26 01:56:20.02 iNPRC5gr.net
アセンブラはわからないけど。
内部で型変換がおってる説が間違いとすると、計算回数だろな・・・
シフト測定はシフト+足し算をしてて、足し算測定のほうは足し算一つだけ。
足し算測定のほうを、足し算1つ上乗せして公平にしてみる。

684:デフォルトの名無しさん
16/08/26 02:01:15.45 CVrNr9ea.net
clang 3.7のCで動かしたらこんなんなったんだがどういうことだ?
URLリンク(ideone.com)
ちゃんと動いてないのか最適化でばっさりなのか

685:デフォルトの名無しさん
16/08/26 02:02:55.47 CVrNr9ea.net
clangの方が普通に最適化が効いて、gccの方が効いてないだけか?

686:デフォルトの名無しさん
16/08/26 04:26:31.05 Mbltetpr.net
gcc6.2.0使ってコンパイルしたらAVX2命令使いまくりで激速になった

687:デフォルトの名無しさん
16/08/26 22:19:12.01 iNPRC5gr.net
良いベンチマーク考案中。
実際の問題を解いたプログラム / 基準ベンチマーク 
の時間比がほぼ一定が良い。機種、コンパイラによらず。

688:デフォルトの名無しさん
16/08/27 01:33:01.65 UE0kbjNO.net
>>662
最適化対策のための出力っていうのが良く分からん
あと、各々の命令の重さの係数(weight)はどうやって決めてるの?

689:デフォルトの名無しさん
16/08/27 01:40:19.24 7nFiTNgH.net
必要の計算は無視される最適化に対応。、
意味はないけど最後まで計算を引き継いで出力する。各計算を和でつなぐ。

690:デフォルトの名無しさん
16/08/27 01:42:17.34 7nFiTNgH.net
必要のない計算は・・・

691:デフォルトの名無しさん
16/08/27 02:40:42.60 UE0kbjNO.net
なるほど、そういうことか。
シフト命令が遅いのは変数kでシフトしてるからじゃないかな。
kビットシフトするのではなく1ビットシフトをk回繰り返した方が早くなるかも?

692:デフォルトの名無しさん
16/08/27 11:38:15.27 2qjvRKJV.net
つづきは個人のブログかチラシの裏でやれ

693:デフォルトの名無しさん
16/08/27 12:50:08.51 8oHlLwTt.net
お題: 数字が書かれたn枚の紙切れが袋に入っています。
この袋から紙切れを取り出し、数字を見て袋に戻すということをx回行います。
x回の紙切れの数字の和がmになる確率を返す関数fを定義してください。
(let ((k '(1 3 5)) (m 10) (x 4)) ; n = 3, m = 10, k = {1, 3, 5}, x = 4
(f k m x))
=> 16/81
(let ((k '(1 3 5)) (m 9) (x 4)) ; n = 3, m = 9, k = {1, 3, 5}, x = 4
(f k m x))
=> 0/81
(let ((k '(1 2 3 4 5)) (m 15) (x 5)) ; n = 5, m = 15, k = {1, 2, 3, 4, 5}, x = 5
(f k m x))
=> ?

694:デフォルトの名無しさん
16/08/27 14:21:38.42 /lPBBpET.net
同じ数字の紙は何枚あってもいいの?
全部違う数字?
入っている数字はmより小さいの?

695:デフォルトの名無しさん
16/08/27 14:28:53.21 /lPBBpET.net
ああ、ごめん。忘れてw

696:デフォルトの名無しさん
16/08/27 14:54:16.82 9mBmz7KO.net
>>680
URLリンク(ideone.com)
C++。モンテカルロ。サンプル数少なすぎて収束してない。
確立はよくわからん。

697:デフォルトの名無しさん
16/08/27 15:28:29.92 9mBmz7KO.net
>>683 をちょびっと整形した。
URLリンク(ideone.com)

698:デフォルトの名無しさん
16/08/27 16:50:12.54 FbbA5YyG.net
>>680 Java
URLリンク(ideone.com)

699:デフォルトの名無しさん
16/08/27 18:38:18.89 F1nYMYS3.net
>>680 C(C99)
URLリンク(ideone.com)

700:デフォルトの名無しさん
16/08/27 23:43:10.10 8oHlLwTt.net
>>630 Emacs Lisp

(defun g (l s i)
(if (null l)
t
(let ((x (funcall (nth (% i 2) '(+ -)) s (car l))))
(when (<= (abs x) 10.0)
(g (cdr l) x (1+ i))))))

(defun f (l)
(g l 0 0))
f

(f '(2 4 2 4 2 4 2 4 2 4 0))
t

(f '(2 4 2 4 2 4 2 4 2 4.1 0))
nil

(f '(2 4 1 10 10 1 4 2 0))
nil

(f '(3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3))
t

701:デフォルトの名無しさん
16/08/28 21:20:07.72 9IFYhCBA.net
あなたはN円分の商品を1個購入することになりました。
おサイフの中には1,5,10,50,100,500円玉がそれぞれ1000枚あります。
価値の高い硬貨を優先に支払いに回すときに、それぞれの支払いに使う硬貨の枚数を求めよ
出力はカンマ区切りで左から1,5,10,50,100,500円の順に枚数を出力しなさい

例題
N=1111

出力
1,0,1,0,1,2

1円が1枚、10円が1枚、100円が1枚、500円が2枚なのでこうなります

702:デフォルトの名無しさん
16/08/28 21:22:27.37 gdb/jxff.net
ちょっと財布を想像して吹いたw

703:デフォルトの名無しさん
16/08/28 21:26:10.45 CCZyZi8n.net
>>688
それ1000枚の条件いるの?

704:デフォルトの名無しさん
16/08/28 22:06:25.06 sxo5kh14.net
>>688
Rubyで。
URLリンク(ideone.com)

705:デフォルトの名無しさん
16/08/28 22:43:07.98 FpzTx2tv.net
>>688 Emacs Lisp

(require 'cl-lib)

(setq purse (sort (append (make-list 1000 1) (make-list 1000 5) (make-list 1000 10) (make-list 1000 50) (make-list 1000 100) (make-list 1000 500)) #'>))

(defun f (N purse payment)
(assert (and (integerp N) (> N 0)))
(if (null purse)
""
(let ((x (car purse)))
(cond
((> x N) (f N (cl-remove-if #'(lambda (c) (= c x)) purse) payment))
((< x N) (f (- N x) (cdr purse) (cons x payment)))
((= x N) (cl-reduce #'(lambda (a b) (concat a "," b)) (mapcar #'(lambda (c) (number-to-string (count c (cons x payment)))) '(1 5 10 50 100 500))))))))

(f 1111 purse '())
"1,0,1,0,1,2"

(let ((max-lisp-eval-depth most-positive-fixnum)
(max-specpdl-size most-positive-fixnum))
(f 500500 purse '()))
"0,0,0,0,5,1000"

(let ((max-lisp-eval-depth most-positive-fixnum)
(max-specpdl-size most-positive-fixnum))
(f 666001 purse '()))
""

706:デフォルトの名無しさん
16/08/29 00:10:36.80 G+hsDqDY.net
>>688
C++で


707: http://ideone.com/p4dwIW >>690 まあ本質的な意味はないけど一応1000枚の条件で答えは変わるぐらい N=500500 0,0,0,0,5,1000



708:デフォルトの名無しさん
16/08/29 10:41:31.05 6rwIECPC.net
まえにあった問題の解法が不明。
nに対して、2次元平面の円で、その円周上の整数点がちょうどn個となる円の最小半径を求める問題。

709:デフォルトの名無しさん
16/08/29 16:45:06.30 fFx5B9de.net
>>694
問題関係のレスと自分が書いたコード見直したが、何やってるのかわけわからんくなってたから困るww

710:デフォルトの名無しさん
16/08/30 01:05:58.62 0bBTSjL7.net
整数 a(0)、・・・、a(n)が与えられた時、
すべてのi に対して、 a(i) + c ≡ 0 (mod m)が成り立つような
m、c >1を求める問題。

711:デフォルトの名無しさん
16/08/30 01:20:54.99 XiF8vPmR.net
はい。

712:デフォルトの名無しさん
16/08/30 03:54:00.29 ccTd05WG.net
>>694
前スレからもってきたけど円の中心点の情報は書いてくれよ、めちゃくちゃ重要だろ

41 :デフォルトの名無しさん:2015/05/01(金) 14:31:24.98 ID:9G1+bMO9.net
お題:ちょうどn個(1 < n)の格子点(x座標もy座標も整数の点)を通る円の半径の
最小値を求める。円の中心点は格子点でなくてよい。

n=2 -> 0.5
n=5 -> 16.170331
n=6 -> 2.5

713:デフォルトの名無しさん
16/08/30 07:35:24.70 o3zijpP7.net
>>680 Common Lisp
URLリンク(ideone.com)
>>688 C++11
URLリンク(ideone.com)

714:デフォルトの名無しさん
16/08/30 11:00:38.72 bKDKxVCe.net
>>698
そのn=5は間違えてるから訂正しとく
N=5 (1/6,1/6) R=5.892557 R^2=625/18

715:デフォルトの名無しさん
16/08/30 11:59:20.10 0bBTSjL7.net
>>698

個数4N個のときは最小半径と整数点を簡単に求める方法見つかった。 個数4、8、12、16、20、24・・・・のとき。

4で割って1余る素数を最初に求めておく。 5、13、17、29、37、41・・・・・

Nを適当に積に分解して、N = a(1) * ・・・ *a(i) 、a(1) >= a(2) >= ・・を満たすようにして。

半径2乗を5^(a(1)-1) * 13^(a(2)-1) * 17^(a(3)-1)・・・・とする原点中心の円周の格子点の数は、4N個。

最小半径をあたえるNの積分解を一発で求めるアルゴリズムはしらんが、この方針で間違いないはず。

716:デフォルトの名無しさん
16/08/30 12:11:16.96 0bBTSjL7.net
まちがってた・・・・これと比較してみたら。 たとえば
8個のときは (2x-1)^2 + (2y-1)^2 = 5
12個のときは、(2x-1)^2 + (2y-1)^2 = 5^2
16個のときは、(2x-1)^2 + (2y-1)^2 = 5*13
20個 のときは、(2x-1)^2 + (2y-1)^2 = 5^4
でいいらしい。

>>701を2で割ったらほぼ合ってるかと・・・





118 名前: 投稿日:2015/05/14(木) 19:56:36.53 ID:rp22TBsk
>>118
俺が計算したのではこんなん
ただし半径256以上は最小じゃないかも知れないから注意
URLリンク(ideone.com)


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch