プログラミングパズルとコードゴルフ

プログラミング愛好家やコードゴルファーのためのQ&A

18
複数キーの並べ替え
インデックスのリストと0個以上の整数のリストが与えられた場合、最初の入力からのキー優先度で昇順でソートされた整数のリストを出力します。 例 キー入力をとし[1, 0, 2]、リスト入力をとします[[5, 3, 4], [6, 2, 1], [5, 2, 1]]。これらのリストは、2番目の要素、1番目の要素、3番目の要素の順に昇順で並べ替える必要があります。 最初に、indexの値でソートします1。[[6, 2, 1], [5, 2, 1], [5, 3, 4]] 次に、indexの値を使用して、最初の並べ替えの関係を解除します0。[[5, 2, 1], [6, 2, 1], [5, 3, 4]] 最後に、indexのvluesとの残りの関係を解除します2(これは実際には何も変更しません。関係が残っていないためです)。 詳細 ソートは安定しています。2つの要素が指定されたソートキーに関して同等に比較される場合、それらは出力内で同じ相対的な順序のままである必要があります。たとえば、指定されたソートキーの下でAとBが等しく、入力がであった[..., A, ..., B, ...]場合、出力のA前Bに配置する必要があります。 ソートキーは、入力リストのいずれかに存在しない要素を参照することはありません。 ソートキーは繰り返されません。したがって、[1, 2, 1]ソートキーの有効なリストではありません。 ソートキーによって参照されない要素は、ソート順を考慮しません。出力の順序は、初期相対順序とソートキーによって参照される要素の値のみが決定します。 ソートキーをゼロインデックスにするか1インデックスにするかを選択できます。 ソートキーには負の値はありません。1インデックスを使用することを選択した場合、ソートキーにもゼロはありません。 整数値は、言語のネイティブ表現可能な範囲を超えません。選択した言語がネイティブに任意の精度の整数(Pythonなど)に対応している場合、メモリの制約を条件として、任意の整数値を入力に含めることができます。 リファレンス実装(Python 2) #!/usr/bin/env python …

5
好奇心が猫を殺した?
好奇心が猫を殺したと言う人もいます。他の人は、それは箱と毒だったと言います。RSPCAは、ErwinSchrödingerがペットを飼う権利を失う必要があると言っています。 彼の家の外の動物権活動家と。猫の殺人者の科学者は、シュレーディンガーは最終的に彼の最大の発明を打ち出しています。半減期を持つことができるunobtaniumとhandwaviumの特別な放射性混合物で、1グラムの製品であらゆる生物を殺すことができます。残念ながら、彼が最後の猫であるボブでそれをテストしようとしたとき、彼は猫が9つの命を持っていることを忘れていました。いくらかの水はあるが食物がなければ、貧しいボブは最初に製品が彼を殺さなければ正確に1週間(7日間)生きます。 タスク:ミリグラム単位の質量とミリ秒単位の半減期の入力がある場合-両方の整数が2 ^ 31を超える可能性がある場合、ミステリースーパープロダクトが猫を殺すかどうか、または1週間かどうかを出力するプログラムを作成します最初に制限が切れます。答えで指定されているtrue / yes / 1 / anythingは、彼が飢fromで死なない場合を想定しています。 製品が彼を殺すには、合計9グラムが腐敗しなければなりません。したがって、18グラムのサンプルのうち、1つの半減期が経過する必要があります。サンプルに含まれるグラムが9グラム以下の場合、これは決して達成されないため、9グラムが減衰する前に1週間が経過するとすぐに推測できます。 あなたは仮定することができます: ボブは、9グラムが減衰したマイクロ秒で死亡します。 変化による質量の変化は問題ではありません。 すべての曜日と時間は、一般的に受け入れられている地球時間に従います。 ボブが封印された箱は壊れたり開けたりすることができないため、他の原因による死の可能性はありません。 酸素も問題ではありません。 両方がまったく同時に発生する場合は、どちらの出力も受け入れられます。 すべての入力は2 ^ 63-1未満でなければなりません テストケース: 例: 18000 604800001 9グラムが減衰するには、正確に1半減期が経過する必要があります(18000/2 = 9000ミリグラムまたは9グラム)。1半減期は604800001ミリ秒、つまり168時間1ミリ秒、または正確に1週間1ミリ秒です。ボブはちょうど1週間で空腹で亡くなっているため、9グラムの製品制限に達する直前に空腹で亡くなったため、出力は誤っています。 8000 40000 false 70000 800 true 18000 604800000 either 18000 604800001 false 18000 604799999 true 1 1 false 100000 1 true …
20 code-golf  math 

