プログラミングのお題スレ Part8at TECH
プログラミングのお題スレ Part8 - 暇つぶし2ch624:デフォルトの名無しさん
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)

717:デフォルトの名無しさん
16/08/30 12:28:56.64 0bBTSjL7.net
>>702によると、41個の場合の方程式は、
(14x-1)^2 + (14y-1)^2 = 5^2 * 13^2 * 17^2 * 41^2 らしい。

予想するとこれはより半径を縮められるはず。
たとえば、適当に a、b、cをとれば、 ( ax + b)^2 + ( ax + c)^2 = 5^2 * 13^2 * 17^2 * 29^2
の格子点数が41個にできる可能性。

右辺はこれに限るとは言い切れないけど。
最初の右辺でもいまのでも、原点を通る円 x^2 + y^2 = ・・・としてはどちらも格子点数は4*3*3*3*3=324個のはず。

718:デフォルトの名無しさん
16/08/30 12:45:23.63 0bBTSjL7.net
324/7 = 46.28、
324/8 = 40.5なので、
>>703でaは8以上だと、41点以上生成できないはず・・
aは7もしくは14で決め打ちして。2倍するのだけは特別でこれは解個数を変化させない可能性。>>702と同様。
しかし2倍しないほうがよリみつかりやすいはず・・
適当にa、bをとれば
( 7x + a)^2 + ( 7x + b)^2 = 5^2 * 13^2 * 17^2 * 29^2 の形で41点生成できると予想。

719:デフォルトの名無しさん
16/08/30 13:17:27.27 bKDKxVCe.net
5^2 * 13^2 * 17^2 * 41^2で出てくるのは39点と42点じゃないかな?
数学の事よくわからないけど。

720:デフォルトの名無しさん
16/08/30 13:23:30.96 bKDKxVCe.net
おっと間違えた
5^2 * 13^2 * 17^2 * 29^2 の形で出てくるのが39点と42点な

721:デフォルトの名無しさん
16/08/30 13:55:35.84 0bBTSjL7.net
いや数学的な裏付けなどなく、たんなる予測だけど・・
いま検証コード作成中。

722:デフォルトの名無しさん
16/08/30 15:04:25.03 0bBTSjL7.net
>>706
そのとおりだったわ。どういう理屈?
あと、計算が間違ってなければ>>703は解なしで、41点でてくる方程式は

(7x-1)^2 + (7y)^2 = 5^2 * 13^2 * 17^2 * 41^2 だった。

723:デフォルトの名無しさん
16/08/30 15:29:46.99 bKDKxVCe.net
>>708
理屈はわからんw
昔書いた探索コードでそのまま格子点数出せそうな感じだったので、
5^2*13^2*17^2*29^2を突っ込んでみたら39と42が出ただけw

んで、半径として考えるとN=41は
(7x-1)^2 + (7y)^2 = 5^2 * 13^2 * 17^2 * 41^2ではなく、
(14x-1)^2 + (14y-1)^2 = 2 * 5^2 * 13^2 * 17^2 * 41^2になるんかな。

724:デフォルトの名無しさん
16/08/31 16:46:14.27 9ufvv7Gu.net
円の格子点のやつは、P=NPとかいった計算理論の話題とみて、難しいクラスでは?
素因数分解とか、巡回セールスマン問題と較べても計算困難では?
( Ax + B)^2 + ( Ax + C)^2 = R^2は半径はR/Aだけど、RもAも無限大までしても、最小半径になる可能性があって。
一つ解けた半径が、最小値なのかすら調べられない気が・・
AかRに上限あるとでも証明できれば別だが。

725:デフォルトの名無しさん
16/08/31 19:35:22.89 9ufvv7Gu.net
たとえば、2点のときの最小半径は0.5らしいが・・・ 方程式は(2x)^2 + (2y-1)^2 = 1で。

a 十分大で、r/a < 0.5 を満たすとして、( ax -b )^2 + ( ay -c )^2 = r^2の格子点数が2点のみとなる場合はないのか?
 

726:デフォルトの名無しさん
16/08/31 19:38:46.35 9ufvv7Gu.net
>>711が合ってた場合、最小半径はいくらでも小さくできると予想。
>>711が合ってない事を証明できる人いる?

727:デフォルトの名無しさん
16/08/31 19:40:33.34 9ufvv7Gu.net
すまん。そんなわけがなかった。半径が小さすぎれば図を書いてみて格子点が発生しない。

728:デフォルトの名無しさん
16/08/31 19:47:55.57 p1K5Mzky.net
半径が自然数で中心が原点ならピタゴラス数の数を調べればわかるんだけどな。

729:デフォルトの名無しさん
16/08/31 19:49:26.51 NSLbELcw.net
その相似形は等価?相似検出するのメンドクセーけど。

730:デフォルトの名無しさん
16/08/31 20:41:09.29 9ufvv7Gu.net
円内部の格子点数を不等式で挟める式あった。 
少し大きい円、少し小さい円のドーナツ型にしたら、円周上の格子点数の理想値が求まるかと・・・



ガウスの円問題

原点を中心とした半径rの円の内部(境界を含む)にある整数点の個数をR(r)で表す.
R(r)は円の面積の推定値を与える.R(100)/100^2 = 3.1417
ガウスは |R(r)-πr^2|<crを示したが,|R(r)-πr^2|<cr^k
となるkの最小値を求める問題に一般化される.
シェルピンスキーはk≦2/3を証明し,ガウスのk=1を改善.
1963年に陳景潤はk≦24/37を,1990年にハクスリーはk≦46/73を得た.
k=1/2と予想されている.

URLリンク(www.geocities.jp)

731:デフォルトの名無しさん
16/08/31 20:41:41.64 p1K5Mzky.net
半径rのときの点の最大数は
bごとにaを変化させていってx、yが同時に整数になる数の最大数だな。
x=r (cos a +cos b)
y=r(sin a+ sin b)

732:デフォルトの名無しさん
16/09/01 00:30:32.18 F9uf4uEu.net
R(r) 半径rの円の内部の整数点の個数
L(r) 半径rの円の円周上の格子点の個数として。

rより小さいsをとれば、
L(r) <= πr^2 + cr^k - ( πs^2 - cs^k ) 、s -> rとして =2cr^k

>>716にはcの値が書いてないが適当にc=7/2として、
よりよい評価したいのでk=1/2とすると、L(r) <= 7√r
うまく円周上に格子点を配置できたときの上限が7√r。

円周上の格子点を
32点生成できるrはr^2 = 5*13*17/2
64点生成できるrはr^2 = 5^3*13*17/2 らしいので

上の公式で計算してみると
上 = 7√r = 33.9375
下 = 7√r = 75.8867

評価式の性能はいまいち。
評価値とぴったり一致すれば最小半径が証明できるとおもったが使えない。

733:デフォルトの名無しさん
16/09/01 01:40:05.53 F9uf4uEu.net
しかし、評価式のべつの使い道があるな。 L(r) < 7√rは正しい前提として。

たとえば、100点生成できる半径を求めようとしたとき、

L(203) < 99.7346 だから、半径が203以下ではムリだと判明する。探索するとき幅は狹められる。

734:デフォルトの名無しさん
16/09/01 08:42:57.18 d9inzlx2.net
どこかほかでやってくれないかな…

735:デフォルトの名無しさん
16/09/01 18:50:15.31 wr8HVpEY.net
そうだな。そもそも単なる数学の問題を
お題化したって、どうせ宿題なんだろって思ってしまう

736:デフォルトの名無しさん
16/09/02 16:08:29.58 szLK569k.net
円周の格子点は一年半弱まえのやつだし、数学、数学の宿題の範疇では解けるとはおもえない。
僅かでも円のイチをずらせば格子点がまったく無くなったりするわけで
コンピュータの力技は必要だろ? ある程度、探索範囲をせばめることはできても検証でプログラムいるとおもう。

737:デフォルトの名無しさん
16/09/02 19:02:35.81 VYGld2xC.net
思考垂れ流しうんこマンが自重してくれればそれでいい
一人で連投してんじゃねー

738:デフォルトの名無しさん
16/09/02 20:03:49.13 enD9pirT.net
「論よりコード」

739:デフォルトの名無しさん
16/09/02 21:05:07.04 +wy8tThR.net
この流れならむしろ数学板でもいいとおもう

