プログラミングのお題スレ Part6©2ch.net
乙
4 :
片山博文MZ ◆T6xkBnTXz7B0 :2014/12/11(木) 18:00:40.85 ID:Knr7owVD
お題:日本語でブラウザーの自動操作を行う簡易プログラミング言語を作れ。 その言語では、以下の4つの構文をサポートせよ。 1.ブラウザーでURL「…」を開け。 2.テキスト項目「…」に「…」を入力せよ。 3.ボタン「…」を押せ。 4.ページをファイル「…」として保存せよ。
上級者向け。インターネットエクスプローラーの有り難みがわかる出題である。
キ印参上!まで読んだ。
キチガイに見えるだろうが、しかし、Webの発達により、さような難易度が高い操作も自動化できるようになってきている。 この程度のことは、JavaScriptでも、Firefoxの拡張でも、「ブラウザーの中の人」でもできる。 さあ、凄腕ハッカー様よ、現れいずれたまえ! その雄姿を、このスレッドの歴史に刻みつけるのだ!!
8 :
デフォルトの名無しさん :2014/12/11(木) 19:13:50.25 ID:zoc9Fj/c
お題:ある固定資産の減価償却費を計算して、年度毎の金額をテーブルに格納せよ
>>8 Excel
=DB(取得価額,残存価額,現在の年度-開始年度)
お題:言語AのHelloWorldを言語BのHelloWorldに置き換えるプログラムを言語Cで書け。関数、メソッドのみの置き換えでもよい。
例:
http://ideone.com/ZAlrKz (CをCommonLispにCで。関数のみ)
マルチリンガル以外お断りという……
HQ9+をLuaでBrainCrashにかえる s = "H" s = "" print(s)
>>7 難易度というより時間とか工程数がニート級だからキチガイなんだよ
>>7 スクレイピング、スクレイピング、ヤッホーヤッホー♪
(昭和の雰囲気で)
16 :
デフォルトの名無しさん :2014/12/12(金) 00:33:12.46 ID:L50nhIUx
音声または楽器音を生成するMATLABのプログラムを作成しなさい
>>10 shのHelloWorldをEmacs LispのHelloWorldに変換するsedプログラム
% A='echo hello, world!'
% echo $A | sh
hello, world!
% C='s/echo \(.*\)/(progn (princ "\1") (terpri))/'
% B=`echo $A | sed "$C"`
% echo $B
(progn (princ "hello, world!") (terpri))
% emacs -Q --batch --eval="$B"
hello, world!
お題:入力された自然数を日本語読みにして出力しなさい 例 512 ⇒ ごひゃくじゅうに
お題1 麻雀の聴牌の待ちの形を判定するプログラム (ただし手牌は1枚、4枚、7枚、10枚、13枚のいずれかとする) 例 入力 123m45666p99s111z 出力 3p 6p 両面待ち 123m 45p 666p 99s 111z 6p 9s シャボ待ち 123m 456p 66p 99s 111z お題2 麻雀の向聴数を計算し、向聴数減少・和了に進む捨て牌候補と対応する受け入れ牌を表示するプログラム (ただし手牌はツモ等を含めた2枚、5枚、8枚、11枚、14枚のいずれかとする) 入力 123m45666p99s1112z 出力 0向聴(聴牌) 捨て牌候補 2z 受け入れ牌 36p9s 入力 123m45669p99s1112z 出力 1向聴 捨て牌候補 6p 受け入れ牌 789p2z 捨て牌候補 9p 受け入れ牌 345678p2z 捨て牌候補 2z 受け入れ牌 3456789p9s 数牌は、mは満子、pは筒子、sは索子。数字は数牌の数字をそのまま表す 字牌はzで表し1234567はそれぞれ東南西北白發中を表す たとえば4枚の満子、1m2m3m4mを持っていたら 1234m と表す
訂正 お題1 麻雀の聴牌の待ちの形を判定するプログラム (ただし手牌は1枚、4枚、7枚、10枚、13枚のいずれかとする) 例 入力 123m45666p99s111z 出力 3p 6p 両面待ち 123m 45p 666p 99s 111z 6p 9s シャボ待ち 123m 456p 66p 99s 111z お題2 麻雀の向聴数を計算し、向聴数減少・和了に進む捨て牌候補と対応する受け入れ牌を表示するプログラム (ただし手牌はツモ等を含めた2枚、5枚、8枚、11枚、14枚のいずれかとする) 入力 123m45666p99s1112z 出力 0向聴(聴牌) 捨て牌候補 2z 受け入れ牌 36p9s 入力 123m45669p99s1112z 出力 1向聴 捨て牌候補 6p 受け入れ牌 789p9s2z 捨て牌候補 9p 受け入れ牌 345678p9s2z 捨て牌候補 2z 受け入れ牌 3456789p9s 数牌は、mは満子、pは筒子、sは索子。数字は数牌の数字をそのまま表す 字牌はzで表し1234567はそれぞれ東南西北白發中を表す たとえば4枚の満子、1m2m3m4mを持っていたら 1234m と表す
なんか、最近頭の悪い人が考えそうな題が増えてきたな
それらって
>>21 全部このひと?
ほぼ確実にそうだと思う
日付変わってもID固定だといいのにね
こーいうの欲しいな→難しいな、どうしよう→あ、お題にしたら誰か作ってくれるんじゃね?俺頭いい! というのを感じる
そういう行為する連中は荒らしとして通報できたらいいのに
もう二度とこのスレに来なくなるように徹底的に叩いて追い出したほうがいいんじゃね
今後は出題時に出題者自身の解答コード(模範コード)を添付するよう義務付ければいい
そうすれば
>>25 のような得を狙った輩なんて現れんだろ
ググってピンポイントで答えが出るようなお題は悪問 ググってもピンポイントで答えが出ず自分で思考工夫しないと答えが出ないようなお題は良問
すなわち答えが既知の問題はこのスレに投稿してはいけない
>>21 のような麻雀なんて世の中にごまんとアプリが出てんだからググりゃすぐ答えがでる超悪問
気に入らなきゃ流せば(無視すれば)いいだけなのにアホか。 言っちゃ悪いけど、お前の掟(笑)をお前が守るのは勝手だが、 それを人に押し付けるなって馬鹿。 最近の若者って押しなべてこういう傾向があるよね。 甘やかされて育ってるから世の中自分を中心に回るべきと本気で思ってる。 2chでブラック企業ガーって吠えてる連中は間違いなくこういうタイプ。
36 :
デフォルトの名無しさん :2014/12/12(金) 19:59:31.47 ID:7MXQO6uw
>>21 ググれば君の作りたいアプリの答えがすぐ見つかるよ!やったね!もう2度と来んなカス
さあ、さっきからROMってばかりいるそこのキミ! 良問を書きこんでこのスレに活気を取り戻そう!
>>25 のパターンだと言語指定してくるのが普通じゃないの
>>38 結果が欲しいだけなんだから過程はどうでもいいだろ
言語指定しなかったばかりにどマイナー言語の回答しか集まらなかったらどうすんのさ
その言語を勉強して解読するのかな
前スレの819 1個または連続した2個の石を取ることを、1手とする 最後に石を取った方が勝ち つまり、最後の1手を指した方が勝ち まず石の配置を正規化した、パターンを作る 連続する'_'を一つにまとめてから、両端の'_'を削除する ('o'は石あり、'_'は石の無い所) 両端は必ず、'o'となる __o___oo_ → _o_oo_ → o_oo パターンの種類は、'o','_'の数で整理する また順列ではなく、'o'の数が右方向へ単調増加する、組み合わせとする ooo_oo_o,oo_o_ooo なども、o_oo_ooo として扱う o_o_oooo,o_oo_ooo はpat[6][2](o=6,_=2)に、リストとして保持する ただし実際には、負けるパターンだけを持てば十分 パターンは64ビットマップで表す (最大で'o'は32個、'_'は31個まで) o_oo_ooo → 10110111
43 :
42 :2014/12/13(土) 08:24:20.70 ID:3ehKG0WS
最初の数字は'o'の数。W=Win,L=Lose 0 _ L 1 o W 2 oo W, o_o L 3 ooo,o_oo,o_o_o W 4 oooo,o_ooo,o_o_oo W, oo_oo,o_o_o_o L 5 ooooo,oo_ooo,o_oo_oo,o_o_o_oo,o_o_o_o_o W, o_oooo,o_o_ooo L 6 oooooo,以下略 今自分の手番で、'o'の数をnとして、 1,2個の石を取った際に、pat[n-1],[n-2]を走査して、 相手を負けパターンに出来れば、自分が勝てる o_ooo (2個取る)→ o___o → o_o L 一方、次のパターンでは、どのような取り方をしても、 相手を負けパターンに出来ない oo_oo →(無理) o_o L このやり方で正しい?
じゃあ次の課題 「平方根関数を使わずに任意の正の整数および0の根を求めるプログラム作を成せよ」
>>44 暇つぶしの材料としては否定しないが、なんか学校の課題感ありありだなあw
大昔Pascal(笑)でそんな課題を出されたぞw
>>44 問題ではなく課題でしかないな
なめとんのか
>>45 まあやったことないけどpascalでも余裕でしょうな
>>46 気に入らなけりゃスルーしてればいいんだよ
解答例は用意してあるんであしからず
解答が出揃ったようだから添削といくか
最初に断わっておくが、問題文に平方根関数となっているのは
初心者が「pow関数なら使っていいのか」と質問した時それを拒絶するために仕込んでおいたものなのに
>>49 のような解答が出てしまうとはwwww
せめて指数対数関数を使ってほしかった
>>52 お題スレを授業スレにしようとしている精神病
お前、バカ凄る
山下さんそろそろVIPに帰ってくれませんか?
解答例 #include<iostream> using namespace std; int main(){ int a; double p,q; cout << "入力した整数の平方根を求めるプログラム\n"; cout << "正の整数を入力してください。\n"; cin >> a; p = 10; q = 1; if(a<0) {cout << "正の整数を入力してください\n";} else if(a == 0){cout << 0;} else{ while(q > 0.0001){ q = (p*p-a)/(2*p); p = p - q; } cout << "√" << a << " = " << p << "\n"; } return 0; }
どうでもいいけど
>>44 はプログラミング初歩において非常に有名な問題で
>>55 は微分使ったニュートン法による手法な
げ!精神病連投中か!!
ほかには開平法と呼ばれるテクニックもある 筆算でやるならニュートン法より断然容易 しかしプログラミングでとなると初心者ではまず無理だろう
二分法でも解けるよ。
前スレのゲキモンとかいうアプリの解法を導く奴が一番やりがいあったな
あれも質問スレに貼られてたのを転載されたものだったからね
それでも最初からこっちで人に作らせる
>>20 よりまし
麻雀なんかそこらにあり溢れてるから今更感だが
ゲキモンのやつは今ブームが来てんなら解法アプリとか売れるし
より
>>25 ぽいけどなあ
解答1問につき100円だっけ?
仮に
>>21 の奴が
>>25 で無かったとしても
問題を解くのに必要な麻雀の基本ルールも書かず出題するのは不適当だと思う
麻雀知らない奴は問題に挑戦できないわけだし
麻雀は万人が知っているようなゲームじゃない
>>66 なんか絵に描いたような今時の若者(自己中心バカ)の思考で笑えるなw
>>67 君は頭の悪さが文章に滲み出てるよ
馬鹿にされて頭に来て出てきちゃったの?
クリスマスなせいかどの板のどのスレも殺伐としてるな
クリスマスが気になるうちは素人
>>66 別にguess系のようにルールを伏せているわけじゃないし
こういうスレなんだから事前に調べるのでもおkでしょ
激問の方が麻雀よりも認知度は低いと思いますが前スレの出題にはルールは書かれていませんでいたよ
ルール説明するYouTubuの動画のリンクが貼ってあったじゃん
>>72 それをクリックして初めてルールを知ることができるんだろ?
何やら言ってるけど単に自分が楽しめたかどうかだけに見える
75 :
名無しさん@そうだ選挙に行こう :2014/12/14(日) 15:39:44.92 ID:rKAd2b/X
激問は良問。 ルールはシンプルで解くのは易しくない。 ルービックキューブ、15パズル、オセロに匹敵。 いままで人類がこのゲームを発見しなかったのが不思議。 速度的に良いのはできてないと思う。 ルールわからなくてできないのはいる?
ゲキモンの広告スレかよここ
スライドパズルの変形でありながらルールの性質上実物のコマを使ってやるには不向きだから 思い付いたとしても広まらなかっただけだろというか 電子ゲーム時代になってからは類似のものはよくあって アクションやRPGのちょっとした謎解きにも出てくるレベル 正解率が表示されるとか魅せ方の部分が大きいとは思うが
|=番兵|_ ( ・ω・) < オハヨウナノン 〇={=}〇 |::::::::::\ 、、、し 、、、(((.@)now、snow、、snow
お題:以下の数式のそれぞれの□に 0 〜 9 のいずれか一つを入れて数式を成立させたい。 ただし、一つの数字を二つ以上の□に入れるということはできないとする。 整数の左端に 0 がある場合はそれを略す。例えば「012」は「12」に等しいとする。 □×□□+□□□=□□□□ 数式を成立させるような整数の組の総数を求めよう。
>>79 J
f =: 3 : 0
c =. 0
for_i. (i.!10) do.
a =. i A. '0123456789'
w =. (". 6 7 8 9 { a) = ((". 0 { a) * (". 1 2 { a)) + (". 3 4 5 { a)
c =. c + w
end.
c
)
f ''
350
>>76 一方スマホアプリ板の本スレはあまり伸びてないらしいという
そもそもスマホの主なユーザ層の若い世代は2chをあまり見ないのでは…?
つか専用スレが立つくらいなら 相応の支持のあるゲームですよねえ
|=番兵|_ ( ・ω・) < ステンバーイ 〇={=}〇 |::::::::::\ 、、、し 、、、(((.@)ce、、ice、snow、、ice
86 :
42 :2014/12/17(水) 03:14:38.33 ID:ofMhppYe
>>42-43 前スレの819の問題で、誰もこのやり方で、
負けパターンのリストを、作らずに解いたの?
誰か、リストを作って解いた人いる?
前スレに貼り付けられた回答コードを見てけばいいんじゃないの
88 :
デフォルトの名無しさん :2014/12/17(水) 07:41:39.90 ID:LOGJmD8X
お題: 15パズルの問題を高速に生成するプログラム。 基本形に到達できる入れ替えに限る。
>>90 バレたか。 ネタ元は、
新潮選書 「3」の発想 数学教育に欠けているもの 単行本 – 2009/10/24
芳沢 光雄 (著)
>>91 なるほど。
問題生成なんかより解なし解ありの判定のほうがお題として面白かったんじゃなかろうか
97 :
デフォルトの名無しさん :2014/12/22(月) 18:56:01.25 ID:/5mhYHra
最短手順が長い問題を生成
>>92 ゲーム理論と算数で解けてるから数学なんてかんけーねー。と主張したい俺ダメ人間。
数学怖い。
お題:要素数が3個の整数のリスト同士を位置に関係なく要素を比較したとき 一致するものが2個、一致しないものが1個となるかどうか判定する。 例 [1,2,3],[5,6,7] -> 偽 [1,1,1],[1,1,2] -> 真 [1,1,2],[2,2,1] -> 真 [9,8,9],[8,6,4] -> 偽 [9,7,2],[2,2,9] -> 真
[123][123]=?
>一致するものが2個、一致しないものが1個となるか [123][123]=偽
>>99 なんか手ごたえなさ過ぎてやる気出ないよそれ...
学校の宿題と言われても納得のレベル
>>99 ソートしてから前から走査すればいい
おわり。はい次。
[1,1,1],[1,1,2] -> 真 これは一致している数字は 1 だけなのに何で真なんだ? [1,1,2],[2,2,1] -> 真 これも分からん。1 も 2 も両側にあるから、一致している数字は 2 個で一致しない数字は 0 個では?
>>107 要素の並び順を考慮しないだけであって
要素の重複は別途数えるってだけっしょ
考え方としては一致したものをリストから除いていくと考えればいいんじゃね
[1,1,1],[1,1,2] -> 1が一致 [1,1],[1,2] -> 1が一致 [1],[2] -> 残り不一致 -> 一致するものが2個、一致しないものが1個なので真
[1,1,2],[2,2,1] -> 1が一致 [1,2],[2,2] -> 2が一致 [1],[2] -> 残り不一致 -> 一致するものが2個、一致しないものが1個なので真
科学技術計算的に必要なのかねー??自分もさっぱりだ。
111 :
デフォルトの名無しさん :2014/12/24(水) 16:37:29.43 ID:ioNhDOiv
縦横8*8 マスのチェス盤の、 左上の角の位置に、ナイトがある その位置を開始点として、 そこから移動できるすべてのマスへの、最短手を答えよ ナイトは1手で全方向へ、縦1横2、または縦2横1へ移動する 例えば、(5,5)の位置から、(4,3)(7,6)などに移動できる 仮に開始点を、(0,0)とすると、(1,2)(2,1)は1手で行ける
お題: A君とB君は二人三脚で100mの直線コースを走る。 コースの途中には赤と青の旗が10本ずつ置かれており、 それぞれ1番から10番までの番号が書かれている。 ただし、旗の位置や番号の並びはランダムである。 A君は赤の旗を、B君は青の旗をそれぞれ番号順に すべて取らないとゴールできない。各旗の位置が 与えられたとき、2人は最短で何m走る必要があるか求めよ。 10,20,30,40,50,60,70,80,90,99, 90,80,70,60,50,40,30,20,10,1, => 278 (0->90->1->100の順に走る)
>>99 Io
f := method(a, b,
for(i, 0, 2,
c := 0
for(j, 0, 2, if(a at(j) == b at((i + j) % 3), c = c + 1))
if(c == 2, return(true))
)
false
)
Io> f(list(1,2,3),list(5,6,7))
==> false
Io> f(list(1,1,1),list(1,1,2))
==> true
Io> f(list(1,1,2),list(2,2,1))
==> true
Io> f(list(9,8,9),list(8,6,4))
==> false
Io> f(list(9,7,2),list(2,2,9))
==> true
>>109 プログラミング初心者に出す課題としてはまぁまぁの問題ではある
実用性うんぬんというなら統計データで特定の条件のデータを抜き出したいという事態に応用が・・・というくらいか?
チマチマ比較せずに、順列を入れ替えた6通りの比較を並列にやって、一個でも ヒットしたらtrueでいいだろ。
>>113 これ↓のように置いて隣の数値との差を順番に足しこんでいくだけじゃねーの?
0,10,20,30,40,50,60,70,80,90,99,100
0,90,80,70,60,50,40,30,20,10,1,100
訂正、差じゃなくて、差の絶対値な
>>114 失敗した。間違っているのでこのコードは取り下げます
124 :
デフォルトの名無しさん :2014/12/25(木) 05:02:38.89 ID:172BCr7q
激問いまから始めたけど、一手戻す局面を生成するのが面倒だな。 前スレでだれかいってたけど。 やればできる程度だけどミスや速度面で問題でやすそう。
>>99 Squeak Smalltalk
| fn |
fn := [:a :b |
(a inject: b asBag into: [:rest :x |
rest remove: x ifAbsent: []. rest]
) size = 1
].
fn value: #(1 2 3) value: #(5 6 7). "=> false "
fn value: #(1 1 1) value: #(1 1 2). "=> true "
fn value: #(1 1 2) value: #(2 2 1). "=> true "
fn value: #(9 8 9) value: #(8 6 4). "=> false "
fn value: #(9 7 2) value: #(2 2 9). "=> true "
>>99 Haskell
import Data.List
f xs ys = if 1==length(foldr delete xs ys)then True else False
f[1,2,3][5,6,7] --false
f[1,1,1][1,1,2] --true
if式要らなかったわ。
>>124 1. 現局面から逆向きに動かせるブロックを列挙(ex. 1/2/3)
2. すべての動かしかたに対して(ex. 1/2/3/12/13/23/123)
-2-1 動かすブロックのみを逆に動かしてみる
-2-2 動かしてみた局面全体を順に動かしてみる
-2-3 順に動かした局面が現局面と同じなら、正しい一手戻り局面として登録
としてるけど、ほかにいい方法あるかな?
激問は禁止でいいんじゃなかろうか
>>99 Io
f := method(a, b,
b foreach(v,
p := a indexOf(v)
if(p, a removeAt(p))
)
a size == 1
)
>>129 俺は幅優先検索をスタート、ゴール両側からやって。
ゴール側は一々ゴールに戻れるか手順を完全に逆戻りして検証してる、凄い無駄。
スタート側からだけ検索をかけた方が早かったりorz。
今気がついたけど今までの手順で戻れることが解ってるから新たな一手の検証で
いいだな、我ながら脳味噌腐ってやがるw。
問題によってはメモリ(16GB)使い果たしてOSから死ね(kill singnal 9)って言われる。
OS X,Gaucheで実装。
>>130 アプリの本スレでもおなじ話題になってるから、
ゲキモン話したい奴らはスマホアプリ板に行けばいいと思う
ゲキモンゲットーだぜ
135 :
デフォルトの名無しさん :2014/12/26(金) 04:46:12.78 ID:fnDLLhrS
なんでゲキモンダメだよ? 専用スレ・携帯板こそ、プログラムでなく人動でゲームとして遊ぶスレではないのか。
>>111 Io
f := method(i, n,
if(n > 6 or a at(i) < nil, return )
a atPut(i,n)
list(-25, -23, -14, - 10, 10, 14,23, 25) foreach(v, f(i + v, n + 1))
)
a := List clone setSize(144) map(0)
for(i, 26, 110, 12, for(j, 0, 7, a atPut(i+j,9)))
f(26, 0)
for(i, 26, 110, 12, for(j, 0, 7, a at(i + j)print) writeln)
----
03232345
34123434
21432345
32323434
23234345
34343454
43434545
54545456
単一ゲームの解法を探すスレではないだろ
139 :
デフォルトの名無しさん :2014/12/26(金) 15:34:07.54 ID:fnDLLhrS
ゲキモンの戻す手はこれが最善では? 一列の一方移動だけを予め計算しておけば、回転、反転と列・行の合成で全体移動は簡単に求まる。 8マスに空、パネル、壁の3種がある場合の数は3^8。 それら全ての順方向移動を計算して、移動後の形をインデックスとした配列を求める。
>>99 J
f=: 4 :'+./ 2 = +/"1 x ="1 (i.(! # y)) A. y'
1 2 3 f 5 6 7
0
1 1 1 f 1 1 2
1
1 1 2 f 2 2 1
1
9 8 9 f 8 6 4
0
9 7 2 f 2 2 9
1
お題 : 四つの文字 F, G, +, - から成る文字列を次の規則 (1), (2) によって次々と書き換えていくことを考える。 ( 一つの文字列に対して規則 (1) と規則 (2) を同時に適用して新しい文字列を得る。その文字列に対してまた規則 (1) と 規則 (2) を同時に適用して新しい文字列を得る。以下同様に繰り返す。 ) 規則 (1) … F は F-F-F-GG に変換する、 規則 (2) … G は GG に変換する。 初期文字列 ( 第 0 ステップの文字列 ) を F とする。第 1 ステップの文字列は F-F-F-GG となり、第 2 ステップの文字列は F-F-F-GG-F-F-F-GG-F-F-F-GG-GGGG となる。第 8 ステップの文字列を求めよ。
143 :
141 :2014/12/27(土) 04:52:03.50 ID:wAgkNNIo
+ は旅に出たので探さないでください…
整数 N が与えられた時に 1 2 3 4 5 6 7 8 9 10 = N に、適当に + - * / や ( ) を入れて = N に出来るかどうか判定する。 例えばこんな感じ。 (1+(-2))/(-3)*(-4)*(-5)*(-6)*(-7)-(-((+(8*(-9)))*(-10))) = 1000 数字の間に何も入れずに 1 2 3 を 123 と解釈するのは無し。 あんまり面白くないかな。
カッコの処理がメンドくせーなぁ。うーん。
カッコは連結順序を変えるだけ
151 :
デフォルトの名無しさん :2014/12/27(土) 21:55:24.27 ID:2dHAjI9B
逆ポーランド
数字の前後に挿入可能な演算記号を総当たりで入れていく。 枝刈りで計算量を抑える。具体的にどうするかは知らん。 演算は加減乗除だけかな。べき乗とかルート記号とか 対数とか剰余とか使えそうな記号なんでも使っていいと なると大変かな。Nも有理数や実数まで範囲を広げると大変かな。
153 :
111 :2014/12/27(土) 22:13:05.21 ID:u+dBZrZs
>>138 ナイトは八方桂馬のこと。
全方向(八方)へ、縦1横2、または縦2横1へ移動できる
例えば、(5,5)の位置から、(4,3)(7,6)など8か所へ移動できる
数式をツリーで表現するのは割と簡単でも、結局総当たりでしか解けないから いまいち面白くないな。 あと全部の組み合わせを列挙すると膨大になるのと、ツリーを式に変換するのが以外と難しい。
>>154 演算子の優先順位の比較に従ってカッコを付けるかどうか決める
木構造をなめるのは再帰を使う
お題:関数fの引数aが空リストである時, f(a)が値を返すなら真を返し, f(a)が値を返さないなら偽を返す関数jdを作れ (作れない時はプンプン怒れ.ただし俺に怒りを向けないでほしい) 例1 関数f1の場合, f1(a) = if (a is empty list) then answer("empty list") else answer("not empty list") f1は空リストに対し値"empty list"を返すので jd(f1) -> 真 例2 関数f2の場合 f2(a) = f2(a) f2は全ての引数に対して値を返さないので jd(f2) -> 偽
>>157 補足
関数jdは部分関数ではなく完全関数として定義すること
>>157 shell
function jd() { $1 | timeout $((548 * 10 ** 10))d grep -q "." }
お題: 年越し問題 以下のように「煩」「悩」「空」の文字が8×7に配置されている(あなたの頭の中である) 煩悩煩悩煩煩悩煩 煩煩悩空悩悩悩悩 悩空悩空悩空悩煩 空煩煩悩悩悩煩煩 悩悩悩煩悩煩煩悩 煩悩空空悩煩悩煩 煩煩煩悩煩空悩煩 任意の文字を「鐘」に変えて、 縦・横・斜めに「煩」と「悩」が隣接しないようにしたい 最小の「鐘」の数を求めよ これはNG(斜めに「煩悩」がある) 空悩 煩空 これはOK 煩鐘悩 煩鐘悩
あれ、なんかおかしいわw
>>162 明らかにおかしかった初期化バグは退治された。
だけど結果は合ってんのかこれ。
166 :
片山博文MZ ◆T6xkBnTXz7B0 :2014/12/29(月) 05:19:20.46 ID:k/a0XR+r
お題:お使いの言語で次の計算を確かめる。 -zero * +inf == ? +inf + -inf == ? -inf / -inf == ? -nan * +zero == ? +zero * -zero == ? +nan - +nan == ?
お題:前に詰めた 初売りのためにお客さんが並んでいます。 店の前の32マスにはお客さん(i)、空き(.)、警備員(P)がいます。 ← 前 店 iii.ii.i..ii..P.ii..i..Pii.ii... 混んできたので一歩前に詰めてもらうことにしました。 前方のお客さんから順に前に空きがあれば一歩前に進んでもらいます。 空きが複数あっても、進むのは一歩だけです。 警備員は動かず、お客さんは警備員を越えられません。 店 iii.ii.i..ii..P.ii..i..Pii.ii... ↓ 店 iiiii.i..ii...Pii..i...Piiii.... さて、前に詰めた状態が与えられたとき、 詰める前にあり得たすべての状態を示してください。 たとえば、以下のようにあり得た状態がない場合もあります。 店 ......iP(以下略)
>>169 バレたw
こうすればいいのかなと思ってw
171 :
デフォルトの名無しさん :2014/12/29(月) 11:46:02.05 ID:Ms14FqLW
馬鹿には無理
激問の他力本願野郎はいい加減消えろよ
174 :
デフォルトの名無しさん :2014/12/29(月) 21:20:23.49 ID:hrQe0PF1
ゲキモンは解かせたい奴がいて、そいつが一人で張り切ってるというわけではないだろ? 自分もやってみようとしてるけど完成までいってない。 ルールは簡単で、探索部分は各種ゲームに共通して高速化などの工夫するモデルとして適当。
お題を出すからには模範解答を用意しとけって話だよ
それはそうだ。
プログラミングのお題スレ Part6©2ch.net
解けるのが確かなら、模範解答はいらんけど
解答付ける場合は模範でなくてもいい気が
>>178 解けるのが確かなら、模範解答は作れるはずだけどな
>>180 煩煩煩煩煩
煩悩悩悩煩
煩悩煩悩煩
煩悩悩悩煩
煩煩煩煩煩
こういう形だと9個鐘にならん?
>>182 なっちゃうねw
根本的に考え方が間違ってるのか...
184 :
168 :2014/12/29(月) 22:59:36.09 ID:iQoYiA7Z
というか激問は荒れるからサヨナラしたい
>>111 みんな、番兵・優先度キュー・ダイクストラなどを、
使って解いたの?
>>42-43 連続した空所(石の無い所)を、1つにまとめたり、
両端の空所を削除して、
石のパターンを正規化して保存して、解いた人いる?
__o___oo_ → _o_oo_ → o_oo
>>148 誰かお願いします。
こういうのはどんなデータ形式で問題を表現すれば良いのでしょうか?
>>188 一応書いたけど組み合わせ爆発起こして永延と計算し続けるw
カッコなかったら、10!^4くらいで終わりそうなんだけど、かっこあったらいくらでも変化有るので厳しい。
9個の演算子の組み合わせが94143280通り 括弧によって演算順が任意になるので これを数字の入れ替えで対応して3628800通り 合わせて341627134464000通りじゃない?
>>184 negaいらない
51 unsigned long b = min;
69 } while (b = ((b | nega) + min) & move_R);
↓
51 unsigned long b = move_R;
69 } while (b = (b - min) & move_R);
195 :
デフォルトの名無しさん :2014/12/30(火) 22:23:27.48 ID:tRloJVn4
>>193 括弧を自由に使えて演算の順序は自由に入れ替えできるんだから
結局等価な二分木で考えて良いってことじゃないか。
そうすると、二分木の形の組み合わせが10 * (9!) * (9!) / 2 通り、
最初の10コの数字を除くノードの数は45、ノード(演算子)の種類は+、*、/の3つ、
符号(-)の組み合わせがノードごとに4通りだから、
5 * (9!) * (9!) * 45 * 3 * 4 = 355,541,114,880,000
このぐらいかなあ。
1 2 3 4 = Nの場合だと N=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19,20,21,23,24,25,28,36の25個(負数入れたら49個)で合ってるかな?
>>196 終わらんなー。一目見て嫌気がさすわけだ。
(((((((1+2)+3)+4)-5)*6)+7)*((8+9)+10)) = 999 ((((((((1+2)+3)+4)+5)+6)+7)+(8*9))*10) = 1000 -((((((1+2)+3)+4)-5)+6)*((7-8)-(9*10))) = 1001 -(((1+2)*3)*((4-((5*(6+7))*(8+9)))-10)) = 9999 (((((1+2)+3)+4)*((5+((6+7)*8))-9))*10) = 10000 (((1+2)/3)+((4*5)*((6+((7*8)*9))-10))) = 10001 こんなん出来たが不必要な括弧を消していないw 1 2 3 4 5 6 7 8 = Nだと探索完了(Nが見つからなかった場合)まで5,732ms 1 2 3 4 5 6 7 8 9 = Nだと探索完了まで159,835ms 1 2 3 4 5 6 7 8 9 10 = Nだと…?
ここの人ってCodeforcesやTopcoderはやらないの? Topcoderスレ過疎ってて寂しいんだけど。
プロコンはtwitterのイメージだが
((1+2+3+4-5)*6+7)*(8+9+10) = 999 (1+2+3+4+5+6+7+8*9)*10 = 1000 -(1+2+3+4-5+6)*(7-8-9*10) = 1001 -(1+2)*3*(4-5*(6+7)*(8+9)-10) = 9999 (1+2+3+4)*(5+(6+7)*8-9)*10 = 10000 (1+2)/3+4*5*(6+7*8*9-10) = 10001 括弧を整理して出力するようにしたらこうなった ところでコードは出題者の模範解答が出るまで貼らない流れなの?
>>202 数式の無駄な括弧を除去する
にはどうするんですか?
正規表現とか使うんですか?
>>194 ほんとだ
129で移動候補が少ないほうから列挙されてたから考えずにそう作ったっぽい
ありがとう
直した
http://ideone.com/pP7FSv 馬鹿には無理とか他力本願野郎とか模範解答出せとか言ってた方々は
コードも書けない非効率なとこも指摘できない口だけ野郎なんですかね
>>205 >コードも書けない非効率なとこも指摘できない
気持ちはわからないわけでもないが、それは「QZ化」と呼ばれる変態変化(へんげ)の兆候だ
自重したまえ
>>203 括弧付きの式から何とかするのではなく、合成時の場合分けで何とかした。
211 :
160 :2015/01/01(木) 01:45:24.44 ID:bYpQjJS4
>>160 の回答ですが、答えは22です
探索して解くことを想定していましたが、
別の方法で簡単に求められてしまいました
愚直に探索すると5秒くらいかかります
宋って人、わりとまともなこと言うことが多いけど、 こういう話になるとなぜか共産主義みたいなこと言うよな。
共産主義はあなたの嫌いな思想の総称ではないぞい
まだこういう一つのメソッドに全部突っ込むスタイルの人っているんだなw
これを分けて、分かりやすくなるのかな……
217 :
デフォルトの名無しさん :2015/01/02(金) 19:36:46.74 ID:C0yW4Jjr
ジャップによるtopcoderのパクリサイト?
>>141 Io
f : =method(n,
s := "F" asMutable
n repeat(s = s replaceSeq("G", "GG")replaceSeq("F", "F-F-F-GG"))
)
お題:「2以上の自然数nについて 2^n-2 がnで割り切れるときnは素数である」の反例を探す。
>>220 (define (reigai limit)
(let loop ((n 2) (result '()))
(if (> n limit)
result
(loop (inc n) (if (and (zero? (modulo (- (expt 2 n) 2) n)) (not (prime? n)))
(cons n result)
result)))))
>>141 J
f =: 4 : 0
;@(('F-F-F-GG';'GG';'-') {~ 'FG-'&i.)^:(x) y
)
2 f 'F'
F-F-F-GG-F-F-F-GG-F-F-F-GG-GGGG
# 8 f 'F'
29011
>>220 Emacs Lisp
(defun hanrei (upto)
(let ((n 3) l)
(while (<= n upto)
(when (and (= (let ((i n)
(r 1))
(while (> i 0)
(setq r (% (* r 2) n))
(setq i (1- i)))
r) 2)
(eq (let ((n n))
(when (= (% n 2) 1)
(let ((i 3)
(r t))
(while (> n (* i i))
(when (= (% n i) 0)
(setq r nil n 0))
(setq i (+ i 2)))
r))) nil))
(push n l))
(setq n (1+ n)))
(reverse l)))
(progn (setq result (hanrei 100000)) nil)
nil
(length result)
78
(nthcdr 51 result)
(42799 46657 49141 49981 52633 55245 57421 60701 60787 62745 63973 65077 65281 68101 72885 74665 75361 80581 83333 83665 85489 87249 88357 88561 90751 91001 93961)
再帰が苦手なLisp環境もあるんですよぉ
へ?Emacs Lispだろ? 勉強すれば?
>>220 Io
powerMod := method(a, b, m,
r := 1
for(i, 0, b log2 floor, if(b at(i) == 1, r = r * a % m); a = a * a % m)
r
)
isPrime := method(n,
if(n isEven or n < 2, return(n == 2))
for(i, 3, n sqrt floor, 2, if(n % i == 0, return(false)))
true
)
isPrime2 := method(n,
if(n == 2, (2 ** n - 2) % n == 0, powerMod(2, n, n) == 2)
)
f := method(z,
for(i, 2, z, if(isPrime(i) != isPrime2(i), i println))
)
Io> f(1000)
341
561
645
>>226 は素数の二乗を誤って素数と判定していました。
誤 (> n (* i i))
正 (>= n (* i i))
>>227 繰り返しを使わないように書き直してみました。
私の環境だと10585と11305の間でSEGVが発生してしまいました。
(require 'cl-lib)
(defun hanrei (upto)
(let (l)
(cl-labels ((f (n)
(when (<= n upto)
(when (and (= (cl-labels ((f (i r)
(if (<= i 0) r (f (1- i) (% (* r 2) n)))))
(f n 1)) 2)
(eq (when (= (% n 2) 1)
(cl-labels ((f (i)
(if (< n (* i i)) t (when (/= (% n i) 0) (f (+ i 2))))))
(f 3))) nil))
(push n l))
(f (1+ n)))))
(f 3))
(reverse l)))
(let ((max-lisp-eval-depth most-positive-fixnum) (max-specpdl-size most-positive-fixnum)) (hanrei 10703))
(341 561 645 1105 1387 1729 1905 2047 2465 2701 2821 3277 4033 4369 4371 4681 5461 6601 7957 8321 8481 8911 10261 10585)
(let ((max-lisp-eval-depth most-positive-fixnum) (max-specpdl-size most-positive-fixnum)) (hanrei 11054))
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
>>211 ああん!はまったよぅ‥
std::set に与える比較関数 operator<() を間違えていた‥これで6時間無駄にしたか‥
ふと画面をみると
煩悩煩悩煩煩悩煩煩煩悩‥うるさいわい!
当分年は越せないようだ‥
>>220 Squeak Smalltalk
| ans |
ans := OrderedCollection new.
2 to: Float infinity do: [:n |
| m |
m := (2 raisedTo: n) - 2.
(m isDivisibleBy: n) ifTrue: [n isPrime
ifFalse: [(ans add: n; size) = 24 ifTrue: [^ans asArray]]]
]
=> #(341 561 645 1105 1387 1729 1905 2047 2465 2701 2821
3277 4033 4369 4371 4681 5461 6601 7957 8321 8481 8911
10261 10585)
>>220 pow(2, n-2)は奇数で割り切れるわけないじゃんね。
どういう意味ですか?
もしかして−1なんですね
偶数は素数じゃないじゃん(2以外)
n=3の場合 2^n-2 = 6 6 % 3 = 0
なるほど。ありがとうございます
すまんな 爆笑!!
341 561 645 1105 1387 1729 1905 2047 2465 2701 2821 3277 4033 4369 4371 4681 5461 6601 7957 8321 8481 8911 10261 10585 11305 12801 13741 13747 13981 14491 15709 15841 16705 18705 18721 19951 23001 23377 25761 29341 30121 30889 31417 31609 31621 33153 34945 35333 39865 41041 41665 42799 46657 49141 49981 52633 55245 57421 60701 60787 62745 63973 65077 65281 これで良さそう
おまえ、きえろ 荒らしに等しい
誰にもかまってもらえないの。 かまってかまって。
246 :
デフォルトの名無しさん :2015/01/09(金) 02:03:51.89 ID:TIj1I4KF
お題。「ビルゲイツの面接試験」2003を変形。 入社目安、5分?? 今、ABCDの4人はStart地点におり、 そこから全員がEnd地点へ、最短時間の17分で行く方法は? 条件 1.S,E間には、橋が架かっており、 同時に橋を渡れるのは2人まで 2.橋を渡る際には必ず、1つしかない懐中電灯を持って、 照らしながら渡る (最後以外は、誰かがEに行っても、Eにいる誰かが、 懐中電灯を持って、Sに戻るという意味) 3.2人で橋を渡る際には、時間が掛かる方へ合わせる 橋を渡るのに、各人が掛かる時間(分)は、 A:1,B:2,C:5,D:10
AB渡るA戻るCD渡るB戻るAB渡る
>>246 Squeak Smalltalk
| S E steps queue results |
S := {#A->1. #B->2. #C->5. #D->10} asOrderedCollection.
E := Set new.
steps := OrderedCollection new.
queue := OrderedCollection with: {S. E. steps}.
results := OrderedCollection new.
[queue notEmpty] whileTrue: [
S := queue first first.
E := queue first second.
steps := queue removeFirst third.
S combinations: 2 atATimeDo: [:pair |
| currS currE step currSteps |
currS := S copy. currE := E copy. currSteps := steps copy.
currE addAll: (currS removeAll: pair).
step := (pair collect: #key) -> (pair detectMax: #value) value.
currSteps add: step.
currS ifEmpty: [results add: currSteps asArray] ifNotEmpty: [
currSteps add: (currS add: (currE remove: (currE detectMin: #value))).
queue add: {currS. currE. currSteps} deepCopy
]
]
].
^results detectMin: [:each | (each collect: #value) sum]
=> {#(#A #B)->2 . #A->1 . #(#C #D)->10 . #B->2 . #(#A #B)->2}
249 :
デフォルトの名無しさん :2015/01/11(日) 01:43:47.65 ID:jQsmpaL2
総当たりでプログラミングしたいんだが、どうすればよい? 途中の分岐も覚えておいて、総当たりしたい BackTrack法? PathTree? (S,E)(ABCD,nil) → SE(AB) SからEへ 6通り (CD,AB) → ES(A) EからSへ 2通り (ACD,B) → SE(AC) 3通り (D,ABC) → ES(A) 3通り (AD,BC) → SE(AD) 1通り (nil,ABCD)
俺なら普通に再起処理で組むけど。
251 :
249 :2015/01/11(日) 02:23:07.83 ID:jQsmpaL2
再帰か?一本道ならわかるけど、 f(){f()} 6*2*3*3*1 通り 分岐するから、わからんw
【お題】 M円の買い物をしたときに、やりとりする通貨の枚数を最小にするには いくら支払えばよいか?使用できる通貨の枚数に上限はないものとする (例1) M=108 → 110円 お釣りなく支払う場合、硬貨が5枚必要 110円で支払うと、支払い2枚、お釣り2枚の合計4枚で済む (例2) M=555 → 555円 お釣りなく支払うのが最小枚数の3枚 (例3) M=9999 → 10000円
また宿題?
通貨(即位記念10万円コイン)
クレカや電子マネーなら常に0枚
俺のチンポ使用料は一億円
vectorはTが同じだったらoperator=が定義されてるよ。
はい、コピーメソッドは不要ですね
あとjのループは初期値iでした
267 :
デフォルトの名無しさん :2015/01/14(水) 02:51:17.19 ID:LgbjfHh9
こういう文字列が与えられるので□の中に+/*-のどれが当てはまるか出力しろ スペース区切りで出力しろ 解が複数ある場合は、改行区切りで出力しろ 出力サンプル Q: 8□3=24 A: / Q: 2□4□10=-4 + -
なんかやだ
♪割っちゃった〜!(空耳アワー)
お題: conwayの数列の第n項を求めるプログラムを書いてください。 3,13,1113,3113,132113,... 数列の意味は 最初は3が1個なので{1,3}です。 今度は1が1個で3が1個なので{{1,1},{1,3}}です。 次は1が連続して3個並んでいて、3は1個なので{{3,1},{1,3}}です。 以下同様の手順です。
1:1 2:2 3:4 4:4 5:6 ... 50:1040344 すっごく長くなる?
つまんなそうだからパス
What is the size limit for the source code, input and output? 64 kB. これに引っかかってるんだな
281 :
273 :2015/01/17(土) 08:33:39.09 ID:0LKV4/k2
お題: 273の追加です。第n項の数はCλ^nに近いそうです。 Cは定数で、λは λ=1.30373208460257638390068004051191852322256526861420... です。確かめてください。
w
お題: 数x,yについて、xから+−y以内の有理数のうち もっとも簡単なものを求めるプログラムを書いてください。 簡単であるとはr1=p1/q1, r2=p2/q2(既約分数)について |p1|<=|p2|かつ|q1|<=|q2|のとき、r1はr2より簡単とします。 2/3 は3/5より簡単です。 例えばx=0.3, y=1/10のときには答えは1/3となります。
>>284 間違えてた (eleven が 次で two one にならない) けど修正すぐだし許してつかあさい
>>287 それは比較不能。
しかし、一定の区間において必ず両端より簡単な有理数が
ひとつ存在するはず。
ああ、間違えた。端っこの場合もある。 0=0/1 と考えてほしい。
>>290 実数ってことにして。
複素数までいれるとそもそも大小比較できないし。
符号の扱いも不明瞭だよね。
実数だからもちろん正負ありだよ。
コンピューターが扱える範囲の実数ってことにして。 難しく考える人がいるといけないので。
既約分数って制約がついてるから(-1)/(-3)は不可ってのは良いとしても、 -(2/5)と-(1/5)はどちらがより簡単なんだろう。 (-2)/5と(-1)/5と考えると-(2/5)の方が簡単。 2/(-5)と1/(-5)と考えると-(1/5)の方が簡単。
>>273 オレ様仕様言語
https://ideone.com/W3MqDO 出題者でございます。お騒がせしております。
自前の処理系のテストにconwayの数列を使ってました。284さんと答え合わせを
させてもらいました。自由半群という数学を応用した方法があるそうです。
>>281 は普通には計算困難なのですが誰かうまい方法でやりきる人がいるかも
とお尋ねしてみました。
来年の今日の東京の天気の降水確率を予想するプログラムを書け
>>281 出題者です。すみません。訂正です。
どうも第n項の数字の数、つまり桁数のことを言っているようです。
そこに漸近するということは桁数が収束するのかもしれません。
>>298 あってます。
素晴らしい。こんな短時間で。
305 :
298 :2015/01/18(日) 07:08:27.08 ID:LDt5umkO
285の出題者です。 ひょっとしてみなさん、総当りで分子分母を探索してます? もしも、そうだったらもっと効率の良い方法を検討してみてください。
嫌です
お題: 10桁以下の10進数の自然数を対象とします。 各桁の数を上位からdnとしこれについてn番目の素数pn とのpn^dnの積を返す関数fを考えます。 f(x)=p1^d1*p2^d2*...*p10^d10 例えばf(402) = 2^4*3^0*5^2=400 です。 f(x)=x となる数を探すプログラムを書いてください。 さらに余裕があれば11桁以上の数について調べてください。
嫌です
>>308 手元で15桁まで計算して81312000だけなんだが合ってるのかな
関係ないけど積を和にしたら10桁で3個 (43 97752 452965740)
これはもっと上の桁でもあるかな?
>>312 の*を+にしただけじゃ遅すぎで無理だが
>>273 Squeak Smalltalk
| conways |
conways := Generator on: [:g |
| n |
g yield: (n := 3).
1 to: Float infinity do: [:m |
g yield: (n := (String streamContents: [:ss |
(n asString as: RunArray) runsAndValuesDo: [:run :val |
ss nextPut: run asHexDigit; nextPut: val]
]
) asInteger)
]
].
(conways next: 10) asArray
"=> #(3 13 1113 3113 132113 1113122113 311311222113
13211321322113 1113122113121113222113 31131122211311123113322113) "
お題: アラビア数字を受け取り、漢数字を文字列として返すプログラムを書いてください。 例えば f(12345) -> "一万二千三百四十五"
それ前に見た...
あ、そう。じゃ、取り下げ。
>>320 な、何だって!
せっかく無量大数まで出すように作ったのに。
でもプログラムの出来悪いから。。。
ま、良いかw
まあ、俺のそそり立つチンコでも眺めて楽しんでくれ
お題; 1729はラマヌジャンのタクシーナンバーとして知られています。 自然数の立方和として2通りに表される数の最小のものです。 12^3+1^3=10^3+9^3=1729 では、2番目に小さい同様の数を求めるプログラムを書いてください。
適当に書いたら4104だったわ
>>327 Gauche
(use util.combinations)
(use util.match)
(define (taxi)
(combinations-for-each
(cut permutations-for-each
(match-lambda ((a b c d)
(when (eq? (+ (expt a 3) (expt b 3)) (+ (expt c 3) (expt d 3)))
(format #t "~d^3 + ~d^3 = ~d^3 + ~d^3 = ~d\n" a b c d (+ (expt a 3) (expt b 3))))))
<>)
(iota 50 1) 4))
(taxi)
2^3 + 16^3 = 9^3 + 15^3 = 4104
>>308 Scheme
(define *pr* (primes 10))
;;;sからeまでの自然数を調べ該当する最初の数を得る
(define foo
?? (lambda (s e)
(cond
((> s e) #f)
((= s (f s)) s)
(else (foo (1+ s) e)))))
;;; f(x)=p1^d1 * p2^d2 * p3^d3 ....* pn^dn を求める
(define f
?? (lambda (n)
(f-help n (int (floor (log n 10))) 1 *pr* ??#f (lambda (x) x))))
(define f-help
?? (lambda (n e cnt pr dn col)
(cond
((< n 1) (col 1))
(else
??(set! dn (quotient n (expt 10 e)))
??(f-help
?? (- n (* dn (expt 10 e))) (1- e) (1+ cnt) (cdr pr) #f
?? (lambda (x) (col (* (expt (car pr) dn) x))))))))
;;;適用例 ;処理に時間がかかる
(foo 80000000 999999999)
81312000
308の出題者でございます。 Meertens数については素朴に書いたものではきついようです。 自前の処理系はダウンです。 0(ゼロ)が各桁にある場合にはゲーデル数には影響しません。 そのあたりをうまく利用して探索範囲を狭めたいと検討中です。 Haskellによる関数プログラミングの本に参考例があるようです。
>>335 例えば 1020300000 見たいな数字を
10203にして計算するような単純なやり方だと
末尾のゼロを取る処理分逆に遅くなるね。
それより冪乗のメモ化で少し早くなる。
>>337 Haskell本をちょろっと見たのですが、各桁の数を選択する際に
枝刈りをして無駄な探索を避けているような印象です。
それと末尾の0の数は2と5の指数の小さい方なのが使えないかなぁと。
285の出題者でございます。 間に整数や0(ゼロ)がある場合は自明解になります。 そうでない場合には連分数にして比較、効率よく見つけるという方法を 想定していました。ほかにもうまい方法があるかもしれません。
>>337 後知恵ですが81312を含む5ケタだけ調べればとりあえずは
見つかるので自前の処理系でもなんとかいけました。
一番よさそうなのは上位桁から調べつつ、調べても無駄な下位の解の
探索を回避する方法ではないかと考えています。
>>340 >>337 さんのアイデアでとりあえず10倍ほど早くなったのてますが、まだ、論外の遅さ
勉強中
100万個単位なら良しですが
1000万個の計算が遅すぎる段階
ご示唆を検討しつつ高速化を図ってみます
346 :
デフォルトの名無しさん :2015/01/23(金) 04:40:58.62 ID:zM33mrEj
失敗お題
失敗の原因:問題になっていない
お題
アナログ時計において00:00:00〜11:59:59の間で長針・短針・秒針が重なる時刻を全て挙げよ
長針・短針・秒針は止まることなく常に連続して動いているものとする
答え
http://ideone.com/YmBcmi
お題: 実行から3分経過を通知するタイマーが必要 条件は ・そのためにソフト(バイナリ)をインストールしたりしない ・アラームは音がベスト ・できれば普通のXPのパソコンで動作する
お題: 自然数について各桁の数の和でその数を割り切れるならばその数はNiven数 というそうです。例えば81は各桁の数の和は8+1=9であり81=9*9ですからNiven数です。 では、可能な限り大きなNiven数を求めるプログラムを書いてください。
>>348 cos(x)=cos(12x)=cos(43200x)
を満たすxを探すんだろうけど
ちゃんと計算してないけど00:00:00以外ないよな。。。。
なんか処理系のbignumの耐久テストみたいでつまんなかったかな。(反省)
>>353 cos(x)=x のような不動点を求めるものでは?
でもこれは簡単でつまらないので、log(x)=xの方が面白いかも。
>>351 #include <stdio.h>
#include <limits.h>
typedef unsigned long int uli;
int main(){
for (uli i = ULONG_MAX; i; --i){
uli r = 0;
uli w = i;
while (w){
r += w % 10;
w /= 10;
}
if (i % r == {
printf("%lu¥n", i);
return 0;
}
}
return 0;
}
// 実行結果
// 18446744073709551534
>>354 任意の自然数の後ろに0をたくさん並べるだけでよさそうではありませんか?
>>357 1の後に0をたくさん並べたらいくらでも作れるね。これは失敗。
取り下げてください。
お題: アメリカではマックナゲットを小6個、中9個、大20個の パックで販売されていたそうです。この注文の組み合わせで 購入できるナゲットの数をマックナゲット数ということにします。 例えば44はマックナゲット数です。なぜなら44=6+2*9+20だからです。 では、マックナゲット数ではない最大数を求めるプログラムを書いてください。
こんどはだいじょうでしょう。
いや駄目でしょ 素数とかだと
プログラムにするまでもないという
出題者はここにお題を書く前に自分で解いてみたりしないのか?
いいかげんなやついるな 問題になっていない問題をただの思いつきで出している奴 しねよカス
>>366 一応、専門書をあたってはいるのだよ。
6,9,20の最大公約数以上では解はないという定理があることは調べた上で出題している。
Niven数はほんとはその個数のN(x)について考えると面白いことがあるのだけど
あまりにも数学的すぎて馴染まないので変えたら失敗したんだ。
最近の出題ネタがあまりにも低レベルだったので頭をひねってみたが、もう終わり。 後は誰かよろしく。
6,9,20の最大公約数ってーと1かな?
間違えたよ。最大公倍数だ。
さらに間違えた。最小公倍数だ。
簡単なお題でも私としてはウェルカム。 そうです簡単なお題しか解けないからです。
っていうか、いちいち出題者を煽ってモティベーションを奪う馬鹿がいるけど 相手にしないでいいと思うよ。
質の悪い似非問題だされるよりはシーンとしている方がマシ
>>363 その通りです。44〜49が非マックナゲット数であることがわかりば、
43より大きい数のすべてはマックナゲット数であることはコンピューターに
計算させなくてもわかります。6を足せば良いからです。
ディオファントス解析、フロベニウス数と関連するようです。
さあ、これでおしまい。 こんどはみなさんのお題を楽しませてもらいましょう。
おっとっと訂正、 44〜49が非マックナゲット数であることがわかりば × 44〜49がマックナゲット数であることがわかれば ○
お題 ある自然数nに対して、f(n)を 正のnの倍数で、下9桁が123,456,789になるものが存在すれば、その中で最小のものを 存在しなければ0を それぞれ返す関数とする 例えばf(123) = 84123456789, f(125) = 0 10^9未満の自然数nに対して、f(n)の最大値はいくつになるか ちなみに答えは2^60未満です
380 :
デフォルトの名無しさん :2015/01/24(土) 23:23:58.17 ID:bKHMmMiq
つまらん
面白い問題を解きたいならなんでこんなスレに居るの?
おもしろ問題があるかもって期待でな
あのなー、東大入試の数学の問題なんか、 講師連中が1年考えて、 古代ギリシアのパズルと同じ問題を出題している 3つの交わらない円のすべてに、接する円は幾つあるか? 円周率が3.05以上であることを、図で証明せよ 問題を考えるのは、それだけ難しい。 それは数学・情報オリンピックでも同じ。 秋山、ピーター・フランクルも苦労している 作問のプロでも、作問のアイデアが欲しくて、 毎日このスレを見ているぐらいなんだぞ! 魔方陣、虫食い算などで問題を作れないか?
じゃあ、辺が4の魔法陣の任意の場所を入れ替えて3種類の魔方陣を作るとする 最小の入れ替え数はいくつか? 回転と線対称とその組み合わせは除く 斜めの線対称は考えなくて良い
>>383 作問オリンピックを開催すればいいんじゃね?
空マス=0,白=1,黒=2として表す8文字8行からなるオセロの盤面データが与えられる このとき最後に置かれた可能性がある駒を色ごとにそれぞれリストアップする 例外として初期配置の場合は初期配置と表示する 例: 00000000 00000000 00020000 00022000 00111000 00000000 00000000 00000000 白:c5 黒:なし
>>388 1手目からきちんとルールにのっとって進めていった局面で最後に置かれた可能性があるマス?
それとも最後の一手以外は適当に設置したとしてOK?(最初から進めた場合どうやってもその形にならない盤面とか
俺には後者ならできるかもしれんが前者は序盤以外だったら無理w
1戦の計算量が2^60くらいなので、網羅は大変。
>>388 取りあえず盤面上のコマの数で最後に打ったのが黒か白か解る。
後はゲーム木たどって行くしかないかな?
パスが入った場合を忘れているよ
ああ、そういえばパスって有ったな。。。
出題者自ら解いてそのコードさらす準備が終わってから出題してくれ。(全列挙系は特に)
395 :
388 :2015/01/27(火) 20:14:20.28 ID:YSaUU6oA
最低限最後の1手だけチェック出来ていればOK それを超える精度は余裕があればのつもり
初期状態から到達できなくてもいいってことか?
>>395 >最低限最後の1手だけチェック出来ていればOK
3つ以上並んだところは殆どの気がする。
市松模様の状態だとしたらどれも斜めに3つ以上並んでるけど 縦横を返さずに置く必要があるので不可能とかそれなりに絞れそう
最後の一手だけのチェックなら
>>388 の例だと白にe5も入るよね?
チェスボード問題なら円環上の準女王問題の方が面白いのでは?
402 :
401 :2015/01/28(水) 20:28:45.56 ID:+GNvzRaf
失礼、訂正 準女王問題の方が 誤 準女王問題の方も 正
初期配置は特別扱いすることになってるんだし その4つは常に候補から外していいんじゃね
4つは外しましょう。
2つで十分ですよ。 分かって下さいよ。
100から999までの三桁の整数の範囲内 A=100の位を10の位にし、10の位を1の位にした数字 B=1の位 C=10の位 A/B=B*C=Dが成り立つ整数を全て出力せよ (例)726 A=72 B=6 C=2 A/B=B*C=12
お題: ベルヌーイ数は次の漸化式で与えられる。 b(n) = -1/(n+1)*Σ(k=0 to n-1)n+1Ck * b(k) b(0)=1 ベルヌーイ数を計算するプログラムを書き、b(8)を求めよ。 効率は考えなくてもよい。 やりたい人は漸化式によらない方法、メモ化する方法など 効率を追求せよ。
1〜99999999999999999999999999999999999999999999999999999999999999999999999999999 までの整数が文字列で与えられる これが素数かどうか判定しろ
>>412 すごくくだらなく思うのは俺がそれの難しさをしらんから?
くだらないのは出題者が山下だからだとおもう
>>414 自己レス
俺にはとても難しいとこがわかった
atomマシンではあるけれど
50001が素数かどうかを調べるのに25秒もかかった
50001を3から223まで試し割りするだけで25秒掛かるか?
419 :
デフォルトの名無しさん :2015/02/02(月) 21:56:58.64 ID:v7wWJREm
素数判定はネットで手に入る既製ソフトウェアの速いやつを抜かせたら 専門家として通じるくらいに研究されてるだろ。
俺、C++に多倍長精度演算入ったら、素数表つくって売るんだ!(死亡フラグ) そすうおーぐとか作ってみたいなー。
421 :
デフォルトの名無しさん :2015/02/02(月) 22:05:46.76 ID:v7wWJREm
AKS素数判定法 - Wikipedia 与えられた自然数が素数であるかどうかを決定的多項式時間で判定できる、世界初のアルゴリズム。 AKS素数判定法は2002年8月6日に "PRIMES is in P" と題された論文で発表された。 この素数判定法が発見される以前にも、素数の判定方法は多数知られていたが、リーマン予想などの仮説を用いずに、決定的多項式時間で判定できるアルゴリズムは存在しなかった。 素数判定という重要な問題が実際にクラスPに属することを示した点で理論的には大躍進であった。 ミラー-ラビン素数判定法 - Wikipedia 与えられた数が素数かどうかを判定する素数判定アルゴリズムの一種。 フェルマーの素数判定法や Solovay-Strassen 素数判定法と同じく、乱択アルゴリズムの一種。 Gary L. Miller が最初に開発した手法は未だ証明されていない拡張リーマン予想に基づいた決定的アルゴリズムだったが、 マイケル・ラビンはこれを無条件の確率的アルゴリズムに修正した。
>>418 49999までの素数リストをつくり
その要素のどれかで50001が割り切れるかどうかで判定した
最適化のヒントとして、与えられたNの√Nまでの素数で試し割りすれば必要十分。 さてそれはなんででしょう。
>>412 ruby -rprime -e 'p $<.read.chop.to_i.prime?'
425 :
デフォルトの名無しさん :2015/02/02(月) 22:15:37.88 ID:v7wWJREm
>>412 は区間すべての素数でなくて、区間の一つだけで良いんだろ。
すべては確実に無理かとおもうが。
何バイト必要か計算してるか。
つまりAKSを実装しろと。
427 :
デフォルトの名無しさん :2015/02/02(月) 22:22:39.42 ID:v7wWJREm
一つの数を1ビットで表現したとして、 10^77/(8*1024^4) = 1.164 * 10^64 テラバイト必要。 キロ < メガ < ギガ < テラ。
ラビンミラー法ならその桁数でも可能かも。SICPでやったやつ。
430 :
デフォルトの名無しさん :2015/02/02(月) 22:33:19.38 ID:v7wWJREm
カカクコムでHDD単価が最安値のに記録すると、
カネが39737339344962200000000000000000000000000000000000000000兆円ほど掛かる計算。
日本の国家予算は100兆円程度。
SEAGATE(シーゲイト) ST3000DM001 3TB \10,486
1Tあたりの価格 \3495
http://kakaku.com/item/K0000313507/
431 :
靖国参拝、皇族、国旗国歌、神社神道を異常に嫌うカルト :2015/02/03(火) 00:03:06.86 ID:DKP7K11t
★マインドコントロールの手法★ ・沢山の人が偏った意見を一貫して支持する 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法 ・不利な質問をさせなくしたり、不利な質問には答えない、スルーする 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法 偏った思想や考え方に染まっていたり、常識が通じない人間は、頭が悪いフリをしているカルト工作員の可能性が高い 10人に一人はカルトか外国人 「ガスライティング」で検索を! .....
コピペマン参上!まで読んだ。
チンコ立たないから泣きながらコピペします!まで読んだ
>>410 Squeak Smalltalk
| bernoulli |
bernoulli := nil.
bernoulli := [:n |
n = 0 ifTrue: [1] ifFalse: [
-1/(n+1) * ((0 to: n-1)
inject: 0
into: [:sum :k | sum + ((n+1 take: k) * (bernoulli value: k))])
]
].
bernoulli value: 8 "=> (-1/30) "
お題: 以下の関係記述からSandyが好きな人、ものを調べるプログラムを書き、 Sandyが好きな人、ものを全部列挙せよ。 Kim likes Robin. Sandy likes Kim. Robin likes cats. Sandy likes people(or animal) who likes cats. Kim likes people who like Lee and Kim. Sandy likes Lee. People(or animal) like myself.
>>438 GNU Smalltalk
| Kim Robin Sandy Lee cats |
Likes members: {
Kim := People named: #Kim.
Robin := People named: #Robin.
Sandy := People named: #Sandy.
Lee := People named: #Lee.
cats := Animals named: #cats
}.
Kim likes: Robin.
Sandy likes: Kim.
Robin likes: cats.
Sandy likes: [:who |
((who isKindOf: People) or: [who isKindOf: Animals]) and: [who definitelyLikes: cats]].
Kim likes: [:who |
(who isKindOf: People) and: [who definitelyLikes: {Lee. Kim}]].
Sandy likes: Lee.
Likes members do: [:who |
((who isKindOf: People) or: [who isKindOf: Animals]) ifTrue: [who likes: who]].
Likes members asArray collect: [:each | (each -> each allOneLikes) printNl]
"=>
Robin->(cats Robin )
cats->(cats )
Kim->(Robin Sandy Kim )
Sandy->(Kim Robin cats Lee Sandy )
Lee->(Lee )
"
http://ideone.com/9Fxawa
深さ優先探索を使う問題を作ってください おねがいします
443 :
デフォルトの名無しさん :2015/02/04(水) 11:39:31.04 ID:3h7Zr70+
>>442 お題
壁(#)によっていくつの部屋に分断されているか求めるアルゴリズム
(斜めにすり抜けられる空間も一続きとみなす)
例
##..##
#.###.
###.#.
...###
3rooms
>>444 やばいむずかしすぎ
深さ優先探索でかけと言われてもまずこういう問題はどうかんがえていいのかすらわりません
ぱっと見て3部屋だから3って出力するプログラムを書けばええんやで。これでだいたいやっていける
穴だらけやがな。
450 :
デフォルトの名無しさん :2015/02/05(木) 03:09:39.94 ID:7CYOAfIQ
>>444 良問! 今、解いてる。2値画像の走査みたいなものかな。
ttp://ideone.com/WGvvlW C++。深さ優先探査じゃない方法で解けたような気がする。再起つかわなかったなぁ。
重複の検出がちょっと重い。メモリ馬鹿食い。
うーん。あんまりいい出来ではない。速度重視というわけでもないし。
>>444 ってアルゴリズムとかいう以前のごく単純な問題のように
思っちゃったんだけど違うの?
(1) マップの左上からCRTの走査線状にマスを調べる
(2) そのマスが壁でなく、かつそのマスの左、左上、上、右上がすべて壁なら
部屋のカウントを+1
これだけのことじゃないの?
>>453 #####
#.#.#
##.##
#####
それこういう形が2部屋に判定されないか?
2値画像のラベリングの問題だよね。昔、Winston本で読んだことがあるよ。
>>444 F#
let points (x, y) = seq { for x in [x-1; x; x+1] do for y in [y-1; y; y+1] -> x, y }
let spaces map p = points p |> Seq.filter(fun p -> Set.contains p map)
let findRoom map p = Seq.tryFind (Set.intersect (Set(spaces map p)) >> Seq.isEmpty >> not)
let lookup map rooms p =
match findRoom map p rooms with
| None -> Set.add (Set [p]) rooms
| Some room -> Set.remove room rooms |> Set.add (Set.add p room)
let charsi data =
(data+"").Split '\n'
|> Seq.mapi(fun y -> Seq.mapi(fun x c -> (x,y),c))
|> Seq.collect id
let makeMap = charsi >> Seq.choose(function p, '.' -> Some p | _ -> None) >> Set.ofSeq
let printCount data =
let map = makeMap data
Seq.fold (lookup map) Set.empty map
|> Set.count
|> printfn "%s\n%d rooms" data
printCount "#####
#.#.#
##.##
#####"
ものすごくシンプルなアルゴリズムなんだな びっくりした
シュリンクしながら書いてたから、時間は結構かかってるんだぜ。 頭のいい人の考えることは基本シンプルだけどだから難しい。
反応悪いなー。おもしろくなかったかにゃ?
>>460 のコードあってるかもよくわからんので盲信しないでくれ。
>>460 C++読めないから勘違いかもしれないが、
エンコードの結果に辞書を含めてはいけなくて、
デコードも辞書無しでやるんじゃないの
>>465 え?マジで?辞書破棄するの?
えぇええええええええええ。え?
初耳ですわ。盲信して実装したんで何が何だかさっぱり。
ちょ、サンプルプリーズ。
えええええええええええーーーーーーーーーーーーーーーーーーー。
げげ。間違ってたか。
>>460 のリファレンスは取り下げで。Orz
辞書をクラウドで生成する方法がよくわからん。。。Orz=3 俺はもうだめだー!!むー。
お題: 1からnまでの自然数の値を記したカードがS枚ずつある。 このs*n枚のカードを1列に並べ、各k(1<=k<=n)に対して 、値kの相隣るカードの中間に必ずk枚ずつ他のカードがある ようにする。s,nを与えられその解を計算するプログラムを書け。 例えばs=2、n=3の解としては 2,3,1,2,1,3がある。2と2の間に2つカードがあり、3と3の間に3枚の カードがあり、1と1の間に1枚のカードがある。
数列作ってパーミテーショングルグルすればいいけど、重すぎるな。 結構大変そう。
>>468 decompress(chars, indexes) という関数の中で辞書は
m = sizeof(chars) とすると
dict[n]
= chars[n] // n < m の場合
= dict[indexes[n-m]] + dict[indexes[n-m+1]][0] // n >= m の場合
というような定義になる。
もちろん再帰的な定義になってるから順序を気をつけないといけない。
>>471 解説ありがとう。
やっぱ再帰性を担保に構築しないとダメですよね。
頭が悪いとこういう時ツライ。Orz
うーん。なんかできそうなきがする。むー。
速度稼ぐためにMAP使ったけどダメなのか。Vecterでやらないと。 重たいなー。ソートされてないから2分探査も使えないし。 分不相応だったか。
再帰性を担保? なにそれ? タンポンの再使用はやめましょう タンポポの花で耳かきするのはやめましょう 湯たんぽはタオルで包んで使いましょう ダリホー!イスラム国の兵隊さんみっけ、撃っちゃうぞぉ
>>474 再帰的って言っても単にループでいけるで
頭のなか最適化しなきゃ(使命感 うーん。
再帰的とは言っても再帰性とは言わないし、 再現性を担保っていう言い方があるようにも思えない。
これぞ型破り。とかお茶を濁す。
よくわかっていないことを適当に表現してわかっているつもりになる癖がついてるかな? イメージあれども概念なし じゃあかんよ
はい。
そんな説教せんでも
文系ってそういう連中の群
頂点に君臨する池上さんら慶應閥
>>473 出題者です。
この問題はランフォードの問題というものです。1979年の数セミに紹介されました。
すべてのs,nについて解が存在するわけではなく、必要条件として
n=0,-1(mod4)があるそうです。
訂正 必要条件 s=2のとき、n=0,-1(mod 4)
Aチケットの価格1500円 Bチケットの価格700円 今日のチケットの売上は462300円 この内,Aチケットの売上は75%, Bチケットの売上は25%である。 Bチケットを購入した人数を求めなさい
解なし
>>489 売り上げが枚数と金額のどちらを言ってるか、しかも一人一枚限定かどうかを言ってるか
が判然としないと言ってるのか
1500x+700y=462300 のディオファントス方程式だと gcd(1500,700)=100 で 100|462300 だから解はあるはずなのだけど。 後の要件がじゃまをしているような。
SPIの問題にも出ているので解けない人はアホです
ちょいとループさせたら、76%,24%はあった。 アホでいいや。
解の有無以前に"プログラミング"のお題ではない
いやお題ではあるけど数字がおかしい
出題とは置いといて、算数や数学でもプログラミングは使うのでこれがお題ではないと主張する事自体は間違っている
うん、概数しか出ないね ダメだなこりゃ
>>491 間違えた。非負整数だから関係なかった。
でも、75%ってのはわからんなぁ。
連立方程式で解けそうだけど、頭悪いからわからない。
釣りだろ
total = 462300 price_a = 1500 price_b = 700 for i in range(164, 168): print "ticket b amount %d" % i b_sum = i * price_b b_per = (float(b_sum) / total) * 100 print "ticket b percent %3.2f%%" % b_per a_sum = total - b_sum a_amt = a_sum / price_a print "ticket a amount %d" % a_amt a_per = (float(a_sum) / total) * 100 print "ticket a percent %3.2f%%" % a_per print "recalc total %d" % (a_amt * price_a + i * price_b) print "-" * 30 合計を再計算しても元に戻らない ダメだね
出題者さんそろそろ解答例お願いします
A = 462300*0.75/1500 = 231.15 B = 462300*0.25/700 = 165.10714285714285714285714285714 人間を半分にはできないので165人買って0.107人分ボッタクリした。 でFA? なんだよ。連立方程式すらいらねーじゃん。
ダフ屋じゃねーか。 正確には1人分に満たないくらい過払いがある。か?
まあ(234,159)の所が一番近そう 誤差としてはでか過ぎるけども
連立方程式が不能であることを示せという問題だったのかもしれないなぁ。
お題: n*nの碁盤にn個の碁石を置く。 このときいずれの碁石2個の距離は異なっていなければならない。 距離とは直線距離である。(ピタゴラスの定理) 例3*3の場合 .___ ._|_| |_._| 5*5の碁盤に5個の碁石を配置するプログラムを書け。 8*8あるいは9*9の碁盤でも配置を見つけられるだろうか?調べよ。
見づらいので直した。 例3*3の場合 ._____ .__|__| |__.__| 5*5はちゃんと答えはあります。
てすと print"●□●□□" print"□□□□□" print"□□□□●" print"□□●□□" print"●□□□□"
一見簡単そうに見えて、適当に書くと処理が終わらないっていうパターンか
n=5で鏡像とか回転とか除外しない場合280パターンであってるかな?
>>488 は学校の課題なのですが、やはり
見られたらまずいので問題文や数値は変えておきました
>>505 サンキューガッツ
518 :
デフォルトの名無しさん :2015/02/12(木) 17:22:01.37 ID:G7IOQrQS
最大の埋め込み数の配置のほうがいいんでは。
元ネタは1976年に別冊数理科学パズルTという本に掲載された 「もう一つの碁石パズル」というもので著者は中村義作先生という方です。 さらにその先駆はアメリカのクラヴィッツという人の出題だそうです。 n>=16の場合に置けないことが証明されています。 まだまだパソコンが非力な時代にn=7までは見つかっていたそうです。
うーむ、オライリーの数学パズル系の本でも読み直そう・・・
>>516 また一人不幸のズンドコへ落としてしまった。罪な俺。
>>519 なんでメモリ不足かと思ったら継続、call/ccだった。
本腰をいれて直すか。
あ、そうか。大域脱出だけだからcall/ecにすれば解決か。 さっさとSchemeの呪縛から逃れたい。
>>516 プログラミングの上達は学校でやる数学や物理をちゃんと勉強するのが近道だよ。
お題:ふたつの素数の和が素数になるものを好きなだけ求める。
解なし。必ず一桁目が偶数になるから。奇数+奇数=偶数。
って、唯一2が偶数か。うーん うほ。いきなり間違えた。 素数+2が素数を考えればOKかな?
5+2
双子素数
531 :
デフォルトの名無しさん :2015/02/14(土) 15:29:01.70 ID:kPt70RJT
用途不明な整数論の問題が増え過ぎ。
宿題の季節ですから。
実用的である程度面白いお題ってなんだろう?
っオートマトン
HTMLソースをできるだけ正規表現で DOMオブジェクトに変換するとか
マトン食った事ない
だっちゃ
538 :
デフォルトの名無しさん :2015/02/14(土) 23:10:51.18 ID:LPbLDSyd
有名どころだとナップサック問題だな 変数の制約によってさまざまなバージョンが存在する 下の(1)〜(3)はすべて解法が異なるので腕試しにどうぞ お題 個数と重さと価値がそれぞれn[i] w[i], v[i], (1 <= i <= N) であるようなN種類の品物がある 重さの総和がWを超えないように選んだ時の、価値の総和の最大値を求めなさい (1)n[i] = 1, 1 <= w[i] <= 100, 1 <= v[i] <= 100, 1 <= N <= 100, 1 <= W <= 10000 (2)n[i] = 1, 1 <= w[i] <= 10^15, 1 <= v[i] <= 10^15, 1 <= N <= 40, 1 <= W <= 10^15 (3)1 <= n[i] <= 10000, 1 <= w[i] <= 100, 1 <= v[i] <= 100, 1 <= N <= 100, 1 <= W <= 10000
>>538 おっと、(1)の条件訂正
(1)n[i] = ∞, 1 <= w[i] <= 100, 1 <= v[i] <= 100, 1 <= N <= 100, 1 <= W <= 10000
そんなのカルノー図書けば一発だろと思ったら違ったw
俺の探索アルゴリズムじゃ歯が立たない
自力で答え考えるほうが楽だった
not2つも使わなきゃいけないのか
オライリーのアルゴリズムパズル読んでるけどチュートリアルがまだ読みおわらねw
お題としては重すぎるな
ギコナビが使えなくなるので3/31一杯で撤退します。 ギコナビそのものはSCでも読めるようなのでそっちに移住するかもしれんです。 裏の利権なんか知らんです。安住の地さえあれば・・・。
思いっきりスレ違いだけれども、データ取ってきてローカルでビューを加工するって 発想が前時代的だと思う。 人も減ったことだし、サーバーで直接見やすいhtml吐くようにすりゃいいのに。
datより小さいHTML吐ければいいけどね。上位の転送料って従量制だから。
>>552 今時の方法との違いってViewerがHTMLで実装されてるかネイティブで実装されてるかの違いしか無いと思うんだけど。
データを取ってきてクライアント側で表示内容を生成するのは変わらないでしょ。
今時の方法はデータのフォーマットをJSONにしたりするのかもしれないけど
>>552 てか2ch.netはそうなってるんだけどさ。
昨日たまたまスマホ用の2chを、ブラウザで覗いたら、
実は専用アプリは不要だった、という事実に気づいた。
ただあまりにも下品な広告の洪水に辟易したけどね。 乗っ取った側ってやっぱヤクザ的な人たちなのかねえ。
元々はヒロユキの傀儡だったがヒロユキがへまして乗っ取られた。相手は外人なのに信用しすぎた。 一応、2chは日本の英知に近い部分があるので、そういうのに興味があるやつに乗っ取られたんだと思ってるよ。
本家がopenやscに移行への手を貸す形になりそうw アホやんw
まつもとひろゆき
コピペマン参上!まで読んだ。
563 :
デフォルトの名無しさん :2015/02/27(金) 14:31:48.73 ID:wMAAsYaL
お題を…お題をくれっ 簡単すぎない簡単なやつを頼む
チンコ萎えましたぁ 復活アルゴリズムきぼんぬ
ファミコンより安いARMでOSが動く環境があるのにどうなんだろうな?
OS作ったって誰も検証できないじゃん
m人の女子がいてその中の人はチンコが生えていてp人は18歳未満です。 さて、どうでしょう?
チンコが生えているのはn人でした 安全にナンパできる確率を求めよ
>>568 配布してエミュで動かしてもらえばいいと思ったんだけど
572 :
デフォルトの名無しさん :2015/02/28(土) 14:04:57.27 ID:+gtkzrQz
>>563 お題
じゃんけんの手のリストが文字列で与えられるので
その中で勝ちの手がいくつあるか答えよ
(g=グー、c=チョキ、p=パー)
gpgpgppppg -> 6
ggggggggggggggg -> 0
ccpcpppcccpppcppcpcc -> 10
ggcgcgcggggcpgcggcgcggggcgcgcc -> 0
勝ちの手ってどういうことだ
答えはチョキ?となると最後は0ではなく1にならなければいけないから 違うな というかプログラムにならんしw
576 :
デフォルトの名無しさん :2015/02/28(土) 15:06:38.91 ID:yAjdu5nl
最後はp1人いるからあいこで0 他は順にgの数、あいこ、cの数 大勢で一度にジャンケンして勝った人数じゃね
バグってるな…
じゅんけん。じゃなくて、じゃんけんな。
参加人数N(1から10の10乗) 「どちらにしようかな 天の神様の言う通り」 最後の「り」に当たる人は何番目の人か出力しなさい
>>585 そうじゃなくて
((N div 22) * 22) + (N mod 22)番目の人じゃないか?
最後の「り」に当たる人は何番目?
だと思うよ
div -> 商をもとめる演算とする
>>586 補足
とぉっても大きな数の場合、具体的にどう処理するのか?が出題の眼目だと思うけどね
アアン、大きすぎてぇ入らないのぉ
グゥェヘヘ、工夫しろや!欲しいんやろ?これがほしいんやろ?
そんな何順もするもん?ローカルルールがありすぎて統一するの難しそうだな。 10の10乗って10億か?そこまで到達しないだろう。
>>587 どう頑張っても不平等だな。まいったなぁ。
>>584 ttp://ideone.com/mrCKcD C++。一応それっぽいの書いてみた。
最初D分割されたグループを再帰的に選んで行って最後のウイナーを決める。感じ?
なんか、小さいころに習得した事ってあんまり整理されてなくてぐちゃぐちゃだな。
すげー、頭こんがらがった。
これでいいか?あっては無いと思うが。デバッグテキトー。
感想募集中。
>>572 Squeak Smalltalk
#('gpgpgppppg'
'ggggggggggggggg'
'ccpcpppcccpppcppcpcc'
'ggcgcgcggggcpgcggcgcggggcgcgcc'
) collect: [:str |
| bag |
bag := str asBag.
str -> (bag occurrencesOf: (
bag asSet caseOf: {
['gp' asSet] -> [$p].
['gc' asSet] -> [$g].
['cp' asSet] -> [$c]
} otherwise: [$z]))
]
"=> {
'gpgpgppppg'->6 .
'ggggggggggggggg'->0 .
'ccpcpppcccpppcppcpcc'->10 .
'ggcgcgcggggcpgcggcgcggggcgcgcc'->0
} "
出題したものだけど計算で一発で求める方法があるか知りたくて問題出しただけだよ
ループなら21回で済む 10^10は釣りで入れただけ
っていうか、仕様に釣りとか入れないで。 問題変わっちゃうじゃん。
さよならNG 誠意のない問題はクズ ID:kcGDdoVo
久しぶりにNG宣言してるかまってちゃん奴見たわ
1 ど 2 れ 3 に 4 し 5 よ 6 う 7 か 8 な 9 て 10 ん 11 の 12 か 13 み 14 さ 15 ま 16 の 17 い 18 う 19 と 20 お 21 り
あら、でも常に定数じゃないか。 正直すまんかった。 21%min(N,22)で済む話か?
なんか微妙に違う気がする。あれ?
21%min(N+1,22)かな?
普通に 21%N だろ ただしN番目の人は0番目扱いになるから そこだけ注意が必要だな
あぁ、喉のつっかえ取れたわ。 そういえばNって別にいくつでもいいのか。 選ばれるのは1開始だけど、21%21=0なので+1しないとだめかな? まぁ0番目はdevBYzeroでけられる可能性があるので対策しないとだけどな。 1基準だとPGの通例と変わってくる可能性がある。
>>607 は?精神病?
どこをどうすればかまってちゃんになるんだか
精神病の発想はよくわからん
お題:小文字のアルファベットからなる文字列を圧縮して。文字列は複数行あるから。 aabbcc ↓ a2b2c2 abcde aabbb ↓ a1b1c1d1e1 a2b3 aaa bbb ccc ↓ a3 b3 c3
圧縮出来てねえ
aaaaaaaaaa ↓ a10
3つ以上の連続性無いと意味無いな アルファベット以外の、例えば数字自体は考えなくてもいいって事? あと復元のことも考えないとな
『一回の場合'1'は省略する』 くらいのことを思いつかない奴が プログラムに手を出すなとか思う
省略するかしないかは別にいいんじゃないかな
圧縮したらぁ abcの三文字がぁ a1b1c1って倍になっちゃったぁ それを圧縮というかい!!!! それに数字の部分はもろに数字かい!! それに使用文字をアスキー文字に限定してるんかどうか? 仮に、話を簡単にするため 1.圧縮対象文字は英語小文字のaからzとする 2. 指定文字からなる文字列を圧縮せよ。 3. 当然復元できるものとする さあ、効率と速度を競え かなぁ。 例 とりあえず文字種を表すのに5bitでたりるな。残り3ビットで連続回数を指定す る すると(文字種 ・ 長さ)を1バイトで表現できる もし、連続回数が8文字以上の場合は 次の1バイトを長さ情報バイトとして付加する。 最後の長さ情報バイトの値は255未満としておけば、次のバイトは(文字種 長さ)バイトだと認識できる。 圧縮文字列の最後は(0 ・0)で終端すれば良い どうかなぁ
上をワンパスとして さらに同一パターンの検出をかますともっと圧縮できるなぁ abcdeabcxy これは p1 cd p2 xy となるな 真面目な圧縮プログラムはいろいろ工夫してるんだろな
>>617 Squeak Smalltalk
| compress |
compress := [:str |
String streamContents: [:ss |
str lines do: [:line |
self assert: [Character alphabet includesAllOf: line].
(line as: RunArray) runsAndValuesDo: [:run :val | ss nextPutAll: '', val, run]
] separatedBy: [ss cr]
]
].
compress value: 'aabbcc'.
"=> 'a2b2c2' "
compress value: 'abcde
aabbb'.
"=> 'a1b1c1d1e1
a2b3' "
compress value: 'aaa
bbb
ccc'.
"=> 'a3
b3
c3' "
>>617 ruby
$ echo aabbccc | ruby -pe '$_.gsub!(/(.)(\1*)/){$1+"#{$2.size+1}"}'
a2b2c3
ついで $ echo -e "a3\nb3\nc3" | ruby -pe '$_.gsub!(/(.)(\d+)/){$1*$2.to_i}' aaa bbb ccc
629 :
デフォルトの名無しさん :2015/03/06(金) 21:07:24.47 ID:oJtnjCND
631 :
デフォルトの名無しさん :2015/03/06(金) 23:55:15.25 ID:MtMWpDAX
>>631 プログラマ余らせるくらいなら別のプロジェクト当てるんじゃね?
1からN未満の自然数で、3または5の倍数の合計を求めよ ただし、9で割り切れる数は除外すること
なんか前にも見た覚えあるなー。
ダメよダメダメって言えばいいの?
チンコ萎えますぅ
最近テレビは見てないのでそのネタはわからんかった。Orz
>>636 あれ? 君と答えが違う
↓ Schemeで
(foo 300000 (lambda (x y) x))
17000049996
>>633 Squeak Smalltalk
| fn |
fn := [:N |
((1 to: N) select: [:x |
((x isDivisibleBy: 3) or: [x isDivisibleBy: 5])
and: [(x isDivisibleBy: 9) not]]
) sum
].
fn value: 300000 "=> 16000100001 "
あれ?間違ってるか。あれ?
すまん。
>>636 は取り下げ。
>>643 未満か…orz
×1 to: N → ○1 to: N-1
×16000100001 → ○15999800001
>>645 (*´σー`)エヘヘ
だんな、おいらも未満にきづかなかったべ
ま、いいやないの
> [*1...300000].delete_if{|x|x%9==0}.select{|x|x%3==0||x%5==0}.reduce(:+) => 15999800001
649 :
デフォルトの名無しさん :2015/03/07(土) 22:32:09.50 ID:FS79VVDG
>>643 なんで閉じカッコの場所をSmalltalkらしくしないの?
つうか1からNまでループするのは賢くない気がする
俺のはコレクター(継続し渡し)による末尾再帰最適化を施した再帰処理やで よって再帰やけど単純ループに相当する速さや 速くていいのは再帰に牛丼 速すぎていけないのは車と早漏
>>645-646 なんだ、そういうミスか。びっくりした。
どこ直そうか全然わからなかった。
>>652 こういう一発技を捻れなかったからループを使いました。(偉そう)
今、滅茶苦茶調子悪いの。Orz
俺はScheme勉強中だから何が何でも再帰や! あはは
>>633 GNU Smalltalk
Interval extend [
sum [^self first + self last * self size / 2]
]
fn := [:N |
((3 to: N-1 by: 3) sum + (5 to: N-1 by: 5) sum - (3*5 to: N-1 by: 3*5) sum - (9 to: N-1 by: 9) sum)
].
(fn value: 300000) printNl => 15999800001
http://ideone.com/F6y8M2
深さ優先探索と幅優先探索ってどうやって使い分けていいのかおしえて
マンコに入れる時は深さ優先 オッパイもみもみするときは幅優先かなあ
キモヲタ丸出しw 馬鹿じゃねえの
俺のそそり立つチンコ見てもそう言えるか?ああん?
自分は、メモリケチりたいときは深さ優先検索でメモリ有り余ってる時は幅検索かな。 問題の質にもよるけど、全幅検索して万能解出したいときは幅検索しないときついときがある。 最適解でいいなら深さ優先検索のほうが早いと思う。
661 :
吐いた :2015/03/08(日) 17:17:12.77 ID:ZWLsQWi0
数学の知識が無くても解けるがあると効率良くなる問題を出題してください
それ、おれですよ出題したのおれなんですよ その問題しか知りません
お題:Lisp風の丸かっこ( )で構造化されたデータをてきとーにXMLに変換する
>>664 もうやっていらっしゃる気もするけど Project Euler の最初の方とかいいんじゃなかろうか
お題:ネイピア数eを十進数で表記すると0から9までのすべての数字があらわれるのは小数点以下20桁目ですが、 "000"から"999"までのすべての文字列があらわれるのは小数点以下何桁目かを求めてください。 ("718"と"182"は小数点以下4桁目までにともに含まれるものとします) (substring e 1 (+ 20 2)) ".71828182845904523536" (apply #'max (loop for i from 0 to 9 collect (search (format "%d" i) (substring e 1 (+ 20 2))))) 20 (substring e 1 (+ 4 2)) ".7182" (+ (search "718" (substring e 1 (+ 4 2))) 2) 3 (+ (search "182" (substring e 1 (+ 4 2))) 2) 4
>>670 Squeak Smalltalk
| N M epsilon e x max |
N := 10000.
M := 3.
epsilon := 10 raisedTo: N negated.
e := 2 asScaledDecimal: N.
x := 1.
[ | delta | e := e + (delta := 1 / (x := x + 1) factorial). delta < epsilon] whileFalse.
e := e printString.
e := e copyFrom: 3 to: e size - 1 - N printString size.
max := 0.
($0 to: $9) asDigitsToPower: M do: [:digits |
| loc |
loc := e indexOfSubCollection: digits.
loc = 0 ifTrue: [^'not found ', (digits as: String), '. try larger N'].
loc > max ifTrue: [max := loc]
].
^max "=> 8089 "
>>667 F#
open System
let rec manyAcc p xs = p xs |> function
| None -> [], xs
| Some(x, xs) -> let rs, xs = manyAcc p xs in x::rs, xs
let (<|>) l r xs = (l xs, r xs) |> function
| Some x, _ | _, Some x -> Some x
| _ -> None
let (|>>) p f = p >> Option.map (fun (x, xs) -> f x, xs)
let (.>.) l r = l >> Option.bind (fun (x1, xs) -> (r |>> fun x2 -> (x1, x2)) xs)
let wrap o c p = o .>. p .>. c |>> (fst >> snd)
let many p = manyAcc p >> Some
let many1 p = p .>. many p |>> List.Cons
let such p = function x::xs when p x -> Some(x, xs) | _ -> None
let (~%) c = such <| (=) c
let space = such Char.IsWhiteSpace
let token p = wrap (many space) (many space) p
let putChars xs _ = Seq.iter (printf "%c") xs
let putElem n xs _ = printf "<"; n(); printf ">"; xs(); printf "</"; n(); printf ">"
let string = wrap %'\'' %'\'' (many (such ((<>) '\''))) |>> (putChars >> putElem (putChars "str"))
let int = many1 (such Char.IsNumber) |>> (putChars >> putElem (putChars "int"))
let name = many1 (such Char.IsLetter) |>> putChars
let _expr = ref <| failwithf "%A"
let expr = fun xs -> !_expr xs
let list = wrap (token %'(') (token %')') (name .>. many expr) |>> fun (n, xs) -> putElem n (fun () -> for e in xs do e())
_expr := list <|> token int <|> token string
let printXml = Seq.toList >> expr >> Option.iter (fst >> (|>) ())
printXml "(data 'ten')" // <data><str>ten</str></data>
printXml "(res 774 (body 'test'))" // <res><int>774</int><body><str>test</str></body></res>
>>671 あ、すみません。最後 + 2 するの忘れました。orz
× ^max → ○ ^max + M - 1
× => 8089 → ○ => 8091
仕様 ・a要素の中にはb要素とテキストを挿入できる ・b要素にはテキストのみ挿入できる。 ・要素は閉じなければならない<要素名></要素名> 制約 ・テキストは[a-zA-Z0-9]のみで最大100文字の長さである事が保証される ・要素はaとbの二つしか存在しないことが保証される。 ・テストに使われる文字列は[<>/a-z-A-Z0-9]のみが保証される 以下は正しい構造である <a>ruby<b>php</b>python</a><a><b></b></a><a></a> お題 与えられた文字列が正しい構造であれば1、正しくなければ0を出力しなさい <a>ruby<b>php</b>python</a><a></b></a><a></a> <a>ruby<b>php</b>python</a><a><b></a><a></a> <a>ruby<b>php</b>python</a><a><b></b></a><a> vvvc<a>ruby<b>php</b>python</a><a><b></b></a><a></a>
675 :
674 :2015/03/09(月) 17:20:18.97 ID:gk6yvFxP
HTMLパーサー等のライブラリの仕様禁止
テキストは要素の外にあってもいいんかね?
はい、かまいません
683 :
デフォルトの名無しさん :2015/03/10(火) 12:39:28.46 ID:WQWlRlS8
メモリ512MのPCで、改行区切りのサイズ500M程度の2つのテキストの共通部分、差分を速く計算するにはどうしたらいいですか。
684 :
デフォルトの名無しさん :2015/03/10(火) 12:48:35.51 ID:WQWlRlS8
>>683 unix系でむかしから知られてる方法は遅いんです。
sort moto.txt del.txt | uniq -d > union.txt
sort moto.txt union.txt | uniq -u > difference.txt
uniq
-d : 元のファイルで繰り返し出現した行だけを出力
-u : 元のファイルで繰り返し出現しない行だけを出力
ファイル処理の問題かあ 500Mだけど1行のファイルの場合
686 :
681 :
2015/03/11(水) 11:56:44.17 ID:qwMaOuz+