1
差分圧縮[終了]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 2年前に閉店。 この課題のために、差分を圧縮する必要があります。 diffは、2つの文字列の違いを表すデータです。 この課題のために、次のことができる1つ以上のプログラムを提供する必要があります。 を入力AしB、差分を出力します。C 入力AおよびC、および出力B 入力BおよびC、および出力A 目標は、diff Cをできるだけ小さくすることです。 diffは、文字列、数値、データのblobなど、何でもかまいません。サイズ(バイト数)だけが重要です。 Githubで見つけることができる 50のテストケースがあります。各テストケースは、スペースで区切られた2つのURLで構成されており、diffする必要がある2つのファイルを指します。(これらのテストケースは、PPCGメンバーのGithubプロファイルから作成されました。ありがとうございます!) 上記の3つのタスクはすべて、(各テストケースごとに)十分に電力が供給されたコンピューターで実行するのに1分未満かかります。 スコアは50個の差分すべての合計サイズ(バイト単位)に等しく、値が小さいほど優れています。プログラムでの差分のハードコーディングは許可されていません(ハードコーディングを防ぐためにテストケースを変更する権利を留保します)。diff(などdiffutils)を生成する組み込み関数は使用できません。

4
部分文字列から文字列を特定します
前書き 以前に、できる限り少ないクエリタイプの操作を使用してオブジェクトを再構築するという考え方の2つの 課題を作成しました。これは3番目になります。 タスク 入力はSアルファベットabcとその長さの空でない文字列であり、出力はですS。制限なしで、これはもちろん簡単な作業です。問題は、S直接アクセスすることが許可されていないことです。できるのは、他の文字列でSあるfunctionを呼び出すことだけです。in の出現回数をカウントします。重複するオカレンスは個別としてカウントされるため、実際には次のようなインデックスの数を返します。num_occur(T, S)Tnum_occurTSnum_occur(T, S)i S[i, i+1, …, i+length(T)-1] == T たとえば、num_occur("aba", "cababaababb")を返し3ます。num_occur(S, S)を返すことにも注意してください1。の結果num_occur("", S)は未定義であり、空の文字列で関数を呼び出さないでください。 要するに、あなたが取る関数やプログラムを書く必要がありますSし、length(S)入力として、呼び出し、num_occurいくつかの短い文字列とにS何回か、再構築しS、その情報を返すことから。 ルールとスコアリング あなたの目標はnum_occur、できるだけ少ない呼び出しを行うプログラムを書くことです。ではこのリポジトリは、という名前のファイルを見つけますabc_strings.txt。このファイルには、長さ50〜99の100行の文字列が含まれています。スコアはこれらの入力に対する呼び出しnum_occurの合計数であり、スコアが低いほど優れています。ソリューションは、実行中にこの番号を追跡し、終了時に印刷することが望ましいです。文字列は、から一様にランダムな文字を選択して生成されabcます この文字列生成方法に対して最適化することはできますが、文字列自体は最適化できません。 提出する前にテストケースでソリューションを実行する必要があることを除いて、時間制限はありません。ソリューションはS、テストケースだけでなく、有効な入力に対して機能する必要があります。 num_occur他の人を使用していない場合は、実装も共有することをお勧めします。ボールを転がすために、Pythonでの実装を次に示します。 def num_occur(needle, haystack): num = 0 for i in range(len(haystack) - len(needle) + 1): if haystack[i : i + len(needle)] == needle: num += 1 return …

