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

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

1
安定した結婚問題
バックグラウンド 2*n結婚する人がいると仮定し、さらに、各人が次nのような制約の下で正確に他の人に惹かれると仮定します。 引力は対称的です。すなわち人Aが人に引き付けられるならば、人はB人Bに引き付けられAます。 魅力は反推移的です。人ならば、すなわちA人がB一人一人に魅了されC、その後、人Aと人がBお互いに惹かれていません。 したがって、アトラクションのネットワークは(無向)完全な2部グラフを 形成しますKn,n。また、各人が自分が惹かれている人をランク付けしたと仮定します。これらは、グラフのエッジの重みとして表されます。 結婚はペアリングであるとお互いに魅了されています。各結婚の1人がパートナーと離婚し、お互いに結婚する可能性がある別の結婚がある場合、結婚は不安定です。(A,B)AB ゴール あなたの仕事は、各人の好みを入力として、各結婚が安定するように各人の結婚を出力する完全なプログラムまたは機能を書くことです。 入力 入力は任意の便利な形式にすることができます。たとえば、重み付きグラフ、設定の順序付きリスト、辞書/関連付けなど。オプションで、総人数を入力として使用できますが、他の入力は許可されません。 出力 出力は任意の便利な形式にすることもできます。たとえば、タプルのリスト、最小エッジカバー、各人にパートナーを関連付ける機能など。唯一の制約は、各結婚が安定していることであり、他の最適化要件はないことに注意してください。 ノート ウィキペディアまたはこのNumberphileビデオで、このO(n^2)問題を解決するための詳細情報とアルゴリズムを見つけることができます。ただし、任意のアルゴリズムを自由に使用できます。 標準的な抜け穴は禁止されています。 これはcode-golfです。最短回答(バイト単位)が優先されます。

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"]]

4
エントロピークイン!
あなたの仕事は、次のようなプログラムまたは関数を書くことです。 初めて実行するとき、ソースコードを出力します。 後続の実行では、以前に出力されたものを出力する必要がありますが、1つのランダムな文字変更(以下で定義)が必要です。一様にランダムな変更である必要はありませんが、起こりうるすべての変更はゼロではない可能性があります。 最初の実行後は、あなたのプログラムはなりません必ずしももうQUINEなります。出力は変更されます(プログラムも自由に変更できます)。 たとえば、あなたのクインがの場合ABCD、繰り返し実行すると次のように出力されます: ABCD A!CD j!CD j!CjD 仕様書 文字の変更は次のいずれかです。 ランダムな文字の挿入、 ランダムな文字の削除、または 文字を新しいランダムな文字に置き換えること。新しい文字は、それが置き換える文字と同じであることが許可されていることに注意してください。その場合、変更は行われません。 もちろん、空の文字列から文字を削除または置換することは有効な変更ではありません。 これはquineとタグ付けされていますが、ソースコードの読み取りに対するルールは適用されません。 ソースコードで使用されている文字が含まれている限り、任意の文字セットを使用できます。

