タグ付けされた質問 「fastest-code」

最速のコードチャレンジの勝者は、提出物の実行時のパフォーマンスによって決まります。公平を期すために、すべての提出物は同じマシンでベンチマークする必要があります。これは通常、すべての提出物をチャレンジのホストがテストする必要があることを意味します。漸近的な時間の複雑さによるスコアリングには、代わりに[fastest-algorithm]を使用します。

2
グリッドで最大の正方形[クローズ]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、 Code Golf Stack Exchangeのトピックとなるようにします。 2年前休業。 チャレンジ このようなグリッドを考えると、 1 2 3 4 5 6 7 8 1 . . . . . . . . 2 . # . . . # . . 3 . . . . . . . . 4 . . . . …

1
理論的演算を設定(+および*)[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、 Code Golf Stack Exchangeのトピックとなるようにします。 4年前休業。 理論演算を設定する 前提 乗算演算子なし(こことここ)で乗算することを含むいくつかの課題がすでにあり、この課題も同じように(2番目のリンクに最も類似しています)です。 この課題は、以前の課題とは異なり、自然数(N)の集合論的定義を使用します。 そして 例えば、 等々。 チャレンジ 私たちの目標は、セット演算(下記参照)を使用して、自然数を加算および乗算することです。この目的のために、すべてのエントリは同じ「設定言語」であり、そのインタープリターは下にあります。これにより、一貫性とスコアリングが容易になります。 このインタプリタを使用すると、自然数をセットとして操作できます。あなたの仕事は2つのプログラム本体(以下を参照)を書くことです。1つは自然数を追加し、もう1つはそれらを乗算します。 セットに関する予備的な注記 セットは通常の数学的構造に従います。ここにいくつかの重要なポイントがあります: セットは注文されていません。 セット自体は含まれていません 要素はセットに含まれるかどうか、これはブール値です。したがって、セット要素は多重度を持つことができません(つまり、要素はセットに複数回存在することはできません)。 通訳と詳細 この課題の「プログラム」は「設定言語」で記述され、ヘッダーと本文の2つの部分で構成されます。 ヘッダ ヘッダーは非常に単純です。それはあなたが解決しているプログラムをインタプリタに伝えます。ヘッダーはプログラムの最初の行です。+or *文字のいずれかで始まり、スペースで区切られた2つの整数が続きます。例えば: + 3 5 または * 19 2 有効なヘッダーです。最初は、あなたが解決しようとしていること3+5、つまりあなたの答えが正しいことを意味します8。2つ目は乗算を除いて同様です。 体 本文は、通訳に対する実際の指示がある場所です。これが、真に「加算」または「乗算」プログラムを構成するものです。答えは、各タスクに1つずつ、2つのプログラム本体で構成されます。次に、実際にテストケースを実行するようにヘッダーを変更します。 構文と手順 指示は、コマンドとそれに続く0個以上のパラメーターで構成されます。次のデモンストレーションでは、アルファベット文字は変数の名前です。すべての変数はセットであることを思い出してください。labelはラベルの名前です(ラベルはセミコロン(つまりmain_loop:)が後に続く単語です)int。整数です。以下は有効な手順です。 フロー制御: jump label無条件にラベルにジャンプします。ラベルは、セミコロンが後に続く「単語」main_loop:です。たとえば、ラベルです。 je A label Aが空の場合はラベルにジャンプ jne A label …

3
超音速ドミノタイル
仕事 三つの整数読み取りプログラム書き込みmは、nは STDINから、またはコマンドライン引数のいずれかとして、寸法の矩形のすべての可能なタイル貼りの印刷N×M個により2×1及び1×2ドミノ、最終的に有効なタイリングの数。 個々のタイリングのドミノは、2×1の-場合は2つのダッシュ(|)、1×2ドミノの場合は2つの垂直バー()で表す必要があります。各タイリング(最後のタイリングを含む)の後にはラインフィードが必要です。 スコアリングの目的で、STDINから、またはプログラムが有効なタイルの数のみを印刷し、タイル自体は印刷しないようにするコマンドライン引数としてフラグを受け入れる必要もあります。 プログラムは1024バイト以下にする必要があります。m× n≤64のようなすべての入力に対して機能する必要があります。 (4x6長方形のすべてのドミノタイルを印刷することに触発されています。) 例 $ sdt 4 2 ---- ---- ||-- ||-- |--| |--| --|| --|| |||| |||| 5 $ sdt 4 2 scoring 5 得点 スコアは、フラグが設定された入力8 8に対するプログラムの実行時間によって決まります。 これを最速のコンピュータチャレンジではなく最速のコードにするために、すべての提出物を自分のコンピュータ(Intel Core i7-3770、16 GiB PC3-12800 RAM)で実行して公式スコアを決定します。 コードをコンパイルまたは実行する方法の詳細な手順を残してください。言語のコンパイラ/インタプリタの特定のバージョンが必要な場合は、その旨を表明してください。 以下の場合、私は提出物にスコアを付けないままにする権利を留保します。 私のオペレーティングシステム(Fedora 21、64ビット)用の無料の(ビールのような)コンパイラ/インタープリタはありません。 私たちの努力にもかかわらず、あなたのコードは機能しないか、私のコンピューターで正しくない出力を生成します。 コンパイルまたは実行には1時間以上かかります。 コードまたは利用可能な唯一のコンパイラ/インタープリタには、システムコールrm -rf ~または同様に魚のようなものが含まれています。 リーダーボード コンパイルと実行の両方を、コンパイルでは10,000回、実行では(コードの速度に応じて)100から10,000回のループで実行し、平均を計算して、すべての送信を再評価しました。 …

12
最速のフィボナッチを書く
これは、フィボナッチ数列に関するもう1つの課題です。 目標は、20'000'000 番目のフィボナッチ数を可能な限り高速に計算することです。10進数の出力は約4 MiBです。それでは始まります: 28543982899108793710435526490684533031144309848579 出力のMD5合計は fa831ff5dd57a830792d8ded4c24c2cb 実行中に数値を計算し、結果をに送るプログラムを提出する必要がありstdoutます。私のマシンで測定した最速のプログラムが勝ちます。 追加のルールは次のとおりです。 x64 Linuxで実行可能なソースコードとバイナリを送信する必要があります ソースコードは1 MiBより短くする必要があります。アセンブリの場合、バイナリのみがそれほど小さい場合でも許容されます。 偽装した場合でも、計算する数値をバイナリに含めないでください。この数は実行時に計算する必要があります。 私のコンピューターには2つのコアがあります。並列処理を使用できます 約4.5秒で実行される小さな実装をインターネットから取得しました。あなたが良いアルゴリズムを持っていると仮定すると、これを打ち負かすことは非常に難しいことではありません。

1
本当にユニークな配列を数える
これは、一意のセットを作成するCount配列のフォローアップです。大きな違いは、一意性の定義です。 A長さの配列を考えnます。配列には正の整数のみが含まれます。例えばA = (1,1,2,2)。f(A)のすべての空でない隣接サブアレイの合計のセットとして定義してみましょうA。この場合f(A) = {1,2,3,4,5,6}。作成する手順f(A) は次のとおりです。 のサブ配列はAです(1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)。それぞれの合計は1,1,2,2,2,3,4,4,5,6です。したがって、このリストから取得するセットはです{1,2,3,4,5,6}。 配列が逆になることを除いて、と同じ長さの配列が他にない場合は、配列をA 一意と呼びます。例として、しかし、同じ合計のセットを生成する長さの他の配列はありません。Bf(A) = f(B)Af((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}3 仕事 所与のためのタスク、nおよびsその長さのユニークな配列の数をカウントすることです。sとの間である1と想定でき9ます。要素が特定の整数sまたはのいずれかである配列をカウントするだけで済みますs+1。たとえば、s=1カウントする配列に1およびのみが含まれている場合2。ただし、一意性の定義は、同じ長さの他の配列に関するものです。具体的な例としては、と同じ合計のセットを提供するため、一意で[1, 2, 2, 2]はありません[1, 1, 2, 3]。 配列の逆数と配列自体を数える必要があります(配列がもちろんパリンドロームでない限り)。 例 s = 1、n = 2、3、4、5、6、7、8、9の回答は次のとおりです。 4, 3, 3, 4, 4, 5, 5, 6 の場合s = …

2
クアルトにはいくつの抽選がありますか?
前書き この課題は、Project Eulerの問題に似ています。私はそれを思いついたのは、私が一見シンプルなボードゲームをプレイしていて、そのメカニズムに関する簡単な質問に答えるための効率的なソリューションを考え出せなかったからです。 Quartoは、4つの連続した楽しい変種です。これは、16個のユニークなピースを含む4 x 4のボードで再生されます(ピースは複製されません)。毎ターン、各プレイヤーはボードに1個の駒を置きます。各ピースには4つのバイナリ特性があります(ショート/トール、ブラック/ホワイト、スクエア/サーキュラー、ホロー/ソリッド)。目標は、4つの特性のいずれかについて、水平、垂直、または2つの対角線に沿って4つを連続して作成することです。つまり、4つの黒い部分、4つの白い部分、4つの高い部分、4つの短い部分、4つの正方形の部分、4つの円形の部分、4つの中空の部分、または4つの中実の部分です。 上の画像は完成したゲームを示しています。4つの正方形の駒があるため、4つ並んでいます。 チャレンジ クアルトでは、いくつかのゲームは引き分けに終わるかもしれません。 可能な終了位置の総数は16!、約20兆です。 それらの最終ポジションのいくつがドローですか? ルール ソリューションは、ドローであるエンドポジションの総数を計算して出力するプログラムでなければなりません。正解は414298141056 手動で推定されたゲームのルールの情報のみを使用できます(コンピューター支援の証拠はありません)。 問題の数学的簡略化は許可されますが、ソリューションで説明し、(手動で)証明する必要があります。 勝者は、CPU実行時間の点で最も最適なソリューションを持つものです。 勝者を決定するために、16 GB RAMを搭載したMacBook Pro 2,5 GHz Intel Core i7で、30m未満の報告された実行時間ですべてのソリューションを実行します。 他のボードサイズでも機能するソリューションを考え出すことのボーナスポイントはありません。それがいいのに。 該当する場合、プログラムは上記のハードウェアで1分以内にコンパイルする必要があります(コンパイラの最適化の乱用を避けるため)。 デフォルトの抜け穴は許可されていません 提出物 投稿してください: コードまたはコードへのgithub / bitbucketリンク。 コードの出力。 ローカルで測定された実行時間 あなたのアプローチの説明。 締め切り 提出期限は3月1日ですので、まだ十分な時間があります。

5
ハミング距離シーケンスの数を数える
等しい長さの2つの文字列間のハミング距離は、対応するシンボルが異なる位置の数です。 してみましょうP長さのバイナリ文字列にするnとT長さのバイナリ文字列です2n-1。の左から右へのすべての-lengthサブストリングn間のハミング距離を計算し、それらを配列(またはリスト)に入れることができます。PnT ハミング距離シーケンスの例 ましょうP = 101とT = 01100。このペアから取得するハミング距離のシーケンスは2,2,1です。 仕事 増加のためnで始まるn=1、バイナリ文字列のすべての可能なペアを検討P長さのnとT長さのを2n-1。その2**(n+2n-1)ようなペアが存在するため、ハミング距離のシーケンスが多くなります。ただし、これらのシーケンスの多くは同一です。タスクは、どれがどれだけ異なるかを見つけることnです。 コードは、の値ごとに1つの数値を出力する必要がありますn。 スコア あなたのスコアは、nあなたのコードが私のマシンで5分間に達成した最高点です。タイミングは、そのためだけの時間ではなく、合計実行時間に対するものnです。 誰が勝ちますか 最もスコアの高い人が勝ちます。2人以上の人が同じスコアで終わる場合、それが勝つ最初の答えです。 回答例 ためにnから1の8最適な答えがあります2, 9, 48, 297, 2040, 15425, 125232, 1070553。 言語とライブラリ 利用可能な任意の言語とライブラリを使用できます。可能であれば、コードを実行できるようにするとよいでしょう。そのため、可能であれば、Linuxでコードを実行/コンパイルする方法の完全な説明を含めてください。 マイマシンタイミングは64ビットマシンで実行されます。これは、8GB RAM、AMD FX-8350 Eight-Core Processor、Radeon HD 4250を備えた標準のUbuntuインストールです。これは、コードを実行できる必要があることも意味します。 主要な回答 11におけるC ++ feersumによる。25秒。 11でC ++アンドリュー・エプスタインによります。176秒。 Neil によるJavascriptの10。54秒。 9でHaskellの nimiによります。4分59秒。 8でJavascriptを fənɛtɪkによります。10秒。

2
税歴史家
前書き 彼の王国の税金を管理することに問題を抱えている徴税人がいます:歴史的な記録は大火事で焼失しました。 彼は、現在のお金がどこから受け継がれたかという点で、過去の可能性がいくつあるかを知りたいと思っています。幸いなことに、彼の王国は非常に単純です。 王国は2Dブール行列によってモデル化できます。ここで、はlお金を相続した人と、相続Oしていない人を表します。例えば: l O l l O O O l l O l O O O O l (常に長方形になります) 次の世代では、王国は小さくなります(狼は強いです!)。 次の世代はこのようになり、前の世代に重ね合わされます(x次の世代の子孫のプレースホルダーです) l O l l x x x O O O l x x x l O l O x x x O O O l (左上がそう子孫は、それらの周りに直接ある先祖を見ていきx{表示されl、O、O、O}と呼ばれる、アンアラインド矩形近傍) 祖先が1人だけお金を受け継いだ場合、子孫は彼らからお金を受け継ぎます。複数の祖先がお金を相続した場合、彼らはつまずき、子孫は結局お金を相続しないことになります。誰もお金を相続していない場合、子孫はお金を相続しません。 …

4
高速線描画アルゴリズム
タスクは、16ビット整数の配列に水平線を描画する方法を見つけることです。 ワードあたり16ピクセルの256x192ピクセル配列を想定しています。ラインは、セット(1)ビットの連続したランです。行は、任意の単語の中央で開始し、他の単語と重複し、任意の単語で終了できます。彼らはまた、同じ言葉で始まって終わるかもしれません。彼らは次の行に折り返すことはできません。ヒント:真ん中の単語は簡単です-0xffffと書くだけですが、同じ単語の開始と終了のケースを処理するので、エッジはトリッキーになります。関数/手順/ルーチンは、y座標だけでなく、水平方向の開始点と終了点を示すx0およびx1座標を取得する必要があります。 組み込みプロセッサ用にほぼ同じアルゴリズムを自分で設計したので、これから自分を除外しますが、他の人がどうやってそれを行うのか知りたいです。比較的高速な演算を使用した場合のボーナスポイント(たとえば、64ビットの乗算または浮動小数点演算は、組み込みマシンでは高速ではありませんが、単純なビットシフトでは高速になります。)

4
直交循環行列のカウント
行列の2つの行は、それらの内積がゼロに等しい場合、直交します。すべての行が直交対毎ので行列を呼び出し、直交行列を。巡回行列は、各行ベクトルは、前の行ベクトルに対して右に一つの要素を回転させるものです。我々は唯一のエントリはどちらかである行列に興味があるだろう-1か1。 仕事 直交する循環行列n/2によってn2分間で(可能な限り)できるだけ多くの異なる数をカウントするコードを記述しますn。 入力 コードには入力がありません。n好きな値を試してみることができます。たとえば、コードは最小値からのn乗算のすべてを試行して、を試行することもできます。 4n = 2 出力 あなたが見つけた直交循環行列の数。また、コード自体にマトリックスを出力できるようにするための簡単なスイッチがコード内にあるはずです。 スコア あなたが見つけた循環行列の数。 ヒント 循環行列n/2による直交は、がの倍数または未満のn場合にのみ存在します。n4n4 直交循環行列の例は次のとおりです。 -1 1 -1 -1 -1 -1 1 -1 素朴なアプローチのヒント 最も単純なアプローチは、考えられるすべての行列を反復することです。これは、次の2つの観察を使用して高速化できます。 循環行列の直交性をテストするには、各行を最初の行と比較するだけです。これはサンプルコードに実装されています。 リンドンの単語を反復処理し、直交行列が見つかれば、可能な回転数を掛けることができます。これはまだテストされていないアイデアなので、バグがあるかもしれません。 サンプルコード これは非常にシンプルで素朴なpythonの答えです。を使用して実行しましたtimeout 120。 import itertools def check_orthogonal(row): for i in xrange(1,int(n/2)): if (sum(row[j]*row[(j+i) % n] for j in xrange(n)) != 0): return False …

3
Nまでの素因数分解自然数を昇順でリストします
与えられたnリストに対して、昇順および昇順のすべての自然数の素因数分解。たとえば、= 10の場合、出力は次のようになります。1nn 1: 2: 2^1 3: 3^1 4: 2^2 5: 5^1 6: 2^1 3^1 7: 7^1 8: 2^3 9: 3^2 10: 2^1 5^1 要件: 数値を繰り返し処理して、それぞれを因数分解することはできません。(数値を対数時間で因数分解する方法を知らない限り、パズルを解くのに時間を無駄にすることはないと思います。)これは非効率的です。 出力は上記の例のようになります。各行に、数とその素因数のリスト。 これnは非常に大きくなる可能性があるため、すべての因数分解をメモリに生成し、最後にそれらを並べ替えることは不可能である可能性があることを考慮してください。(ただし、これに違反する賢い解決策がある場合は、それも投稿してください。)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.