12
タイムゾーンを変更する
チャレンジ 入力として時間とタイムゾーンを指定し、そのタイムゾーンの時間を出力します。 時間 時刻は次のような24時間形式で表示されます。 hh:mm hhは2桁の時間、mmは2桁の分です。次のように、時間と分には常にゼロが埋め込まれることに注意してください。 06:09 指定された時間はすべてUTC + 00:00です。 出力の時間をゼロで埋める必要はありませんが、時間は24時間形式である必要があります タイムゾーン タイムゾーンは次の形式で提供されます。 UTC±hh:mm ここで、±は+または-であり、hhは2桁の時間で、mmは2桁の分です(ここでも、ゼロが埋め込まれます)。 そのタイムゾーンの時間を見つけるには、入力された時間からUTC±の後の時間を加算(シンボルが+の場合)または減算(シンボルが-の場合)します。 たとえば、入力が24:56との場合、UTC-02:5024:56から2時間50分を減算します。 24:56 02:50 - ----- 22:06 出力はになります22:06。 例 シカゴ Input: 08:50 and UTC-06:00 Output: 02:50 カトマンズ Input: 09:42 and UTC+05:45 Output: 15:27 サモア Input: 06:42 and UTC+13:00 Output: 19:42 ハワイ Input: 02:40 and UTC-10:00 …
20 code-golf  date 

14
三角形にもっとノードが必要
ノードが重心座標を使用してラベル付けされている標準の正三角形を考えてみましょう。 この3つのノードの三角形を6つのノードの三角形に変えるには、3つの頂点の新しい線(元の3つのノードの三角形の側面にあるものよりも多く)を追加し、内部エッジ(内部ノードではなく)を削除し、座標を正規化する: (再び、一つ以上のオリジナル6ノード三角形の側に存在していた)、4つの頂点の行を追加し、10ノードの三角形に6ノード三角形から行くためのプロセスを繰り返すこと、任意の内部エッジ(ただし、削除しない内部ノードを)座標を再正規化します: このプロセスは無期限に繰り返すことができます。このチャレンジの目標には、Nこのプロセスが実行された回数を表す整数が与えられ、重心座標で関連する三角形のすべてのノードが出力されます。 入力 プログラム/関数は、Nこのプロセスが適用された回数を表す単一の負でない整数を入力として受け取る必要があります。N=0では、3つのノードを持つ元の三角形を出力する必要があることに注意してください。 入力は、任意のソース(関数パラメーター、stdioなど)から取得できます。 出力 プログラム/関数は、すべてのノードを正規化された重心座標で出力する必要があります。ノードの順序は関係ありません。数値は、分数(分数の削減は不要)または浮動小数点数として指定できます。「スケーリングされた」ベクトルを出力してノードを指定することもできます。たとえば、次の3つの出力はすべて同等であり、許可されます。 0.5,0.5,0 1/2,2/4,0 [1,1,0]/2 浮動小数点出力を使用する場合、出力は1%以内の精度である必要があります。出力は、必要なシンク(stdio、戻り値、戻りパラメーターなど)になります。重心座標はノードごとに2つの数値によってのみ一意に決定されますが、ノードごとに3つの数値すべてを出力する必要があることに注意してください。 例 サンプルケースの形式は次のとおりです。 N x0,y0,z0 x1,y1,z1 x2,y2,z2 ... ここで、最初の行は入力Nであり、後続のすべての行x,y,zは、出力に1回だけ存在するノードを形成します。すべての数値は、近似浮動小数点数として与えられます。 0 1,0,0 0,1,0 0,0,1 1 1,0,0 0,1,0 0,0,1 0.5,0,0.5 0.5,0.5,0 0,0.5,0.5 2 1,0,0 0,1,0 0,0,1 0.667,0,0.333 0.667,0.333,0 0.333,0,0.667 0.333,0.333,0.333 0.333,0.667,0 0,0.333,0.667 0,0.667,0.333 3 1,0,0 0.75,0,0.25 0.75,0.25,0 0.5,0,0.5 0.5,0.25,0.25 0.5,0.5,0 …

