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

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

3
Dobble / SpotItカードジェネレーター
前書き Dobble / SpotItは、最短時間でペアのカードに同じシンボルを見つけ、それを示し、次のペアに移動するカードゲームです。各カードには複数のシンボル(通常バージョンでは8)がありますが、各ペアのカード間で正確に1つのシンボルが共通しています。 ゲームの物理コピーの例: チャレンジ 単一のカードに一連の記号(単一のASCII文字)と記号の数を指定して、各カードの記号を含む出力リストカードを作成するプログラムを作成します。明らかに多くの同等の組み合わせがあります。プログラムは、指定された入力に対して最大量のカードを生成する組み合わせのいずれかを記述する必要があります。 それはコードゴルフですので、コードが短いほど良いです。 最も複雑なケースで、宇宙の熱死の前に計算が終了することも素晴らしいことです。 入力 function / stdinへの2つの引数(選択) それらの最初は、 'ABCDE'や['A'、 'B'、 'C​​'、 'D'、 'E']のようなシンボルのコレクションです-あなたが選択したフォーマット、文字列、セット、リスト、ストリーム、または選択した言語の慣用的なもの。文字は[A-Za-z0-9]のセットから与えられ、重複はありません(したがって、入力シンボルセットの最大サイズは62です)。これらは必ずしも順序付けられません( 6シンボルの場合にも「yX4i9A」を取得できます)。 2番目の引数は整数で、単一のカードのシンボルの量を示します。シンボルセットのサイズよりも<=になります。 出力 改行で区切られた複数の行を印刷します。各行には単一のカードのシンボルが含まれます。 例 ABC 2 >>>> AB BC AC または ABCDEFG 3 >>>> ABC BDE CEF BFG AEG CDG ADF または ABCDE 4 >>>> ABCD ヒント 作成されるカードの数は、個別のシンボルの量より多くすることはできません。多くの組み合わせでは、かなり小さくなります 問題の数学の側面で助けが必要な場合は、いくつかの数学の背景を読みたいかもしれません これは私の最初のコードゴルフチャレンジですので、フォーマット/スタイルに関する問題の可能性をご容赦ください-コメントで指摘した場合は、エラーを修正しようとします。

12
キューブ距離のラビニティ数
この Numberphileエントリに触発された バックグラウンド 整数nの立方体距離数は、ここで、与えられたxに対してx³距離離れた整数のセットとして定義されます。簡単な例では、とと、キューブの距離番号があります。n=100x=2{92,108} これは、単にxを変更するだけで、より大きなセットに拡張できます。x ∈ {1,2,3,4}同じとn=100、我々は結果セットを持っています{36,73,92,99,101,108,127,164}。 レッツは、定義CD(N、X)を、全ての整数の集合としてn ± z³持ちますz ∈ {1,2,3,...,x}。 これで、これらの立方体距離番号の特別なプロパティに注目できます。数値が持つことができる多くの特別なプロパティのうち、ここで興味のある2つのプロパティはprimalityとprime divisorsです。 上記の例CD(100,4)の場合、73, 101, 127すべて素であることに注意してください。セットからこれらを削除すると、が残ります{36,92,99,108,164}。これらの数のすべての素数は(順番に){2,2,3,3,2,2,23,3,3,11,2,2,3,3,3,2,2,41}です。つまり、5つの異なる素数があり{2,3,23,11,41}ます。そこでことを定義することができますCD(100,4)がありravenity 1のを5。 ここでの課題は、特定の入力のラビニティを出力する関数またはプログラムを最小バイトで記述することです。 入力 任意の便利な形式の2つの正の整数、nおよびx。 出力 CD(n、x)を使用して計算された場合、2つの入力数値のラベニティを記述する単一の整数。 ルール 入力/出力は、適切な方法で行うことができます。 標準的な抜け穴の制限が適用されます。 計算を簡単にするために、入力データは、CD(n、x)がセット内で正の数のみを持つ(つまり、CD(n、x)が負の数またはゼロを持つことはない)と想定できます。 関数またはプログラムはn + x³、言語のネイティブ整数データ型に適合するように入力番号を処理できる必要があります。たとえば、32ビットの符号付き整数型の場合、すべての入力数値n + x³ < 2147483648が可能です。 例 n,x - output 2,1 - 0 (since CD(2,1)={1,3}, distinct prime divisors={}, ravenity=0) 5,1 - 2 …

