タグ付けされた質問 「data-structures」

データを整理する方法(データ型、配列、バイナリツリーなど)に関する課題

30
プレフィックスのテキストを検索し、テキスト内のすべてのサフィックスをリストします
ここでは、「接頭辞に続く任意の部分文字列」を意味するために、「接尾辞」を大まかに使用します。 ここでの「プレフィックス」とは、単語の開始を意味します。単語の開始は、スペースの後または入力テキストの最初の文字(最初の単語)として定義されます。単語の途中にある「プレフィックス」は無視されます。 たとえば、入力プレフィックスが「arm」で、入力テキストが「迫り来るハルマゲドンに対してダンブルドアの軍隊が完全に武装した」場合、出力リストには(y、ed、ageddon)が含まれます。 テストケース 大文字と小文字が区別され、文字列はスペースの後に終わると仮定します。入力はスペースで始まりません。 重複の削除はオプションです。 Input prefix: "1" Input text: "He1in aosl 1ll j21j 1lj2j 1lj2 1ll l1j2i" Output: (ll, lj2j, lj2) - in any permutation Input prefix: "frac" Input text: "fracking fractals fracted fractional currency fractionally fractioned into fractious fractostratic fractures causing quite a fracas" Output: (king, tals, …

7
バイナリツリーの回転
バランスの取れたバイナリ検索ツリーは、O(log n)ルックアップ(または同様の操作)を保証するために不可欠です。多数のキーがランダムに挿入および/または削除される動的環境では、ツリーがルックアップにとって恐ろしいリンクリストに縮退する場合があります。したがって、この効果に対抗するさまざまな種類の自己バランス型バイナリツリー(AVLツリーやスプレイツリーなど)があります。これらのツリーは、ツリーのバランスを再調整するさまざまな種類の回転に基づいています。 回転 この課題では、単一の右回転のみを見ていきます。そのような回転(左回転は対称)は次のようになります。 5 3 / \ / \ 3 6 => 1 5 / \ / \ 1 4 4 6 葉のいずれか1、4または6左または右のサブツリーがある場合、回転は単にそれらをそこに保持します。これがより大きなツリーのサブツリーである場合、ノードで単に「切断5」し、回転したツリー(現在のノード3)をそのノードに「再接続」します。 チャレンジ バイナリ検索ツリー1とキーを指定すると、上記のようにそのノードでツリーが右回転します。上記の例で提供されるキーはになります5。 ルールとI / O 選択したキーとテストケースのキーの間に全単射がある限り、任意のタイプのキーを使用できます。 [3,[]]あいまいさがなければ(たとえば、特に指定しない限りあいまいです)、選択した言語に自然な限り、バイナリツリーの表現を選択できます。 入力は常にバイナリ検索ツリーになるため、重複キーはありません あなたはキーがツリーに含まれていると仮定するかもしれません キーを含むノードには左の子があると仮定できます 提供されたキーの下に正しいサブツリーを想定することはできません あなたは、回転の前にツリーがアンバランスであると仮定することはできません 回転後にツリーのバランスが取れているとは思わないかもしれません デフォルトのI / O方式を使用できます あなたの提出は、ツリーを返す関数またはソリューションを印刷する完全なプログラムである可能性があります テストケース これらの例は、次のようなツリーを表します 葉の場合: [] キーxを持つツリーで、両方のサブツリーがリーフの場合:[x] キーxとサブツリーを持つツリーの場合left right:[x,left,right] 最初の例は、セクションRotationsで提供されるものです。何らかの理由でそれらをグラフィカルに表示する必要がある場合は、ここで2に進みます。 5 …

13
それは最大ヒープですか?
ヒープも優先キューとして知られているが、抽象データ型です。概念的には、すべてのノードの子がノード自体以下であるバイナリツリーです。(最大ヒープと仮定します。)要素がプッシュまたはポップされると、ヒープはそれ自体を再配置し、最大の要素が次にポップされるようにします。ツリーまたは配列として簡単に実装できます。 受け入れを選択した場合の課題は、アレイが有効なヒープかどうかを判断することです。すべての要素の子が要素自体以下の場合、配列はヒープ形式になります。例として次の配列を取り上げます。 [90, 15, 10, 7, 12, 2] 本当に、これは配列の形に配置された二分木です。これは、すべての要素に子があるためです。90には、15と10の2つの子があります。 15, 10, [(90), 7, 12, 2] 15には子もあり、7と12: 7, 12, [90, (15), 10, 2] 10には子供がいます: 2 [90, 15, (10), 7, 12, ] 次の要素も10の子になりますが、スペースがないことを除きます。配列が十分に長ければ、7、12、および2にもすべて子があります。ヒープの別の例を次に示します。 [16, 14, 10, 8, 7, 9, 3, 2, 4, 1] そして、これは前の配列が作るツリーの視覚化です: これが十分に明確でない場合に備えて、i番目の要素の子を取得するための明示的な式を次に示します //0-indexing: child1 = (i * 2) + …

6
簡単なスプレッドシートを評価する
ルール セル範囲参照なし(A2:B3)。 最大9行9列です。 循環参照や数式エラーはありません。 空のセルはに評価され0ます。 データは数字のみですが、文字列として解釈される場合があります。 数式は文字列です。 実装の選択肢 次の事項について選択を述べる必要があります。 数式の前に任意の単一文字を付ける必要があります(例:=–かどうか)。 2番目の行の左端のセルは、Excelなどによって使用される2つの規則に従って、A2またはR2C1です。 セル参照に単一文字のプリまたはサフィックスが必要です(例:$-かどうか)。 0空のセルを表すnull、空の文字列、空のリストなどのいずれか(ただし、ではありません)。 提出の言語(スプレッドシートマネージャーは許可されません)。 数式の言語(上記と異なる場合があります)。* ソリューションを説明するためのブラウニーポイントまたはCookie。 例 選択肢:7:=; 8 A2:; 9:なし。10 "":; 12:Excel式言語 に: [[ 2, 3], ["=A1+B1",""]] でる: [[2,3], [5,0]] に: [[ 2,"=A1+B2"], ["=A1+B1", ""]] でる: [[2,2], [4,0]] に: [[ 3, 4,"=A1*B1"], [ 2, 5,"=A2*B2"], ["","","=C1+C2"]] でる: [[3,4,12], [2,5,10], …

7
プレフィックスツリートラバーサル
(stdinまたはコマンドラインを介して)再帰形式の文字列を取り込むプログラムを作成します。 PREFIX[SUFFIXES] どこ PREFIX 空の文字列を含む、小文字(az)の任意の文字列を指定できます。 SUFFIXESPREFIX[SUFFIXES]空のシーケンスを含む、再帰形式が連結された任意の文字列シーケンスです。 各サフィックスの文字列のリストを再帰的に評価してプレフィックスに追加することにより、入力から小文字の文字列のリストを生成します。このリスト内の文字列を任意の順序で、1行に1つずつ(およびオプションの末尾の改行も)標準出力します。 例 入力が cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]] その後、接頭辞があるcatとし、接尾辞はs[up[][]]、[]、 ch[e[r[]s[]]]、とa[maran[]comb[]pult[[]ing[]]]。各サフィックスには、独自のプレフィックスとサフィックスが順番にあります。 出力は、これらの9ワードで任意の順序になります catsup cats cat catcher catches catamaran catacomb catapult catapulting 入力はこのツリーをエンコードするため そして、9つの出力ワードのそれぞれは、ルートからリーフへツリーを走査することによって形成できます。 ノート プレフィックスは空の文字列である可能性があることに注意してください。 [donut[][]cruller[]] 出力が(任意の順序で)有効な入力です donut cruller 空の行は、2番目のサフィックスが一致する空の文字列です。 接尾辞シーケンスも空にすることができるため、些細な入力の場合 [] 出力として単一の空行があります: 入力は一意の出力ワードのみを生成すると想定できます。 たとえば、2回エンコードされるhat[s[]ter[]s[]]ため、無効な入力になりますhats。 同様に、[[][]]空の文字列が2回エンコードされるため、無効です。 入力が可能な限り短い、または圧縮されていると想定することはできません。 たとえば、'e'上記の主な例の'ch'ノードはノードと組み合わせることができますが、それは入力が無効であることを意味しません。 同様に、[[[[[]]]]]空の文字列を次善の方法でエンコードしているにもかかわらず、有効です。 プログラムの代わりに、入力文字列を引数として受け取り、出力を通常どおり印刷するか、文字列またはリストとして返す関数を作成できます。 バイト単位の最短コードが優先されます。