6
ブリティッシュインテリジェンスを倒せますか?(ノノグラムソルバー)
ブリティッシュインテリジェンスを打ち負かすという危険な探求に乗り出す時が来ました。この課題の目的は、ノノグラムを解決する最短のコードを書くことです。 ノノグラムとは何ですか? ルールは簡単です。正方形のグリッドがあり、黒で塗りつぶすか、空白のままにする必要があります。グリッドの各行の横には、その行の黒い四角の実行の長さがリストされます。各列の上には、その列の黒い四角の連続の長さがリストされています。あなたの目的は、すべての黒い正方形を見つけることです。このパズルタイプでは、数字は、特定の行または列にある塗りつぶされた正方形の切れ目のないラインの数を測定する離散トモグラフィーの形式です。たとえば、「4 8 3」の手がかりは、4、8、および3つの塗りつぶされた正方形のセットがこの順序であり、連続するグループ間に少なくとも1つの空白の正方形があることを意味します。[ 1 ] [ 2 ] したがって、上記のノノグラムの解決策は次のとおりです。 実装の詳細 任意の方法でNonogramを表現す​​ることを選択し、言語に適した方法で入力として使用することができます。出力についても同様です。この課題の目的は、文字通り仕事を成し遂げることです。プログラムが提供する出力で非グラムを解くことができれば、それは有効です。1つの注意点は、オンラインソルバーを使用できないことです:) この問題は完全に効率的な解決策がないという点で非常にアルゴリズム的に挑戦的(np-complete)であり、そのため、大きな問題を解決できないことに対するペナルティはありませんが、そうであれば答えは大きく報われます大きなケースを処理できる(ボーナスを参照)。ベンチマークとして、私のソリューションは5〜10秒以内に最大約25x25で動作します。さまざまな言語間で柔軟性を持たせるには、25x25のノノグラムで5分未満のソリューションで十分です。 常に正方形のNxNノノグラムでパズルを想定できます。 このオンラインのノノグラムパズルメーカーを使用して、ソリューションをテストできます。 得点 もちろん、好きな言語を自由に使用できます。これはコードゴルフなので、エントリは次の順序で並べ替えられます。accuracy -> length of code -> speed.ただし、コードゴルフ言語、ゴルフの試みを示すすべての言語での回答に落胆しないでください。興味深い方法で支持されます! ボーナス ここでは、ブリティッシュインテリジェンスがリリースした暗号化されたクリスマスカードから実際に非グラムについて学びました。最初の部分は、基本的に大規模な25x25ノノグラムでした。あなたのソリューションがこれを解決できる場合、あなたは称賛を得るでしょう:) データ入力の面であなたの人生を楽にするために、私はあなたの無料使用のためにこの特定のパズルのデータをどのように表現したかを提供しました。最初の25行は行の手がかりで、その後に '-'の区切り線、25行の列の手がかり、 '#'の区切り線、正方形の手がかりが入ったグリッドの表現が続きます。 7 3 1 1 7 1 1 2 2 1 1 1 3 1 3 1 1 3 1 1 3 …

9
爆発的なASCIIアートチャレンジ
戦略ゲーム「Hexplode」では、プレイヤーは交互に六角形のボードにトークンを置きます。トークンの数が隣接するタイルの数と等しくなると、そのタイルはhexplodesし、その上のすべてのトークンを周囲の隣人に移動します。ここでオンラインでゲームをプレイできます。 私はこのゲームが好きですが、特定のタイルにいくつのトークンが入っているかを正確に知ることが難しい場合があります。私は常に隣人の数を数えています。ASCIIアートがあれば、各タイルにいくつのトークンが配置されているかを思い出すのに役立ちます。 入力として正の整数を取り、サイズNの六角形のこのASCII表現を生成するプログラムまたは関数を作成する必要があります。各タイルは、タイルが持っている隣人の数になります。1は近傍がゼロの奇妙なコーナーケースであるため、1より大きい入力のみを処理する必要があります。 この番号は、STDIN、関数引数、コマンドライン引数など、ファイルからの適切な形式で取得できます。出力は、STDOUTへの印刷、ファイルへの書き込み、文字列のリスト、改行で区切られた文字列など 以下は、最初の5つの入力のサンプル出力です。 2) 3 3 3 6 3 3 3 3) 3 4 3 4 6 6 4 3 6 6 6 3 4 6 6 4 3 4 3 4) 3 4 4 3 4 6 6 6 4 4 6 6 6 6 4 3 …

