タグ付けされた質問 「set-partitions」

セットをより小さなばらばらのセットに分割することに関連する課題。これには、リストのような順序付けられたコレクションの細分や、間隔のような非離散セットも含まれます。課題では、使用するパーティションの概念を慎重に定義する必要があります。

4
グリッドをグリッドに分割する
前書き 少数の家と空の畑だけの小さな村があります。地元の官僚は、各ロットに正確に1つの家が含まれるように村をロットに分割し、ロットの境界がすてきな直線グリッドを形成することを望んでいます。あなたの仕事は、これが可能かどうかを判断することです。 タスク 入力は、ビットの長方形の2D配列です。1は家を表し、0は空のフィールドを表します。そのサイズは少なくとも1×1であり、少なくとも1つ1を含みます。任意の妥当な形式(ネストされた整数のリスト、文字列のリスト、複数行の文字列など)で入力を取得できます。 プログラムは、各グリッドセルに正確に1つが含まれるように、水平および垂直の直線を使用して配列をグリッドセルに分割できるかどうかを決定するものとします。ラインは、配列の一方の端から反対側の端まで実行する必要があります。 たとえば、次は配列の有効な分割です。 00|0010|01|1 01|0000|00|0 --+----+--+- 00|0000|00|1 01|0010|01|0 --+----+--+- 01|1000|10|1 一方、次の区分は有効ではありません。1を持たないグリッドセルまたは1を超えるグリッドセルがあるためです。 00|0010|01|1 --+----+--+- 01|0000|00|0 00|0000|00|1 01|0010|01|0 --+----+--+- 00|1000|10|1 有効な部門が存在する場合、真理値を出力し、それ以外の場合は偽値を出力します。 ルールとスコアリング 完全なプログラムまたは関数を作成できます。最も低いバイトカウントが優先されます。 テストケース [[1]] -> True [[0,1],[1,0]] -> True [[1,1],[1,0]] -> False [[1,0,1],[0,1,0]] -> True [[1,0],[0,1],[0,1]] -> True [[1,0,0],[0,0,1],[0,1,1]] -> True [[1,1,1],[1,1,1],[1,1,1]] -> True [[1,0,1],[0,1,0],[1,0,0]] -> True [[1,0,0],[1,0,0],[0,1,1]] …

1
グリッドタングラムを解く
タングラムは五異なるサイズの三角形、平行四辺形や広場:7つの形状から作られた解剖パズルです。形状が与えられた場合、目標は、すべてのピースを使用して、重複することなく形状を再作成することです。このピースのセットを平面に配置するには、明らかに無限に多くの方法があります。興味深いサブセットは グリッドタングラム 「標準の」タングラム正方形を、グリッドで 16個の小さな正方形に分割された大きな正方形に描画できます。グリッドタングラムは、タングラムのすべての頂点がグリッドポイント上にあるように、タングラムのピースで構成される形状です。 これらは、おそらくより一般的なものよりも扱いやすいため、この課題で検討したいタングラムパズルの種類です。 補足:中国の数学者であるChuan-Chin HsiungとFu Traing Wangは、1942年に凸タングラムが13個しかないことを証明しました。彼らはまず問題をグリッドタングラムに縮小できることを示し、次にいくつかの組み合わせおよび幾何学的引数を使用しました。これらはすべて13です。 チャレンジ 解けるグリッドタングラムが与えられた場合、グリッドタングラムの解剖を7つのタングラムピースに出力します。 IO タングラムは、両側が50pxの倍数である白黒画像(形状は黒、背景は白)として与えられます。グリッドの幅は正確に50pxです。グリッド線は画像の側面に平行です。 編集:画像は入力として受け入れられ、PNG、TIFF、PBMなどの便利なラスター画像形式で出力として返されますが、バイナリ2d配列または文字列または行列としての表現は受け入れられます。 出力も同じサイズで同じ形状である必要がありますが、各ピースの色が異なるか、すべてのピースを分離する白い線が必要です。四角形以外の四角形を反転できることに注意してください。 ピースの境界上のピクセルは、シェイプ上のピクセルと正確に一致する必要はありません。エイリアシング効果やその他のファズがある場合でも、これで問題ありません。 入力と出力の例: 例: 可能な解決策:

4
矩形差
この課題では、2つの重複する長方形が与えられ、一方を他方から削除して作成された長方形を計算する必要があります。 たとえば、黒い長方形から赤い長方形を削除する場合: 次の2つの長方形セットのいずれかになります。 また、以下を処理する必要があります。 より明確にするには: AとBの2つの長方形の座標を入力します。 Bを除くAのすべての領域をカバーする、重複しない最小の長方形を出力する必要があります。可能なカバーは許可されています 直交座標は4つの整数として渡されます。2つのペア(2つのコーナーポイントを表す)で、または4つの整数のタプル/リストとして渡すことができます。入力と出力は一貫している必要があります。 AとBは必ずしも重複または接触するわけではなく、それぞれ少なくとも1 テストケース: [(0 0) (5 5)] [(3 4) (8 7)] -> [(0 0) (5 4)] [(0 4) (3 5)] # or [(0 0) (3 5)] [(3 0) (5 4)] [(2 4) (10 11)] [(5 5) (6 6)] -> [(2 4) (10 5)] …

13
洗練されたパーティション
整数の配列を考えます: [1, 0, 9, 1, 3, 8] このリストを連続したサブリストに分割する方法はたくさんあります。3つあります。 A: [[1, 0, 9], [1, 3, 8]] B: [[1], [0, 9], [1, 3], [8]] C: [[1, 0], [9, 1], [3, 8]] サブリストを結合してYからXを取得できる場合、パーティションYと別のパーティションXの改良版を呼び出します。 のB洗練もA同様です。最初の2つのサブリストと最後の2つのサブリストを結合して戻すと、が得られAます。しかしC、それは洗練されたものではありません。それから回復するにはA、9とを分割する必要があります。また、どのパーティションもそれ自体が洗練されたものです。1A サブリストまたは要素をいつでも再配置することは許可されていないことに注意してください。 チャレンジ 2つのパーティション(整数のリストのリスト)Xおよびが与えられY、Yがの洗練であるかどうかを判断しXます。 あなたは、パーティションのみから整数が含まれていることを仮定してもよい0の9包括的、。あなたはそれXをY同じリストのパーティションであると仮定してはなりません(そうでない場合、互いの改良でもありません)。Xおよび/またはY空であっても、空のサブリストが含まれることはありません。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 入力は、任意の便利な文字列またはリスト形式で取得できます。要素は1桁の整数のみであるため、サブリスト内の区切り文字を省略することもできますが、先頭0のsが可能なことを確認してください。あなたは取ることを選んでもよいXし、Y逆の順序で。 出力は、洗練されている場合は真実であり、そうでない場合は偽である必要Yがあります。X コードは、妥当なデスクトップマシンで1秒以内に以下の各テストケースを解決できる必要があります。(これは、単純なブルートフォースソリューションを回避するための単なる健全性チェックです。) これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。 テストケース 各テストケースは、と書かれた独自の行にありX Yます。GolfScript / CJamスタイルの配列表記を使用して、水平方向のスペースを節約しています。 真実: [] [] [[0]] [[0]] …