740:デフォルトの名無しさん
16/09/02 21:52:48.00 e1jBggiu.net
お題:
下図のように山の麓(標高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" -> ?

741:デフォルトの名無しさん
16/09/02 23:34:33.91 hbWVf6eK.net
A:012101....
B:012123...
詰む気がするんだけど

742:デフォルトの名無しさん
16/09/03 04:18:59.59 P0QwwpBf.net
>>726
c++ URLリンク(ideone.com)

とりあえず、サンプルが通ったからsubmitって感じ。

743:デフォルトの名無しさん
16/09/03 08:16:17.90 QWBdU6+p.net
一年半弱立っててもまともなコードがあがってない難問。 論、一部結果はでてるが有効打ゼロ。

744:デフォルトの名無しさん
16/09/03 18:06:05.39 fVb/pFms.net
>>728

URLリンク(ideone.com) (上書き修正)
BFS版を追加して、それを本採用

※依然として低い高さ制限=10に甘えたコードになっている

745:デフォルトの名無しさん
16/09/03 20:46:56.74 hrFRXovl.net
>>604 OCaml(勉強中)

URLリンク(ideone.com)

F#と並行してその元になってるOCamlの勉強も始めてみました
yukicoderで同じ問題やったらOCamlの方が実行時間8倍速、使用メモり1/7くらいだった・・・

746:デフォルトの名無しさん
16/09/04 04:44:05.42 swx+XD0y.net
>>726
Ruby
URLリンク(ideone.com)

747:デフォルトの名無しさん
16/09/04 10:12:56.94 AIgtYd56.net
円周の格子点は、
平面上の0-45度部分へ整数点の中心(a,b)を取って
原点を通る円、 (x-a)^2 + (y-b)^2 = r^2, (r^2 =a^2 + b^2)をベースに
整数mをとって解個数を1/m以下にする操作、
(mx-a)^2 + (my-b)^2 = r^2を考えればよさげ。
これならa,b,mは小さい順に無駄なく動かせ網羅できるかと。

748:デフォルトの名無しさん
16/09/04 14:51:14.83 +9WebUQ3.net
>>733
論よりコード もしくは演算結果

749:デフォルトの名無しさん
16/09/07 01:44:45.83 Bbadz6db.net
>>726 Emacs Lisp

(require 'cl-lib)

(defun f (s)
(let* ((e (reduce (lambda (a b) (concat a (substring b 1)))
(mapcar (lambda (x) (let ((a (car x)) (b (cdr x)))
(macrolet ((c (d) `(loop for i from a ,d b concat (string i)))) (if (< a b) (c to) (c downto)))))
(loop for i from 0 below (1- (length s)) collect (cons (aref s i) (aref s (1+ i)))))))
(f (position ?: e)) (g (substring e 0 (1+ f))) (h (apply #'string (reverse (string-to-list (substring e f)))))
(w 0) (y '(((0 . 0) 0 nil))))
(while y
(let ((i (caaar y)) (j (cdaar y)))
(if (and (= (aref g i) ?:) (= (aref h j) ?:))
(setq w (cadar y) y nil)
(setq y (append y (mapcar (lambda (x) (list x (1+ (cadar y)) (cons (cons i j) (caddar y))))
(remove-if (lambda (x) (or (< (car x) 0) (< (cdr x) 0) (find x (caddar y) :test 'equal) (/= (aref g (car x)) (aref h (cdr x)))))
(list (cons (1+ i) (1+ j)) (cons (1+ i) (1- j)) (cons (1- i) (1+ j)) (cons (1- i) (1- j)))))))))
(pop y))
w))

(f "073:0") 18
(f "07362:450") 36
(f "06464:36470") 42
(f "0827171:28480") 66
(f "0737491:28180") 146
(f "05374734372747484:184618186912120") 400
(f "021:120") 12
(f "091:280") 62

750:デフォルトの名無しさん
16/09/09 01:34:40.70 U1OL4Uha.net
>>726
Haskell
URLリンク(ideone.com)

751:デフォルトの名無しさん
16/09/12 09:47:06.73 lP0lbdh9.net
お題: Hello, World! を円形にして出力。
円形の定義、CUI, GUI どちらでやるかも自由。
丸くなっていれば良しとする。

752:デフォルトの名無しさん
16/09/12 16:48:28.87 cNnBFZuZ.net
>>737 Javascript
URLリンク(codepen.io)


753:



754:デフォルトの名無しさん
16/09/13 03:30:08.30 jvr3tDVu.net
URLリンク(ideone.com)
C++。イデオンで再現しようと思ってエスケープシーケンス検索したら、
win10の以前のアップデートで限定的に復活してたので使ってみた。
イデオンでは通らなかった。Orz

755:デフォルトの名無しさん
16/09/13 03:30:44.87 jvr3tDVu.net
画像つけ忘れた。Orz
sssp://o.8ch.net/gsxd.png

756:デフォルトの名無しさん
16/09/13 08:28:14.57 ziymAouq.net
>>694
URLリンク(ideone.com) (コードではなく計算結果)
円周上の格子点、高速化頑張ったら15分でこれ位行けるようになった@PentiumG6950

URLリンク(ideone.com)
こっちは1年前にUPしたけどスレに貼らなかった計算結果…結構長い時間かけて計算したような覚えがある。

757:デフォルトの名無しさん
16/09/13 11:57:17.52 EheVVWlB.net
円周の格子点問題は、数学でもプログラムでも一発で解答できる決定版はなさげで
力業をいかに高速化するかにかかってるとおもうな。

758:デフォルトの名無しさん
16/09/13 12:05:57.03 UfB/Iygd.net
直径nキロメートルの円があります。
手島と大嶋は時計回りに円周上を走ることになりました。
手島は秒速tセンチメートル、大嶋は分速oメートルで走ります。
0<n<100000000
0≦t≦10000000
0≦o≦10000
0<m<1000000
大嶋が円をm周した時に手島はn周出来たか出力しなさい。

■標準入力
1行目がn、2行目がtとo、3行目がm
n
t o
m

■標準出力
n

759:デフォルトの名無しさん
16/09/13 12:44:49.89 c6Y5aSJz.net
>>743
nが2回出てきてるんですが
っていうか、答えは整数実数どっち?
後者なら有効数字はどうするの?

760:デフォルトの名無しさん
16/09/13 12:45:20.45 jvr3tDVu.net
時計ですなー。

761:デフォルトの名無しさん
16/09/13 13:35:13.01 ziymAouq.net
>>743 Java
URLリンク(ideone.com)
直径って出力に関係ないよね…?

762:デフォルトの名無しさん
16/09/13 23:16:40.62 Hd4kFj6N.net
>>737 C
URLリンク(ideone.com)
>>743 C
URLリンク(ideone.com)

763:デフォルトの名無しさん
16/09/14 00:16:05.45 U8aDu041.net
>>743
Rubyで。
input =<<END
2.5
100 200
10
END
n, t, o, m = input.split.map { |e| e.to_f }
p 3 * m * t >= 5 * o * n

764:デフォルトの名無しさん
16/09/14 18:32:15.94 XNPp97JV.net
地球の半径ですら6400キロなのに
直径100000000キロまで設定している>>743って。。。

765:デフォルトの名無しさん
16/09/14 21:22:01.11 lCv5R5I7.net
宇宙人なんだろう
観測史上最大の星 L1551 IRS5 だと1e8じゃあまだまだ足りんぞ

766:デフォルトの名無しさん
16/09/20 20:19:45.34 9oYup838.net
出題出来るオレ、カッケー
とか思って調子に乗ってやったんだろ、どうせ。
今頃恥ずかしくてこのスレも見ていないだろ。
こういう奴はdat落ちして新スレに移行するか、最新50くらいの
過去ログが流れてしまった頃に
素知らぬ顔してまた書き込み出すぜ。

767:デフォルトの名無しさん
16/09/20 20:44:49.56 goOJLnhv.net
山下雄介

768:デフォルトの名無しさん
16/09/21 12:22:41.32 Fil1hk+D.net
Haxe(ヘックス)はOSSで、JSに型チェックを付けたような言語で(altJS)、
JS, Flash, PHP, C++, Java, C#, Python に書き出せる。
Windows8.1対応

IDEは、FlashDevelop

このサイトで、ブラウザでプログラミングして、実行できる
Try Haxe !
try.haxe.org/

Haxeプログラミング入門、尾野政樹、2015

769:デフォルトの名無しさん
16/09/28 00:14:12.32 x19ZT2Us.net
お題:足がコンパスのロボット
足がコンパスのようになっており、片足を支点にして交互に回転しながら歩くようなロボットがあります。
回転半径は1メートルで固定です。その回転角度は10~360°まで設定できるのですが、
実際に動かすと、その設定範囲内で1歩毎に常にランダムの角度で動いてしまいます。
例えば90°に設定すると、1~90の範囲で1°間隔にてランダムな回転角度です。
スタート地点にこのロボットを置き、1000歩、歩かせた場合、
最もスタート地点から遠ざかってしまう可能性が高い設定角度は
10°、30°、45°、60°、90°、180°、270°、360°のうちどれでしょう?

770:デフォルトの名無しさん
16/09/28 00:25:35.81 va8I6tp2.net
回転角度は10度以上360度以下の整数で
設定がn度のとき、1,2,3,...,n度で歩く確率がそれぞれ1/nってこと?
設問がよくわからない

771:753
16/09/28 00:27:45.52 x19ZT2Us.net
>>754
訂正します。
最もスタート地点から遠ざかってしまう可能性×
最も歩く範囲面積が大きくなる可能性○

772:753
16/09/28 01:05:00.83 x19ZT2Us.net
>>756
面積は必要なかったw
最も歩く範囲が大きくなる可能性○

773:デフォルトの名無しさん
16/09/28 01:08:31.73 va8I6tp2.net
歩く範囲って何?
そしてその範囲にどういう順序を導入すんの?

774:デフォルトの名無しさん
16/09/28 01:31:23.36 x19ZT2Us.net
>>758
どうしようかな・・・
例えば、ロボットが大きな円盤に乗っている。ロボットを中心に置く。
1000歩歩かせた場合、一番大きな円盤を必要とする設定は概ね何度でしょう?
ってのがいいかな。

775:デフォルトの名無しさん
16/09/28 01:44:05.92 vAKZVh2k.net
なんという泥縄...

776:デフォルトの名無しさん
16/09/28 02:12:02.41 E00q6b/l.net
設定が360度の場合、1度~360度でランダムなのか10度~360度でランダムなのか

777:デフォルトの名無しさん
16/09/28 02:13:21.23 E00q6b/l.net
て書いてあったわすまん

778:デフォルトの名無しさん
16/09/28 02:18:42.43 E00q6b/l.net
>>754 Java
URLリンク(paiza.io)
これで良いんかの

779:デフォルトの名無しさん
16/09/28 02:45:02.35 E00q6b/l.net
うん、>>763バグってるねw
URLリンク(paiza.io)

780:753
16/09/28 09:28:28.82 5Q2VSD5F.net
>>764
正解!

781:片山博文MZ ◆T6xkBnTXz7B0
16/09/28 23:43:35.22 fvrxpn3K.net
お題:X-Y散布図のデータが与えられると、データの特徴を出力するプログラムを作れ。

782:デフォルトの名無しさん
16/09/29 00:41:48.24 jq9v4dMk.net
質問。出力の型はな~に?

783:片山博文MZ ◆T6xkBnTXz7B0
16/09/29 00:56:33.41 4ynE22uh.net
>>767
決まっていない。

784:片山博文MZ ◆T6xkBnTXz7B0
16/09/29 01:02:42.83 4ynE22uh.net
Xが変化しないなら、「Xは定数と思われます」。
統計的特徴として、最大値、最小値、平均値など。
相関の有無など。
データの特徴を学習させるときに使えたらなと思う。

785:片山博文MZ ◆T6xkBnTXz7B0
16/09/29 01:09:09.41 4ynE22uh.net
>>767
ごめんごめん、型は文字列がいいや。

786:デフォルトの名無しさん
16/09/29 01:18:25.34 5Ed1CqY4.net
プログラミングの問題じゃねーなそれ

787:片山博文MZ ◆T6xkBnTXz7B0
16/09/29 01:24:57.46 4ynE22uh.net
お題:数列の規則性を分析して一般項のC言語式を推定するプログラム。

788:デフォルトの名無しさん
16/09/29 01:26:33.81 iWzko7DS.net
変な奴きたなおい

789:デフォルトの名無しさん
16/09/29 11:07:09.92 S1ISAJ/O.net
お題:
次の文章が成り立つように( )の中に数を入れよ(10進数の算用数字の形で)。

『この文章の中に
0は( )文字、1は( )文字、2は( )文字、3は( )文字、4は( )文字、
5は( )文字、6は( )文字、7は( )文字、8は( )文字、9は( )文字、
算用数字は( )文字あります』

790:デフォルトの名無しさん
16/09/29 11:12:05.26 3fQeuqpk.net
前にそれ見たことあるけど。問題ちょっと違うけど。

791:デフォルトの名無しさん
16/09/29 13:26:29.91 HDXVl+rI.net
>>774
複数解あるから全部列挙しろって事?

Ruby 2.3.1

$><<'『この文章の中に
0は(%d)文字、1は(%d)文字、2は(%d)文字、3は(%d)文字、4は(%d)文字、
5は(%d)文字、6は(%d)文字、7は(%d)文字、8は(%d)文字、9は(%d)文字、
算用数字は( )文字あります』'%[1,7,5,1,1,2,1,2,1,1,22]

792:デフォルトの名無しさん
16/09/30 17:18:56.68 Y6l190wq.net
数字と漢数字を相互に変換するプログラムを作成お願いします。
出来ればC#でお願いします。

111231243235436 <==> 百十一兆二千三百十二億四千三百二十三万五千四百三十六

793:デフォルトの名無しさん
16/09/30 17:34:05.09 CijhFsAG.net
じぶんでやれ

794:デフォルトの名無しさん
16/09/30 19:16:59.63 GrCnAQwz.net
おーくせんまんおーくせんまん

795:デフォルトの名無しさん
16/10/01 15:45:59.82 g8fgU4gY.net
お題と見せかけてプログラム作成依頼する奴って性格悪そう

796:デフォルトの名無しさん
16/10/01 17:22:57.31 Hi+y6PXx.net
じゃぱぁーん!

797:デフォルトの名無しさん
16/10/01 23:29:57.15 sU5CeuPC.net
>>777
Ruby
URLリンク(ideone.com)

798:デフォルトの名無しさん
16/10/02 10:09:53.98 tpSAAMa5.net
逆方向が難しいな

799:デフォルトの名無しさん
16/10/02 10:28:30.05 9tnsJKRL.net
そうなの?
いまから取り組む予定だったけど
そんなに難しいんなら止めよっと

800:デフォルトの名無しさん
16/10/02 11:51:51.24 QvMQ+uX0.net
難しくはない
面倒くさいだけで

801:デフォルトの名無しさん
16/10/02 17:21:53.04 k1HK9CGy.net
>>777
Rubyで両方向。
URLリンク(ideone.com)

802:デフォルトの名無しさん
16/10/02 21:03:52.42 YNMJXJ08.net
お題:3×3×3のルービックキューブを最小手数で6面揃えるプログラム

803:デフォルトの名無しさん
16/10/02 21:10:43.76 w8w2bVqI.net
すいません>>787は自己解決しました

804:デフォルトの名無しさん
16/10/02 21:17:54.22 YgSevYt1.net
自己解決ってなんだ

805:デフォルトの名無しさん
16/10/03 02:19:06.57 afA6oe1A.net
>>777 ruby 2.0.0
URLリンク(ideone.com)
・マイナスを▲で表現するアイデアは>>786さんから無断で拝借しました
・テスト部分のコードも>>786さんから無断で拝借しました

806:デフォルトの名無しさん
16/10/03 07:04:42.97 g0wnVkPc.net
>>790
サンクス

807:デフォルトの名無しさん
16/10/03 15:18:20.56 wy4v0QcT.net
>>787-789

ワラタw

808:デフォルトの名無しさん
16/10/03 21:25:42.73 lIBXU/7G.net
数独ソルバーで任天堂問題解こうと思ったら、2000万年かかるようになった。Orz
総当たりだとキツイなぁ。数独は。平均サジェスト数が2個の81乗。死ぬわ。

809:デフォルトの名無しさん
16/10/03 21:29:48.53 lIBXU/7G.net
URLリンク(cp1.nintendo.co.jp)
ここから入門。

810:デフォルトの名無しさん
16/10/03 21:33:29.69 RKI08UEe.net
任天堂問題とは?

811:デフォルトの名無しさん
16/10/03 21:40:47.39 lIBXU/7G.net
>>795
俺が作った造語。すまんな。
>>794のページから問題解いてくとアルヨ。

812:デフォルトの名無しさん
16/10/03 21:59:25.51 hxqof8pD.net
Rubyの自作ヘボ数独ソルバーですらコンマ以下で解けたぞ

813:デフォルトの名無しさん
16/10/03 22:19:26.57 lIBXU/7G.net
>>797
俺あんまりロジック解くの得意じゃないからねぇ。
C++でかいたけど、総当たりは筋が悪いことはわかったよ。

814:デフォルトの名無しさん
16/10/03 22:24:43.42 aKvG7AoT.net
総当たりから不要なパターンを省いていくのも一つの手だと思う

815:デフォルトの名無しさん
16/10/03 22:25:59.85 hxqof8pD.net
>>797
基本ルール:ある数字と同じ列(or行or3*3の正方形)にはその数字が入らない
これだけでも実装して後は背理法でやればすぐ解けると思うぞ
解の一意性がどうかとか細かいこともあるけどこの問題は一意的に求まるから関係ないし

816:デフォルトの名無しさん
16/10/03 22:27:06.95 lIBXU/7G.net
URLリンク(ideone.com)
ここからどうしたらいいと思う?
i7-6700でも2000万年かかる。

817:デフォルトの名無しさん
16/10/04 01:44:53.95 a8C2punc.net
>>793-794
昔書いたソースコードを流用した

URLリンク(ideone.com)

818:デフォルトの名無しさん
16/10/04 01:58:03.23 FAQ7jfY8.net
>>802
グレート!
すごいな、イデオン時間で解けるもんなんだなぁ。うーん。俺は修業が足りんな。
俺も結構書いたかと思ったけど全然うわてだ。
ロジック解くときはやっぱこれくらい書かないとダメかー。
ひぎぃ、頭がフットーしちゃうよぉ~。

819:デフォルトの名無しさん
16/10/04 02:23:25.94 a8C2punc.net
>>803
数独は有名な解き方がいくつかあるので、それを知らないと難しいかも
いくつもある解き方を実装するのは面倒なのでバックトラック法でやるのがいいと思う

820:デフォルトの名無しさん
16/10/04 02:52:38.24 FAQ7jfY8.net
>>804
情報ありがとう。いいものが見れた。

821:デフォルトの名無しさん
16/10/04 19:40:37.29 wFGKqamD.net
お題:任天堂の倒し方をプログラムせよ。

822:デフォルトの名無しさん
16/10/04 21:58:16.07 ZRyYrZJK.net
大作だなあ…

823:デフォルトの名無しさん
16/10/04 23:47:40.64 YN9fMNzy.net
「方法をブログラムせよ」ってのが謎なんですが

824:デフォルトの名無しさん
16/10/04 23:50:15.04 FAQ7jfY8.net
日本語で。
株を買います。株主総会でゴネマス。倒せます。

825:デフォルトの名無しさん
16/10/05 00:49:13.06 JfbCSBrf.net
>>806
プログラムしたよ。

826:デフォルトの名無しさん
16/10/05 19:29:14.00 Bgv24eMU.net
任天堂の倒し方を知っていると
言っていた面接官は

827:デフォルトの名無しさん
16/10/05 19:35:13.81 ljdAnrxD.net
お題:激問

828:デフォルトの名無しさん
16/10/05 21:44:58.11 d6ezgCbb.net
>>793
URLリンク(ideone.com)
C++。
やっと解けたよー。ほとんどデバッグも整形もしてないけど、答えはあってるかも。
2000万年が0秒になった。頭タコすぎて泣けるわ。
頭がフットーする。
>>802に感謝。

829:デフォルトの名無しさん
16/10/05 21:45:50.48 iBWfgtGO.net
print "任天堂の倒し方"

830:デフォルトの名無しさん
16/10/05 21:56:56.37 NHEuemUY.net
ヒントページ見れば苦労せずに誰でも書けそうなもんだが

831:デフォルトの名無しさん
16/10/05 22:05:52.60 d6ezgCbb.net
>>815
ルビー読めません。Orz

832:デフォルトの名無しさん
16/10/06 17:02:16.03 VkVdfdR0.net
スタックを操作するプログラムまたそれを表示するプログラムをお願いします

833:デフォルトの名無しさん
16/10/06 17:48:54.19 Gk0vxqlO.net
狩野英孝のものまねで「スタックー」って叫べばOK

834:片山博文MZ ◆T6xkBnTXz7B0
16/10/06 18:13:10.02 KbZqo+3y.net
>>817
自動変数のアドレスはスタックへのポインターになる

835:デフォルトの名無しさん
16/10/06 19:29:47.14 LwTuJfQY.net
スタックを操作するプログラムってこんなんでいいのかな?

#include <malloc.h>
#include <stdio.h>
#include <string.h>

unsigned char data[6] = {0x68,0,0,0,0,0xc3};

unsigned int func() {
unsigned int *p;
p = malloc(1024);
memcpy(p,data,6);
*((unsigned int*)&data[1]) = *((unsigned int*)((unsigned int*)(&p) + sizeof(unsigned int*)));
*((unsigned int*)((unsigned int*)(&p) + sizeof(unsigned int*))) = (unsigned int)p;
printf("0x%X\n",*((unsigned int*)((unsigned int*)(&p) + sizeof(unsigned int*))));
return *((unsigned int*)&data[1]);
}

int main(void) {
printf("0x%X\n",func());
return 0;
}

836:デフォルトの名無しさん
16/10/06 19:48:03.50 LwTuJfQY.net
>>820
すまん、これ間違ってますねぇ・・・
スタックの操作って環境依存な気がするけどどうなんでしょう

837:デフォルトの名無しさん
16/10/06 20:04:22.70 SdPd3klr.net
え?データ構造の練習の話じゃなくてプログラムの一時領域の話?
ちなみにここは宿題スレじゃない。

838:デフォルトの名無しさん
16/10/06 21:15:35.91 dAHZcQmf.net
スマホで入力した数字を出力しなさい
Sは0から9までの数字とcと+と-からなる文字列
0<S<1001
Sの先頭は数字から始まる
Sの最後に+と-がこない
cは入力済みの数字をクリアする
+は左辺に1を足し、-は右辺に1を引く
Sに数字が含まれていなかったり、cと+と-が先頭や最後に出てきたり2文字以上続いたらERRORと出力すること

■stdin
5+1-32c8
■stdout
8

■stdin
32+8
■stdout
338

■stdin
+24c25
■stdout
ERROR

839:修正
16/10/06 21:16:30.92 dAHZcQmf.net
スマホで入力した数字を出力しなさい
Sは0から9までの数字とcと+と-からなる文字列
0<S<1001
Sの最後に+と-がこない
cは入力済みの数字をクリアする
+は左辺に1を足し、-は右辺に1を引く
Sに数字が含まれていなかったり、cと+と-が先頭や最後に出てきたり2文字以上続いたらERRORと出力すること

■stdin
5+1-32c8
■stdout
8

■stdin
32+8
■stdout
338

■stdin
+24c25
■stdout
ERROR

840:修正
16/10/06 21:17:13.95 dAHZcQmf.net
Sの最後に+と-がこない
↑この1文も削除

841:修正
16/10/06 21:18:37.24 dAHZcQmf.net
119+5
なら1205

842:デフォルトの名無しさん
16/10/06 21:55:36.99 hrJ3iBy7.net
この+,-ってスマホの入力とどういう関係があるの?

843:デフォルトの名無しさん
16/10/06 21:59:09.52 HEfd0Rj6.net
また山下雄介か

844:デフォルトの名無しさん
16/10/07 10:59:44.51 1a/aMfXp.net
>>824
ruby

if gets.chomp!.split(/[c+-]/, -1).include?('')
puts:ERROR
else
str = $_.include?(?c)? $_[/c\K[^c]*$/] : $_
ary = str.split(/\b/)
ary.each_with_index{|s, i|
case s
when /^\d+$/ then next
when ?+ then ary[i - 1].succ!
when ?- then ary[i + 1] = (ary[i + 1].to_i - 1).to_s
end
ary.delete_at(i)
}
puts ary*''
end

845:828
16/10/07 11:10:04.11 1a/aMfXp.net
ミス

if gets.chomp!.split(/[c+-]/, -1).include?('')
puts:ERROR
else
str = $_.include?(?c)? $_[/c\K[^c]*$/] : $_
ary = str.split(/\b/)
ary.each_with_index{|s, i|
case s
when /^\d+$/ then next
when ?+ then ary[i - 1].succ!
when ?- then ary[i + 1] = (ary[i + 1].to_i - 1).to_s
end
ary[i] = nil
}
puts ary.compact*''
end

846:828
16/10/07 11:21:01.09 1a/aMfXp.net
ミス
連投すまんこれで最後にするわ

if gets.chomp!.split(/[c+-]/, -1).include?('')
puts:ERROR
else
str = $_.include?(?c)? $_[/c\K[^c]*$/] : $_
ary = str.split(/\b/)
ary.each_with_index{|s, i|
case s
when /^-?\d+$/ then next
when ?+ then ary[i - 1] = (ary[i - 1].to_i + 1).to_s
when ?- then ary[i + 1] = (ary[i + 1].to_i - 1).to_s
end
ary[i] = nil
}
puts ary*''
end

847:デフォルトの名無しさん
16/10/08 08:08:57.97 vxldEz4C.net
>>824
830を参考にしました。
Ruby
URLリンク(ideone.com)

848:デフォルトの名無しさん
16/10/09 01:39:18.78 okPyT/Vt.net
1行で

gets.chomp!.split(/[c+-]/,-1)&['']!=[]?$><<:ERROR:(~/c/?$_[/c\K[^c]*$/]:$_).split(/\b/).tap{|a|$><<a.each_with_index{|s,i|s.to_s[/\d/]?next: a[i-e=44-s.ord]=a[i-e].to_i+e;a[i]=p}*''}

849:デフォルトの名無しさん
16/10/09 03:00:29.48 BybICDK4.net
やっぱRubyって・・・いや、なんでもない

850:デフォルトの名無しさん
16/10/09 21:58:35.59 2oHV2A6O.net
>>823-826
・「右辺に1を引く」の右辺をマイナスのすぐ右側の数と解釈

def f8823(s)
# Sに数字が含まれていなかったり、
# cと+と-が先頭や最後に出てきたり2文字以上続いたらERRORと出力すること
return 'ERROR' if /\d+/ !~ s || /(^[c+-]|[c+-]$|[c+-]{2,})/ =~ s
# cは入力済みの数字をクリアする
# +は左辺に1を足し、-は右辺に1を引く
s.gsub(/.+c/, '').gsub(/(\d+)\+/) {$1.next}.gsub(/-(\d+)/) {($1.to_i - 1).to_s}
end
p %W(#{} c + - 1c 1+ 1- c1 c+ c- 1cc1 1++1 1--1 1c+-1 119+5 119-5 119c5 1+1-1 1+1+1 1-1-1).map {|s| [s, f8823(s)]}

$ ruby 8823.rb
[["", "ERROR"], ["c", "ERROR"], ["+", "ERROR"], ["-", "ERROR"], ["1c", "ERROR"],
["1+", "ERROR"], ["1-", "ERROR"], ["c1", "ERROR"], ["c+", "ERROR"], ["c-", "ERR
OR"], ["1cc1", "ERROR"], ["1++1", "ERROR"], ["1--1", "ERROR"], ["1c+-1", "ERROR"
], ["119+5", "1205"], ["119-5", "1194"], ["119c5", "5"], ["1+1-1", "210"], ["1+1
+1", "221"], ["1-1-1", "100"]]

851:834
16/10/09 22:19:57.08 k3CHV3QP.net
>>835は完全に間違っているので取り下げます
1-1+1 が 120 になっちゃうねこれじゃあ

852:デフォルトの名無しさん
16/10/09 23:19:57.10 0NJ6apgZ.net
>>836
URLリンク(ideone.com) で実行してみたが、 
1-1+1 は、ERRORじゃね?

853:デフォルトの名無しさん
16/10/10 08:00:29.16 HHuVI6c/.net
お題:
A B C … Z
1 2 3 26
とするとき、

KNOWLEDGE -> 11 + 14 + 15 + 23 + 12 + 5 + 4 + 7 + 5 = 96
HARDWORK -> 8 + 1 + 18 + 4 + 23 + 15 + 18 + 11 = 98
ATTITUDE -> 1 + 20 + 20 + 9 + 20 + 21 + 4 + 5 = 100

となる。

総和が100となる他の単語を3つ見つけよ。

854:デフォルトの名無しさん
16/10/10 08:20:11.21 jxPg9rAk.net
辞書ファイルくださいw

855:デフォルトの名無しさん
16/10/10 08:52:21.18 HHuVI6c/.net
>>839
URLリンク(detail.chiebukuro.yahoo.co.jp)

856:デフォルトの名無しさん
16/10/10 09:34:42.77 jxPg9rAk.net
>>838 Java
URLリンク(paiza.io)

857:デフォルトの名無しさん
16/10/10 11:41:38.97 PJGQtdQ9.net
>>838
ruby wordlist.txtは改行\n区切りとする
$><<open('wordlist.txt').readlines.select{|s|s=s.chomp.upcase.delete('^A-Z');s.codepoints.reduce(&:+)-s.size*64==100}[0,3]*''

858:デフォルトの名無しさん
16/10/10 15:20:38.52 vALgwmuK.net
>>838 Emacs Lisp

(require 'cl-lib)

(cl-mapcan (lambda (s) (and (not (string-match

859:デフォルトの名無しさん
16/10/10 15:47:08.07 vALgwmuK.net
>>838 Emacs Lisp

(require 'cl-lib)

(setq result
(cl-mapcan (lambda (s) (and (not (string-match "\x5b^A-Z]" s)) (= (apply #'+ (mapcar (lambda (x) (- x ?@)) (upcase s))) 100) (list s)))
(split-string (with-temp-buffer (insert-file-contents "/usr/dict/words") (buffer-string)))))

(cl-loop for i from 0 below 3 do (print (nth i result)))
"accumulate"
"acknowledge"
"adulthood"

(cl-loop for i from 0 below 3 do (print (nth i (reverse result))))
"yarrow"
"Yankton"
"wholesale"

860:デフォルトの名無しさん
16/10/10 17:24:16.08 Tl2g/5GS.net
左下から右上に登る階段を作りなさい

標準入力よりA Bが与えられる
Aは段数
Bは平らな部分の長さ
0 ≦ (A,B)
何も出力されるものがなければNONEと出力すること

[stdin]
3 2
[stdout]
******__
****__|
**__|
__|

[stdin]
0 1
[stdout]
_

[stdin]
0 0
[stdout]
NONE

861:デフォルトの名無しさん
16/10/10 18:14:49.37 jxPg9rAk.net
>>845
段数1以上で平らの部分の長さが0の場合はNONEと|が縦に並ぶのとどっち?

862:デフォルトの名無しさん
16/10/10 18:21:18.09 PJGQtdQ9.net
>>845
Ruby 1行で

eval"a,b=%s+1,%s;b<1?$><<:NONE:a.times{|i|puts ?**(a+~i)*b+?_*b+?|*i[0]}"%gets.split

863:164
16/10/10 18:30:33.51 WihadwZK.net
>>845 Perl
use f


864:eature qw{:5.16}; $_ = <>; ($n, $l) = split; $s = sub { my $i = $_[0]; ($n or $l) and $i <= $n ? __SUB__->($i + 1) . '*' x $l x $i . '_' x $l . ($i < $n ? '|' : '') . "\n" : '' }->(0); print $s ? $s : "NONE\n"; d:\Home>perl 8_844_step.pl 3 2 ******__ ****__| **__| __| d:\Home>perl 8_844_step.pl 0 1 _ d:\Home>perl 8_844_step.pl 1 0 | d:\Home>perl 8_844_step.pl 0 0 NONE



865:164
16/10/10 18:33:10.57 WihadwZK.net
>>848

d:\Home>perl 8_844_step.pl

から下の行はコマンドプロンプトから実行した結果の画面のコピペで、
プログラムソースは

use feature qw{:5.16};

print $s ? $s : "NONE\n";

の範囲です

866:デフォルトの名無しさん
16/10/10 18:40:27.87 PJGQtdQ9.net
Ruby
出力がNONE ⇔ a=0かつb=0 だとすれば
eval"a,b=%s+1,%s;a+b<2?$><<:NONE:a.times{|i|puts ?**(a+~i)*b+?_*b+?|*-2[i]}"%gets.split

867:デフォルトの名無しさん
16/10/10 18:41:34.94 XcJmDjCA.net
>>845
C#
なんか宿題っぽいし(悪いけど)いまいちなお題に思えたけど暇だからやってみた

URLリンク(ideone.com)
やっぱりかなり退屈だなw

868:デフォルトの名無しさん
16/10/10 20:10:20.45 GJ6N0Utq.net
>>838 rustc 1.8.0
use std::io;
use std::io::prelude::*;
fn main() {
let stdin = io::stdin();
for line in stdin.lock().lines().map(|x| x.unwrap()).filter(|s| s.chars().fold(0, |acc, c| acc + 1 + c as i32 - 'A' as i32) == 100).take(3) {
println!("{}", line);
}
}

>>845 ruby 2.0.0
a, b = $stdin.gets.scan(/\d+/).map {|s| s.to_i}
stairs = (0..a).inject([]) {|acc, i| acc << '*' * b * (a - i) + '_' * b + (0 < i ? '|' : '')}
puts b == 0 ? 'NONE' : stairs.join("\n")

869:デフォルトの名無しさん
16/10/10 20:29:46.85 GJ6N0Utq.net
>>845 ruby 2.0.0 ちょい整理
a, b = $stdin.gets.scan(/\d+/).map {|s| s.to_i}
stairs = (0..a).map {|i| '*' * b * (a - i) + '_' * b + (0 < i ? '|' : '')}
puts b == 0 ? 'NONE' : stairs.join("\n")

870:デフォルトの名無しさん
16/10/10 20:35:05.59 XcJmDjCA.net
ケチつけるつもりは全然なくて純粋な疑問なんだけど、
Rubyってとにかく短く書くのが命で可読性はどうでもいいっていう文化なの?

871:デフォルトの名無しさん
16/10/10 20:39:05.26 QHxKPE5l.net
>>854
せやで

872:デフォルトの名無しさん
16/10/10 20:40:37.95 PJGQtdQ9.net
>>854
>>847とか>>850は勝手にゴルフっぽいことしてるだけで
Rubyではコードが短いほど良いという共通の価値観はないよ

873:デフォルトの名無しさん
16/10/10 20:45:28.26 GJ6N0Utq.net
>>854
個人的にはそれはむしろPerlだと思うけどw
(過去の個人的な体験に基づく偏見です)

874:デフォルトの名無しさん
16/10/10 20:45:57.40 XcJmDjCA.net
>>856
やっぱりそうだよねw
ありがとう

875:デフォルトの名無しさん
16/10/10 20:51:52.34 xXMHDLa+.net
rubyは作者がそもそもコードの表記法にこだわっているからruby文化全体に表記にこだわりを持つ部分があるのは事実

876:164
16/10/10 21:02:10.31 WihadwZK.net
>>857
Perlは短くするために難読性が高くなるような
書き方もできる自由度があるけど
>>848はなるべく難読にならないように俺としては配慮して書いたつもりだよ。
ただ、ここに貼るとインデントがなくなっちゃうので見やすさは損なわれているけれど…
>>848にポイントするとインデントが付くのでよかっらたポイントしてみてね。
>>848であえて意識したのは無名関数の自己再帰を使ったこと�


877:ュらいかな。



878:164
16/10/10 21:56:18.64 WihadwZK.net
>>838 Perl
use feature say;
use List::Util 'sum';
for (1..3) {
local $_ = <>;
chomp;
redo if sum(map {ord($_) - ord('A') + 1} split '') != 100;
say;
}

879:デフォルトの名無しさん
16/10/10 22:06:38.74 GJ6N0Utq.net
>>860
実は俺はPerlの可読性なんかを1ミリも語れる状況に無くて
20年前に赤いラクダ本を先輩に貰ったまま本棚で腐らせてるような体たらく
読み書きままならないってだけなんで、どうかお気になさらないでください

880:デフォルトの名無しさん
16/10/11 20:20:36.62 4j+X4FeX.net
そうね、誕生石なら

881:デフォルトの名無しさん
16/10/11 20:49:10.20 5wY1VI8m.net
>>838
@Mathematica

URLリンク(ideone.com)

882:164
16/10/12 00:29:27.25 RXlYYM2a.net
>>823 >>824 Perl
use feature 'say';
while (<>) {
chomp;
print "$_ => ";
while (($a,$o,$b,$r) = /^(\d+)([c+-])(\d+)(.*)$/) {
$a++ if $o eq '+';
$b-- if $o eq '-';
$a = '' if $o eq 'c';
$_ = "$a$b$r";
}
say /^\d+$/ ? $_ : 'ERROR';
}

883:164
16/10/12 00:30:18.77 RXlYYM2a.net
>>865 の実行結果の例
5+1-32c8 => 8
32+8 => 338
+24c25 => ERROR
119+5 => 1205
1-1+1 => 111

884:デフォルトの名無しさん
16/10/13 20:27:03.99 PLGkmVG9.net
>>823-826 rust 1.8.0
URLリンク(ideone.com)
・正規表現不使用
・最後のjoin処理はideoneのrust 1.0.0に合わせて修正

885:デフォルトの名無しさん
16/10/14 05:03:01.25 ayBWV1jp.net
>>824
URLリンク(ideone.com)
C++。テストは>>835を一部拝借。失礼。
本分書き始める前に色々使いそうな関数書いたものの結局使わず。無駄だった。
あってるかなぁ。

886:片山博文MZ ◆T6xkBnTXz7B0
16/10/24 18:40:09.78 Ea5AKtst.net
お題:隣接行列で与えられたネットワークを可能ならば一筆書きする。
不可能なら「No solution.」と表示する。

887:片山博文MZ ◆T6xkBnTXz7B0
16/10/24 18:56:42.71 Ea5AKtst.net
お題:架空の4ビットCPUの機械語を設計し、その論理式と回路図を出力するプログラムを作れ。

888:デフォルトの名無しさん
16/10/24 23:05:36.84 iFtzBvZM.net
>回路図を出力

図の形式は出題者が指定しなくちゃ。

889:デフォルトの名無しさん
16/10/24 23:33:47.03 Ea5AKtst.net
>>871
.svgか.pdf

890:デフォルトの名無しさん
16/11/04 18:56:54.02 8tGR/IuU.net
お題:1から9までの数字を1回づつ使って分数をつくる。
たとえば123/456789, 3962/17548など。
約分すると1/8になるものをすべてもとめる。

891:デフォルトの名無しさん
16/11/04 19:08:46.32 XfxE6vHI.net
4ケタの順列を総なめしながら8倍してチェックするのかな
3024個みたいだからたいしたことなさそう

892:デフォルトの名無しさん
16/11/04 22:07:13.71 UQXTh2xL.net
>>873
URLリンク(ideone.com)

893:デフォルトの名無しさん
16/11/04 22:20:51.84 K4HA426Y.net
>>873
URLリンク(ideone.com)

894:デフォルトの名無しさん
16/11/05 07:20:45.14 JpuKs6gN.net
>>873
URLリンク(ideone.com)
C++。総当たりのはずだけど、あってるかな?

895:デフォルトの名無しさん
16/11/05 07:36:20.45 JpuKs6gN.net
>>876
しゅごい。

896:デフォルトの名無しさん
16/11/05 08:01:48.28 eq+4G+9Q.net
>>873 Java
URLリンク(ideone.com)

897:デフォルトの名無しさん
16/11/05 19:59:02.35 giaAjwb2.net
>>873 Squeak/Pharo Smalltalk

| ans |
ans := OrderedCollection new.
self assert: 987 * 8 < 123456.
'123456789' permutationsDo: [:perm |
 | numer denom |
 numer := perm first: 4.
 denom := perm allButFirst: 4.
 numer asInteger * 8 = denom asInteger ifTrue: [ans add: numer, '/', denom]
].
^ ans

898:デフォルトの名無しさん
16/11/05 20:10:30.03 4QNuq7Ui.net
>>879
なるほど、どうせ数が知れてるから真面目に順列でやる必要ないのかw

899:164
16/11/05 22:55:55.41 9FbiGoMz.net
>>873 Perl
use feature qw{:5.16};
$b = 8888;
do {
$b += 8;
$a = $b/8;
my %h;
$h{$_}++ for split '', $a . $b;
say "$a/$b" unless (exists $h{0} or 9 > keys %h)
} while ($a <= 9999);

next_permutation がライブラリに無いし
872の問題用に9文字から4桁の順列を生成する
再帰関数を作ろうとしたけど
めんどくさくなって、別解法にしました。

900:デフォルトの名無しさん
16/11/05 23:03:21.88 Kvw69EBs.net
>>873
@Mathematica

{"1","2","3","4","5","6","7","8","9","/"}//
Permutations//
Select[#,#[[1]]!="/"&]&//
Select[#,#[[-1]]!="/"&]&//
ParallelMap[StringJoin,#]&//
Select[#,ToExpression[#]==1/8&]&

901:デフォルトの名無しさん
16/11/06 10:45:05.08 Ls7dpV42.net
>>873 類題

お題:1から9までの数字を1回づつ使って引き算をつくる。
たとえば123-456789, 3962-17548など。
引き算すると44444になるものをすべてもとめる。

902:デフォルトの名無しさん
16/11/06 11:16:41.58 BmMxYEOk.net
>>884 C
URLリンク(ideone.com)

903:デフォルトの名無しさん
16/11/06 12:39:57.86 1PuOCcw9.net
>>884 Java
URLリンク(ideone.com)
書き換え2行

904:デフォルトの名無しさん
16/11/06 14:47:56.12 UyE09MO8.net
>>884 Squeak Smalltalk

| ans |
ans := OrderedCollection new.
self assert: 123456 - 987 > 44444.
'123456789' permutationsDo: [:perm |
 | x y |
 x := perm first: 5.
 y := perm allButFirst: 5.
 x - y = '44444' ifTrue: [ans add: x, '-', y]
].
^ ans

905:デフォルトの名無しさん
16/11/06 15:31:09.29 +kwTAqkL.net
>>873 >>884 c
URLリンク(ideone.com)
・全パターンをチェック
・肝心な部分(comb, permute)はぐぐったサイトから無断で拝借しました
・セパレータ要素も一緒に混ぜとく案は>>883さんを参考にしました
・一部の関数名(permutations_do)について>>887さんを参考にしました

906:デフォルトの名無しさん
16/11/06 16:07:27.17 1MCBSGi9.net
>>884 Io
Range
1234 to(9876)select(i,
(i ..(i+44444))asMutable sort =="123456789
)map(j,(44444+j).."-".. j)

907:デフォルトの名無しさん
16/11/06 19:36:04.77 jK1sWMF7.net
URLリンク(twitter.com)
> せんぱいは、10億以下の整数の中で、最も約数の多い整数を求めるプログラムを書けますか?

908:デフォルトの名無しさん
16/11/06 20:36:12.30 9KctHGA8.net
直感的には重複しない素数の積だと思うけど証明はできんなw

909:デフォルトの名無しさん
16/11/06 23:07:17.87 1PuOCcw9.net
>>890 Java
URLリンク(ideone.com)
あまり考えずに

910:デフォルトの名無しさん
16/11/06 23:39:17.02 jK1sWMF7.net
>>892
Good Job

911:デフォルトの名無しさん
16/11/06 23:40:47.89 jK1sWMF7.net
>>892
Good Jobじゃなく正解というべきだったな

912:デフォルトの名無しさん
16/11/07 00:17:44.47 +ilf/hxD.net
>>892
どういうロジックかさっぱりわかんないやw
でも、

newYakusu += yakusu;

これはちょっとおかしい気がするw

913:デフォルトの名無しさん
16/11/07 00:55:26.00 MDpsc3Qw.net
newYakusu *= 2;
が正解だろうな、たぶん

914:デフォルトの名無しさん
16/11/07 01:14:46.43 t5QB3k9f.net
っていうか、2*3*5は2*3の2倍の約数があるのはわかるけど、
2*2*2は2*2より1つ多いだけだと思うんだけど...

まあたぶん俺が何か勘違いしてるんだろうなw

915:デフォルトの名無しさん
16/11/07 01:18:30.50 N5kIq+jA.net
重複ははずしてだろ。ふつうに。どうみても2べきが小さいから。

916:デフォルトの名無しさん
16/11/07 09:25:12.04 VzgYAniQ.net
素因数の指数+1をすべて掛け合わせれば約数の数になる

917:デフォルトの名無しさん
16/11/07 19:37:58.99 ZbCfelvl.net
>>899
素因数分解がむずかしいね,テーブルで持っておくしかないか

918:デフォルトの名無しさん
16/11/07 21:09:59.66 hgWS81A3.net
>>892 が計算量を減らすためにバッサリ切り捨ててるとこが良く分からないけど
出てる答え 735134400 = 2^6*3^3*5^2*7*11*13*17 の他にもう一つ約数の数 1344 があった
931170240 = 2^6*3^2*5*7*11*13*17*19
もっとあるかも、というか正解は別にあるかもという気がしなくもない

919:デフォルトの名無しさん
16/11/07 21:37:10.62 VzgYAniQ.net
>>901
URLリンク(ideone.com)

>>892の素数リスト、19が抜けてるやw
リスト表示するようにしても931170240が出てこないからおかしいなと確認したら初歩的なミスw

920:デフォルトの名無しさん
16/11/08 02:53:20.88 E77IrmWO.net
10億以下で約数の数が1344の整数はたぶん4つ
735134400 = 2^6*3^3*5^2*7*11*13*17
821620800 = 2^6*3^3*5^2*7*11*13*19
931170240 = 2^6*3^2*5*7*11*13*17*19
994593600 = 2^6*3^3*5^2*7*11*13*23

921:デフォルトの名無しさん
16/11/09 05:42:59.95 rWt9CCW+.net
>>890
@Mathematica

URLリンク(ideone.com)

922:デフォルトの名無しさん
16/11/09 09:54:20.69 bJUc+90s.net
>>890
>>902 を参考に C++

URLリンク(ideone.com)

923:デフォルトの名無しさん
16/11/09 12:57:49.64 n6HvGTQo.net
hello worldを出力しなさい
但し文字リテラルと数字をコード中に書いてはいけません

924:デフォルトの名無しさん
16/11/09 13:07:00.37 DsWyA9Yw.net
>>906
誰得。

925:デフォルトの名無しさん
16/11/09 13:39:36.94 RQn7BeEP.net
>>906
URLリンク(ideone.com)
URLリンク(ideone.com)

926:デフォルトの名無しさん
16/11/09 14:40:02.73 yNpdMLCi.net
>>906
ruby -e 'class HelloWorld ;end; p HelloWorld'

927:デフォルトの名無しさん
16/11/09 15:20:35.35 7Gidw00Y.net
>>906
URLリンク(ideone.com)

928:デフォルトの名無しさん
16/11/09 15:22:04.34 7Gidw00Y.net
可読性の高いコードができたぜ

929:デフォルトの名無しさん
16/11/09 15:57:41.78 R5k7JcnE.net
>>906
URLリンク(ideone.com)

930:デフォルトの名無しさん
16/11/09 16:09:57.80 RQn7BeEP.net
>>906
URLリンク(ideone.com)
標準入力はコードのうちに入りますか?

931:デフォルトの名無しさん
16/11/09 18:09:11.97 w47niDgV.net
>>906
文字リテラルは禁止だけど文字列はOK?

932:デフォルトの名無しさん
16/11/09 18:11:01.84 w47niDgV.net
>>906
これに似てるね

普通じゃないHello World問題「Restricted Words」の解説記事 #伝説 #しえる|CodeIQ MAGAZINE
URLリンク(codeiq.jp)

933:デフォルトの名無しさん
16/11/09 19:45:29.90 B1AmaaJH.net
>>906 Squeak Smalltalk

| hello world | thisContext method tempNamesString "=> 'hello world' "

934:デフォルトの名無しさん
16/11/09 21:56:55.91 3MgWSwni.net
>>906
URLリンク(ideone.com)
URLリンク(ideone.com)

935:片山博文MZ ◆T6xkBnTXz7B0
16/11/09 22:31:53.26 A1mSNctr.net
お題:テーブルの上にきれいにきちんと重なったトランプ1セットが置いてあり、全てのカードの表が上向きになっている。
プログラムはカードの並びを入れ換えたり、上からn番目のカードを読み込むことができる。
この仮想的なトランプを操作することによって円周率を求めるプログラムを書け。

936:デフォルトの名無しさん
16/11/09 22:43:42.78 RQn7BeEP.net
まず>>918のコードが見たいなー}

937:デフォルトの名無しさん
16/11/10 00:53:34.51 7cWLs5su.net
>>906
URLリンク(ideone.com)

938:164
16/11/10 01:07:34.71 UjUlxJgT.net
>>908
あんさんは、
Programmingを
楽しんでますなー。
気に入ったぜ。

939:164
16/11/10 01:11:20.89 UjUlxJgT.net
以下、enterprise fizzbuzzみたいな
hellow worldを書く椰子


940:デフォルトの名無しさん
16/11/10 01:21:32.89 rkwF1pIg.net
brainfuckやwhitespeceで文字出力するだけってジェネレータで出来るじゃん

941:デフォルトの名無しさん
16/11/11 21:28:06.13 drAYGWtl.net
>>906
@Mathematica

URLリンク(ideone.com)

942:デフォルトの名無しさん
16/11/12 12:36:20.63 OOJ7Wqnx.net
大文字を出力してるので減点

943:デフォルトの名無しさん
16/11/12 14:05:38.79 FKtxBunI.net
真面目か

944:デフォルトの名無しさん
16/11/12 14:44:10.92 5nMDDcWB.net
>>906 C
URLリンク(ideone.com)

945:デフォルトの名無しさん
16/11/12 18:06:10.50 pVnBGILb.net
お題
整数Aに整数Bを加算しなさい
但し3桁に区切って計算すること
AとBは文字列で標準入力から2行に分けて与えられる
0≦A≦999999999999999999999999999999999
0≦B≦999999999999999999999999999999999

標準入力
1234
15

標準出力
1249

解説
A=1234
B=15
Aは3桁を超えてるので123と4に分割される
123*10+B+4=1249
もしくは
1*1000+234+B=1249

946:デフォルトの名無しさん
16/11/12 18:31:12.94 kNoTIrA7.net
>>928
>3桁に区切って
の意図がわからない

普通に多桁長加算の実装じゃないのか?

947:デフォルトの名無しさん
16/11/12 18:50:09.31 8285RMD/.net
多桁長の演算を実装するだけのようだし
3桁に区切るって限定しなくてもいいよな。

948:デフォルトの名無しさん
16/11/12 19:55:55.39 Q4JxAaLZ.net
>>906 c
・数年前に同じお題をここか別のスレでやったような気が…

#include <stdio.h>
int main() {
struct {
struct {long _a, _b;} _a, _b, space, _d, _e, _f;
char _,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
} __;
#define _(v) putchar((void *)&__.v - (void *)&__)
_(h),_(e),_(l),_(l),_(o),_(space),_(w),_(o),_(r),_(l),_(d);
return &__ - &__;
}

949:デフォルトの名無しさん
16/11/12 20:04:46.68 8285RMD/.net
>>931
こりゃすごい!

今まで最短の上に可読性が高い!

950:デフォルトの名無しさん
16/11/12 20:22:45.93 X4UPo+EY.net
>>931
ideoneでもローカルでもダメだったゾ
URLリンク(ideone.com)

951:930
16/11/12 21:03:19.70 Li4gnKYC.net
>>932
ども!
でも最短じゃあないよねw

>>933
ごめん
sizeof(long)が8の環境で確認してた
struct {struct {char a,b,c,d;} a,b,c,d;} _a, _b, space, _d, _e, _f;
これでどこでも動くはず

952:デフォルトの名無しさん
16/11/12 22:58:47.72 VjO69xXO.net
>sizeof(long)が8の環境で確認してた

あれま?
paiza.IOではちゃんと動いたけど
ideoneやCodeIQではダメだったか

953:デフォルトの名無しさん
16/11/13 00:35:59.69 GDVX8Ikh.net
>>931
>数年前に同じお題を

>>915のCodeIQの問題とかじゃね?

954:デフォルトの名無しさん
16/11/13 08:49:46.08 y8U2/o7H.net
>>906
URLリンク(ideone.com)

955:デフォルトの名無しさん
16/11/13 09:05:29.71 FuKHFetX.net
お題:nビットのグレイコ^ドを生成する。

n 3
000
001
011
010
110
111
101
100
S

956:デフォルトの名無しさん
16/11/13 09:14:09.45 FuKHFetX.net
お題:nビットのグレイコードを生成する。

n=3
000
001
011
010
110
111
101
100

957:デフォルトの名無しさん
16/11/13 11:09:32.80 w9Y83CjX.net
>>939
@Mathematica

URLリンク(ideone.com)

958:デフォルトの名無しさん
16/11/13 12:26:26.96 ArrhAnA/.net
>>939 Java
URLリンク(ideone.com)

brainfuckでやろうかなと思ったが、少し考えてめんどくさくなってやめた

959:デフォルトの名無しさん
16/11/13 19:09:07.56 EpE2S11k.net
>>939
C#
URLリンク(ideone.com)

>>941
こんな短く書けるのかw
ガックリ来たわ
どういうロジックかさっぱり分からんw

960:デフォルトの名無しさん
16/11/13 20:45:37.87 qMZbrJPH.net
>>942
ニコニコ百科からの転載でアレだけどこれ抑えてれば理解できるんじゃね
>二進数を1ビット右にシフトし(先頭は0)、元の二進数と各桁で排他的論理和をとると得られる。また、1ずつ増やした場合、グレイコードで変化する桁は、二進数で0が1に変化する桁(繰り上がる先の桁)に等しい。

入力数値の分だけ1をシフトさせてやりゃ入力数値が桁数に変換できるから
あとはその桁数に達するまでforループ回して元数値と右シフト数値の排他的論理和とって2進表示し続けてる感じだと思う
無駄がなくてスマートなプログラムな感じがするけどsubstring(1)だけよく分からない

961:デフォルトの名無しさん
16/11/13 20:53:45.16 ArrhAnA/.net
>>943
指定桁数の2進数を作るのに最上位ビット捨ててる
n=3だと1xxxの文字列作って一番左削ってる感じ

printf等で指定桁数の2進数作れりゃそっち使うんだけどw

962:デフォルトの名無しさん
16/11/13 21:00:49.81 qMZbrJPH.net
>>244
桁数調整の為に一旦論理和とってから最初の1だけ捨ててるのか
勉強になりました

963:デフォルトの名無しさん
16/11/13 21:09:45.44 EpE2S11k.net
>>943
なるほどそういう定式化された求め方があるのか
グレイコードなんて大昔学校で習って以来まったく使ったことがないから知らなかったよ。
ありがとう

964:デフォルトの名無しさん
16/11/14 04:33:29.92 /TJLzgQW.net
>>939
Nim
URLリンク(ideone.com)

965:デフォルトの名無しさん
16/11/15 07:10:12.87 H9REv+Ri.net
>>906 J
hello =: noun
world =: noun
;:inv nl $~ noun

966:デフォルトの名無しさん
16/11/15 07:34:43.51 HcDSv4MP.net
>>906

ここをクリック >>906

967:デフォルトの名無しさん
16/11/15 07:52:00.92 k57TIQI7.net
次スレあるの?

968:デフォルトの名無しさん
16/11/15 15:27:30.98 Veyi95OJ.net
>>932
何が凄いのか分からん
hello worldがコード中に埋め込まれて
いるのが見えるんだが、だったら
printfでhello world書いているのと同じじゃあないの?

969:デフォルトの名無しさん
16/11/15 16:32:08.46 evn38iuN.net
>>951
printf("hello world");←これの""で囲まれてる部分が文字列リテラル
今回は文字列リテラルと数字を使わずにハロワを出力してみろってお題だからprintfでそのまま書いてたらアウト

970:デフォルトの名無しさん
16/11/15 18:08:30.22 DO3IaX9S.net
>>906のお題は文字列リテラル禁止じゃなく文字リテラル禁止だよ

971:デフォルトの名無しさん
16/11/15 18:30:01.74 evn38iuN.net
そうかそいつはすまなかった読み違えたよ
>>952の2行目の「文字列リテラル」は「文字リテラル」に置き換えて読んでくれ

972:デフォルトの名無しさん
16/11/15 18:59:50.88 DO3IaX9S.net
C言語なら
"hello world"のダブルクオートで括るのは文字列リテラルだけど
文字リテラルはシングルクオートで括るから 文字列リテラル使うprintf("hello world")は合法だよ

973:デフォルトの名無しさん
16/11/15 19:02:18.94 DO3IaX9S.net
brainfuckやwhitespaceは処理系によってはもしかすると文字リテラルや文字列リテラルあるのかもしれないけど
C言語で>>906の問題を解くなら>>931と基本同じように文字コード計算して出力するだけだから大差ないよね

974:デフォルトの名無しさん
16/11/16 06:37:25.19 NqgYpFgU.net


975:デフォルトの名無しさん
16/11/16 20:12:56.69 5Ihw572q.net
>>906
C#
URLリンク(ideone.com)
やっぱり面白くないな

976:デフォルトの名無しさん
16/11/16 21:43:19.98 h+UNZgYe.net
" "や'_'を使ってるところがウケ狙いなのかもしれないけど
確かにそんなに面白くない

977:デフォルトの名無しさん
16/11/16 22:49:50.11 opmi2l/i.net
文字コードが絡む問題は悪名高いEBCDICを真っ先に思い浮かべてしまって
その考慮がされてないとちょっと白ける部分がある

978:デフォルトの名無しさん
16/11/20 01:25:08.34 60DKtBPZ.net
>>906
ruby2

print :hello, [:s, :S].map(&:to_s).map(&:ord).inject(:-).chr, :world

URLリンク(melpon.org)

979:デフォルトの名無しさん
16/11/20 13:28:08.49 mWWihz9s.net
>>906 Haskell
URLリンク(ideone.com)

980:デフォルトの名無しさん
16/11/21 08:38:02.28 4Ckt/1Kw.net
>>906 F#

type ``hello world`` = W
printfn "%s" typeof<``hello world``>.Name

981:デフォルトの名無しさん
16/11/21 08:39:37.06 4Ckt/1Kw.net
訂正
>>906 F#

type ``hello world`` = W
stdout.WriteLine typeof<``hello world``>.Name

982:デフォルトの名無しさん
16/11/21 18:47:44.72 3NXFWxK7.net
>>939 ruby
n = 3
(1 << n).times do |v|
puts "%0#{n}b" % (v ^ (v >> 1))
end

URLリンク(melpon.org)

983:デフォルトの名無しさん
16/11/21 19:50:16.01 nCxXmPKB.net
>>935
(´・∀・`)ヘー 動く環境もあったのね

>>936
CodeIQ見たことも聞いたこともない

>>906 c
・数字つこうた
・四則演算ビット演算無し
・文字リテラル文字列リテラル無し
・移植性と他の環境で動く保障無し
#include <stdio.h>
int main() {
int is[] = {1819043176, 1870078063, 6581362};
long long lls[] = {8031924123371070824, 6581362};
puts((char *)is);
puts((char *)lls);
return 0;
}

hello world
hello world

984:デフォルトの名無しさん
16/11/21 20:56:30.60 /F1fcl9l.net
文字コードに依存するわエンディアンに依存するわ、後出しでどんだけ劣化するんだ

985:デフォルトの名無しさん
16/11/21 23:37:55.18 7dMNwwBf.net
数字もダメ
というのがルール

986:デフォルトの名無しさん
16/11/22 02:14:49.59 bN+iUVDf.net
勝手に問題作り変えちゃダメだよね
国語できなさそう


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