10
二重にリンクされたデータを解きます
二重リンクリストは、各ノードがリスト内と次のvalue両方への「リンク」と同様に持つデータ構造です。たとえば、値が12、99、および37の次のノードを考えます。previousnodes ここで、値12および99のnextノードは、値99および37のそれぞれのノードを指します。値が37のnextノードは、リスト内の最後のノードであるため、ポインターを持ちません。同様に、値99および37のpreviousノードはそれぞれのノード12および99を指しますが、12にはありませんprevious指しますが、リストの最初のノードであるためポインター。 セットアップ 実際には、ノードの「リンク」は、メモリ内の前および次のノードの場所へのポインターとして実装されます。私たちの目的では、「メモリ」はノードの配列であり、ノードの場所は配列内のインデックスになります。ノードは、形式の3タプルと考えることができます( prev value next )。上記の例は、次のようになります。 ただし、代わりに次のようになります。 任意のノードから開始して、previousリンク(赤い矢印の原点として表示)をたどってその前のノードに移動し、nextリンク(緑の矢印)を使用して後続のノードを検索し、すべてのノードの値を順番に取得できます。[12, 99, 37]。 上記の最初の図は、配列でとして表すことができます[[null, 12, 1], [0, 99, 2], [1, 37, null]]。次に、2番目はになります[[2, 99, 1], [0, 37, null], [null, 12, 0]]。 チャレンジ ノードの配列とノードのインデックスを入力として受け取り、同じ二重リンクリスト内のノードの値をリスト順に返すプログラムを作成します。 合併症 「メモリ」には、常に1つのリストのノードが含まれているとは限りません。複数のリストが含まれる場合があります。 上記の配列には、利便性のために色分けされた3つの二重リンクリストが含まれています。 インデックスのノードは7、10、1、4、3、12(のみ示すnext煩雑さを軽減するためのリンク。クリックすると拡大します): この配列とこれらのインデックスのいずれかが与えられると、プログラムは値を順番に返す必要があります[0, 1, 1, 2, 3, 5, 8]。 インデックスのノード9: インデックスを指定する9と、プログラムが返され[99]ます。 インデックスのノード11、8、0、6、2: これらのインデックスのいずれかを指定すると、返されるはずです [2, 3, 5, 7, …

18
シンプルなCSV / DSVインポーター
これの逆以上に少し。 In: 複数行のDSVデータと単一の区切り文字。DSVは、ファイル、ファイル名、改行で区切られた文字列、文字列のリストなどとして取得できます。すべてのレコードには同じ数のフィールドがあり、空のフィールドはありません。データには区切り文字が含まれておらず、引用やエスケープのメカニズムはありません。 Out: DSVを表すデータ構造。たとえば、文字列のリストのリストまたは文字列のマトリックス。 例 ["here is,some,sample","data,delimited,by commas"]および",": [["here is","some","sample"],["data","delimited","by commas"]] ["hello;\"","\";world","\";\""]および";":( [["hello","\""],["\"","world"],["\"","\""]]この例ではJSONを使用しているためエスケープ) ["to be or not","that is the question"]および" ": [["to","be","or","not"],["that","is","the","question"]]

6
N基底の回文である数
負でない整数が指定された場合n >= 0、x_i >= 3完全にn異なるb基数の回文である整数のシーケンスを永久に出力します2 <= b <= x_i-2。 これは基本的にOEIS A126071の逆で、そのシーケンスのどのインデックスが値を持つかを出力しますn。b = x_i-1, x_i, x_i+1これらのベースの結果は常に同じであるため(値は常にパリンドロームであるか、常にそうでないか)、ベースを無視するように変更したため、少し異なります。また、オフセットが異なります。 x_i>= 3それぞれの結果の最初の項nがA037183になるように、数値に制限されています。 出力形式は柔軟ですが、数値は適切な方法で区切る必要があります。 例: n seq 0 3 4 6 11 19 47 53 79 103 137 139 149 163 167 ... 1 5 7 8 9 12 13 14 22 23 25 29 35 …
10 code-golf  sequence  base-conversion  palindrome  code-golf  array-manipulation  matrix  code-golf  string  ascii-art  code-golf  ascii-art  physics  code-golf  number  sequence  fibonacci  code-golf  ascii-art  packing  code-golf  string  hexadecimal  code-challenge  restricted-source  decision-problem  binary  code-golf  code-golf  code-golf  stack-exchange-api  code-golf  string  parsing  generation  data-structures  code-golf  kolmogorov-complexity  graphical-output  code-golf  array-manipulation  integer  generation  data-structures  code-golf  number  random  probability-theory  king-of-the-hill  java  minesweeper  code-golf  string  kolmogorov-complexity  animation  code-golf  string  code-golf  code-golf  quine  code-golf  internet  code-golf  arithmetic  base-conversion 

1
対角屈曲
プログラマーである私たちがフレックスするのを見るのはあまり面白くありません。今日はそれを変えます!この課題では、ヘキサフレクサゴンを字形に変えます。 約 ビデオ紹介については、FlexagonsでVihartsビデオをご覧ください flexagonは、上と下以外の面を表示するために曲げることができる形状です。6つの面を持つhexahexaflexagonを作成しています。紙の片からヘキサヘキサフレクサゴンを折り畳む方法については、下の画像を参照してください。 Aストリップの両側を示しています。2つの白い三角形が接着されます。これはあなたがそれを変える方法です: 以下は、考えられる状態とそれらの関係の図です。 色付きの円は、最初の画像と同じ番号の6つの三角形を表しています。それぞれの円には2つの色があります。下の色は背面(フレクサゴンをひっくり返す場所を確認するとわかります)を最もよく表しており、この課題で考慮する必要はありません。 それを曲げる4種類の方法がありますが、我々はこれらを呼び出す:背景に灰色の円はあなたが任意の状態であなたのflexagonを曲げることができますどのように表現しLeft、Right、UpとDown。実際にこれらの方向に曲がることはありません。重要な点は、いくつかは互いに反対であることです。 あなたが中央にある場合は、使用することができますLeftし、Right他の中央のものに行くことに。センターから抜け出すには、Upとを使いますDown。中央にいないと使えないLeftまたはRight。 Left/Down = clockwise Right/Up = anti-clockwise チャレンジ 入力としてフレクサゴンの18の前面と18の背面、つまり一連の左、右、上、下のフレックスにあるものを入力として受け取り、フレックス後に8つの表示面を返す関数またはプログラムを作成します。 複雑な計算例: flex "hexaflexaperplexia" "flexagationdevices" [Right, Right, Left] Divide a strip of paper into 18 triangles: 1/2\3/1\2/3\1/2\3/1\2/3\1/2\3/1\2/3 Front 4/4\5/5\6/6\4/4\5/5\6/6\4/4\5/5\6/6 Back Write "hexaflexaperplexia" on the front of the paper strip: 1/2\3/1\2/3\1/2\3/1\2/3\1/2\3/1\2/3 hexaflexaperplexia 123123123123123123 h a …

10
二乗オフ(可能な限り最小の四角に合わせる)
はじめに これはパディングを必要とし、入力のデータタイプが不明であるため、Aのテキストよりも複雑です。 Dyalog Ltd.は毎年学生コンテストを開催しています。そこでの課題は、優れた APLコードを作成することです。これは、今年の10番目の問題の言語に依存しないコードゴルフ版です。 コンテストの元の作成者から、ここにこのチャレンジを投稿する明示的な許可があります。提供されたリンクをたどり、作者に連絡して確認してください。 問題 与えられた文字列または数値リストを、入力のすべての要素を含む最小の正方形に再形成するプログラム/関数を記述し、必要に応じて追加の要素でパディングします。pad要素は、特定のデータ型のデフォルトのfill要素、または任意の1つの要素にする必要があります。正方形の要素は、それを平坦化すると入力データの元の順序が与えられるような順序でなければなりません(後続のパディング要素がある場合は、それも含みます)。 テストケース [1,2,3,4] → [[1,2], [3,4]] [1,2,3,4,5] → [[1,2,3], [4,5,0], [0,0,0]] "Dyalog APL" → [["Dyal"], [["D","y","a","l"], ["og A"], or ["o","g"," ","A"], ["PL "], ["P","L"," "," "], [" "]] [" "," "," "," "]] [100] → [[100]] [] → あなたの言語が空の行列に最も近いもの、例えば[]または[[]]

6
チャーリーと邪悪なハイフン
これが表音アルファベットです: Alfa Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliett Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform Victor Whiskey X-ray Yankee Zulu 可能な最小バイト数: 入力は、最初の文字が削除されたランダムな順序でこれらの単語になります。 あなたの目標は、現在持っている文字だけを使って単語を元の順序に戻すことです。言い換えると、「[A] lfa」が「[B] ravo」の前にくる方法などを調べます。コードは、元のリスト、インデックスキーなどを参照してはなりません。 各単語の最初の最初の文字を復元します。 ルール X線のハイフンはおそらく邪悪ですが、私も邪悪なため、とどまる必要があります。 結果は文字列(たとえば、カンマまたは改行で区切られた)または配列になります。 スペルと大文字小文字は交渉できません。 回答に出力例を示す必要はありません。

2
基数ツリーの高さを計算する
前書き 基数ツリー、圧縮トライまたは圧縮プレフィックスツリーとして知られているが、文字列の集合を記憶するツリー状のデータ構造です。ツリーのエッジは空でない文字列でラベル付けされ、各ノードは終端または非終端です。ツリーに含まれる文字列は、ルートからターミナルノードまでのすべてのパスのラベルです。ツリーは、次の条件で定義される通常の形式である必要があります。 すべての非終端非ルートノードには、少なくとも2つの子があります。 すべてのノードで、すべての発信エッジの最初の文字が異なります。 たとえば、次のセットは非終端ノードと終端ノード["test", "testing", "tested", "team", "teams", "technical", "sick", "silly"]を(N)表す基数ツリーです(T)。 -(N)-te-(N)-st-(T)-ing-(T) | | | | | +-ed-(T) | | | +-am-(T)-s-(T) | | | +-chnical-(T) | +-si-(N)-ck-(T) | +-lly-(T) この課題では、入力として文字列を指定して、木の高さを計算します。 入力 入力は、小文字のASCII文字列の空でないリストです。重複は含まれませんが、どのような順序でもかまいません。空の文字列が含まれる場合があります。入力は適切な形式で取得できます。 出力 出力は、対応する基数ツリー内の最長のルートからリーフへのパスの長さで、含まれるノードの数で測定されます。 上記の例では、パスに対応する正しい出力は4です。 (N)-te-(N)-st-(T)-ing-(T) (N)-te-(N)-st-(T)-ed-(T) (N)-te-(N)-am-(T)-s-(T) 4つのノードを含みます。 さらなる例 基数ツリーの例をいくつか示します。 [""] -(T) ["","fuller"] -(T)-fuller-(T) ["","full","fuller"] -(T)-full-(T)-er-(T) ["full","fuller"] …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.