1
ASCIIハマンタッシェンを数えてください!
今日のプリムでは、1つの習慣として、hamantaschen(単数形:hamantasch)と呼ばれるフィリング付きの三角形のクッキーを配ります。別の習慣は、大量に飲むことです。 私は最も完璧なパン屋ではありません。...配る不規則なサイズのハマンタッシェンはたくさんありますし、配る友達もたくさんいます!クッキーの写真を送った場合、どのサイズと詰め物をいくつ持っているか教えてもらえますか?しかし、それはPurimであり、私はあまりにも多くのコードを読むにはあまりにも酔っているので、できる限り小さいコードである必要があります。 定義 サイズ ハマンタッシュのサイズは任意です。最小のハマンタッシュはサイズ1で、次のようになります。 /\ -- -- \/ 時には、複数のハマンタッシェンが重なることがあります。以下の形状は、2つのハマンタッシェンとしてカウントされます(1サイズ1、1サイズ2): /\ /\ \ ---- 一部のハマンタッシェンには詰め物があります。これは、内部のすべての空白を文字で埋めることによって示されます。サイズ1のhamantaschenには詰め物がないことに注意してください。 私たちはします名前充填およびサイズに基づいてhamantaschenを。この形式<filling> <size>を使用して、埋められていない場合- <size>は、の代わりにスペースを使用できます-が、マークダウンはそれを好みません。 以下がa . 2、a . 4、およびa - 3です。 /\ /./\ ---- /./ \ \../ /./ \ \/ -------- これらは、a @ 3、a、. 2およびa - 4です。 /\ / /\ /\ / /@@\ /..\ / /@@@@\ …

