タグ付けされた質問 「permutations」

順列は、オブジェクトのリストの特定の順序です。順列でタグ付けされた問題には、通常、テキストのアナグラムを含む順列の検索または生成が含まれます。

3
順列を再構築する
前書き nオブジェクトのランダムな順列が渡されたとします。順列はボックスに密封されているため、どの順列であるかわかりませんn!。順列をn個別のオブジェクトに適用できた場合、すぐにそのアイデンティティを推測できます。ただし、置換は長さnバイナリベクトルにのみ適用できます。つまり、それを認識するために数回適用する必要があります。明らかに、nたった1つでベクトルに適用することで1仕事はできますが、賢いのであれば、log(n)アプリケーションでそれを行うことができます。ただし、そのメソッドのコードは長くなります... これは実験的な課題であり、スコアはコード長とクエリの複雑さの組み合わせ、つまり補助プロシージャの呼び出し回数です。仕様は少し長いので、ご容赦ください。 タスク あなたの仕事は、0ベースまたは1ベースのインデックス付けを使用して、入力として正の整数と最初の整数の順列をとる名前付き関数(またはそれに最も近いもの) を書くことです。その出力は置換です。ただし、順列に直接アクセスすることはできません。これでできることは、ビットのベクトルに適用することだけです。この目的のために、順列とビットのベクトルを取り込んで、th座標がbitを含む順列ベクトルを返す補助関数を使用します。例えば:fnpnppnPpvp[i]v[i] P([1,2,3,4,0], [1,1,0,0,0]) == [0,1,1,0,0] 「ビット」は、3and -4、or 'a'、and などの任意の2つの異なる値に置き換えることができ、'b'修正する必要はありません。そのためP、[-4,3,3,-4]と[2,2,2,1]への同じ呼び出しで両方を呼び出すことができますf。の定義はPスコアにカウントされません。 得点 特定の入力に対するソリューションのクエリの複雑さは、補助関数を呼び出す回数ですP。この尺度を明確にするためには、解決策は決定的でなければなりません。疑似ランダムに生成された数値を使用できますが、ジェネレーターの初期シードも修正する必要があります。 ではこのリポジトリあなたはというファイル見つけることができますpermutations.txt(1ベースの場合の各番号をインクリメント)0ベースのインデックスを使用して、505個の順列、50と150までの間の各長さの5が含まれています。各順列は独自の行にあり、その番号はスペースで区切られています。スコアは、これらの入力のバイト数f+平均クエリの複雑さです。最低スコアが勝ちます。 追加ルール 説明付きのコードが推奨され、標準の抜け穴は許可されません。特に、個々のビットは区別できません(したがって、Integerオブジェクトのベクトルを与えてPそのアイデンティティを比較することはできません)。関数Pは入力を再配置する代わりに常に新しいベクトルを返します。fおよびの名前、およびPそれらが引数を取る順序を自由に変更できます。 プログラミング言語で最初に回答するP場合は、呼び出された回数もカウントする関数の実装など、テストハーネスを含めることを強くお勧めします。例として、Python 3のハーネスを次に示します。 def f(n,p): pass # Your submission goes here num_calls = 0 def P(permutation, bit_vector): global num_calls num_calls += 1 permuted_vector = [0]*len(bit_vector) for i in range(len(bit_vector)): permuted_vector[permutation[i]] = bit_vector[i] …

7
スクランブルキーで入力する
あなたの友人はコンピューターがあまり上手ではないので、実際の冗談で誰かがキーボードの文字(az)をスクランブルしました。彼が座ってキーボードを見て名前を入力しようとすると、彼は文字がスクランブルされていることに気づき、助けを求めました。 あなたは賢いので、彼が自分の名前を入力してから、彼の名前の代わりに画面に表示されるものを繰り返し再入力すると、彼は最終的に彼の名前を入力することに成功することを知っています。また、親切でキーを再配置しますが、成功するのに何ターンかかるかを知りたいです。 あなたの仕事は、文字をシャッフルし、友人の名前がターン数を計算するプログラムまたは関数を書くことです。 入力の詳細: 2つの文字列が、言語に便利な構造の入力として与えられます。 最初の文字列は、古い小文字のアルファベット順の新しい小文字のリストです。(最初の文字はの位置にありa、最後の文字はの位置にありzます。)文字列には常に何らかの変更が発生します。 2番目の文字列は名前です。印刷可能なASCII文字を含めることができますが、大文字と小文字のアルファベットのみがシャッフルされます。名前自体はalでシャッフルされないかもしれません。 出力の詳細: 出力は、最小限必要な巻き数の単一の整数です。改行はオプションです。 例: 入力: 'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'(d、e、fの位置が変更されました) 出力:( 3表示される名前はMr. John Fod=> Mr. John Eof=> Mr. John Doe) 入力: 'nopqrstuvwxyzabcdefghijklm' 'Mr. John Doe'(ROT13暗号) 出力:( 2文字を含むすべての入力名は2、元の名前を生成するためにラウンドします。) 入力: 'aebcdjfghiqklmnopzrstuvwxy' 'John Doe' 出力: 140 これはコードゴルフなので、最短のエントリが優先されます。


