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

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

14
変装の順列
実数のエントリを持つ次元のベクトルが与えられた、距離に関して最も近い順列を見つけます。nnnvvvppp(1 、2 、。。。、N )(1、2、。。。、n)(1,2,...,n)l1l1l_1 詳細 より便利な場合は、代わりに順列を使用できます。最も近い順列が複数ある場合は、いずれか1つまたはすべてを出力できます。(0 、1 、。。。、N - 1 )(0、1、。。。、n−1)(0,1,...,n-1) 2つのベクトル間の距離は、として定義されl1l1l_1あなた、vあなたは、vu,vd(u 、v )= ∑私| あなたは私− v私| 。d(あなたは、v)=∑私|あなたは私−v私|。d(u,v) = \sum_i \vert u_i-v_i\vert. 必要に応じて、入力が整数のみで構成されていると想定できます。 例 [0.5 1] -> [1 2], [2 1] c*[1 1 ... 1] -> any permutation [1 4 2 6 2] -> [1 4 3 5 2], [1 …

10
(x、y)に4方向に隣接するすべての有効なポイントの反復可能なオブジェクトを返す関数を作成します
一般的なアルゴリズムクラスとコンピューターサイエンスの非常に一般的な必要性は、グリッドまたはマトリックス(BFSまたはDFSなど)で4方向に反復することです。これは、多くの場合、ループ内で多くの算術演算と比較を行う、多くの不格好で冗長なコードをもたらすようです。これに対して多くの異なるアプローチを見てきましたが、これを行うためのより簡潔な方法があるという感覚を揺るがすことはできません。 課題はn, m、point (0,0)から始まる有限平面の幅と高さ、および(x,y)その平面内の任意の有効な点を表すことができる座標が与えられ、4方向の平面内のすべての点の反復可能なオブジェクトを返す純粋な関数を書くことですに隣接(x,y)。 目標は、できるだけ少ないバイトでその関数を定義することです。 有効な入力/出力を説明するのに役立つ例: n = 5 (y-axis), m = 3 (x-axis) (zero-based) matrix = [ [A, B, C], [D, E, F], [G, H, I], [J, K, L], [M, N, O], ] (x, y) => [valid iterable points] E: (1, 1) => [(1, 0), (2, 1), (1, 2), …

29
私はソースコードを逆にします、あなたは入力を逆にします!
さらに別の露骨なパクリのパクリのパクリ。それらに賛成票を投じてください! あなたがそれを受け入れたいなら、あなたの仕事は、文字列の入力/引数を出力/返すプログラム/関数を書くことです。扱いにくい部分は、ソースコードを逆にすると、出力も逆にする必要があることです。 簡単にするために、入力は常にASCII文字(az)、数字(0-9)、およびスペースのみを含む単一行の文字列であると想定できます。 少なくとも8文字の長さの入力をサポートする必要があります(8文字より長い必要はありません)。 空の入力の動作は未定義です。 例 あなたのソースコードがでABC、その入力がであるとしましょうxyz。CBA代わりに記述して実行すると、出力はでなければなりませんzyx。 あなたのソースコードがでABC、その入力がであるとしましょう96。CBA代わりに記述して実行すると、出力はでなければなりません69。 通常の出力と反転出力の両方で一貫している限り、単一の先頭または末尾の空白は許容されます。

9
Bentleyのコーディングの課題:k最も頻繁な単語
これはおそらく、コラムニストのJon BentleyがDonald Knuthにファイル内でk個の最も頻繁な単語を見つけるプログラムを書くように依頼した1986年に共鳴した古典的なコーディングの課題の1つです。Knuthは、8ページの長さのプログラムでハッシュトライを使用して、リテラシーのプログラミングテクニックを説明する高速ソリューションを実装しました。Bell LabsのDouglas McIlroyは、Knuthのソリューションが聖書の全文を処理することさえできないと批判し、ワンライナーで答えました。 tr -cs A-Za-z '\n' | tr A-Z a-z | sort | uniq -c | sort -rn | sed 10q 1987年には、プリンストン教授による別のソリューションを含むフォローアップ記事が公開されました。しかし、単一の聖書の結果を返すことさえできませんでした! 問題の説明 元の問題の説明: テキストファイルと整数kが与えられた場合、ファイル内のk個の最も一般的な単語(およびその出現回数)を頻度を減らして出力します。 追加の問題の説明: Knuthは単語をラテン文字の文字列として定義しました: [A-Za-z]+ 他のすべての文字は無視されます 大文字と小文字は同等と見なされます(WoRd== word) ファイルサイズにも語長にも制限はありません 連続する単語間の距離は任意に大きくすることができます 最速のプログラムは、合計CPU時間を最小限に抑えるプログラムです(おそらくマルチスレッド化は役に立たないでしょう) サンプルテストケース テスト1: James JoyceによるUlyssesは 64回連結しました(96 MBファイル)。 Project GutenbergからUlyssesをダウンロードします。wget http://www.gutenberg.org/files/4300/4300-0.txt 64回連結します。 for i in …

20
最も貢献している行
負でない整数の空でない行列が与えられた場合、どの一意の行が行列の要素の合計に最も寄与するかを答えてください。 たとえば、一意の行の出現順序(または並べ替え順序)のマスク、それらのインデックス(0または1ベース)、行(任意の順序)または一部のサブマトリックス一種の辞書構成体…—しかし、説明してください! 例 [[1,2,3],[2,0,4],[6,3,0],[2,0,4],[6,3,0],[2,0,4]]: 一意の行があり[1,2,3]、[2,0,4]及び[6,3,0]それぞれは、それぞれ6,6、および9それらが発生するたびに寄与する。ただし、それらはそれぞれ1回、3回、2回発生するため、それぞれの発生はすべて合計で6、18、および18になり(42)、後者の2行が最も寄与します。したがって、有効な答えは次のとおりです。 [false,true,true] 上記または 実際の行の 外観/ソート順または [1,2]/ [2,3]ゼロ/ 1ベースのインデックスの マスク⋮ [[2,0,4],[6,3,0]] [[1,2],[3,1],[2,3],[1,2],[3,1],[2,3],[1,2]] [false,false,true](表示順)/ [false,true,false](ソート順) [2]/ [3](表示順)/ [1]/ [2](ソート順) [[2,3]] ⋮

9
XKCDカレンダーの事実
インスピレーション。許可を得て掲載。 可能なXKCDカレンダーの「事実」の1つを印刷します。 生のテキストと構造は、APLリファレンス実装またはExplain XKCDのトランスクリプト(図の下のタイトルテキストを含む)から取得できます。 ルール すべての決定ノードで、各選択肢に等しい(疑似)ランダムチャンスがなければなりません。 すべて大文字を使用できます。 3つの文を生成する必要があります。質問、理由、タイトルテキスト。 3つの文は、それぞれ、、およびで終了し?、互いに1つのスペースで区切る必要があります。.. 含めることができる余分な空白は、末尾のスペースや改行だけです。 例 Did you know that the Latest Sunset drifts out of sync with the Zodiac because of time zone legislation in Indiana? Apparently it's getting worse and no one knows why. While it may seem like trivia, it has to …

26
これを正しくコーディングするのはそれほど難しくありませんか?
このパターンを出力する言語でプログラムまたは関数を作成する必要があります。 ~|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||~ |~|||||||||||||||||||||||||||||||||||||||||||||||||||||||||~| ||~|||||||||||||||||||||||||||||||||||||||||||||||||||||||~|| |||~|||||||||||||||||||||||||||||||||||||||||||||||||||||~||| ||||~|||||||||||||||||||||||||||||||||||||||||||||||||||~|||| |||||~|||||||||||||||||||||||||||||||||||||||||||||||||~||||| ||||||~|||||||||||||||||||||||||||||||||||||||||||||||~|||||| |||||||~|||||||||||||||||||||||||||||||||||||||||||||~||||||| ||||||||~|||||||||||||||||||||||||||||||||||||||||||~|||||||| |||||||||~|||||||||||||||||||||||||||||||||||||||||~||||||||| ||||||||||~|||||||||||||||||||~|||||||||||||||||||~|||||||||| |||||||||||~|||||||||||||||||~|~|||||||||||||||||~||||||||||| ||||||||||||~|||||||||||||||~|||~|||||||||||||||~|||||||||||| |||||||||||||~|||||||||||||~|||||~|||||||||||||~||||||||||||| ||||||||||||||~|||||||||||~|||||||~|||||||||||~|||||||||||||| |||||||||||||||~|||||||||~|||||||||~|||||||||~||||||||||||||| ||||||||||||||||~|||||||~|||||||||||~|||||||~|||||||||||||||| |||||||||||||||||~|||||~|||||||||||||~|||||~||||||||||||||||| ||||||||||||||||||~|||~|||||||||||||||~|||~|||||||||||||||||| |||||||||||||||||||~|~|||||||||||||||||~|~||||||||||||||||||| 出力は、それぞれ61文字の20行で構成されます。 ルール 標準的な抜け穴は禁止されています 出力の最後に単一の末尾改行がある場合があります 出力のどの行にも末尾の空白がない可能性があります 末尾に改行がなければ、出力のmd5チェックサムは fde4e3b4606bf9f8c314131c93988e96です。 末尾に改行があると、出力のmd5チェックサムは 1f0b43db4fec6594be202c8339024cb7です。 これはcode-golfであるため、バイト単位の最短コードが優先されます。

25
古き良きサフィックスベクトル
古いマニュアルに触発された... チャレンジ 私は定義番目のサフィックスベクトルBの長さのブールリストとして、AとBの後続truthy値。 与えられ、そのプログラムまたは機能を記述し、AとBは任意の手段によって、戻り番目のサフィックスベクトルBを任意の手段によって。 さて、これは些細なことのように思えるかもしれませんが、キャッチは次のとおりです。あなたのスコアは、バイトカウントとソリューションが機能する最初の年です。 ルール すべての標準ルールが適用されますが、このチャレンジの後にリリースされた言語と言語バージョンも使用できます。 言語が使用するブール値の表現、たとえば1/ 0、True/ False、TRUE/ FALSE、"True"/ "False"などを使用して出力します。 リストのどんな表現言語の使用していること、例えば使用して出力0 0 1、[False,False,True]、(FALSE;FALSE;TRUE)、{"False","False","True"}、など あなたは、と仮定してよい≥ bが常に真であると彼らは適切なデータ型であること。 テストケース 与えられた= 7、B = 3、リターン0 0 0 0 1 1 1 与えられた= 4、B = 4、リターン[True,True,True,True] 与えられた= 2、B = 0、リターン(FALSE;FALSE) 与えられた= 0と、B = 0、リターン{} ソリューション例とスコアリング {⌽⍺↑⍵⍴1}Dyalog APLを使用してソリューションを提出したい場合があります。これは8のバイトカウントになります。これは動的関数で、1998年にリリースされたDyalog APLのバージョン8.1から機能するため、合計スコアは2006です。提出された回答は次のようになります。 # Dyalog APL 8.1, 1998 + …

2
1行のPEP8違反の最大数
あなたの仕事は、多くのpep8違反がある行を含むファイルを書くことです。 ルール: pep8バージョン1.5.7とデフォルト設定を使用します。 他のコマンドラインオプションでpep8を呼び出したり、カスタムrcファイルを使用したりすることはできません。 行の最大長は120文字です。確かにE501に違反する可能性がありますが、スコアが計算される行は120文字以下でなければなりません。 モジュールには、前後に他の行を含めることができますが、スコアに寄与するのは1行のみです。 ファイルには、SyntaxErrorsまたは任意の種類のガベージを含めることができます。インポートまたは実行する必要はありません。 スコアリングの例: 次のモジュールにthing.pyは、2つのpep8違反がある行(行1)が含まれているため、スコアは2です。 spam='potato' スコアを確認するには: ~$ mktmpenv (tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ pip install pep8==1.5.7 (tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ echo -n "spam='potato'" > thing.py (tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ pep8 thing.py thing.py:1:5: E225 missing whitespace around operator thing.py:1:14: W292 no newline at end of file

1
2048の完璧なゲームをプレイする
あなたの仕事は、数学的に完璧な2048のゲームをシミュレートすることです。アイデアは、2048のゲームがどこまで進むことができるかの理論的な上限を見つけ、そこに到達する方法を見つけることです。 これがどのように見えるかを知るには、この2x2クローンで遊んで68ポイントを獲得してみてください。そうすると、2、4、8、および16タイルになります。そのポイントを超えて進むことは不可能です。 このクローンのように、タイルが生成される場所とその値を選択できるため、タスクが簡単になります。 入力として2048ボードを受け入れ、生成されたタイルを含むボードとタイルを折りたたんだ後のボードを出力するプログラムまたは関数を作成する必要があります。例えば: Input: ------- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 Output: ------- 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 8 0 0 0 0 0 0 0 0 0 0 …

11
ひねりを加えたハローワールド
あなたの目標:「Hello、world!」の古典的な結果をもたらすコードを書くこと STDOUTまたは同等のものに出力されます。 ルール:コードは完全に印刷ASCIIでなければなりません。すべてのコードは機能する必要があります-単一のカウント文字を削除すると、結果が変更されるか、コードが機能しなくなる必要があります。すべての変数は、割り当て後に使用する必要があります。出力には文字および文字列リテラルが必要です-つまり、文字リテラルまたは文字列リテラル内の文字を別の文字に置き換えると、結果を変更できる必要があります(エスケープシーケンスの効果ではなく、文字をバックスラッシュに置き換える必要があります)または同等) (注:最終ルールは編集されました) 得点:ここが面白いところです。典型的なコードボウリング規則に従って、文字数によって決定される最高スコアが勝ちます。ただし、文字を繰り返し使用すると、ポイントが減点されます。具体的には... 英数字(az、AZ、0-9)を繰り返し使用すると、繰り返しごとに3ポイント減点されます(最初の使用では減点されません)。 基本的な句読点([!?.-、 ": ';])を繰り返し使用すると、括弧を含めて、繰り返しごとに2ポイントが差し引かれます。 他のASCII文字{`〜@#$%^&* _ + = | \ /> <}を繰り返し使用すると、中括弧を含めて、繰り返しごとに4ポイントが差し引かれます。 スペース、タブ、改行を繰り返し使用すると、繰り返しごとに1ポイント減点されます。つまり、スペース、タブ、または改行の最初の使用のみが合計にカウントされます。 注:コメントは、コメントの開始/終了を示す文字はカウントしますが、合計にはカウントされません。たとえば、C / C ++では、がある場合/* This is a comment */、2つのスラッシュと2つのアスタリスクがカウントされますが、それらの間は何もカウントされません。 いくつかの例(注:サンプル言語としてJuliaを使用)... print("Hello, world!"); 表示可能な文字の合計:22 スペースが含まれています:+1 英数字の繰り返し:llorの場合-12 句読点の繰り返し:-2の場合 " 最終スコア:22 + 1-12-2 = 9 print("Hel",char(108),"o, wor",0x108,"d!"); # 0x108 makes a Uint8 that prints as …

6
ボールはどこに着地しますか?
最初の行にスペースと1つのピリオド(.、「ボール」)が含まれ、その後にスペース、スラッシュ(/)、およびバックスラッシュ()が含まれる行が続く文字\列を指定すると、ボールが開始位置から落ちた後に着地する列を決定します。それぞれ/が左に1列ずつ\移動し、それぞれが右に1列ずつ移動します。 サンプル入力 . / \ \ / / \ \/ \ \ /\ \ /\ \ \ / サンプル出力 ボールは5列目から始まり、/3行目でヒットし、次に\5行目から7行目までの3つがヒットし、最終的な位置は 7 主にテキストエディタの規則との一貫性のために、列は1からインデックス付けされていることに注意してください。 エッジケース ボール/が最初の列でa に当たった場合、ボールは存在しない列0に永久に留まります0。 ボールが\/パターンのいずれかの側に当たった場合、結果は不定です。プログラムは出力なしで終了するか、無限ループするか、エラーメッセージを印刷することができます(私のソリューションは印刷します-1)が、有効な出力と認識できるものを印刷することはできません。 ボールが\\パターン内の左スラッシュに当たった場合、ボールは右スラッシュではなく、右スラッシュの直下に到達するはずです。私が当初考えていた解決策は、この間違いを起こしやすいため、その道をたどらないでください! .最後/または\各行の後にスペースがある場合とない場合があります。あなたのプログラムは、そのようなパディングが利用可能であることに依存すべきではありません。同様に、最初の行に続く行がある場合とない場合があります。 最初の行には0個以上のスペースと正確に1個のスペースがあると想定できます.。後続の行がある場合は、ゼロ個以上のスペースとゼロ個以上のスラッシュが含まれます。 実装の詳細 プログラムは、ファイル(コマンドライン引数として指定)から読み取るか、標準入力から読み取ることができます。 プログラムは、単一の数値を標準出力に出力する必要があります。(はい、末尾の改行は問題ありません。はい、数字に複数の数字がある場合があります。) テストケース 入力: . 出力: 1 ここでの入力は正確に1バイトであることに注意してください。これは、処理できる最小のケースです。 入力: . \ \ \ \ 出力: 6 これらのスラッシュの後にスペースがないことに注意してください。 入力: . / …

23
火星探査機を動かしましょう!
概要 タスクは、火星探査車をナビゲートし、その最終的な座標と方向を伝えることです。 入力: 最初の入力: まず、プログラムは次の形式の入力を受け取る必要があります。 [X-Coordinate],[Y-Coordinate],[Direction] 方向は次のNいずれSかでなければなりません:またはまたはEまたはW(北、南、西、東の手紙を開始) 例: 10,20,N(x = 10、y = 20、方向= N(北)) 2番目の入力: 第2の入力は、一連の構成されR、L、M右のために、左とそれぞれ移動します。 以下のためR及びL(左右)ローバの方向は、それに応じて変更しなければなりません。 Mローバーそれが移動する前にした方向前方に1つのユニットを移動する必要があります。 座標を計算するためのルール: N = Y + 1 E = X + 1 S = Y - 1 W = X - 1 出力: ローバーの最終的な座標と現在の方向。 例: Enter initial data: 1,2,N Enter the instructions: MRMLM …

2
スロットマシンハッカー
問題:Facebook Hacker Cup 2011 Round 1Bの Slot Machine Hacker 目標:stdin / stdoutを使用したお気に入りの言語での最短コード。getRandomNumber定義されていると仮定することはできません。つまり、ソリューションには、機能として、または他の方法でゴルフの可能性のあるバージョンを含める必要があります。 参照解決策:SO [私は私のものを選びました。stdin/ stdoutを使用しているため、daveの解決策がわかりません。] 問題のテキストは次のとおりです。 最近、スロットマシン用のソフトウェアを書いている人と友達になりました。彼と少し時間を過ごした後、あなたは彼がスロットマシンがどのように機能するかについての彼の知識を誇示する傾向があることに気付きます。最終的には、特定のブランドのマシンで使用されているアルゴリズムを詳細に説明するように彼に依頼します。アルゴリズムは次のとおりです。 int getRandomNumber() { secret = (secret * 5402147 + 54321) % 10000001; return secret % 1000; } この関数は、[0、999]の整数を返します。各数字は、特定のマシン状態の間にホイールに表示される10個のシンボルの1つを表します。secretは、最初は未知の非負の値に設定されます。 マシンの動作を十分に長く観察することで、秘密の価値を判断し、将来の結果を予測できます。将来の結果を知っていれば、スマートな方法で賭けて多くのお金を獲得することができます。 入力 入力の最初の行には、テストケースの数である正の数Tが含まれています。これに、Tテストケースが続きます。各テストケースは正の整数Nで構成され、これはあなたが行う観測の数です。次のNトークンは、観測値を表す0〜999の整数です。 出力 各テストケースについて、空白文字で区切られたマシンによって表示される次の10個の値を出力します。観察したシーケンスが、友人が説明したマシンで作成できない場合は、"Wrong machine"代わりに印刷してください。次の10個の値を一意に決定できない場合は、"Not enough observations"代わりに印刷してください。 制約 T = 20 1≤N≤100 入力のトークンは3文字以下で、0〜9の数字のみが含まれます。 入力例 …
17 code-golf 

25
Tex Quotes(UVa 272)
文字列が与えられたら、すべての左二重引用符を2つのバッククォートに、すべての右二重引用符を2つのシングルクォートに置き換えます。 左引用符は、引用符を開始する引用符を意味します。右引用とは、引用を終了する引用を意味します。引用符はネストできません。文字列内に偶数の二重引用符があると仮定することができます。 例 入力: "To be or not to be," quoth the Bard, "that is the question". The programming contestant replied: "I must disagree. To `C' or not to `C', that is The Question!" 出力: ``To be or not to be,'' quoth the Bard, ``that is the question''. The programming …
17 code-golf 

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