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

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

12
「ビット借入」2つの数字
小さい数字が大きい数字からビットを借りることができることをご存知ですか?以下に例を示します。2つの数値5と14を考えてみましょう。最初に、それらをバイナリで書き出します。 5 14 000101 001110 最初に、大きい数値から最小のオンビットを取り、他の数値の最小のオフビットに与えます。そう This bit turns off | v 000101 001110 ^ | This bit turns on 今、私たちは持っています 000111 001100 数字は7と12です。最初の数字はまだ小さいので、続けます。 000111 001100 001111 001000 これで15と8になりましたので、停止できます。この一連の操作を「ビット借入」という2つの数字と呼びます。別の例を見てみましょう。20および61。 20 61 010100 111101 010101 111100 010111 111000 111111 100000 63 32 最終結果は32、63 です。もう1つやりましょう。31と12。31はすでに12よりも大きいため、何もする必要はありません。31と12をビット借用すると、31と12は変化しません。 チャレンジ あなたの課題は、2つの数字を受け取り、それらをビット借用するプログラムまたは関数を作成することです。2つの数値は常に正の整数になります。入力と出力は、任意の合理的な形式にすることができます。 テストIO: Input: 2, 3 Output: …

12
クックアンドウィートストーンテレグラフ、5本針
定義 ウィキペディアによると: Cooke and Wheatstone電信は、イギリスの発明家William Fothergill Cookeとイギリスの科学者Charles Wheatstoneによって発明された1830年代の初期の電気電信システムでした。これは、商用サービスに導入された最初の電信システムでした。レシーバーは、ボード上の文字を指すように電磁コイルによって移動できる多数の針で構成されていました。この機能は、コードを学習したくない初期ユーザーや、スタッフのトレーニングに投資したくない雇用主に好まれていました。 それはこのように動作します: 中央には5本の針があり、時計回り(中針の場合)または反時計回り(最後の針の場合)に偏向できます。 上の図では、2本の偏向した針が文字を指しています。これGは、送受信されている文字が文字であることを意味しGます。 注手紙ことをC、J、Q、V、X、Z不足しているため、他の文字に置換する必要があります。 仕事 ABDEFGHIKLMNOPRSTUWY入力として文字を受け取り、5本の針の対応する構成を出力します。これは、として|偏向せずに、として時計回りに偏向し/、として反時計回りに偏向し\ます。 テストケース これはすべての可能な入力をカバーしています input output A /|||\ B /||\| D |/||\ E /|\|| F |/|\| G ||/|\ (explanation: see above) H /\||| I |/\|| K ||/\| L |||/\ M \/||| N |\/|| O ||\/| P |||\/ R …

10
バッグ操作を実装する
バッグもマルチセットと呼ばれるには、順不同コレクションです。重複を許可するセット、または順序付け/インデックス付けされていないリスト(または配列)を呼び出すことができます。この課題では、加算、差、乗算、除算、カウント、および等価テストのバッグ操作を実装するよう求められます。 操作 指定された操作は従来のものではない場合があります。 さらに、2つのバッグを1つに結合して、各値の合計数を節約します [1,2,2,3] + [1,2,4] = [1,1,2,2,2,3,4] 違いは、バッグから別のバッグの各要素を削除するか、そのような要素がない場合は何もしません [1,2,2,4] - [1,2] = [2,4] [1,2,3] - [2,4] = [1,3] 乗算は、バッグ内の各要素を乗算します。 [1,2,3,3,4] * 3 = [1,1,1,2,2,2,3,3,3,3,3,3,4,4,4] 2 * [1,3] = [1,1,3,3] 分割は一般的ではありません。n個の等しい要素はそれぞれn個の新しいバッグに入れられ、nグループを形成できない要素はバッグに残ります。n個の新しいバッグのいずれかを返します。 [1,1,2,2,2] / 2 = [1,2] [1,2,2,3,3,3] / 3 = [3] カウントは、配当バッグから生成できる除数バッグの数をカウントします [1,1,2,2,2,2,3,3,3] c [1,2,3] = 2 同等性テストでは、2つのバッグに各要素の番号が同じかどうかを確認します [1,2,2,3] …