1
正方形グリッドを等しい面積の部分に分割する
この課題は、次のパズルに基づいています。セルにマークが付いnたnグリッドごとに与えられnます。あなたの仕事はn、各部分nが正確に1つのマークされたセルを含む正確なセルで構成される部分にグリッドを分割することです。 例 左側にパズルを、右側にその(ユニークな)ソリューションを示します。 チャレンジ n妥当な形式のゼロインデックス座標のセットが提供されます。 [(0,0), (0,3), (1,0), (1,1), (2,2)] そして、あなたの仕事は、有効なパーティションを返すプログラムを作成することです(これも妥当な形式で)。 [ [(0,0), (0,1), (0,2), (1,2), (1,3)], [(0,3), (0,4), (1,4), (2,4), (3,4)], [(1,0), (2,0), (3,0), (4,0), (4,1)], [(1,1), (2,1), (3,1), (3,2), (4,2)], [(2,2), (2,3), (3,3), (4,3), (4,4)] ] パズルに解決策がない場合、プログラムはエラーをスローするか空の解決策を返すことでそれを示す必要があります。 入出力の例 [(0,0)] => [[(0,0)]] [(0,0), (1,1)] => [ [(0,0), (1,0)], [(0,1), …

15
リストをサイズのチャンクに分割しますが、述語に失敗したアイテムはカウントしません
動機:リスト内の特定のアイテムが合計にカウントされない場合があります。例えば、赤ちゃんが親の膝の上に座っている飛行機の乗客を列に数えます。 課題:アイテムのリストをチャンクに分割するプログラムを作成します。各チャンク(最後のチャンクを除く)は同じサイズです。サイズは、述語関数を渡すアイテムの数として定義されます。 ルール: あなたのプログラムは アイテムのリスト 正の整数チャンクサイズ 述語関数(項目を取り、trueまたはfalseを返します) 入力リストをチャンクに分割して返す必要があります 各チャンクはアイテムのリストです 全体的に、アイテムは同じ順序のままで、何も変装していない必要があります 各チャンク(おそらく最後を除く)で述語を渡すアイテムの数は、入力チャンクサイズと一致する必要があります。 述語に失敗したアイテムは、このサイズにカウントされません 述語に失敗した項目は 出力チャンクにまだ含まれています チャンクが「満杯」であるが、次の項目が述語に失敗したものである場合、最も早いチャンクに割り当てられます したがって、最終チャンクは、述語に失敗した項目のみで構成されない場合があります すべてのアイテムが考慮されているため、最終チャンクのサイズはチャンクサイズよりも小さい場合があります。 非網羅的な例: 最も簡単な例は、述語関数がである1sと0s を考慮することですx ==> x > 0。この場合、sum各チャンクのがチャンクサイズと一致する必要があります。 items:[]、size:2、predicate:x > 0-> []または[[]] アイテム:[0, 0, 0, 0, 0, 0]、サイズ:2、述語:x > 0->[[0, 0, 0, 0, 0, 0]] アイテム:[0, 1, 1, 0]、サイズ:2、述語:x > 0->[[0, 1, 1, 0]] …

25
シンプルなパターン
入力: 選択した入力形式での2つの1桁(それらをm、と呼んでみましょうn)と2つの文字(aとと呼んでみましょうb)。 出力: チュートリアルでは、のふりをしm=2, n=5, a='a', b='b'ます。 出力は、4つの入力から作成された文字列になります。resultvalueでstringを呼び出しましょう""。まず、CONCATENATE aへのresult m回なので、CONCATENATE aへresult 2回。resultに等しくなりましたaa。第二に、CONCATENATE bへのresult m回なので、CONCATENATE bへresult 2回。resultに等しくなりましたaabb。最後に、resultがすでにより長い場合n、resultlengthを持つように切り捨てnます。それ以外の場合は、のm長さの実行aとが長さになるbまで交互に続けます。最後は、長さです。resultnresultaabba5 テストケース: Input: m = 2, n = 4, a = A, b = B Output: AABB Input: m = 3, n = 8, a = A, b = B Output: AAABBBAA Input: m = …
17 code-golf  string  code-golf  arithmetic  code-golf  string  array-manipulation  rubiks-cube  code-golf  math  number  code-golf  tips  bash  code-golf  ascii-art  music  code-golf  arithmetic  code-golf  math  number  arithmetic  integer  code-golf  number  array-manipulation  code-golf  geometry  grid  set-partitions  code-golf  math  number  code-golf  combinatorics  code-golf  regular-expression  code-golf  permutations  code-golf  ascii-art  code-golf  number  array-manipulation  matrix  code-golf  kolmogorov-complexity  compile-time  cops-and-robbers  polyglot  cops-and-robbers  polyglot  code-golf  string  code-golf  string  ascii-art  matrix  animation  code-golf  ascii-art  code-golf  string  balanced-string  code-golf  integer  integer-partitions  expression-building 

7
合計のないパーティションを見つける
エグゼクティブサマリー 入力を考えるとk、整数のパーティションを見つける1にnにk最大のための和自由サブセットn10分以内にすることができます。 背景:シュール数 自己合計に共通する要素がない場合、セットAは合計なしですA + A = { x + y | x, y in A}。 すべての正の整数の場合はk整数の最大があるS(k)セットがあるよう{1, 2, ..., S(k)}に分割することができますk合計フリーサブセット。この番号は、k 番目の シューア番号(OEIS A045652)と呼ばれます。 たとえば、S(2) = 4。{1, 2, 3, 4}としてパーティション化できます。{1, 4}, {2, 3}これは、2つの合計のないサブセットへの一意のパーティションですが、5どちらの部分にもa を追加することはできません。 チャレンジ 以下を実行する決定論的プログラムを作成します。 k入力として正の整数を取る 現在のUnixタイムスタンプをstdoutに書き込みます パーティションのシーケンスを出力1するnにk増大させるための和自由サブセットn現在のUnixタイムスタンプを持つ各シーケンス以下、。 勝者は、n入力が与えられたときに私のコンピューターで10分以内に最大のパーティションを印刷するプログラム5です。n3回の実行で平均された最大のパーティションを見つけるための最も早い時間で関係が壊れます。そのため、出力にタイムスタンプを含める必要があります。 重要な詳細: 私はUbuntu Preciseを持っているので、あなたの言語がサポートされていない場合、スコアをつけることができません。 Intel Core2 Quad CPUを持っているので、マルチスレッドを使用したい場合、4つ以上のスレッドを使用しても意味がありません。 特定のコンパイラフラグまたは実装を使用する場合は、回答に明確に文書化してください。 入力を処理するためにコードを特殊なケースにしないでください5。 見つかったすべての改善を出力する必要はありません。たとえば、入力の2場合は、パーティションのみを出力できますn = …

7
番号のソートされた字句分割
課題は実に簡単です。数字が与えられたら、その数字を小さな数字の配列に分割し、結果の数字が減少しないようにします。キャッチは、配列の長さが最大になるように分割する必要があるということです。 混乱した? STDIN(または最も近い代替)、コマンドライン引数、または便利で明白な入力形式の関数引数を介して正の整数が与えられます。 数値の10進数を連続した互いに素なグループに分割する必要があります。 これらの数字グループで表される数値の配列は、グループを再配置せずに(通常の減少しない順序で)ソートする必要があります。 そのようなパーティションが複数存在する場合は、入力をできるだけ多くの数にパーティション分割する必要があります。同数の場合、そのような結果を1つ返します。 配列をSTDOUT(または最も近い代替)に出力するか、関数の戻り値として出力できます。STDOUT(または最も近い代替)の場合、配列は便利で明確なリスト形式で印刷する必要があります。 分割番号の先頭にゼロを付けないでください。そのため、たとえば1002003、[1, 002, 003]またはとして印刷することはできず[1, 2, 3]、それに対する唯一の有効な答えは[100, 2003]です。 テストケース: 123456 -> [1, 2, 3, 4, 5, 6] 345823 -> [3, 4, 5, 8, 23] 12345678901234567890 -> [1, 2, 3, 4, 5, 6, 7, 8, 90, 123, 456, 7890] 102 -> [102] 302 -> [302] 324142 …

10
水流のマップを分割する
これは、Parantir Technologiesがインタビューで尋ねたインターネット上の課題です。 ある農民グループには標高データがあり、降雨が農地をどのように流れるかを理解できるようにします。土地を2次元の高度の配列として表し、水が下り坂を流れるという考えに基づいて、次のモデルを使用します。 セルの隣接する4つのセルすべての高度が高い場合、このセルをシンクと呼びます。水は流しにたまります。それ以外の場合、水は最低高度の隣接セルに流れます。セルがシンクではない場合、一意の最下位ノードがあり、この近隣ノードはセルよりも低いと想定できます。 同じ流しに直接または間接的に流出する細胞は、同じ流域の一部であると言われています。 あなたの課題は、マップを盆地に分割することです。特に、標高のマップを指定すると、コードはマップを盆地に分割し、盆地のサイズを降順に出力する必要があります。 標高マップが正方形であると仮定します。入力は、マップの高さ(および幅)である1つの整数Sを持つ行で始まります。次のS行にはそれぞれマップの行が含まれ、それぞれにS整数(行のSセルの標高)が含まれます。下の例のような小さな土地区画を持つ農家もあれば、大きな区画を持つ農家もいます。ただし、農家がS = 5000を超える土地の区画を所有することはありません。 コードは、流域サイズのスペース区切りリストを降順で出力する必要があります。(末尾のスペースは無視されます。) いくつかの例を以下に示します。 入力: 3 1 5 2 2 4 7 3 6 9 出力: 7 2 AおよびBのラベルが付いた盆地は次のとおりです。 A A B A A B A A A 入力: 1 10 出力: 1 この場合、盆地は1つだけです。 入力: 5 1 0 2 5 8 2 3 …

7
完全な正方形のみを含むパーティションはいくつありますか?
非負の整数または数字のリストが与えられた場合、先行ゼロが含まれる可能性のある平方数を連結することで、いくつの方法で数を形成できるかを決定します。 例 input -> output # explanation 164 -> 2 # [16, 4], [1, 64] 101 -> 2 # [1, 01], [1, 0, 1] 100 -> 3 # [100], [1, 00], [1, 0, 0] 1 -> 1 # [1] 0 -> 1 # [0] 164900 -> 9 # [1, 64, …

2
増加するサブシーケンスへの分割
仕様 この課題は簡単に説明できます。入力は負でない整数の空ではない配列であり、タスクはできるだけ少ないサブシーケンスに分割することです。より正式にはA、入力配列がの場合、出力は次のBような配列の配列になります。 の各配列はB、A互いに素な(必ずしも連続していない)サブシーケンスへのパーティションを形成します。帰納的に、これはをB含むシングルトン配列Aであるか、の最初の要素BがのサブシーケンスでAあり、残りAがそのサブシーケンスが削除されたパーティションを形成することを意味します。 のすべての配列Bは(必ずしも厳密ではありませんが)増加しています。 配列の数Bは最小限です。 入力と出力の両方を、言語のネイティブ配列形式で取得できます。いくつかの正しい出力がある場合があることに注意してください。 例 入力配列を考えますA = [1,2,1,2,5,4,7,1]。可能な出力の1つですB = [[1],[1,2,4,7],[1,2,5]]。パーティションの状態は、次の図から明らかです。 A 1 2 1 2 5 4 7 1 B[0] 1 B[1] 1 2 4 7 B[2] 1 2 5 また、の各配列Bは増加しています。最後に、A増加する2つのサブシーケンスに分割できないため、の長さBも最小になります。したがって、それは有効な出力です。 ルールとスコアリング 関数または完全なプログラムを作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。期限はありませんが、提出する前にすべてのテストケースでソリューションを評価する必要があります。 テストケース 表示される出力は1つだけですが、有効なオプションがいくつかある場合があります。特に、結果の配列の順序は重要ではありません(ただし、個々の配列は昇順である必要があります)。 [0] -> [[0]] [3,5,8] -> [[3,5,8]] [2,2,2,2] -> [[2,2,2,2]] [1154,1012,976,845] -> [[845],[976],[1012],[1154]] [6,32,1,2,34,8] …

1
ピザを同じスライスに切る
これは、私が完全に読む前に、この質問がそうなると思っていたものです。 コードゴルファーのグループがThe Nineteenth Bite Pizzeriaに入ってピザを注文します。不規則な形状で、単位は正方形です。あなたの仕事は、彼らがそれを同一のスライスにカットするのを助けることです。つまり、スライスの形状とサイズはまったく同じでなければなりません。回転させることはできますが、反転/ミラーリングすることはできません。たとえば、テトリスのピースの場合、それらは同じ種類である必要があり、LピースとJピースの両方を使用することはできません。 入力 グループの人数を最初の行(常に2〜10の整数)で指定し、その後にピザを表す ''(スペース)および '#'文字の長方形の行列が続きます。すべての「#」文字は、エッジを介して接続されています。「#」文字の数は、人数の倍数であることが保証されています。 出力 同じマトリックスを印刷し、各「#」文字を0〜n-1(nは人数)の数字に置き換えます。各桁はスライスをマークする必要があります。スライス形状は、正方形のエッジで接続する必要があります。スライスの番号付けは、特定の順序である必要はありません。ピザを切る方法が複数ある場合は、どれでもかまいません。 必要に応じてピザをカットできない場合は、「No pizza for you!」という文字列を印刷する必要があります。代わりに。 得点 これはコードゴルフです。スコアはプログラムのバイト数になります。文字は、UTF-8エンコードによってカウントされます。最低スコアが勝ちます。 例 入力: 3 # ### #### # 出力: 0 100 1122 2 入力: 4 ### # # ### 出力: 001 2 1 233 入力: 2 # # ###### 出力: No pizza for you! …

23
リスト内のセットの出現回数を数える
空でない文字列のセットと文字列のリストが与えられた場合、リスト内でそのセットが何回出現するか、つまり、リストのアイテムでセットを作成できる回数を調べます。リストのすべての要素は一度しか使用できません。 ヒント:セットは、一意のアイテムの順序付けられていないリストです。 デフォルトの入出力ルールが適用されます。 外部ライブラリは許可されていません。コンパイラ/インタープリターの標準ライブラリは問題ありません。これはコードゴルフであるため、最短の解決策が重要です。 テストケース: ["apple", "banana"], ["apple", "pear", "apple", "banana", "banana"] => 2 ["apple", "banana"], ["apple", "pear", "apple", "banana", "apple"] => 1 ["apple", "banana", "pear"], ["apple", "banana", "kiwi", "apple"] => 0 ["coconut"], [] => 0 編集:入力パラメーターがローカルスコープで定義されていることを示す文を削除しました。これは、上記でリンクされているデフォルトのIOルールと矛盾します。

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