3
文字列を一意に保ちながら文字を削除する
私の謙虚な意見では、答えが少なすぎるというこの素晴らしい(意見と投票数に基づく)チャレンジに触発されました。 文字列のリストを(何らかの方法で)与えられ、与えられた文字列から削除されたときに、文字列の合計の長さ(残っているもの)を可能な限り小さくしながら、文字列のセットを(何らかの方法で)返します一意の文字列と少なくとも1文字の長さ。 例: 「日」と「日」を指定します。文字「ay」が削除されると、指定された文字列は「D」と「d」になるため、「ay」を返します。 「Hello World!」、「Hello world。」、および「Hello world」を指定します。文字 "Helo Wrd"(スペースを含む)が削除されると、文字列が "!"、 "w。"、および "w"になるため、 "Helo Wrd"が返されます。 「世紀」、「10年」、「年」、「月」、「週」、「日」、「時間」、「分」、および「秒」を指定します。文字「centurdowi」の場合、指定された単語は「y」、「a」、「ya」、「mh」、「k」、「ay」、「h」、「m」、「s」になるため、「centurdowi」 」が削除されます。 返されるセットの順序と形式は重要ではありません。

4
分厚いパリンドローム
パリンドロームは楽しいですが、他の弦のいくつかは取り残されているように感じ始めています。これらの文字列をパリンドロームのチャンク配列に分割することで、これらの文字列をチャンキーな回文に変えることができます。 たとえば、文字列は、"abcabca"我々は文字で、それ文字を読めば回文ではありませんが、我々はそれ作るの3種類の方法持って分厚い回文を: ["abcabca"] ["a" "bcabc" "a"] ["a" "bc" "a" "bc" "a"] ご覧のとおり、分厚い回文性は非常に包括的な概念です。すべての文字列は、少なくとも1つの方法で分厚い回文に変換できます。 仕事 入力として文字列を受け取り、その回文的なchunkiness、つまり回文配列であるパー​​ティションの数を返すプログラムまたは関数を作成します。 テストケース OUTPUT | INPUT --------+--------------------------------------------- 1 | "" 1 | "a" 1 | "ab" 2 | "aa" 2 | "aaa" 3 | "abcabca" 4 | "abababab" 28 | "abcabcaabababababcabca" 1 | "bbbbabababbbbababbbaaaaa" 20 | "ababbaaaabababbbaaabbbaa" 5 …

10
プライムへの分解
整数nを指定すると、nが素数のリストとして記述できるウェイの数を返します。例えば、2323のように書くことができ(2,3,23)、(23,23)または(2,3,2,3)あるいは(23,2,3)あなたが出力だろうので、4。この方法で記述できない場合は、を出力する必要があります0。 019またはなどの素数00000037は、この問題の有効な素数です。 テストケース: 5 -> 1 55 -> 1 3593 -> 4 (359 and 3, or 3 and 593, or 3 and 59 and 3, or 3593) 3079 -> 2 (3 and 079, or 3079) 119 -> 0 5730000037 -> 7 (5,7,3,000003,7, 5,7,3,0000037, 5,73,000003,7, 5,73,0000037, 5,73000003,7, 5,7,30000037, 5730000037) 0-> undefined …