2
フラグで楽しい!
256バイト以下のソースコードを使用して完全なプログラムを作成します。このプログラムは、フラグの画像を見て、そのフラグの発行元の国を判別します。チャレンジの196個の異なるフラグを含むzipファイルは、ここからダウンロードできます。ソース:[ Flagpedia ]。これらの196個のフラグ画像は、プログラムが処理する必要がある唯一の入力です。 プログラムは何も入力しません。フラグ画像はプログラムと同じディレクトリにあり、「f.png」という名前が付けられます。プログラムはこのファイルを開いて識別し、その国の 2文字の略語を印刷します。ファイルを開くことができない言語を使用している場合は、プログラムをとして実行することもできます./program < f.png。 各フラグファイルには、予想される出力と同じ名前が付けられます。2文字を超える出力はすべて無視されます。 すべての出力/ファイル名のリストは次のとおりです。 ad, ae, af, ag, al, am, ao, ar, at, au, az, ba, bb, bd, be, bf, bg, bh, bi, bj, bn, bo, br, bs, bt, bw, by, bz, ca, cd, cf, cg, ch, ci, cl, cm, cn, co, cr, cu, cv, …

19
有限カントールの対角線
NそれぞれがN数字の整数のリストを指定すると、最初の数字のために最初の数字とは異なる数字を出力し、2番目の数字のために2番目の数字などを出力します。 例 このリストを考えると: 1234 4815 1623 4211 数字2932の最初の数字は最初の数字の最初の数字と異なり、2番目の数字は2番目の数字の2番目の数字と異なります。したがって、有効な出力になります。 入力 リストとN入力の両方を使用することも、必要に応じてリストのみを使用することもできます。 リスト内の各整数には、リストの長さと同じ桁数が必要です(N) 数字には先行ゼロはありません 入力リストには、文字列ではなく数字を含める必要があります。 入力を関数の引数としてSTDIN、またはを介して入力できます。 あなたはリストが10要素より長くないことを仮定するかもしれません(そしてリスト内の数はより大きいことはありません2147483647) 出力 出力がリストにないだけでは不十分です。上記で説明したように、数字は異なる必要があります。 異なる桁の制約を尊重する任意の桁選択戦略を使用できます。 番号に先行ゼロを含めることはできません を通じてを出力することができSTDOUT、関数などからそれを返します。 テストケース Input: 12345678 23456789 34567890 45678901 56789012 67890123 78901234 89012345 Possible output: 24680246 Input: 1 Possible output: 2 得点 これはcode-golfであるため、バイト単位の最短回答が優先されます。

12
MATLでのゴルフのヒント
MATLは、ルイスメンドーによって作成されたゴルフ言語です。MATLは非常に競争力があることが証明されており、多くの場合、Pyth、CJam、Jellyなどの他のゴルフ言語での提出物に勝っています。 MATLでゴルフをする際に役立つヒントは何ですか?(いつものように、回答ごとに1つのヒントをお願いします!) 記録については、MATLをここでオンラインでテストできます。 ドキュメントはGithubにあります
20 code-golf  tips  matl 

6
X + Y = Z-しかし、どのベース?
チャレンジ 3つの数字が与えられX、YそしてZベースにB、見つけるBでの追加ASE XとY収量をZ。入力x = 20、Y = 12およびZ = 32もたらし得る5ため、20 + 12 = 32ベース5。 あなたは常に追加が正しいベースがあると仮定するかもしれません( @ MasonWheelerと@ Not that Charlesの例のおかげでベースが存在しない場合があります)。 可能な最小の基数は1です。単項の数字として1または0を使用できますが、それらを混在させることはできません。 I / O 入力数値の桁は、負でない整数になります。 入力番号に先行ゼロが含まれていると仮定することができるため、特定の(またはすべて同じ)長さがあります。 前処理されていない限り、最も便利な形式で数値を取得できます。これには、3つの入力番号の全体的な形式と、それらの各番号の数字の形式が含まれます。使用する形式を明確にしてください。 複数の可能なベースがある場合、すべてまたは1つだけを出力できます。 基数と入力数は、言語の数値制限内に収まると想定できます。 ルール 機能または完全なプログラムが許可されます。 入出力のデフォルト規則。 標準の抜け穴が適用されます。 これはcode-golfなので、バイト数が最も少なくなります。Tiebreakerは以前の提出です。 テストケース ここでの入力形式は、各数値を表す整数のリストです。3つのリストはコンマで区切られています。 複数のベースが可能な場合があることに注意してください。ここでは、1つの(ランダムな)ソリューションのみが出力されます。 [12、103]、[4、101]、[16、204]-> 349 [4、21、25]、[5、1、20]、[9、23、17]-> 28 [16、11]、[25、94]、[41、105]-> 147 [2、140]、[21、183]、[24、100]-> 223 [8、157]、[1、28]、[9、185]-> 227 [2、158]、[88]、[3、12]-> 234 [8、199]、[1、34]、[9、233]-> 408 …