4
ASCIIアートで長い分割を視覚化する
ASCIIアートで長い除算を視覚化するプログラムを作成します。入力は、選択した入力形式を使用して、分子と分母の2つの整数で構成されます。 例: 1234÷56: 22 ---- 56|1234 112 --- 114 112 --- 2 1002012÷12: 83501 ------- 12|1002012 96 --- 42 36 -- 60 60 -- 12 12 -- 0÷35 0 - 35|0 ルール: プログラミング言語の除算演算子の使用は許可されています。 大きな整数のサポートの使用も許可されています。 一貫性のために: 商がゼロの場合、ダイビングボードの最後にゼロを1つ出力します。 余りがゼロの場合、印刷しないでください。 数字に先行ゼロを印刷しないでください。 末尾の余分な改行と右側の末尾のスペースは許可されます。 最小の文字数のソリューションが勝ちです。 制限: 0 <=分子<= 10 72 - 1 1 <=分母<= 9999999 …

9
建物を隠す
Skyscrapers Challengeの短いバージョン 仕事 建物の高さの配列と正の整数を指定すると、建物がk正確kに見えるように、高さのすべての順列(重複なし)を見つけます。 建物はすべて、背の低いまたは等しい高さの建物をすべて非表示にします。 入力および出力の形式はすべて有効です。 入力配列が空になることはありません。 正確に同じ数の建物を見ることができない場合は、答えではなくエラーではないものをすべて出力します。 例: (出力の長さは非常に長い出力に対して表示されますが、出力はすべての可能な順列でなければなりません) input:[1,2,3,4,5],2 output: 50 input:[5,5,5,5,5,5,5,5],2 output: [] input:[1,2,2],2 output:[(1,2,2)] Seeing from the left, exactly 2 buildings are visible. input:[1,7,4],2 output:[(4, 7, 1), (1, 7, 4), (4, 1, 7)] input:[1,2,3,4,5,6,7,8,9],4 output:67284 input:[34,55,11,22],1 output:[(55, 34, 11, 22), (55, 22, 34, 11), (55, 34, …

30
Parrotプログラムを作成する
入力が与えられると、その入力の後に改行が際限なく続きます。 入力は、印刷可能なASCII文字(0x20-0x7E)と改行(0x0A)のみで構成される文字列になります。 入力の長さが0の場合、改行を無限に出力します。 これはコードゴルフなので、各言語で最も少ないバイトです勝ちます!
15 code-golf  string  sequence  combinatorics  fastest-code  number  code-challenge  restricted-source  rosetta-stone  code-golf  arithmetic  decision-problem  integer  factorial  code-golf  arithmetic  decision-problem  integer  bitwise  code-golf  kolmogorov-complexity  code-golf  tips  vim  code-golf  quine  code-generation  code-golf  string  restricted-source  code-golf  string  random  unicode  code-golf  audio  code-golf  ascii-art  code-golf  decision-problem  code-golf  puzzle-solver  code-golf  restricted-source  code-golf  kolmogorov-complexity  permutations  hexagonal-grid  code-golf  string  math  combinatorics  fastest-code  code-golf  restricted-source  code-golf  string  code-golf  arithmetic  code-golf  math  number  code-golf  string  decision-problem  balanced-string  code-golf  binary  code-golf  string  number  code-challenge  restricted-source  code-golf  ascii-art  printable-ascii  interactive  code-golf  string  ascii-art  code-challenge  restricted-source  source-layout  code-golf  arithmetic  tips  functional-programming  golfing-language  code-golf  binary  encryption 

15
チープエニグママシン(警官)
強盗の投稿、Chepo Enigmaマシン(強盗) 警官の提出は、1バイトのデータを受け入れ、1バイトのデータを返すプログラム/関数で構成されます。可能な入力はすべて、一意の出力を生成する必要があります。(つまり、関数は全単射でなければなりません) 強盗は、可能な限り短いコードを使用して、あなたの逆関数を作成しようとします。だからあなたの目的は、あなたの機能を逆転させることを困難にすることです。 ハッシュまたは暗号化のみを目的とするビルトインを使用することはできません。 バイト数は64バイトを超えることはできません。0バイトのソリューションは勝ちません。 入出力フォーマット 8ビット(0または1)、または範囲1〜256、0〜255、または-128〜127の10進整数。標準I / OまたはファイルI / Oを使用できます。関数は、出力として値を返すこともできます。入力と出力は同じ範囲(バイナリ、1〜256、0〜255または-128〜127)に属している必要があります。この範囲を入力および出力に使用するには、強盗も必要です。 得点 あなたに対する最高の強盗の試みのそれに対するあなたのバイト数の比率。最低スコアが勝ちます。 強盗があなたを倒そうとした場合にのみ、(警官として)勝利する資格があります。(この強盗はあなたかもしれません) 例 C ++、0〜255の範囲、31バイトを使用 int x; cin>>x; cout<<(x+1)%256; C ++での強盗の送信、32バイト int f(int x) {return x?x-1:255;} 同じ言語または類似のアルゴリズムを使用することは必須ではありません これにより、警官と強盗の両方に31/32 = 0.97のスコアが与えられます。

2
順列と一致します!
あなたの課題は、それ自体のすべての文字列の置換に一致する正規表現を作成することです。また、大文字と小文字を区別する必要があります。 したがって、たとえば、正規表現が次の場合: ABC これらの文字列と一致する必要があります(一致するだけです)。 ABC ACB BAC BCA CAB CBA 次のようなものと一致しないはずです。 AABC (contains an extra A) ABCD (contains an extra D) AC (no B) AAA (no B and C, extra 2 A's) abc (case-sensitive) ルール: 任意の種類の正規表現を使用できます。 標準の抜け穴が適用されます。 コードには少なくとも2つの異なる文字が必要です。つまり、次のようなソリューション1は無効です。 正規表現には、印刷可能なASCIIのみを含める必要があります。

3
スタックベースの言語をトークン化する
私は、に取り組んできた別のと呼ばれるスタックベースのゴルフの言語Stackgoat。この課題では、Stackgoat(または実際には一般的なスタックベースの言語)のTokenizerを作成します。 例 "PPCG"23+ ["PPCG", '23', '+'] 'a "bc" + ['"a"', '"bc"', '+'] 12 34+-"abc\"de'fg\\" ['12', '34', '+', '-', '"abc\"de'fg\\"'] "foo ['"foo"'] (empty input) [] ' "" ['" "', '""'] 仕様 処理する必要がある3つのタイプは次のとおりです。 ストリングス、何も内"" 数字、数字列 演算子、空白以外の任意の単一文字 空白は、文字列内にあるか、2つの数値を区切っていない限り、本質的に無視されます。 文字列/文字仕様: 文字列はで区切られ、が検出された"場合\、次の文字をエスケープする必要があります。 '文字はa で始まり、その後の'文字は文字列リテラルに変換されます。'a->"a" ' 常にその後に文字があります 終値を自動挿入する必要があります ルール: の形式evalは許可されません 入出力: 入力は、STDIN、関数パラメーター、または同等の言語を通じて取得できます。 出力は、配列または言語に最も近いものでなければなりません。
15 code-golf  parsing  code-golf  hexagonal-grid  code-golf  string  code-golf  string  code-golf  combinatorics  code-golf  ascii-art  code-golf  string  game  counting  code-golf  arithmetic  complex-numbers  code-golf  string  code-golf  decision-problem  hexagonal-grid  code-golf  string  sequence  code-golf  number  arithmetic  code-golf  ascii-art  code-golf  ascii-art  code-golf  string  arithmetic  code-golf  number  simulation  code-golf  number  arithmetic  code-golf  string  sequence  unicode  code-golf  string  ascii-art  balanced-string  code-golf  number  clock  code-golf  ascii-art  number  code-golf  math  number  sequence  code-golf  string  ascii-art  balanced-string  code-golf  math  string  popularity-contest  graphical-output  image-processing  code-golf  string  permutations  code-golf  string  code-golf  random  code-golf  string  cryptography  palindrome  code-golf  chess  code-golf  math  array-manipulation  topology  code-golf  math  sequence  code-golf  keyboard  classification  code-golf  string  sequence  code-golf  natural-language  code-golf  math  number  sequence  sorting  code-golf  sequence  combinatorics  grid  tic-tac-toe  code-golf  geometry  code-golf  number  restricted-source  new-years  expression-building 

2
配列をシャッフル解除できますか?
バックグラウンド 非常に熟練したカードハンドラーは、デッキを完全に半分にカットしてから、カードを完全にインターリーブする技術を使用できます。並べ替えられたデッキから始めて、この手法を52回連続して完璧に実行すると、デッキは並べ替えられた順序に復元されます。あなたの挑戦は、カードのデッキに整数配列を取り、ファロシャッフルのみを使用してソートできるかどうかを判断することです。 定義 数学的には、ファロシャッフルは、任意の正の整数nに対する2 n個の要素の順列であり、位置i(1からインデックス付け)の要素を位置2 i(mod 2 n +1)に置き換えます。また、奇数長のリストを処理できるようにしたいので、その場合、リストの最後に1つの要素を追加し(便利な場合はジョーカー)、上記のようにFaroは新しいリストをシャッフルしますが、無視しますリストの順序をチェックするときに追加されたダミー要素。 ゴール 整数のリストを取得し、いくつかのファロシャッフルによりそのリストが非降順でソートされる場合(その数がゼロであっても、小さなリストが真実を示す必要がある場合)、真実を返すか出力するプログラムまたは関数を記述します。それ以外の場合は、偽物を返すか出力します。 例 [1,1,2,3,5,8,13,21] => True [5,1,8,1,13,2,21,3] => True [9,36,5,34,2,10,1] => True [1,0] => True [0] => True [] => True [3,2,1] => True [3,1,2] => False [9,8,7,6,5,4,3,2,1,0] => True [9,8,7,6,5,4,3,2,0,1] => False [3,1,4,1,5,9,2,6,9] => False [-1,-1,-1,-2] => True 得点 これはコードゴルフなので、バイト単位での最短ソースが優先されます。

4
40本のスティックを注文する
幅が同じで高さが異なる40本のスティックがあります。右から見ると10本のスティックが見え、左から見ると再び10本のスティックが見えるように、それらを並べて配置できる配置はいくつありますか? たとえば、このような順序は次のとおりです。 黒い棒は隠れており、赤い棒は左から見たときに見ることができるものであり、青い棒は右から見たときに見ることができるものであり、紫色のもの(つまり最も長いもの)は見ることができるものです両側から。 テストケースとして: 左から2つ、右から2つを見るために3スティックの注文数がある場合は2 5本のスティックがある場合、左から3つ、右から3つを見るための注文数は6です。 10スティックの場合、左から4つ、右から4つを見るための注文数は90720です。

6
順列をサイクルに分解する
順列はサイクルのセットに分解できるというよく知られた定理があります。あなたの仕事は、できる限り短いプログラムを書くことです。 入力: 2行。最初は数値を含みN、2番目はN範囲内の異なる整数を含みます[0,N-1]スペースで区切られれます。これらの整数は、N要素の順列を表します。 出力: 順列の各サイクルに1行。各行は、スペースで区切られた整数のサイクル順のリストである必要があります。 サイクルは任意の順序で出力でき、各サイクルは任意の位置から出力できます。 例1: 8 2 3 4 5 6 7 0 1 この入力は、順列0-> 2、1-> 3、2-> 4、3-> 5、4-> 6、5-> 7、6-> 0、7-> 1をエンコードします。これは、次のようなサイクルに分解されます。 0 2 4 6 1 3 5 7 同様に有効な出力は 5 7 1 3 2 4 6 0 例2: 8 0 1 3 4 5 6 …

5
バイナリ畳み込み
バイナリ畳み込みは数値Mで記述され、数値に適用されNます。のバイナリ表現の各ビットについてM、ビットが設定されている場合(1)、出力の対応するビットは、対応するビットに隣接する2ビットをXORすることで与えられますN(必要に応じて折り返します)。ビットが設定されていない場合(0)、出力の対応するビットはの対応するビットによって与えられNます。 実用的な例(8ビット値): ましょうN = 150、M = 59。それらのバイナリ表現は(それぞれ)10010110と00111011です。 Mのバイナリ表現に基づいて、ビット0、1、3、4、および5が畳み込まれます。 ビット0の結果は、ビット1と7をXORすることで得られ1ます(折り返すため)。 ビット1の結果は、ビット0と2のXOR演算によって得られ0ます。 ビット2の結果は、元のビット2で与えられ、を生成し1ます。 ビット3の結果は、ビット2と4のXORによって得られ0ます。 ビット4の結果は、ビット3と5のXOR演算によって得られ0ます。 ビット5の結果は、ビット4と6のXORによって得られ1ます。 ビット6と7の結果は、元のビット6と7で与えられ、とを生成0し1ます。 したがって、出力は10100110(166)です。 チャレンジ とが与えられたときN、on Mによって記述されたバイナリ畳み込みを実行した結果を出力しMますN。入力および出力は、便利で一貫性があり、明確な形式である場合があります。Nそして、M常に(包括的)範囲[0, 255](8ビット符号なし整数)にあり、バイナリ畳み込みを実行するために、バイナリ表現を8ビットにパディングする必要があります。 テストケース 150 59 -> 166 242 209 -> 178 1 17 -> 0 189 139 -> 181 215 104 -> 215 79 214 -> 25 190 207 -> 50 61 …
15 code-golf  binary  integer  bitwise  code-golf  rational-numbers  code-golf  string  palindrome  code-golf  ascii-art  code-golf  code-golf  string  fibonacci  code-golf  math  sequence  code-golf  code-golf  string  palindrome  code-golf  string  code-golf  math  primes  source-layout  code-golf  sequence  binary  integer  code-golf  math  arithmetic  game  code-golf  restricted-source  palindrome  code-golf  restricted-source  palindrome  code-golf  combinatorics  binary  code-golf  string  math  code-golf  ascii-art  number  code-golf  cipher  code-golf  base-conversion  counting  code-golf  sequence  random  classification  code-golf  string  subsequence  code-golf  permutations  code-golf  string  code-golf  string  cipher  code-golf  kolmogorov-complexity  arithmetic  integer  code-golf  quine  markov-chain  code-golf  string  code-golf  code-golf  ascii-art  maze 

3
順列グループ操作
n個の要素と0からn!-1までの数字の順列の間には、順列と対応する数字の辞書式順序が同じになるように、よく知られた全単射があります。たとえば、n = 3の場合: 0 <-> (0, 1, 2) 1 <-> (0, 2, 1) 2 <-> (1, 0, 2) 3 <-> (1, 2, 0) 4 <-> (2, 0, 1) 5 <-> (2, 1, 0) n個の要素の順列がグループ(n次の対称グループ!)を形成することもよく知られています-したがって、特に、n個の要素の1つの順列がn個の要素の2番目の順列に適用されると、n個の要素の順列が生成されます。 たとえば、(a、b、c)に(1、0、2)を適用すると(b、a、c)が得られるため、(1、0、2)を(2、1、0)に適用すると(1、2 、0)。 n、p1、およびp2の3つの整数引数を取るプログラムを作成します。p1とp2をn個の要素の順列として解釈します。1番目を2番目に適用します。対応する整数を出力します。例えば: $ ./perm.sh 3 2 5 3

16
カスタムラベル付きの二面体グループD4コンポジション
二面体グループは、正方形の対称グループです。つまり、回転と反射を介して正方形をそれ自体に変換する動きです。8つの要素で構成されます:0、90、180、および270度の回転、水平、垂直、および2つの対角軸にわたる反射。D4D4D_4 画像はすべて、Larry Riddleによるこの素敵なページからのものです。 この課題は、これらの動きを構成することです。2つの動きが与えられると、それらを次々に実行するのと同じ動きを出力します。たとえば、移動7の後に移動4を行うことは、移動5を行うことと同じです。 移動を4に、次に移動7に順序を切り替えると、代わりに移動6が生成されることに注意してください。 結果は以下の表のとおりです。これは、グループ Cayleyテーブルです。だから、例えば、入力出力生成しなければならない。D4D4D_47,47,47, 4555 1234567812345678123456782341786534126587412387565867134267583124758624138675423112345678123456781234567823418756341265874123786557681324685731427685421385762431\begin{array}{*{20}{c}} {} & {\begin{array}{*{20}{c}} 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 \\ 2 \\ 3 \\ 4 \\ 5 \\ 6 \\ 7 \\ 8 \\ \end{array} } …

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