7
ルックアンドセイシーケンス:ローマ数字版
チャレンジの説明 Look-and-sayシーケンスに関連するいくつかの課題がありました。クイックリマインダー: シーケンスは、1で始まります このシーケンスの後続の用語は、前の用語の繰り返し数字の各グループを列挙することにより生成されます。 したがって、最初のいくつかの用語は次のとおりです。 1 "one" 11 "one one" (we look at the previous term) 21 "two ones" 1211 "one two, one one" 111221 "one one, one two, two ones" 312211 "three ones, two twos, one one" 今度は同じことをしましょうが、代わりにローマ数字を使用します。最初からI同じルールに従います(代わりに数字カウントルールを文字に適用するためIVX、one one, one five, one ten代わりに、one four, one tenまたは他の方法で読み取ります)。 I "one" II …

13
それは語彙ですか?
入力がプログラミング言語を使用する語彙であるかどうかを確認する最も短い方法は何ですか? wordinianは、長さ1から元の単語の長さまでの単語を含む単語です。例えば、 ビン 「I」は単語 「in」は単語 「bin」は単語 または、 ステージ 「a」は単語 「ta」は単語(はい) 「age」は単語 「stag」は単語 「stage」は単語 入力 コードは、妥当な形式の単語と辞書を入力として使用する必要があります。 出力 出力はtrueまたはfalseを示す値である必要があり、単語がwordinianであるかどうかがわかります。 wordiniansの詳細については、ここをクリックしてください。 これは、入力およびサブワードとして使用する単語のリストです。また、@ xnorに応答して、サブワードのチェーンではなく、各長さのサブワードを含める必要があります。1つの単語のみが入力として使用されることに注意してください。

5
バイナリワードに一致する最短の単純な正規表現
仕事 単純な正規表現を、次のみで構成される空でない正規表現として定義します 文字0と1、 括弧をグループ化(して)、 1つ以上の反復量指定子+。 0sと1sの空でない文字列が与えられると、プログラムは完全な入力文字列に一致する最短の単純な正規表現を見つけるはずです。(つまり、単純な正規表現に一致する場合、とで予約されているふり^ をし $ます。)最短の正規表現が複数ある場合は、それらの一部またはすべてを出力します。) code-golfなので、最短の送信(バイト単位)が勝ちます。 テストケース 1 -> 1 00 -> 00 or 0+ 010 -> 010 1110 -> 1+0 01010 -> 01010 0101010 -> 0(10)+ or (01)+0 011111 -> 01+ 10110110 -> (1+0)+ 01100110 -> (0110)+ or (01+0)+ 010010010 -> (010)+ 111100111 -> 1+001+ or …

30
ASCII長方形を描く
2つの整数を配列の入力として指定し、最初の整数を幅として、2番目の整数を高さとして使用して、長方形を描きます。 または、言語でサポートされている場合、2つの整数を別々の入力として指定できます。 幅と高さが3未満になることはないと仮定し、常に指定されます。 出力例: [3、3] |-| | | |-| [5、8] |---| | | | | | | | | | | | | |---| [10、3] |--------| | | |--------| これはコードゴルフであるため、バイト数が最も少ない答えが優先されます。