1
すべてのベクトルパーティションを効率的に生成する
ベクトルパーティションは、ベクトルを一連のベクトルに分割し、合計が元になるようにします。パーティションは次のとおりです。 [3, 1, 2] = [3, 1, 2] [3, 1, 2] = [0, 0, 1] + [0, 0, 1] + [0, 1, 0] + [1, 0, 0] + [2, 0, 0] [3, 1, 2] = [1, 1, 2] + [2, 0, 0] ここで、ベクトルの追加は要素ごとに行われます。有効なパーティションには、負の整数を持つベクトル、またはすべてゼロのベクトルは含まれません。 ここでの課題は、ターゲットベクトルが与えられたすべての可能なベクトルパーティションを生成するプログラムまたは関数を記述することです。これは比較的簡単に聞こえるかもしれません... ...しかし、ねじれがあります。入力ベクトルのサイズがLで、生成する最大パーティションの要素がM個の場合、O(L * M)を超えるメモリは使用できません。 整数がO(1)メモリを使用すると仮定できます。つまり、パーティションを生成するときに出力する必要があります。さらに、各パーティションを1回だけ出力する必要があります。たとえば、これらは同じパーティションです。 [3, 1, …

13
モジュラス検証
すべてが真であり 、2つの数値と結果を伴う剰余剰余計算で構成される数式のリストが与えられた場合、タスクはnリスト内のすべてのステートメントに対して真である最初の数値を生成することです。 例えば: [m % 3 = 0, m % 4 = 1, m % 5 = 3]、ここで%はモジュロ演算子です。 以下の場合n= 3、シーケンスに合わせて最初の3個の数字(0からカウント)がある33, 93, 153ので、あなたの結果はその(あなた次第形式)になり、。 ルール/ IO あなたは正の数nと真実のリストを取ります。もちろん、必要なのはモジュロ演算のRHSと結果だけです。 n 真理のリストの数字は常に範囲内にあります 1-> 2 ^ 31-1のあり、結果も同様です。 任意の便利な形式で入力し、任意の便利な形式で出力します。たとえば、input:3 [3 0, 4 1, 5 3]およびoutput:33 93 153。 ソリューションが数学的に可能であることが保証されています。 入力のソースは、ファイル、関数パラメーター、stdinなどからのものです。出力についても同様です。 抜け穴はありません。 これはコードゴルフであるため、最小のバイト数が優先されます。 テストケース # Input in the form …
12 code-golf  number 

10
キッズシャッフルカード
カードのデッキをシャッフルするのは子供にとって難しいので、合理的によくシャッフルされたデッキをできるだけ簡単に得る方法を見つけなければなりません。 合理的に良い結果を与えるこれを行う1つの方法は次のとおりです。 一番上のカードを取り出して、デッキのランダムな場所に挿入します 一番下のカードを取り出して、デッキのランダムな場所に挿入します 十分だと思うまで続けます。 カードを上部または下部に挿入しないでください。カードはデッキのどこかに配置する必要があります。 代わりにカードをシャッフルし、我々は英数字をシャッフルされます:0-9、A-J、a-j、q-zとQ-Z。 以下に示す文字列から始め、上記の方法で文字をシャッフルします。無限にシャッフルを続けるか、カードを100ラウンド(上部から100枚、下部から100枚)シャッフルするかを選択できます。 0123456789abcdefghijqrstuvwxyzABCDEFGHIJQRSTUVWXYZ 課題は、シャッフルされているキャラクターを表示することです。各「シャッフル」(カードの取り出しと挿入)には、0.25〜0.35秒かかります。 以下のgifは出力例を示しています。 これはコードゴルフなので、バイト単位の最短コードが勝ちです。 「なぜ、a-t代わりに持っていないのですか?」a-jq-zこれはキャラクターだけでなく、カードのスーツを示すものだからです。そして、はい、5つのスーツがあります。 注:code-golf -challengesのチェックマークの使用を停止することにしました。関連するメタ投稿はこちらとこちら。

2
BINGOでの最適な不正行為
あなたは、他のプレイヤーが "BINGO"を無言で発表し、勝ち誇ってあなたのそばを通り過ぎて彼らの賞品を獲得することにうんざりしています。今回は異なります。呼び出し元に賄briを贈り、BINGOの呼び出しを事前に呼び出します。今、あなたはそれらのコールのためにできるだけ早く勝つBINGOボードを作成する必要があります。 区切られた文字列または呼び出しのリストを、通常のBINGO形式(たとえば、B9またはなどの文字が含まれるG68詳細)で、それらの呼び出しに最適なBINGOボードを表すマトリックスまたは2Dリストを出力します。入力は常に有効であると想定します。 ビンゴのルール: 5x5ボード 「ビンゴ」とは、あなたのカードにこれまでに呼ばれた数字から連続して5つの数字があるときです。 中央の広場は無料で(自動的にBINGOにカウントされます)、空白、空のリスト-1、またはで表されます0。 5列は文字で表されB、I、N、G、O、それぞれ。 最初の列には1〜15、2番目の16〜30、...、および5番目の61〜75が含まれます。 入力に使用される文字と数字は、オプションで区切られ,たり(スペースなどの意味のあるもので)、文字と数字のタプルとして使用されます。 出力には、マトリックスの各場所に数字のみが必要です。 初期のBINGOに寄与しない正方形は有効でなければなりませんが、最適である必要はありません。 これはコードゴルフです。最短のコードが勝ちます 例: 短いので、この入力形式を例に使用しています。許容される入出力形式については、上記のセクションを参照してください。 O61 B2 N36 G47 I16 N35 I21 O64 G48 O73 I30 N33 I17 N43 G46 O72 I19 O71 B14 B7 G50 B1 I22 B8 N40 B13 B6 N37 O70 G55 G58 G52 B3 B4 N34 …
12 code-golf 

9
ガウス行列を作成します
ガウスぼかしは、画像を滑らかにぼかすために使用される方法です。画像のピクセルと畳み込むことで使用されるマトリックスを作成する必要があります。この課題でのタスクは、ガウスぼかしで使用される行列を作成することです。次元(2 r + 1×2 r + 1)の行列を作成するために、ぼかしの半径となる入力rと標準偏差となる入力σを取ります。その行列の各値は、中心からの各方向の絶対距離に依存する(x、y)値を持ち、G(x、y)の計算に使用されます。Gは たとえば、r = 2の場合、5 x 5の行列を生成します。まず、(x、y)値の行列は (2, 2) (1, 2) (0, 2) (1, 2) (2, 2) (2, 1) (1, 1) (0, 1) (1, 1) (2, 1) (2, 0) (1, 0) (0, 0) (1, 0) (2, 0) (2, 1) (1, 1) (0, 1) (1, 1) …
12 code-golf  math  matrix 

3
組み合わせの難問!
はじめに:組み合わせロジック 組み合わせロジック(CL)は、基本的に関数であるcombinatorsと呼ばれるものに基づいています。2つの基本的な「組み込み」コンビネータとがSありK、これについては後で説明します。 左結合性 CLはleft-associativeです。これは、CL を含む別のブラケットの一番左にあるブラケット(スタッフを含む)を削除し、スタッフを解放できることを意味します。たとえば、次のようなものです: ((a b) c) に減らすことができます (a b c) どこ(a b)より大きなブラケットの一番左にある((a b) c)ので、それを除去することができます。 左結合のはるかに大きな例(角括弧は説明です): ((a b) c ((d e) f (((g h) i) j))) = (a b c ((d e) f (((g h) i) j))) [((a b) c...) = (a b c...)] = (a b c (d …

5
ユニコードは何時ですか?
次のいずれかの形式の文字列として入力時間を指定すると、課題は単純化されます。 hh、hh:mmまたはhh:mm:ssで0 ≤ hh ≤ 23、0 ≤ mm ≤ 59そして0 ≤ ss ≤ 59。 次の記号を使用して、現在の時刻を出力します。 AA LABEL FOR CHARACTER CODE POINT HEXADECIMAL == ==================== ========== =========== 🕐 Clock Face 01 Oclock 128336 0x1F550 🕑 Clock Face 02 Oclock 128337 0x1F551 🕒 Clock Face 03 Oclock 128338 0x1F552 🕓 Clock Face …

1
数学メタゴルフマニア!
Mathemaniaの仕様: Mathemaniaコードのすべての部分は、数字で始まり2ます。から、2次の操作を実行できます。 e:べき乗。このコマンドのデフォルトは、2乗です。 f:階乗。このコマンドのデフォルトでは、数値に単一の階乗(using f on 2 = 2! = 2)が使用されます。 r:ルート。このコマンドのデフォルトは、数値の平方根です。 c:天井機能。 l:フロア機能。 Mathemaniaで数値を生成するには、これらのコマンドを文字列にまとめる必要があります。これらのコマンドは、数値に対して左から右に実行されます2。 例: ef = (2^2)! = 4! = 24 rl = floor(sqrt(2)) = floor(1.4...) = 1 er = sqrt(2^2) = sqrt(4) = 2 efrrc = ceil(sqrt(sqrt((2^2)!))) = ceil(sqrt(sqrt(24))) = ceil(sqrt(4.89...)) = ceil(2.21...) = 3 e、fおよびrコマンド(これもで始める余分Mathemaniaコマンドによって変更することができる2改変された機能の後にブラケットを配置し、その内部Mathemaniaコマンドを配置することによって、異なる累乗、階乗と根を生成するために、その「ベース」数として)。 たとえば、代わりにそれを乗の数をキューブに、あなたがのためにコマンドを入れることができ3た後にeそうように: …
12 math  metagolf 

2
教授の基本建物番号コンバータ
ナッツの数学の教授は、競合他社の中で最もやさしいものでもフォックスできるシステムを使用して、すべての研究をエンコードしたいと考えています! この目的のために、教授は、自分が書いている数字だけでなく、数字が存在する場所に応じて、数字のすべての数字の基数を変更することを決定しました(1から始まる右からカウント)。例えば: 数値0には1桁があるため、基数1で表されます:0 数字の1は10進数で1桁ですが、教授のシステムでは無効です。最初の場所は、基数1桁のみに予約されています!つまり、ベース2が許可されている2番目の場所にバンプする必要があります。10 番号2は、少なくとも3を記述する必要があります:100 しかし、2番目の桁を変更することで、3という数字を書くことができます:110 および4として:200 以下に、アイデアを得るのに役立つ例をいくつか示します。 5:210 6:1000 7:1010 8:1100 9:1110 10:1200 11:1210 12:2000 13:2010 14:2100 15:2110 16:2200 17:2210 18:3000 このシステムを使用すると、教授のメモは彼ら以外の誰にも意味がなく、最終的に世界を引き継ぐことができます!!!! 夜はよく眠ります。 もちろん、エンコード方法はできるだけ曖昧にする必要があります。 あなたの仕事は、10個のコードスニペットを書くことです 0 1 2 3 4 5 6 7 8 9 変換される数字の順序で結合すると、教授の悪魔的な番号付けシステムで書かれた数字が生成されます(出力方法は選択できますが、0-9の数字のみを使用した人間が読める数字でなければなりません) たとえば、スニペットが次の場合: 0 = MONKEY 1 = EXAMPLE、2 = CODE、3 = GOLF、9 = TEST …

3
Natural Pi#2-川
ゴール 一連のハッシュを持つ文字列を指定して、その全長を計算し、開始から終了までの距離で除算します。 シミュレーション 何をシミュレートしていますか?この論文によると、川の長さと開始点と終了点の間の距離の比率はおよそPi!(これは経験的に反証されたかもしれませんが、データを見つけることができたので、この挑戦​​のためにそれが真実であると仮定します)。 これをどのようにシミュレートしますか? 空白とハッシュの文字列入力を取得します 各ハッシュには、他の2つのハッシュが隣接しています 1つだけを持つ最初と最後のハッシュを除いて 各キャラクターは格子点上にあります (x, y) x はその行のキャラクターのインデックスです たとえばc、4番目の文字は0123c567 y 文字の行番号です たとえばc、3行目にあります。 0line 1line 2line 3c... 隣接するハッシュ間の距離を合計して呼び出します S 最初と最後のハッシュ間の距離を取り、それを呼び出します D 戻る S/D 仕様 入力 柔軟で、標準的な方法(関数パラメーター、STDINなど)および標準的な形式(文字列、バイナリなど)で入力を取得します。 出力 柔軟性があり、標準的な方法(例:返品、印刷)で出力する 空白、末尾および先頭の空白は許容されます 精度、小数点以下4桁以上の精度を指定してください(例3.1416) 得点 最短のコードが勝ちます! テストケース これらは私の川の近似値です。私の近似は貧弱かもしれませんし、これらは河川人口の貧弱なサンプルかもしれません。また、この計算は手作業で行いました。計算ミスがあったかもしれません。 黄河 ### #### # # # # # # # # # …

8
TargetDateと曜日を指定して、最も近い日付を見つけます
特定の曜日のTargetDateに最も近い日付を見つけます。 たとえば、の日付20161219と曜日を指定するFriday (6)と、答えはになり20161216ます。 別の例では、日付20161219と曜日を指定するWednesday (4)と、答えはになり20161221ます。 最後の例では、日付20161219と曜日を指定するMonday (2)と、答えはになり20161219ます。 ルール: 入力と出力の日付形式は一致する必要があります。例ではを使用yyyymmddしましたが、年(少なくとも2桁)、月、および日が「人間が読める」形式である限り、任意の形式を使用できます。 曜日は整数として入力されます。私の例では、日曜日が週の最初の日であるため、曜日番号1です。例と異なる場合は、曜日番号をメモしておけば、曜日番号を付けることができます。 1970年から2030年まで対応する必要があります。 共通言語の日付ツールとライブラリは許可されていますが、それらを使用しないことを選択した人には、ストリートの信用が与えられています。 最小バイト数が優先されます。
12 code-golf  date 

3
サンプルをインデックスに変換する
ボールを固定数のビンに入れています。これらのビンは空で始まります。 Empty bin (a=4): 0 0 0 0 そして、一つずつボールをビンに追加します。 0 0 0 1 or 0 0 1 0 or 0 1 0 0 or 1 0 0 0 ビンが取る可能性のあるすべての状態を、重複せずに見逃すことなくすばやくループする方法が必要です。すべての可能なビンを列挙する必要はありません。そのため、代わりに各ビン構成にインデックスを割り当てます。 可能な構成を特定の方法で並べ替えて、インデックスを割り当てます。 合計で昇順で並べ替え0 0 0 0ます。最初に、1つのボールが追加された可能性のある構成、次に2などがあります。 次に、各合計内で、最初のビンから最後まで昇順でソートします。 0 0 0 2 0 0 1 1 0 0 2 0 0 1 0 …

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