6
倍数でセットをカバーする
1より大きい整数のセットを取り、それをXと呼びましょう。S(i)を、iで割り切れるXのすべてのメンバーのセットとして定義します(i> 1)。これらのサブセットから、次のようなセットのグループを選択したい 彼らの和集合はXです Xの要素は2つのセットにありません。 例えば、我々は再編成することができます{3..11}よう {3,4,5,6,7,8,9,10,11} S(3): {3, 6, 9, } S(4): { 4, 8, } S(5): { 5, 10, } S(7): { 7, } S(11):{ 11} 一部のセットは、この方法では表現できません。我々が取る場合たとえば{3..12}、123と4の両方が相互に排他的であることから、当社のセットを防ぐの倍数です。 一部のセットは複数の方法で表現できます。たとえば{4..8}、 {4,5,6,7,8} S(4): {4, 8} S(5): { 5, } S(6): { 6, } S(7): { 7, } ただし、次のように表すこともできます {4,5,6,7,8} S(2): {4, 6, …

2
サブセットファクターの検索
正の整数の有限セットがあると想像してみましょう。このセットは、セット内に存在する各整数がスキャントロンまたはパンチカードのように塗りつぶされた点の線として表すことができます。たとえば、セット{1,3,4,6}は次のように表すことができます。 *.**.* *はセットのメンバーを表し、セットのメンバーで.はない整数を表します。 これらのセットには「要因」があります。yがxのコピーから構築できる場合、ゆるくxはyの因子です。より厳密には、因子の定義は次のとおりです。 xがyの因数であるのは、yが互いに素な集合の集合であり、そのすべてがオフセット付きのxである場合のみです。 ファクターを呼び出すの*.*は、2つのコピーのエンドツーエンドのコピーで非常に明確に構成されているためです。*.**.**.* *.**.* ------ *.*... ...*.* 要因はエンドツーエンドである必要はありませんが、それ*.*は要因でもあります*.*.*.* *.*.*.* ------- *.*.... ....*.* 要因は重複することもあります。これは*.*、次の要因でもあります**** **** ---- *.*. .*.* ただし、1つの数値で1つの数値を複数回カバーすることはできません。たとえば、の要因で*.*はありません*.*.*。 より複雑な例を次に示します。 *..*.**..***.*.* これには*..*.*要因があります。以下のように、3つのインスタンスを並べたことがわかります*..*.*。 *..*.**..***.*.* ---------------- *..*.*.......... ......*..*.*.... ..........*..*.* 仕事 合理的な表現によるセットが与えられると、入力の要因であるすべてのセットが出力されます。 任意の値でインデックスを作成できます(つまり、入力に存在できる最小の数値を選択できます)。また、入力セットには常にその最小値が含まれると想定することもできます。 これはコードゴルフの質問ですので、できるだけ少ないバイトでこれを行うようにしてください。 テストケース これらのテストケースは手作業で行われましたが、大きなテストケースでは1つまたは2つの間違いがある可能性があります * -> * *.*.* -> *, *.*.* *.*.*.* -> *, *.*, *...*, *.*.*.* ****** -> …

3
長さnのメビウスの梯子の制限された森林の数を数える
OEISシーケンスA020872は、メビウスのはしご M nの制限された森林の数をカウントします。 チャレンジ 課題は、入力として整数を受け取り、メビウスのはしごM nにある制限された森林の数をn > 1返すプログラムを書くことです。これはcode-golfなので、最短のコードが優先されます。(不純な動機は、おそらくこのシーケンスの長さを少し延長することです。)A020872(n) 定義 制限された森は、各部分が(無向)のいずれかであるようなグラフのパーティションである経路又は単離された頂点。 メビウスのラダー M nはすべて反対の頂点の間に引かれた対角線と2N角形と考えることができるグラフです。 例 M 2にある34の制限された森林(対角線が描かれた正方形)は次のとおりです。最初のグラフは4つの分離された頂点に分割され、2番目のグラフは1つのパスと2つの分離された頂点に分割されていることに注意してください。

4
ゲッターをゲット
タスク 私は誰もが自動コード生成と仕事中の時間の節約を愛していると思います。日中は多くのクラスとメンバーを作成するgetters必要があり、それらすべてを手動で作成する必要はありません。 タスクはgetters、すべてのクラスメンバーに対して自動的に生成されるプログラムまたは関数を作成することです。 入力 私たちの言語では、オブジェクトは非常に単純です。クラスおよびメンバーの名前は、文字から始まる必要[a-zA-Z]があり、文字のみを含めることができます[a-zA-Z0-9]。以下に例を示します。 class Stack { public overflow; protected trace; private errorReport; } 出力 これは、指定された例に基づいた有効な出力です。 class Stack { public overflow; protected trace; private errorReport; public function getOverflow() { return this->overflow; } public function getTrace() { return this->trace; } public function getErrorReport() { return this->errorReport; } } ゲッター getterメソッドの要件は次のとおりです。 …
13 code-golf  string  syntax  code-golf  math  primes  rational-numbers  code-golf  graphical-output  image-processing  code-golf  kolmogorov-complexity  music  audio  code-golf  string  code-golf  math  geometry  code-golf  math  sequence  combinatorics  code-golf  game  grid  board-game  code-golf  restricted-source  array-manipulation  source-layout  code-golf  base-conversion  binary  code-golf  math  physics  code-golf  math  number  date  expression-building  code-golf  array-manipulation  graph-theory  decision-problem  popularity-contest  error-correction  code-golf  kolmogorov-complexity  geometry  grid  code-challenge  arithmetic  combinatorics  set-partitions  code-golf  kolmogorov-complexity  sequence  fibonacci  code-golf  restricted-source  pristine-programming  code-golf  code-golf  string  kolmogorov-complexity  code-golf  arithmetic  code-golf  string  parsing  code-golf  code-golf  sorting  counting  permutations  3d  code-golf  code-golf  ascii-art  music  code-golf  string  code-golf  string  ascii-art  code-golf  string  code-golf  quine  polyglot  code-golf  math  string  code-golf  internet 

6
有理生成関数の係数を見つける
数値のシーケンスをべき級数の係数として記述する場合、そのべき級数はそのシーケンスの(通常の)生成関数(またはGf)と呼ばれます。つまり、ある関数F(x)と一連の整数a(n)について次のようになっている場合: a(0) + a(1)x + a(2)x^2 + a(3)x^3 + a(4)x^4 + ... = F(x) 次にF(x)はの生成関数ですa。たとえば、幾何級数は次のことを示しています。 1 + x + x^2 + x^3 + x^4 + ... = 1/(1-x) したがって、の生成関数は1, 1, 1, ...です1/(1-x)。上記の式の両側を微分して乗算するxと、次の等式が得られます。 x + 2x^2 + 3x^3 + 4x^4 + ... = x/(1-x)^2 したがって、の生成関数は1, 2, 3, ...ですx/(1-x)^2。関数の生成は非常に強力なツールであり、それらを使用して多くの便利なことができます。簡単な紹介はここにありますが、本当に徹底的な説明のために、素晴らしい本生成機能があります。 この課題では、入力として有理関数(整数係数を持つ2つの多項式の商)を、最初に分子、次に分母の2つの整数係数の配列として受け取ります。たとえば、関数f(x) = x …
12 code-golf  math  integer  polynomials  code-golf  math  abstract-algebra  restricted-time  code-golf  math  primes  code-golf  math  number  arithmetic  code-golf  quine  code-golf  number  sequence  code-golf  string  number  code-golf  array-manipulation  code-golf  number  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 

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 …

19
すべてのサブリストパーティションを生成する
整数の空でないリストが与えられた場合、各パーティションが空でないサブリストであるリストの可能なパーティションをすべて出力します。 リスト[1, 2, 3, 4]の結果は次のとおりです。 [[1, 2, 3, 4]] [[1, 2, 3], [4]] [[1, 2], [3, 4]] [[1, 2], [3], [4]] [[1], [2, 3, 4]] [[1], [2, 3], [4]] [[1], [2], [3, 4]] [[1], [2], [3], [4]] 出力内のリストの順序は重要ではないため、[[1, 2, 3, 4]]最初、最後、またはどこでもかまいません。要素の順序を保持する必要があります。 これはコードゴルフなので、最短の回答が勝ちです。 関連:リストを分割します!

6
最大連結製品
整数p1、...、pkのリストが提供されます(必ずしも個別ではありません)。それぞれの値は1から9までの値です。p1、...、pkをそれぞれ1回だけ使用して、数字の連結を形成し、新しい数字のリストを作成できます。次に、この新しいリストの積を出力します。目標は、数字の最適な連結を選択することにより、この製品を最大化することです。 たとえば、リスト2 3 2(スペースで区切られた)が与えられます。次の連結を形成できます。 2 3 2(これらの連結の積は12) 23 2(製品は46) 32 2(製品は64) 22 3(製品は66) 連結を形成できる最大の製品は66なので、出力します。 ルール: 少なくとも1つの乗算が必要です(つまり、すべての桁を連結して出力​​することはできません)。 乗算以外の演算子を使用したり、括弧を挿入したりすることはできません。 指定された整数のリストはスペースで区切られ、すべての整数の値は1〜9であると仮定します。 最短コード(バイト単位)が勝ちます! テストケース: 入力:1 2 3; 出力:(63つまり、21*3) 入力:2 5 9; 出力:468(52*9) 入力:1 2 3 4; 出力:1312(41*32)

2
リストを分割します!
この課題では、リストにパーティションを作成する必要があります。パーティションには、最大サイズ、最小サイズ、および適切なサイズがあります。(min,pref,max) この課題では、表記を使用してサイズを示します。 パーティション設定に不慣れな方のために、次のリストは3の部分に分割されています。 [0..9] -> [[0,1,2],[3,4,5],[6,7,8]] リストが均等に分割できない場合は、パーティションを可能な限り推奨サイズに近づける必要があります[0..10], (2,4,5) -> [[0,1,2,3],[4,5,6],[7,8,9]]。[[0,1,2,3],[4,5,6,7],[8,9]]後者の方が好ましい長さですが、この分割はに優先します。正式には(partitionLength-preferredSize)^2、各パーティションの合計を最小化する必要があります。 パーティションの長さの順序は重要ではありません:については[0..5], (2,3,3)、いずれか[[0,1,2],[3,4]]または[[0,1],[2,3,4]]作品を。パーティションを作成できない場合は、空の配列を返します[0..7], (4,4,5) -> []。 あなた1<=min<=pref<=maxは、あなたに渡された配列が空でない整数の配列であると仮定することができます。配列は常に最初の引数になります。min、max、およびprefは、任意の順序で、タプルまたは個別の引数として受け入れることができます。 プログラムは数秒で実行する必要があります。基本的に、境界内で可能なすべてのパーティションサイズを反復することはできません。 テストケース: [1], (1,3,4) -> [[1]] [100], (1,2,3) -> [[100]] [1,2], (1,1,2) -> [[1],[2]] [1,2], (1,2,2) -> [[1,2]] [1,2], (1,3,3) -> [[1,2]] [1,2,3], (1,2,3) -> [[1,2],[3]] or [[1,2,3]] [1,2,3,4], (1,3,4) -> [[1,2,3,4]] [1,2,3,4,5], (3,3,4) …

2
ぼんやりした言語学者
バックグラウンド 言語学者の友達が、さまざまな言語でいくつかの簡単な会話の断片を録音して分析しました。彼らはまったく不在なので、各スニペットの言語を忘れてしまいました。文の構造を分析し、不可能な場合を除外するプログラムを作成して、彼らを助けなければなりません。 入力 入力は、主語、動詞、オブジェクトSVOを表す文字を含む空でない文字列です。言語学者が分析した会話スニペットを表します。 出力 あなたの仕事は、文字列を文に分割し、各文の.後にピリオドを入力することです。文には、動詞、または動詞と主語、または動詞、主語とオブジェクトのいずれかが含まれます。ただし、元の言語で使用されている単語の順序はわかりません。英語ではsubject-verb-objectを使用しますが、ラテン語などの他の言語ではsubject-object-verbを使用します。実際、6つの順列はすべて自然言語で存在するため、それぞれをチェックする必要があります。 出力には、改行で区切られた文字列で、該当する各単語の順序、コロン:、およびその順序に従って文に分割された入力文字列が含まれます。文字列がいくつかの語順で解析できない場合、対応する行は省略されます。行の順序は重要ではなく、少なくとも1つの語順を解析できることが保証されています。 例 入力を検討する VSVOSV VOS注文、スニップは、以下のように解析することができVS.VOS.V.、且つにSVO順番、それは次のように解析できますV.SVO.SV.。注文OSVも機能し、完全な出力は VOS:VS.VOS.V. SVO:V.SVO.SV. OSV:V.SV.OSV. ルールとスコアリング 完全なプログラムまたは関数を作成できます。最も低いバイト数が優先され、標準の抜け穴は許可されません。正規表現とすべての組み込みが許可されています。 テストケース Input: V Output: VSO:V. VOS:V. SVO:V. OVS:V. SOV:V. OSV:V. Input: SVV Output: SVO:SV.V. SOV:SV.V. OSV:SV.V. Input: VSVOV Output: SVO:V.SVO.V. Input: VSOVS Output: VSO:VSO.VS. OVS:VS.OVS. Input: SVOSV Output: SVO:SVO.SV. OSV:SV.OSV. Input: VSVOSV Output: VOS:VS.VOS.V. …

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