1
ブートローダーゴルフ:Brainf ***
特定のBrainfuckプログラムを実行するブートローダーを作成します。これはcode-golfであるため、バイト数が最小のプログラムが優先されます。ブートローダーであるため、プログラムのサイズはコンパイルされたコードでゼロ以外のバイトでカウントされます。 ブレインファック 30000の8ビットオーバーフローセル。ポインターがラップオーバーします。 操作に関する注意事項: 入力は、すべての印刷可能なASCII文字が正しくサポートされるように読み取る必要があります。他のキーストロークは、任意の文字を挿入するか、まったく何もしません。 ユーザー入力の読み取りは、行バッファーではなく文字バッファーでなければなりません。 ユーザー入力を読み取るには、挿入された文字をエコーする必要があります。 出力は、コードページ437または組み込みのVGAアダプターのデフォルトコードページのいずれかに従う必要があります。 ブートローダー これはx86ブートローダーです。ブートローダーは、従来の55 AAシーケンスで終了します。コードは、VirtualBox、Qemu、または他の有名なx86エミュレーターで実行する必要があります。 ディスク 実行可能Brainfuckは、ブートローダーの直後の2番目のディスクセクターにあり、通常はMBRセクションのディスクの最初のセクターに配置されます。追加のコード(510バイトを超えるコード)は、他のディスクセクターに配置できます。ストレージデバイスは、ハードドライブまたはフロッピーディスクである必要があります。 STDIO もちろん、ブートローダーはオペレーティングシステムのIO機能にアクセスできません。そのため、テキストの印刷とユーザー入力の読み取りに代わりにBIOS機能が使用されます。 テンプレート まず、Nasm(Intel構文)アセンブリで記述された簡単なテンプレートを以下に示します。 [BITS 16] [ORG 0x7c00] ; first sector: boot: ; initialize segment registers xor ax, ax mov ds, ax mov es, ax mov ss, ax ; initialize stack mov sp, 0x7bfe ; load brainfuck …

12
アリコットシリーズのシーケンスのn番目の桁を返します
0.定義 シーケンスは、番号のリストです。シリーズは、数字のリストの合計です。自然数 のセットには、すべての「ゼロより大きい非負の整数」が含まれます。自然数j の除数(この文脈では)は自然数iであり、j ÷ iも自然数です。 1.前文 このサイトの他のいくつかの質問では、アリコットの概念、またはaより小さい自然数aの約数のシーケンスに言及しています。友好的な数を決定するには、これらの除数の合計を計算する必要があります。これは、アリコート合計またはアリコート系列と呼ばれます。すべての自然数には独自のアリコート合計がありますが、数値のアリコート合計の値は必ずしもその数に固有ではありません。(例gratia、すべての素数のアリコートの合計は1です。) 2.課題 自然数を指定するとn、nアリコートの合計のシーケンスのth桁目を返します。1のシリーズから始まる、シーケンスの最初のいくつかのシリーズは次のとおりです。 {0, 1, 1, 3, 1, 6, 1, 7, 4, 8, 1, 16, 1, 10, 9, 15, 1, 21, 1, 22, 11, 14, 1, 36, 6, 16, 13} 連結すると、これらは次のようになります。 0113161748116110915121122111413661613 入力は、好みに応じて、インデックスがゼロまたは1になります。溶液は、10,000桁(入力まで戻ることができるプログラムまたは関数でなければならない9999か、10000)を。最短の作業ソリューションが勝ちます。 3.テストケース 正しい入出力のペアには、次のものが含まれますが、これらに限定されません。 0 or 1 -> 0 4 or 5 …

5
ナンバープレートゴルフ:表彰
参照:解析 前書き あなたは、スピードカメラをプログラミングしている政府のプログラミングチームに取り組んでいます。ただし、速度計算機をプログラムした人々のグループはスペースを取りすぎているため、ナンバープレート認識ソフトウェアをできるだけ小さくする必要があります。 チャレンジ ナンバープレートの画像を指定すると、プレート上のテキストを返します。 ナンバープレート 以下は、プログラムが認識しなければならないすべての文字です。 ABCDEFG H1JKLMN0 PQRSTUVW XYZ01234 56789 注意 イギリスのナンバープレートでは、I(i)と1(1)の文字は同じであり、O(o)と0(ゼロ)の文字は同じです。そのため、常に文字が数字であると想定してください。すなわち、次のナンバープレートは10(1つのゼロ)です。 例 C0D3 GLF B3T4 DCY M1NUS 15 YET1CGN その他の規則 インターネットアクセスおよびOCRライブラリと機能は許可されていません。 ナンバープレートは常に上に示したものと同じに見えます。すべてのナンバープレートはほぼ同じサイズになります(切り取り方法により多少の誤差があります)。 ナンバープレートのロスレスPNGバージョンが必要な場合は、それらを提供します。 得点 バイト単位の最短プログラムが優先されます。 すべてのナンバープレートは、このサイトの検索バーのスクリーンショットです

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