19
全単射ベースでのカウント62
タスクは、次のような大文字を含む「a」から「999」までのすべての文字列を生成することです。 'a', 'b', 'c' ... 'y', 'z', 'A', 'B', 'C' ... 'Y', 'Z', '0', '1', 2' ... '8', '9', 'aa', 'ab', 'ac' ... 'az', 'aA', 'aB' ... 'aZ', 'a0' ... 'a9', 'ba' など(ギャップを埋める)、オプ​​ションで空の文字列で始まります。 入力: プログラムが印刷しなければならない連続文字の量。 出力: 各文字列または行ごとに1つの文字列を含む配列 明確化: 順序は関係ありません。必要に応じて、最初に大文字または小文字を印刷できます。 出力はあらゆる種類の列挙型を返すことができ、特に配列である必要はありませんが、すべての組み合わせを印刷するのが最も簡単な方法ではないことを疑います。 入力3からすべての文字列を印刷することになる'a'(または'')へ'999'の入力、5最大'99999'のように。

17
椅子はどのように配置すればよいですか?
生徒の椅子にどのように椅子を配置するかについての興味深い好みを教えます。椅子の配置方法には3つの非常に具体的な要件があります。 一部の椅子が空になることを意味する場合でも、ほとんどの場合、長方形に配置されます。 空の椅子はできるだけ少なくする必要があります。 それらは可能な限り「正方形」でなければなりません。角型性は、長方形の幅と高さの間の距離によって決まり、低いほど良いです。たとえば4x7、3の角型性を持つ長方形。 より具体的には、配置の「スコア」は、幅と高さの間の距離に、空になる椅子の数を加えたものです。 例を見てみましょう。13人の生徒がいるとしましょう。次のいずれかの方法で椅子を配置できます。 1x13 2x7 3x5 4x4 1x13非常に角張っていません。実際、1と13は12離れているので、この配置に12ポイントを与えます。また、空の椅子は0なので、0ポイントを追加して、このアレンジメントに12のスコアを与えます。 2x7確かに優れています。2と7は5つしか離れていないので、この配置に5ポイントを与えます。ただし、実際に7列の椅子を2列配置した場合、14列の椅子が必要になり、1列の椅子は空になります。そのため、このアレンジメントにスコア6を与えて、1ポイントを追加します。 することもできます3x5。3と5は2つ離れているため、+ 2ポイントです。15脚の椅子が必要です。つまり、2脚の椅子が必要なので、スコアが4になるとさらに2ポイント増えます。 最後のオプション4x4。4と4は0離れているため、この+0ポイントを与えます。4x4は16脚の椅子を使用するため、3脚の椅子は空になり、合計スコアは3になります。これが最適なソリューションです。 ネクタイの場合、最適なソリューションは空いている椅子が少ないものです。 チャレンジ 整数を取り、その数の生徒に最適な椅子の配置を出力するプログラムまたは関数を作成する必要があります。IOは、合理的な形式で作成できます。1〜100人の任意の数の学生のサンプル出力を次に示します。 1: (1, 1) 2: (1, 2) 3: (2, 2) 4: (2, 2) 5: (2, 3) 6: (2, 3) 7: (3, 3) 8: (3, 3) 9: (3, 3) 10: (2, 5) 11: (3, …
20 code-golf  math 

24
指定された文字列で指定されたインデックスの周りの単語を選択します
Windowsでは、テキストをダブルクリックすると、テキスト内のカーソルの周りの単語が選択されます。 (この機能にはより複雑なプロパティがありますが、このチャレンジのために実装する必要はありません。) たとえば|、にカーソルを合わせabc de|f ghiます。 次に、ダブルクリックすると、部分文字列defが選択されます。 入出力 文字列と整数の2つの入力が与えられます。 あなたの仕事は、整数で指定されたインデックスの周りの文字列の単語部分文字列を返すことです。 カーソルは、指定されたインデックスの文字列の文字の直前または直後に置くことができます。 直前に使用する場合は、回答に明記してください。 仕様(仕様) インデックスは単語内にあることが保証されているため、abc |def ghiやなどのエッジケースはありませんabc def| ghi。 文字列には、印刷可能なASCII文字(U + 0020からU + 007Eまで)のみが含まれます。 単語「言葉」は正規表現で定義され(?<!\w)\w+(?!\w)、\wによって定義される[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]、または「アンダースコアを含むASCIIで英数字」。 インデックスは1インデックスまたは 0 インデックスにすることができます。 0インデックスを使用する場合は、回答で指定してください。 テストケース テストケースには1インデックスが付けられ、カーソルは指定されたインデックスの直後にあります。 カーソル位置はデモンストレーションのみを目的としており、出力する必要はありません。 string index output cursor position abc def 2 abc ab|c def abc def 5 def abc d|ef abc abc 2 …
20 code-golf  string 

1
子犬コマンド
このpuppyユーティリティは入力としてファイル名を受け取り、子犬に期待することを正確に行います。 細断方法 歯でページを切り取ります入力ファイルを改行で分割します。 足で各ページを切り開きます(改行を含まない)行ごとに、nなどのランダムな整数を選択し2 <= n <= # of characters in the lineます。行をn、ランダムな長さの空ではなく重複しない部分文字列に分割します。 フロア全体でシュレッドを散布する各行の各部分文字列を、現在のディレクトリ内の一意のランダムなファイル名([a-zA-Z0-9]のみ、none、lengthを含む一貫した拡張子1 <= n <= 12)に出力します。現在のディレクトリ内の既存のファイル(現在のディレクトリにある場合は入力ファイルを含む)を上書きすることは、実行中のサブミッションに干渉しない限り許容されます。 明確化 考えられるすべてのファイル名を使い果たすことが可能な入力はありません。 ファイルは、印刷可能なASCII(序数32-127)と改行のみで構成され、UNIX / Linuxスタイルの行末(LF、WindowsスタイルのCRLFではありません)を使用します。 すべての出力ファイルに末尾の改行がある限り、出力ファイルの単一の末尾の改行は許容されますが、必須ではありません。入力ファイルに末尾の改行を含めるかどうかを選択できます。 入力の各行には、少なくとも2文字が含まれます。 選択されたランダム値は、指定された一連の値の一様なランダム分布から選択する必要があります。 言語がファイルI / Oを実行できない場合、代わりに入力ファイルの内容を入力として、出力ファイル名とそのファイルのテキストを表す文字列の出力ペアを取ることができます。ただし、あなたの提出物は受賞の資格がありません。 例 リファレンス実装: #!/usr/bin/env python3 import random import string import sys fname = sys.argv[1] with open(fname) as f: txt = f.read().rstrip().split('\n') for …

15
マトリックスのダイヤモンド化
マトリックスが与えられたら、左上の要素が上にあり、反対角線が中央の行で、右下の要素が下にあるマトリックスの表現を出力します。 たとえば、次のマトリックスを考えます。 1 2 3 4 5 6 7 8 9 このマトリックスのひし形バージョンは次のとおりです。 1 4 2 7 5 3 8 6 9 入力と出力 入力マトリックスは、リストのリスト(または選択した言語で類似したもの)として提供されます。出力はリストのリストでもあります。 行列には正の整数のみが含まれます。 入力行列は必ずしも正方形ではありません。 入力行列は少なくとも1×1です。 テストケース Input: [[1]] Output: [[1]] Input: [[1,2],[3,4]] Output: [[1],[3,2],[4]] Input: [[1,2,3],[4,5,6]] Output: [[1],[4,2],[5,3],[6]] Input: [[11,2,5],[3,99,3],[4,8,15],[16,23,42]] Output: [[11],[3,2],[4,99,5],[16,8,3],[23,15],[42]] 得点 これはcode-golfであるため、バイト単位の最短回答が優先されます。

1
ちょっとした魔法
チャレンジ 次のC#メソッドがある場合: private static bool Test(bool a, bool b) { if (a && b) return false; if (a) if (b) return true; return false; } 値を指定するaとb、それtrueが返されます。 勝利条件 正しい引数を指定して、指定されたメソッドをwinに評価できる最初のエントリtrue。

21
女性と男性のシーケンス
この質問は、「数字のシーケンスを生成する」タスクのすべてよりも難しいでしょう。これは、2つのシーケンスが同時に動作する必要があるためです。 答えを本当に楽しみにしています! 彼の著書「Gödel、Escher、Bach:An Eternal Golden Braid」では、ダグラス・ホフスタッターは内部にかなりの数のシーケンスを持ち、それらはすべて何らかの形で前の用語に依存しています。すべてのシーケンスの詳細については、このウィキペディアのページを参照してください。 本当に興味深いシーケンスのペアは、女性と男性のシーケンスです。 のためにn > 0。 これが女性のシーケンスと男性のシーケンスです。 n入力として整数を指定すると、タスクは、n2行の出力で項の量がに等しい女性シーケンスと男性シーケンスのリストを返します。最初の行に女性シーケンスがあり、男性シーケンスがあります。二番目。 サンプルの入力と出力:入力:5 出力:[1, 1, 2, 2, 3] [0, 0, 1, 2, 2] 入力:10 出力:[1, 1, 2, 2, 3, 3, 4, 5, 5, 6] [0, 0, 1, 2, 2, 3, 4, 4, 5, 6] 注:リスト間の区切りは、改行を意味します。 これはコードゴルフなので、バイト単位の最短コードが優先されます。また、コードの説明も記入してください。 リーダーボード コードスニペットを表示 var QUESTION_ID=80608,OVERRIDE_USER=49561;function …

4
「仕上げ作業」をできるだけ早く
バックグラウンド ちょっとした退屈な仕事があると想像してください。毎朝、その日に作業すべきタスクのコレクションが提供されます。各タスクには一定の期間があり、一度開始すると、一度に完了する必要があります。上司はアイドリングを許容しないので、家に帰る前にまだ完了できるタスクがある場合は、そのうちの1つで作業する必要があります(どちらを選択するかは選択できます)。逆に、残りのすべてのタスクで残業が必要な場合は、早めに帰宅してください!したがって、あなたの目標は、賢明なスケジューリングにより、勤務時間を最小限に抑えることです。 楽しい事実:これは、怠zyな官僚のスケジューリング問題の 1つのバリアントであり、NPハード(ソース)です。 入力 2つの入力があります:就業日の「時間単位」の数(正の整数L)、およびタスクのコレクション(Tタスクの継続時間を表す、空でない正の整数の配列)。それらは、任意の順序で、合理的な形式で服用できます。配列にTは、期間がを超えるタスクが含まれることがありますが、期間が最大Lで少なくとも1つのタスクが含まれることが保証されますL。 出力 有効なスケジュールは、タスクのサブセットであるS ⊆ Tようにsum(S) ≤ Lしていない、そしてすべてのタスクS(カウント多重度)、厳密以上の持続時間を有しますL - sum(S)。あなたの出力は、有効なスケジュールの可能な限り最小の合計となります。言い換えれば、今日作業しなければならない時間単位の最小数を出力しなければなりません。 例 入力を検討する L = 9 T = [3,4,4,4,2,5] 1日をスケジュールする1つの方法は、[4,4]2つのタスクを8つの時間単位で完了し、1つの単位を残すことです。1ユニットのタスクは利用できないため、家に帰ることができます。ただし、スケジュール[2,5]はさらに優れています。7時間単位で作業すると、残りのタスクはすべて3時間単位以上かかります。[2,4]6時間単位で作業した後でも、3単位タスクを完了するのに十分な時間があるため、スケジュールは無効です。7ユニットが最適であることが判明したため、正しい出力は7です。 ルールとスコアリング 完全なプログラムまたは関数のいずれかを作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。時間制限はないため、ブルートフォースは完全に受け入れられます。 テストケース これらは形式で与えられますL T -> output。 1 [1,2] -> 1 6 [4,1] -> 5 7 [7,7,9] -> 7 9 [3,4,4,4,2,5] -> 7 20 [6,2,3,12,7,31] -> 17 …

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