トピック
受付中
MIKI ifconfig

プログラム求む! (締め切りは特になし)

大会ってほど大げさではなくせいぜいfizzbuzz問題程度なのですが、もしよかったら挑戦してみてください。 1からn(nは2以上の整数)までの数字が書かれたカードがこの順で詰まれた山があり、この山に対して次の操作を繰り返して行います。 「一番上のカードを捨て、二番目のカードを山の一番下に移動する」 すなわち、第1回目の操作では1のカードが捨てられ、第1回目の操作後、山の状態は上から 3,4,5,6,..,n,2 となります。 それではここで問題です。 問題:上記のnと、i(iは1からn)を与えた時に、i回目の操作で捨てられるカード番号を返す def f(n,i) を書いてください。 完成したプログラムと「この問いを読んでから完成するまでに要した時間」を公開してください。 (回答についてはネタバレ推奨)
10そうだね
プレイ済み
返信[1]
親投稿
MIKI ifconfig
因みにこれはとある入試問題(ペーパーテスト)を翻案したものです。 この受験生はおそらく10分もかからずに解くのだろうと思われます。 私は紙と鉛筆でやって 1 時間以上かけても解けません(継続中)。ガクッ
0そうだね
プレイ済み
返信[2]
親投稿
Villit nakahara1226
(これってどんな方法でもいいんですかね?何かセオリーがあったらごめんなさい。) 多分これで問題の条件は満たしてるんじゃないかな、と思うんですけどなんか不安。 約21分です。
0そうだね
プレイ済み
返信[3]
親投稿
ちゃんと出来ているかかなり不安ですが…。 35分ぐらいかかりました。
0そうだね
プレイ済み
返信[4]
親投稿
Villit nakahara1226
あ、捨てられる番号だった・・・・また変な間違いしてしまった
1そうだね
プレイ済み
返信[5]
親投稿
Villit nakahara1226
RETURN A[0]をRETURN DUMMYに変更で大丈夫そう、だろうか
0そうだね
プレイ済み
返信[6]
親投稿
やり直し 85分ぐらいです。
0そうだね
プレイ済み
返信[7]
親投稿
いぎょ igyochan
40分……。 でも、ペーパーテストということは ……コレジャナイですね(-∀-;)
0そうだね
プレイ済み
返信[8]
親投稿
キルル2 kiruru2
ネタバレになっていなかったので一度コメント削除しました 28分です
0そうだね
プレイ済み
返信[9]
親投稿
スー thanks_0u0
数字を見ても挙動があっているかは謎ですが、8分くらいです。問題見る前からなら10分くらい(・u・) パズルゲームみたいで楽しいですねー。ひとまず他の方の回答を見て答えあわせをしようと思います!
0そうだね
プレイ済み
返信[10]
親投稿
Scratchy forun.cookie
DEF F(N,I) RETURN 2*I - (CEIL(N/2)*2)*(FLOOR(N/2)*2 < I) - !(FLOOR(N/2)*2 < I) END 40分くらい 脳内なので間違ってる可能性大です
0そうだね
プレイ済み
返信[11]
親投稿
Godot orz_127
def f(n,i) dim v[0] var j,k,l for j=1 to n push v,j next for j=1 to i k=shift(v) l=shift(v) push v,l next return k end これで良い? 見てそのままやればと思って打ち込んだ位の時間。 実機さわれないのともどかしいスマフォ入力待ち時間の合間にちょいちょい打ち込んだので所要時間沢山。
0そうだね
プレイ済み
返信[12]
親投稿
Scratchy forun.cookie
あ、致命的なミスに気が付いた··· ↑↑間違いですね
0そうだね
プレイ済み
返信[13]
親投稿
PRINTデバッグだいじ。 再帰とPUSH/SHIFTがちゃんとプチコンで動いてくれたのでコード10分、デバッグ20分くらい やっぱり3号のキーボード使い慣れないなぁ
0そうだね
プレイ済み
返信[14]
親投稿
Godot orz_127
誤:入力待ち時間 正:入力で健診の待ち時間
0そうだね
プレイ済み
返信[15]
親投稿
otta777 otta777a
スーさんの方法に近いですが一手間多いですね。デバッグ含めて50分くらい掛かりました。
0そうだね
プレイ済み
返信[16]
親投稿
しんいち stgf1080
これは、配列使って問題通りの動作をプログラムでさせてしまえば簡単だけど、数学の問題って考えると計算一発で答えを出すのがスマートなんでしょうね。 #1~100の合計をループと足し算で求めるより #(1+100)*50で求める方がスマート、みたいな とかコメントしたものの、まだ何も思い付いてません^^;
1そうだね
プレイ済み
返信[17]
親投稿
def f(n,i) s=1 t=2 x=s for j=1to i-1 x=x+t if x>n then s=s*2 x=s t=t*2 endif next return x end
0そうだね
プレイ済み
返信[18]
親投稿
↑一時間くらいです。
0そうだね
プレイ済み
返信[19]
親投稿
745Lll<3 amakoprg
30分くらいです 結構数学的に書けた感じ
0そうだね
プレイ済み
返信[20]
親投稿
しんいち stgf1080
こんな感じになりました。 配列、ループ使わないでやってみましたが、比較演算、MOD使ってる時点で数学の解答って感じではないですね^^; 解答までの時間は5時間くらいか。 #ずっとこれ考えてた訳ではないけど
0そうだね
プレイ済み
返信[21]
親投稿
MIKI ifconfig
うわ~~ 一夜にして大量の回答が!! ありがとうございます。 ざっと見配列使わずに解いてる方もいて、萌えますねwww 自分で解けた後、じっくり読ませていただきますね!! キルル2さん、自分のコメント開いてスパナのアイコンからネタバレに設定できますよ。
0そうだね
プレイ済み
返信[22]
親投稿
745Lll<3 amakoprg
奇数でこわれる……
0そうだね
プレイ済み
返信[23]
親投稿
MIKI ifconfig
入試問題そのものに興味を持たれた方もいるようなので、紹介しますね。 (※問題文そのものには著作権があるので、表現は変えてあります) 問題では n=2016 固定です。←まさかの 4 ケタだよ(絶望) (1) 1009回目の操作で取り除かれるカード番号は? (2) 1000番のカードが取り除かれるのは何回目の操作? (3) 2016番のカードが取り除かれるのは何回目の操作? (4) 2000回目の操作後に残ったカードの番号は、いずれも x で割ると y 余る。 x, y を求めよ。ただし y は 0 でない。 (5) 2015回目の操作後に残るカード番号は? 是非是非是非是非挑戦してみてくださいっっ!! (血の叫び) ((2)がまだ解けないワタシ・・・)
2そうだね
プレイ済み
返信[24]
親投稿
しんいち stgf1080
数学のお勉強もたまには楽しいですね。 #高校数学以降で挫折した者ですが^^; 最初の半分(1008まで)で奇数カードは全て捨てられるので (1) 2 (2) 1008+(1000÷2)=1508 (3) 2016 (4) 残ったカードは16枚で2016以下から大きい順の偶数だから、2016-16*2=1984~2016の偶数だから、、、え~と、、、分からん(^^ゞ (5) 2016
0そうだね
プレイ済み
返信[25]
親投稿
キルル2 kiruru2
ネタバレ化の方法を教えてくださってありがとうございます コメントの削除とほぼ同じやり方なのになぜ気づかなかったのか… ペーパーテストなんですよね? 難易度高い… 超いい加減に回答していくと (1)の答えは2 (2)の答えは1008+504+252+(1000-8)/16となって、1826 (3)は1008+(2016-2)/4なので、1008+503=1511回目 (4)はx=128,y=64 (5)は2016を越えない最大の2の乗数なので1024? 全問不正解の自信があります
0そうだね
プレイ済み
返信[26]
親投稿
745Lll<3 amakoprg
修正版です 力尽きた......
0そうだね
プレイ済み
返信[27]
親投稿
スー thanks_0u0
問題も紙とペン(正確には新規キャンバスとペンタブ)でやってみました!ゴリゴリのゴリ押しで1時間かかっちゃいましたけど、合ってるかなぁどうかなぁ。。。(´=ω= ` ) (1)2、(2)1827回目、(3)1985回目、(4)128で割ると64余る、(5)1984
0そうだね
プレイ済み
返信[28]
親投稿
MIKI ifconfig
うわっ・・・私の頭、悪すぎ・・・? みんな速いですね!! ちなみに正解は知りません(のでプログラムで確認してね!) 私の(2)の解き方はキルル2さんと同じなのだが、+-1の誤差(いわゆる境界バグ)を突き詰めるため検算中です(絶望) 745Lll<3さんがんばって!! よく読んでないけどおそらくこの学校が求めている能力はそういう方向です
0そうだね
プレイ済み
返信[29]
親投稿
Godot orz_127
途中で面倒くさくなって プチコン3号にお任せしてみたw Q4はスーさんの回答のとおり そのまま128で割ってみました。
0そうだね
プレイ済み
返信[30]
親投稿
Godot orz_127
結果。
1そうだね
プレイ済み
返信[31]
親投稿
しんいち stgf1080
www私のバカっぽさ爆発^^; 1008回までで奇数カード無くなった後、また半分捨てられて半分残る、を繰り返さなきゃならなかったんですね(捨てられるのは2で割って奇数になるカードかな)。 もうちょっとじっくり考えてみよっと。
0そうだね
プレイ済み
返信[32]
親投稿
すぎ field2050
おもしろそうなので参加です。 画面は(2)用のプログラムです。答え1827回目 (5)は1984 自信はさっぱりだったりします。 最初の関数は45分かかりました。(デバック15分)
0そうだね
プレイ済み
返信[33]
親投稿
みなつ tksm372
16時間です>< def f(n,i)  o=(n+1) div 2 '1回で捨てられる最大枚数(=奇数の枚数)  if i<=o then '1回で捨てきれれば終わり   return i*2-1 '1枚目は1, 2枚目は3, ...  else   'ここで、捨てられる奇数odd枚を全部捨てたとすると   '残りの山は全部偶数だから、数字を1/2して再帰し結果を2倍する   e=n-o '残った偶数の枚数   if !(n mod 2) then    return f(e,i-o)*2 'nが偶数のときは、次も山の先頭から捨てればOK   else    return (f(e+1,i-o+1)-1)*2 'nが奇数のときは、次の山の先頭を飛ばすため、nとiを1増やして先頭に0のカードを挟んだことにしておき、結果から1枚分引く   endif  endif end
1そうだね
プレイ済み
返信[34]
親投稿
スー thanks_0u0
みなつさんの解答が異次元のスマートさ…!(`・д´・ ;) なんか再帰でどうにか出来ないのかなーと思ったけど全く作り方がわからなかったので、正解が見れて嬉しいです(・u・) こういうカッコいいプログラムが書けるから面白いゲームが作れるのかー( ´ ω ` )
1そうだね
プレイ済み
返信[35]
親投稿
みなつ tksm372
スーさん、ありがとうございます~(*´▽`*) コメントなしバージョンもペタリ。 山が偶数枚だったとき、 1, 3, 5, ... ,n まで捨てたら、次の再帰では残った山の一番上からまた捨てていけばいいのですが 山が奇数枚だったとき、 1, 3, 5, ... ,n まで捨てたあと、次の再帰時に山の一番上にある1枚をスキップさせるにはどうしたらいいのかというところが、一番悩みました:;(∩´﹏`∩);:
1そうだね
プレイ済み
返信[36]
親投稿
スー thanks_0u0
私の頭では再帰のときの引数もわからなかったし、再帰の答えを2倍して返すっていう発想が全く無かったので目から鱗が射出されました! 自分で解いた訳でもないのにすっきり感を味わっていますー。ありがとうございます( ' u ' ) ふと、キルル2さんとMIKIさんの(2)の誤差1は、-8の1回分の足し忘れなのでは、と思いましたのですが、どうでしょう。。。(・д・)
0そうだね
プレイ済み
返信[37]
親投稿
(入試文がネタバレじゃないのでこれもネタバレなし) 最初の書き込みから(要件定義)だけだとデッキ配列を操作して答え求めるプログラム教科の試験なのかなって思ったけど、これふつうに数学科なのかなーって思ったらやっぱりふつうに数学だった。 数学な解き方をコードに落とすなら switch case で場合分けになりそうだけど、そんなことせずにBASICで数学的に解くならどうなるか、って問題になってプチコン数学オリンピック的な感じでいろいろ期待。 ※「数学オリンピック」で検索すると 数学オリンピック財団 のページから問題見れるので、ガチな問題を見たい人にはおすすめ。
0そうだね
プレイ済み
返信[38]
親投稿
Godot orz_127
Wikipediaで元ネタ?っぽい物を見つけました。 --- 継子立といふものを双六の石にて作りて、立て並べたるほどは、取られん事いづれの石とも知らねども、数へ当てて一つを取りぬれば、その外は遁れぬと見れど、またまた数ふれば、彼是間抜き行くほどに、いづれも遁れざるに似たり。兵の、軍に出づるは、死に近きことを知りて、家をも忘れ、身をも忘る。世を背ける草の庵には、閑かに水石を翫びて、これを余所に聞くと思へるは、いとはかなし。閑かなる山の奥、無常の敵競ひ来らざらんや。その、死に臨める事、軍の陣に進めるに同じ。 — 吉田兼好『徒然草』花は盛りに 「室町時代に起こった数学遊戯の1つである。」との事。
1そうだね
プレイ済み
返信[39]
親投稿
Godot orz_127
「塵劫記 江戸の数学 国会図書館」でググると出てくる国会図書館のデジタルライブラリーのページの最初の絵の右側の人が輪になって並んでいる奴で「継子立て」「継子算」と言われる和算から派生した問題っぽいと言うところまでわかりましたw
0そうだね
プレイ済み
返信[40]
親投稿
MIKI ifconfig
話は聞かせてもらったぞ!! 異次元のスマートさ・・・それは異次元世界の住人にのみ可能な能力! そして、我々が手にすることができる異次元といえばニ次元!! つまりみなつさんこそ、ニ次元の俺の嫁だったんだよ!!!
4そうだね
プレイ済み
返信[41]
親投稿
MIKI ifconfig
Godotさん これは貴重な情報ありがとうございます!! どこから出てきたのかと思ったら和算だったのか~ 出題陣恐るべし!! たんじぇさん これは大問 5 つ(制限時間60分)のうちの最初の問題です(絶望)
0そうだね
プレイ済み
返信[42]
親投稿
みなつ tksm372
にゃるほど! 私ったら、MIKIさんの二次元のお嫁さんだったのねー!(≧∇≦)キャー
5そうだね
プレイ済み
返信[43]
親投稿
Godot orz_127
一応、最初のは「ままこ立て」のWikipediaからの引用です。 2つめは算術の本で30人輪になって 15人目づつ間びいて、だったか? なんか妾が自分の子を相続させるためにその仕掛けで上手く選ばせるという物語?を昔何かで読んだ記憶も微かに。 「継子立て」は輪状に並べた碁石を等間隔に間引いて行って最後に自分の石が残ると勝ち的な数学遊びの模様。 ちゃんと調べていないので間違っているかもw 前の徒然草の「双六の石」は大河ドラマで清盛がやっていたバックギャモン的なボードゲームの盤雙六の石の事かと。 後は「継子立て」で調べると色々出てくるかと。 参考まで。
0そうだね
プレイ済み
返信[44]
親投稿
MIKIみなつCP期待! 入試系テキストみたいなのでこんな感じの問題を見た記憶だけど、もう20世紀のお話(ピーターフランクルさんとか秋山仁さんとかの時代) ああいうの受ける人は事前に入試対策で解法教えてもらってるんじゃないかなーって思ってるのです。
0そうだね
プレイ済み
返信[45]
親投稿
しんいち stgf1080
配列、ループ(再帰も)使わず計算一発で何とか出来ないかとしばらく悩んだけど、私には無理だった(>_<)。 もう少しのような気がするけど、全然な気もする^^; そもそも計算一発で出来るものなのだろうか。 どなたかがスッキリさせてくれることに期待。
0そうだね
プレイ済み
返信[46]
親投稿
異次元(いせかい)が二次元(配列)でみなつさんが二次元(配列)のMIKIさんの嫁・・・
0そうだね
プレイ済み