タグ付けされた質問 「restricted-complexity」

特定の時間の複雑さの制限を満たすためにすべての回答を必要とする仕様の課題。これは、特定のもの(「あなたの答えはO(n ^ 2)である必要があります。ここで、nは入力の項目数です」)、または複雑度クラスのレベル(「あなたの答えは、入力")。

4
一般化グレーコード
入力:配列Iのk個の正の整数。整数は100以下で、k≤100です。 出力:あなたのコードを出力しなければならないすべての可能な配列のO長の非負整数のkの制限と0≤O I ≤I I。 ある配列から次の配列に移動するには、配列の1つの値に1を加算または減算します。コードで同じ配列を2回出力してはいけません。出力される異なる配列の数が非常に多い場合、コードは強制終了されるまで永久に出力を続ける必要があります。 例 Iがk個の配列である場合、これはビット幅kのすべてのグレイコードを反復処理する問題です。ただし、最初と最後の要素が1ステップで到達可能である必要はありません。 その場合I = [2,1]、出力配列の可能な順序は次のとおりです。(0,0),(0,1),(1,1),(1,0),(2,0),(2,1) その場合I = [2,1,3]、出力配列の可能な順序の1つは(0,0,0),(0,0,1),(0,0,2),(0,0,3),(0,1,3),(0,1,2),(0,1,1),(0,1,0),(1,1,0),(1,1,1),(1,1,2),(1,1,3),(2,1,3),(2,1,2),(2,1,1),(2,1,0),...です。 これはコードゴルフの挑戦であり、最短のソースコードでの提出が勝ちです。ゴルフ言語での短い回答が他の言語での回答の投稿を妨げないようにしてください。どの言語でも最短回答を考えてください。 これも複雑さの制限の課題です。すべての新しい配列は、前に出力された配列(または出力された最初の配列のプログラムの開始)から経過したO(k)時間で出力される必要があります。つまり、新しい出力配列(それぞれの長さはk)あたりの実行時間はO(k)以下でなければなりません。つまり、k 2または2 kのように、kに比例する時間が必要です。これは、出力ごとの平均時間ではなく、出力される各配列の最悪の場合の時間であることに注意してください。 64ビット整数でのすべての算術演算は、配列内の値の割り当てと検索および変更だけでなく、それらの読み取りおよび出力と同様に、一定時間で実行できると想定できます。 複雑さが制限されていることの1つの結果は、プログラムの終了時にのみ出力されるソリューションは受け入れられないことです。

11
秘書の問題を解決する
秘書の問題は、これと述べた有名な問題です。 新しい秘書が必要です N人の応募者がいて、一度に1人ずつ面接できます 面接後に各応募者を採点できます。あなたのスコアリングシステムは、2人の志願者に同じスコアを与えることはありません 応募者に面接した後、すぐに「はい」または「いいえ」を提出する必要があります 最高得点の応募者が欲しい 解決策は、最初のfloor(N/e)応募者にインタビューし、それまでの応募者全員よりも高いスコアを持つ最初の応募者を受け入れることです。申請者のいずれもより高い場合、最後の申請者を返します。おもしろいことに、これは1/e時間の上位の申請者にパーセントを与えます。 オイラーの番号をe指します。の値を取得するにはeは、組み込みのを使用するlogか、少なくとも5つの小数点にハードコードします。 入力: 以下の一意の非負整数の空でない配列 2^31-1。 出力: 選択された候補を表す整数。アルゴリズムを明確にするために: 最初の最大要素を見つける floor(N/e)配列の要素で。 残りの要素を反復処理し、手順1で見つかった最大値よりも大きい最初の要素を返します。 いずれの要素も高ければ、最後の要素を返します。 たとえば、配列が[2,7,4,3,9,20]であったN = 6としfloor(N/e) = 2ます。配列の最初の2つの要素は[2,7]です。の最大値は[2,7]です7。残りの要素は[4,3,9,20]です。大きい最初の要素7である9私たちが戻るので、9。 テストケース: [0] => 0 [100] => 100 [100, 45] => 100 [0, 1] => 0 [45, 100] => 45 [1, 4, 5] => 4 [1, 5, 4] => …

15
最長のスティックを選ぶ
あなたは他の2人の親友と一緒に住んでいる若いプログラミングオタクです。毎週、あなたの一人が家のすべての雑用をしなければなりません、そして、あなたは棒を選ぶことによってそれが誰の番であるかを決定します。最も短い棒を選んだ人は、すべての雑用を失い、します。 皆さんはプログラマーであり、パズルを作成するのが大好きなので、「最短のスティックを選ぶ」をコンピューターパズルに変更しました。 ここにパズルのルールがあります。 各列が棒を表す2Dマトリックスが表示されます。 各列の1はスティックの一部を表し、0は空のスペースを表します 各列の上から下に移動すると、最初にがあり、を押す0とすぐ1にスティックが開始され、列の残りの部分がいっぱいになります1だけ 1つの列を選択するプログラムを作成できます。その列のスティックのサイズが勝者/敗者を決定します。スティックのサイズ==その列の1の数。 ただし、そのプログラムは線形の最悪の場合の時間の複雑さしか持つことができません。 みなさんはプログラマーなので、他の誰かのプログラムが時間の複雑さの限界に達しているかどうかを知るでしょう。 あなたの仕事は: 2D形式または文字列の配列で入力を受け入れるプログラムまたは関数を作成します。 入力は、STDIN / prompt / consoleまたは関数の引数から取得できます。 STDIN /プロンプトから入力を読み込んでいる場合、入力の読み込みと配列への変換にかかる時間は0時間であると想定できます(そうするためのコードが答えに含まれていなければなりません) 最も長い棒が入っている列を決定します。 出力は、関数の戻り値またはSTDOUT / console / alertになります。 プログラム/関数は、線形の最悪の場合の時間の複雑さを持つ必要があります。O(m+n)ここmで、は行n数と列数です。 入力は、次の形式のいずれかです。 2D配列: [ [0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 0, 1], [1, 1, 1, 1] ] 文字列の配列: [ "0000", "1000", "1101", …

15
時間内にビニング
この課題のタスクは、配列の要素を時間ビンに入れることです。入力は、イベントの時間を表す正の整数の非減少配列と、各ビンのサイズを表す整数になります。例から始めましょう。入力配列Aと出力配列を呼び出しますO。 `A = [1,1,1,2,7,10]` and `bin_size = 2`. `O = [4,0,0,1,1]`. なんで?bin_size = 2:、我々は次のような間隔がありませんよ(0,2], (2,4], (4,6], (6,8], (8,10]、4つの項目は、(1,1,1,2)最初の区間内にあるが(0,2]、第二と第三の間隔、1でどれ7間隔で(6,8]、1 10時間間隔でを(8,10]。 コードは、bin_size先頭から始まるすべての間隔を考慮し、それぞれに含まれる0数字の数をカウントするA必要があります。間隔の右端を常にビンに含める必要があるため、上記の例2ではのカウントに含まれます4。コードは、入力と出力の長さの合計で線形時間で実行する必要があります。 その他の例: `A = [1,2,7,12,15]` and `bin_size = 5`. `O = [2, 1, 2]`. `A = [1,2,7,12,15]` and `bin_size = 3`. `O = [2,0,1,1,1]`. 入力および出力は、便利な任意の形式で指定できると想定できます。好きな言語とライブラリを使用できます。

14
配列をビンに入れます
この単純なチャレンジでは、L負でない整数の入力配列と、b0より大きく、の長さ以下のビンの数が与えられますL。コードはM、長さがbで、配列をビニングした新しい配列を返す必要がありLます。これは例で簡単に説明できます。 L = [1,0,5,1]をb = 2返しますM = [1,6]。 L = [0,3,7,2,5,1]をb = 3返しますM = [3,9,6]。 これまでのところ、とても簡単です。ただし、この質問でbは必ずしも分割する必要はありませんlen(L)。この場合、最後のビンはそれを補うための数が少なくなります。 おそらく最後のビンを除く各ビンは、その合計に寄与する数と同じ数でなければなりません。最後のビンには、他のビンよりも多くの数字が含まれてはなりません。最後のビンには、他のルールに従って、できるだけ多くの数字が含まれている必要があります。 L = [0,3,7,2,5,1]をb = 4返しますM = [3,9,6,0]。 M = [10,8,0,0]3番目のビンにはビン1ととして名前の番号が含まれていないため、出力は受け入れられません2。 L = [0,3,7,2,5]をb = 2返しますM = [10,7]。 M = [3, 14]最後のビンには3要素が含まれていますが、最初のビンには2。 L = [1,1,1,1,1,1,1]をb = 3返しますM = [3,3,1]。 最後のルールとして、コードは線形時間で実行する必要があります。 任意の言語またはライブラリを使用でき、便利な方法で入力が提供されると想定できます。 解決できない入力がいくつかあることがわかります。たとえば[1,1,1,1,1]とb=4。あなたのコードは、それらの入力に対して好きなものを出力できます。

23
多角形の数字
多角形の数は、kサイズの1角形のドットの数ですn。 とが与えられn、kあなたの仕事は、対応する番号を出力/印刷するプログラム/関数を書くことです。 得点 これはcode-golfです。バイト単位の最短ソリューションが勝ちです。 例 3RD六角数は(k=6, n=3)で28あるので、28上記のドットが。 テストケース このPythテストスイートから生成できます。 使用法:テストケースごとに2行、n上、k下。 n k output 10 3 55 10 5 145 100 3 5050 1000 24 10990000 さらに詳しい情報 ウィキペディア:https : //en.wikipedia.org/wiki/Polygonal_number Wolfram Mathworld:http : //mathworld.wolfram.com/PolygonalNumber.html OEIS Wiki:http : //oeis.org/wiki/Polygonal_numbers さまざまなnのn対角数のOEISシーケンス:3 (A000217)、4 (A000290)、5 (A000326)、6 (A000384)、7 (A000566)、8 (A000567)、9 (A001106)、10 (A001107)、11 (A051682)、12 (A051624)、13 (A051865)、14 (A051866)、15 …

2
ペアコンデンサ
コンデンサは高い公差で製造されていることで有名です。これは多くの場合許容されますが、許容範囲の厳しいキャパシティが必要になる場合があります。必要な正確な値で容量を取得する一般的な戦略は、慎重に測定した2つのコンデンサを並列に使用して、容量が必要な範囲内になるようにすることです。 この課題の目標は、(複数の)容量のセットが与えられ、各ペアの合計容量が所定の範囲内になるようにコンデンサをペアにすることです。また、最適なペアリングのセット、つまり、できるだけ多くのペアが見つかるようなペアリングのセットを見つける必要があります。 制約 入力は選択した形式で構成されます 持っているコンデンサの(複数の)セットを表す容量の順序なしリスト ターゲット範囲の下限と上限を表す容量のペア(包括的) 入力のすべての容量は2 30より小さい正の整数であり、単位はpFです(それは重要ではありません)。 入力の容量のリストに加えて、所有するコンデンサのセットには、値が0 pFのコンデンサが無限に含まれています。 出力は、各ペアの合計が指定されたターゲット範囲内になるように、容量のペアのリストを選択の形式で構成します。ペアの順序もペア内の容量の順序も指定されていません。 出力の容量は、お持ちのコンデンサのセットよりも頻繁に表示されることはありません。つまり、出力するペアは重複してはなりません。 プログラムが生成する出力よりも多くの容量のペアを含む、条件4および5を満たす出力はありません。 プログラムはO(n!)時間で終了します。nは、所有するコンデンサのセットを表すリストの長さです 抜け穴は悪用されない 目標範囲は空であってはなりません 得点 スコアは、オクテット単位のソリューションの長さです。ソリューションがこの問題を多項式時間O(のn のkいくつかのために)のk、これは実際に可能であるならば、私は知らない10であなたのスコアを分割します。 サンプル入力 範囲100〜100、入力配列 100 100 100、有効な出力: 0 100 0 100 0 100 範囲100〜120、入力配列20 80 100、有効な出力: 0 100 20 80 出力20 100は無効です 範囲90〜100、入力配列50 20 40 90 80 30 60 70 40、有効な出力: 0 90 …

3
棚の本
本と本棚があります。できるだけ多くの本を棚に置きたいのですが、ルールがあります。ブックのすべての寸法(高さ、幅、深さ)は、シェルフ上で増加しないシーケンスを形成する必要があります。 これは、すべての本が少なくともそれ以降の本と同じ高さでなければならないことを意味します。同じことが幅と深さについても言えます。本を回転して高さ、幅、奥行きを入れ替えることはできません。 すべての書籍の寸法を入力出力として指定するか、棚に置くことができる書籍の最大数を返すプログラムまたは関数を作成する必要があります。 入力 正の整数のトリプレットのリスト。各トリプレットは本の高さ、幅、深さを定義します。 入力リストには少なくとも1つのトリプレットがあります。 2冊の本は、任意の数の次元に沿って同じ長さを持つことができます。 出力 単一の正の整数、ルールに従って棚に収まる本の最大数。 時間の複雑さ アルゴリズムには、書籍の数が最悪の場合の時間複雑度多項式が必要です。これは、たとえば、次の時間計算量がすべて有効であることを意味します:O(N ^ 3)、O(log(N)* N ^ 2)、O(N)、および次のものは無効です:O(2 ^ N)、 O(N!)、O(N ^ N)。 例 入力=>出力 (1, 1, 1) => 1 (5, 2, 5), (1, 3, 5) => 1 (5, 2, 5), (1, 2, 5) => 2 (2, 2, 2), (2, 2, 2), …

1
地雷原の丁寧な近視の酔ったボット
タイトルが示すように、この問題は@NPのPolite Near-Sighted Drunk Botに半インスパイアされています 貧弱なボットは原点のデカルトグリッド上に配置され、1分ごとに4方向(上、下、左、右)のいずれかに1ユニット移動します。 n分後、グリッド上のすべての潜在的な地雷がアクティブになり、それらの上に自分自身を見つける可能性のある貧しいボットを殺します。鉱山は、式| y | = | x |を満たすすべての整数座標に配置されます。 チャレンジ あなたは提供されますn個の入力として、地雷の爆発の前に、分の数を、出力として、あなたはボットである確率見つけなければならない死者を。 入力:nを表す自然数。 出力:ボットが死んでいる確率をp / qとします。ここで、pとqは比較的素数の整数です(qは0にはできませんが、pはできます)。出力p。 ルール アルゴリズムを指数関数的またはそれ以上の時間で実行してはなりません。理想的には、多項式時間以下で実行する必要があります。 アルゴリズムnは、妥当な時間内に20未満の入力を処理できる必要があります(難しすぎる場合は調整可能)。 これはコードゴルフの挑戦です。 与えられたnのすべての可能性を反復することは、答えとして受け入れられることはほとんどありません。 テストケース 1->0 2->3 4->39 6->135 8->7735 10->28287 n = 6の計算例 U、D、R、およびLの4つの可能な移動があります。使用できるパスの合計数は4 ^ 6または4096です。線y = xに沿って着陸する4つの可能なケースがあります:x、y = ±1; x、y =±2; x、y =±3; またはx = y =0。最終的に(1,1)、(2,2)、および(3,3)になる方法の数をカウントし、それらに4を掛けて他の象限を考慮し、追加します。これは、最終的に(0,0)になる方法の数です。 ケース1:ボットは(3、3)で終了します。ボットがここで終了するためには、3回の正しい移動と3回の移動が必要です。言い換えると、ここに到達する方法の総数は、RRRUUUシーケンス内の文字を再配置する方法であり、6 = …

8
ファイの三角形を描く
明確化:基本的に、これを作成する必要があります オイラーのtotient関数の名前はphiです。 phi(8)を計算してみましょう まず、0以下を含まない、8以下のすべての数字を後方にリストします 8 7 6 5 4 3 2 1 次に、8と因子を共有しない数字を見つけ(1はカウントしません)、その場所にa #を配置します。 8 # 6 # 4 # 2 # 数字を削除します。 # # # # - これを行いますが、出力を三角形にまとめます 9 88 777 6666 55555 444444 3333333 22222222 111111111 --------- 123456789 # 非因子共有番号を出力する 9 8# 7## 6#66 5#### 4#4#4# 3##3##3 2#2#2#2# …

23
正の除数を見つけてください!
定義 ゼロより大きい場合、数値は正です。 数(A)は、別の数(の除数であるB場合)Aに分割することができBない残り。 たとえば、余りなしで除算できるため2、の除数です。626 ゴール あなたの仕事は、正の数をとるプログラム/関数を作成し、その除数をすべて見つけることです。 制限 prime または factorizationに関連する組み込みは使用できません。 アルゴリズムの複雑さはO(sqrt(n))を超えてはなりません。 自由 出力リストに重複が含まれている場合があります。 出力リストをソートする必要はありません。 得点 これはcode-golfです。バイト単位の最短ソリューションが勝ちです。 テストケース input output 1 1 2 1,2 6 1,2,3,6 9 1,3,9

9
古典的な分類コードとゴルフの質問
これはコードゴルフの質問です。 入力 最も便利な任意の形式の非負整数のリスト。 出力 最も便利な形式でソートされた順序で同じリスト。 制限 入力の整数の数が最悪の場合、コードはO(n log n)時間で実行する必要がnあります。これは、例えば、ランダム化されたクイックソートが出ていることを意味します。ただし、他にも多くの選択肢があります。 並べ替えライブラリ/関数/類似物を使用しないでください。また、ヒープライブラリのように、ほとんどの並べ替え作業を行うものは使用しないでください。基本的に、実装するものは何でも、ゼロから実装します。 必要に応じて関数を定義できますが、実際に動作する完全なプログラムでその例を示してください。以下のすべてのテストケースで正常かつ迅速に実行されるはずです。 テストケース In: [9, 8, 3, 2, 4, 6, 5, 1, 7, 0] Out:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In: [72, 59, 95, 68, 84] Out:[59, 68, 72, 84, 95] In: [2, 2, 1, 9, 3, …

6
最短距離の合計を見つける
このタスクでは、コードは、整数XおよびYの2つの並べ替えられた配列を入力として受け取る必要があります。Xの各整数とYの最も近い数の間の絶対距離の合計を計算する必要があります。 例: X = (1 5,9) Y = (3,4,7) 距離は2 + 1 + 2です。 X = (1,2,3) Y = (0,8) 距離は1 + 2 + 3です。 コードは、都合のよい方法で入力を受け取ることができます。 主な制限は、コードが2つの配列の長さの合計で線形時間で実行される必要があることです。。(2つの整数の加算には一定の時間がかかると想定できます。)

5
循環制限付き合計
チャレンジ N0以上の整数のタプルを想像して、Mそれを呼び出しましょうF。 合計での(M + 1) ** N可能性がありますF。 F次の不等式をすべて満たすそのようなsはいくつありますか(インデックスは1ベース)。 F[n] + F[n+1] <= M ために 1 <= n < N F[N] + F[1] <= M 2つの取るプログラムまたは機能書く正の整数を Nし、Mそして任意の便利な形で答えを出力します。 テストケース (N,M) => Answer (1,1) => 1 (2,1) => 3 (3,1) => 4 (4,1) => 7 (1,2) => 2 (2,2) => 6 (3,2) => …

3
単語リストから最短のパングラムを見つける
パングラムは、すべての文字を含む文字列ですa- z英語のアルファベット、大文字と小文字を区別しませんの。(パングラムに文字のコピーが複数含まれていたり、文字に加えて文字以外の文字が含まれていても問題ありません。) 入力が文字列のリストであり、次のプロパティを持つ1つ以上の文字列を出力するプログラムまたは関数を記述します。 各出力文字列はパングラムでなければなりません。 各出力文字列は、スペースで区切られた、入力リストからの1つ以上の文字列を連結して形成する必要があります。 各出力文字列は、これらのプロパティを持つすべての文字列の中で、最短であるか、最短で結合されている必要があります。 多くのプログラムは、1つの文字列のみを出力することを選択します。出力を制限するために追加のコードを作成する必要がある場合にのみ、複数の文字列を出力する必要があります。 入力に印刷できない文字やスペースが含まれておらず、その中の単語が(リストの長さの自然対数の26倍)文字を超えていないと想定する場合があります。(ただし、入力に文字のみ、または小文字のみが含まれているとは限りません。句読点と大文字は完全に可能です。) 入力と出力は、適切な形式で指定できます。プログラムのテストには、2つのテストケースを使用することをお勧めします。英語の単語の辞書(ほとんどのコンピューターには1つあります)と、次のケース(完全な(26文字)のパングラムが不可能な場合)を見つける必要があります。重複した文字を含む): abcdefghi defghijkl ijklmnop lmnopqrs opqrstuvw rstuvwxyz 提出物とともに、プログラムの出力のサンプルを含める必要があります。(これは、異なる単語リストを使用した結果、人によって異なる場合があります。) 勝利条件 これは、複雑さ が制限されたコードゴルフの課題です。勝者は、多項式時間で実行される最も短いプログラム(バイト単位)です。(それが何を意味するのかを知らない人のための要約:単語リストのサイズを2倍にすると、プログラムは一定の係数以下で遅くなるはずです。しかし、問題の定数係数はあなたと同じくらい大きくすることができますたとえば、4倍または8倍遅くなることは有効ですが、単語リストの長さの係数だけ小さくなることはありません。遅くなる係数には制限があるはずです。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.