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

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

9
デッドコード除去
デッドコードは何もせずに座っており、決して実行されないことを私たちに見つめています...しかし、今日は復canすることができます。 仕様 入力は複数行の文字列になります。 各行は、割り当てまたは式のいずれかです。 割り当て 割り当ては、<name> = number名前が文字、アンダースコア、数字のシーケンスであるが、数字で始まる形式ではありません。 変数は何度でも割り当てることができます。 表現 式は次の形式です <var_name OR number> <operation> <var_name OR number> ... 式は次の任意の組み合わせです。 定義済みの変数 基本的な算術演算子 +-*/ 数字(整数) 期待される出力 あなた出力冗長で文字列べき割り当て、割り当てのいずれかによって使用されることはありません表現、それを後に除去します。ので、予めご了承ください割り当てが追加の場合も冗長化することができます割り当て同じ変数には、前に実行される表現変数を使用して実行されます。 テストケース に a = 10 a * 3 でる a = 10 a * 3 に foo = 8 2 - 1 a = …

12
多項式のシンボリック微分
シンボリック識別1:ゴーン・シーフィッシン 仕事 stdin(1 <deg(p)<128)からxの多項式を取り込んで微分するプログラムを作成します。入力多項式は、次の形式の文字列になります。 "a + bx + cx^2 + dx^3 +" ... 各項の係数は整数です(-128 <a <128)。各用語は、1つのスペース、+、および別のスペースで区切られます。線形項と定数項は上記のように表示されます(つまり、no x^0またはx^1)。用語は次数の昇順で表示され、係数がゼロの累乗は省略されます。係数が1または-1のすべての項は、その係数を明示的に表示します。 出力はまったく同じ形式である必要があります。出力の係数は127 * 127 == 16129と同じくらい大きいことに注意してください。 例 "3 + 1x + 2x^2" ==> "1 + 4x" "1 + 2x + -3x^2 + 17x^17 + -1x^107" ==> "2 + -6x + 289x^16 + -107x^106" "17x …

7
Take It or Leave It II:コンピューター向けゲームショー
これは、毎週月曜日のPSTのMidnightに投稿する一連のパズルの2番目です。最初のパズルはここにあります。 コンテキスト: 世捨て人の億万長者がゲーム番組を作成し、世界で最も優秀で優秀なプログラマーを引き付けました。月曜日の真夜中のストロークで、彼は志願者のプールから1人をその週の出場者として選び、彼らにゲームを提供します。あなたは今週の幸運な出場者です! 今週のゲーム: ホストは、10,000個のデジタルエンベロープのスタックへのAPIアクセスを提供します。これらのエンベロープはランダムにソートされ、その中に1ドルから10,000ドルの間のドル値が含まれています(同じドル値を含むエンベロープは2つありません)。 次の4つのコマンドを自由に使用できます。 Read():スタックの一番上にある封筒のドルの数字を読み取ります。 Take():封筒にドルの数字をゲームショーウォレットに追加し、封筒をスタックから取り出します。 Pass():スタックの一番上のエンベロープからポップします。 Oracle(M):スタック内の次のMエンベロープの平均値を返します。現在読み取り可能なエンベロープは含まれません。 ルール: 封筒でPass()を使用すると、内部のお金は永久に失われます。 $ Xを含むエンベロープでTake()を使用する場合、それ以降、$ Xを含むエンベロープでTake()を使用することはできません。これらの封筒の1つでTake()を実行すると、ウォレットに0ドルが追加されます。 ターンTでOracle(M)を使用すると、エンベロープT + 1からT + Mの平均が返されます。Oracle()は、T + Mを回すまで無効です。 最大限の金額でゲームを終了するアルゴリズムを作成します。 Pythonでアルゴリズムを作成している場合は、@ Maltysenが提供するこのコントローラーを自由に使用してください:https ://gist.github.com/livinginformation/70ae3f2a57ecba4387b5 注1:この場合の「最大」とは、N> = 1000実行後のウォレットの中央値を意味します。Nが無限大に増加すると、特定のアルゴリズムの中央値が収束することが間違っていることを証明したいと思います。代わりに平均値を最大化してみてください。しかし、平均値は中央値よりも小さなNによって放り出される可能性が高いと感じています。 注2:このパズルの前の部分に対するすべての解決策はここで有効なので、それらを再投稿することはほとんど価値がありません。パートIIでは、以前のパズルのアルゴリズムの改善のみが考慮されます。 編集:メタに関するこの投稿を考慮して、賞品の条件は削除されました。

5
お気に入りのMinecraftツールをゴルフ
でマインクラフト、デフォルト項目のテクスチャは、すべての彼らはのための理想的な思われてしまう合理的にシンプルな16×16ピクセルの画像であるゴルフ。 :以下はMinecraftの中に5「コア」ダイヤモンド工具のテクスチャに簡略化されているつるはし、シャベル、斧、剣、と鍬を。 表示される画像は、詳細を示すために拡大されています。画像をクリックして、正しいサイズの16×16ピクセルバージョンを表示します。 ゴルフを簡単にするために、オリジナルからそれぞれを変更して、同じ24ビットRGBの5色のみを使用するようにしました。 R=75 G=82 B=73 背景に。 R=51 G=235 B=203 ダイヤモンドツールヘッド用。 R=14 G=63 B=54 ダイヤモンドの輪郭のため。 R=137 G=103 B=39 木製ハンドルコア用。 R=40 G=30 B=11 木製ハンドルのアウトライン用。 5のうち、お好きなツールを選択し、(のような任意の一般的なロスレストゥルーカラー画像形式でその簡略化さ16×16ピクセルのテクスチャを出力するプログラム書き込みbpm、png、ppmなど、)。 したがって、たとえば、aを選択した場合、このイメージを出力するプログラムを作成します。 何も入力しないでください。また、Web接続は必要ありません。画像は、選択した名前のファイルとして出力するか、生の画像ファイルデータをstdoutに出力するか、単に画像を表示することができます。 5つの画像のいずれかを選択するだけです。5つの画像のいずれかを最も少ないバイト数で出力するプログラムが勝者です。 複数の画像のプログラムを作成できますが、最小バイト数の画像のみがスコアにカウントされます。同点の場合、最も投票数の多い投稿が勝者となります。 PPCGを楽しんでMinecraftをプレイする場合は、試用版のMinecraftサーバーに参加してください。ただ、中に尋ねる専用のチャットルーム。

2
最悪の場合のマンハッタンの除外
想像してWによるHのトロイダル状ラップの正方形のグリッドを。アイテムは次のようにグリッドに配置されます。 最初のアイテムは任意の正方形に配置できますが、後続のアイテムは前のアイテムのマンハッタン距離 R(範囲Rのフォンノイマン近傍とも呼ばれます)内に配置することはできません。慎重に位置を選択すると、有効な位置がなくなる前に多数のアイテムをグリッドに合わせることができます。ただし、代わりに反対の目的を検討してください。配置できるアイテムの最小数はいくらですか? 以下は、半径5の除外ゾーンです。 ここに別の半径5の除外ゾーンがあります。今回はエッジに近いため、ラッピングの動作が明らかです。 入力 3つの整数: W:グリッドの幅(正の整数) H:グリッドの高さ(正の整数) R:除外ゾーンの半径(非負の整数) 出力 整数N。これは、配置できるアイテムの最小数であり、それ以上の有効な配置を妨げます。 詳細 半径がゼロの場合、除外ゾーンは1平方(アイテムが配置されたゾーン)になります。 Nの半径は、N直交ステップで到達できるゾーンを除外します(エッジがトロイド状にラップすることを思い出してください)。 あなたのコードは、R = 0の些細なケースで機能する必要がありますが、W = 0またはH = 0で機能する必要はありません。 コードでは、R > WまたはR > Hの場合も処理する必要があります。 制限時間とテストケース コードはすべてのテストケースを処理できなければならず、各テストケースは5分以内に完了する必要があります。これは簡単なはずです(JavaScriptソリューションの例では、テストケースごとに数秒かかります)。時間制限は、主に極端なブルートフォースアプローチを除外することです。例のアプローチは、まだかなり強引です。 コードが1台のマシンで5分以内に完了しても、十分に近い別のマシンでは完了しない場合。 フォーム入力のテストケース:出力としてW H R : N 5 4 4 : 1 5 4 3 : 2 5 4 2 : 2 …

4
画像の平均を強制する
標準のトゥルーカラーイメージと単一の24ビットRGBカラー(0〜255の3つの数字)を取り込むプログラムを作成します。入力画像を修正(または同じ寸法の新しい画像を出力)して、その平均色が入力された正確な単一色になるようにします。これを実現するために、入力画像のピクセルを自由に変更できますが、目標は色の変化を視覚的にできるだけ目立たないようにすることです。 RGB画像の平均色は、実際には各カラーチャネルに1つずつ、3つの算術平均のセットです。平均の赤の値は、画像内のすべてのピクセルの赤の値を合計ピクセル数(画像領域)で割ったものを、最も近い整数に切り捨てたものです。緑と青の平均は同じ方法で計算されます。 このPython 2(PILを使用)スクリプトは、ほとんどの画像ファイル形式の平均色を計算できます。 from PIL import Image print 'Enter image file' im = Image.open(raw_input()).convert('RGB') pixels = im.load() avg = [0, 0, 0] for x in range(im.size[0]): for y in range(im.size[1]): for i in range(3): avg[i] += pixels[x, y][i] print 'The average color is', tuple(c // (im.size[0] * im.size[1]) for …

6
ソースコードの自撮り
目的: 教祖はかつて、完璧なコードの自撮りは、左上隅から斜めに撮影するのがベストだと言っていました。コードのセルフィーは、ほとんどQuineに似ていますが、時計回りに45度回転します。あなたの使命は、コードの自撮りを出力するプログラムをコーディングすることです。 ルール: 任意のプログラミング言語を使用できます。 あなたのプログラムは、ファイル、ファイル名、ネットワーク、その他から何も入力してはいけません。 必須の基準: Selfiesは動機と背景に関するものであるため、空白(および改行などの表示されないコンテンツ)は文字カウントの一部としてカウントされません。すべての非表示文字は正しい45度回転位置に制限されませんが、すべての可視文字は正しい45度回転位置に出力されるように制限されます。通常の自撮りのカラーパレットと同様に、コードの自撮りには必須であるのは、これらの文字のうち少なくとも16個が含まれていることです:{a-zA-Z0-9} 例: この例が有効なソースコードである場合: Output abcd Output efgh Output ijkl Output mnop サンプルコードはこれを出力するはずです: O O u O u t O u t p u t p u t p u t p u t u t a t e b i f c m j …
20 code-golf  quine 

12
整数としての括弧と括弧の評価
()[]これらのポイントを満たす4文字の文字列を取り込むプログラムを作成します。 すべての左括弧(には対応する右括弧があり)ます。 すべての左角括弧に[は、対応する右角括弧があり]ます。 括弧とブラケットの一致するペアは重複しません。たとえば[(])、一致するかっこが一致するかっこに完全に含まれておらず、逆も同様であるため、無効です。 最初と最後の文字は、一致する括弧または括弧のペアです。したがって([]([]))、[[]([])]有効ですが、無効です[]([])。 (入力形式の文法は<input> ::= [<input>*] | (<input>*)です。) 一致する括弧と括弧の各ペアは、負でない整数に評価されます。 一致する括弧内のペアの値はすべて合計されます。空の一致に()はvalueがあります0。 一致する括弧内のペアの値はすべて乗算されます。空の一致に[]はvalueがあります1。 (1つの数値の合計または積は、その同じ数値です。) たとえば、次の([](())([][])[()][([[][]][][])([][])])ように分類して評価できます9。 ([](())([][])[()][([[][]][][])([][])]) <input> (1 (0 )(1 1 )[0 ][([1 1 ]1 1 )(1 1 )]) <handle empty matches> (1 0 2 0 [(1 1 1 )2 ]) <next level of matches> (1 0 2 0 [3 …

1
数字のセットから最も高いタワー
編集:質問の最後のバウンティパズル。 1桁の数字のセットが与えられたら、それらが構築できるタワーの高さを決定する必要があります。 数字は、立つことができる地面レベルの水平面に住んでいます。複数桁の数字と混同したい数字はありません。そのため、常に両側に空のスペースがあります。 4 2 1 9 6 8 数字を別の数字の上に置くことができます。 2 6 または、対角線下にある他の2つでサポートできます。 9 5 8 下部は、上部がサポートする重量(ある場合)と、上部の重量(常に1)をサポートする必要があります。サポーターが2人いる場合、サポーターは上部のサポーターの総重量を均等に分割します(50%-50%)。 すべての数字の重みは、その値に関係なく1です。 1桁で他の2桁をサポートする場合、対応する重みの合計をサポートできる必要があります。数字は最大でその数値をサポートできます。 いくつかの有効な塔(高さ4、3および5): 0 7 1 5 1 1 1 9 supports a total weight of 1.5 = (1+1/2)/2 + (1+1/2)/2 2 5 4 5 5 3 5 9 5 5 6 3 …
20 code-golf 

16
文字列の中で最も出現するペアの文字を見つけるプログラムを書く
プログラムは、最もペアになっている文字を出力する必要があります。たとえば、プログラムに次の文字列が与えられた場合: "Sally's friend Bobby searched for seashells." 2回発生するLため"ll"、出力する必要があり、他のペアよりも頻繁に発生し"bb"ます。 ルール: 複数の文字が出現のための第一位を持っている場合は、アルファベット順にすべてのそれらの出力(例えば"Sally's friends Jimmy and Bobby rummaged for seashells."出力すべき両方LのAND M[または"LM"あなたが喜ば場合]、彼らはより頻繁に他のペアよりも発生し、両方のため。) 3倍、4倍などの文字は1つのペアとしてカウントされます(たとえば"lll"、in "willless"は1つのペアのみとしてカウントされLます)。 文字のペアは1ワードである必要があります(たとえば、"Sally's sociable friends Sammy and Bobby searched for fabulous seashells."出力する必要があります。出現回数がであるにもかかわらず、スペースで区切られているためではLありません)。S"ss""ll" 英語のアルファベットの文字のみを数える 大文字と小文字は区別されません(たとえば"Ss"、"SS"or と同じ"ss"で、すべてが1つのペアとしてカウントされSます)。 どこからでも入力を読むことができます。最短のコードが優先されます。

3
島(および川)の地図
前書き 何世紀にもわたって、マッピングされたことのない特定の川がありました。地図製作者のギルドは川の地図を作成したいと考えていますが、成功することはありませんでした-何らかの理由で、川の地図を作成するために送った地図製作者はすべて、この地域の野生動物に食われています。別のアプローチが必要です。 入力説明 領域は、長さmと幅のセルの長方形のグリッドですn。左下のセルはになり0,0、右上のセルはになりますm-1,n-1。mそしてn、タプルとして入力で提供されますm,n。 長距離の地理探査技術を使用することにより、川周辺の島の位置が特定されました。島のサイズ(つまり、島が占めるセルの数)も特定されていますが、形状は特定されていません。我々は、タプルにこの情報を提供する島の大きさであり、そしてその島の一つの特定のセルのxとyの位置です。入力内の各タプルはスペースで区切られているため、入力例を次に示します。s,x,ysxy 7,7 2,0,0 2,3,1 2,6,1 2,4,3 2,2,4 8,0,6 1,2,6 3,4,6 より明確に説明するために、グラフ上の入力を次に示します。 y 6|8 1 3 5| 4| 2 3| 2 2| 1| 2 2 0|2 ======= 0123456 x 出力の説明 ASCII文字を使用して領域の一部を表すマップを出力します。各セルは#(土地)または.(水)のいずれかになります。マップは次のルールに従う必要があります。 定義。島は、川のセルおよび/または地域の境界によって完全に囲まれている、陸のセルの直交的に隣接したグループです。 定義。川、土地細胞および/または領域の境界によって完全に囲まれ、水細胞の直交隣接基でありそして「湖」(水細胞の2×2の領域)を含みません。 ルール。マップには正確に1つの川が含まれます。 ルール。入力内の各番号付きセルは、正確にsセルを含むアイランドの一部でなければなりません。 ルール。マップ内のすべての島には、入力内の番号付きセルの1つが正確に含まれます。 ルール。すべての入力に対して単一の一意のマップが存在します。 入力例の出力は次のとおりです。 #.#.##. #....#. #.##... ##..##. ###.... ...##.# ##....# ここに別の入力と出力があります。 入力: …

3
これは本当のツリーですか?
入力として文字列を受け取り、入力がASCIIツリーの場合は出力または返すプログラムまたは関数を作成する必要があります。 _ \/ / \_/ | | ASCIIツリーは文字/ \ | _ spacesとで構成されますnewlines。 非空白文字は、セルの2つのエッジポイントをラインセグメントで接続します。 / 左下隅と右上隅を接続します \ 右下隅と左上隅を接続します | 下端と上端の中間点を接続します _ 左下隅と右下隅、および下端の中間点を接続します (なお、この手段|のみで接続することができます|か_ではなくて/か\。) 次の規則が適用される場合、ASCIIピクチャはツリーと呼ばれます。 正確に1つの文字の正確に1つのポイント(ルート)が最後の行の下端に接触します。 次の方法で、任意の線セグメントの任意のポイントに到達できます。 ルートから始まる 線分のみを使用する 下方向には決して行かない(横方向にも下がらない) 入力 文字列の文字から成る/ \ | _ spaceとnewline少なくとも1つの非空白文字を含みます。 次の2つの入力形式から選択できます。 ツリーの周りに不要な空白はありません(例で見られます)。 すべての行を同じ長さにするための行の右側のスペースを除いて、ツリーの周りに不要な空白はありません(例にあります)。 末尾の改行はオプションです。 出力 入力がasciiツリーの場合、一貫した真理値。 入力がasciiツリーでない場合、一貫した偽の値。 例 有効なツリー: | _ \/ / \_/ | | …

9
各次元の合計
整数の多次元配列が与えられます。各次元のサイズは固定です(2Dの場合は常に長方形になります)。プログラムは、各ディメンションの合計を計算し、そのディメンションの新しい最後のアイテムとして合計を追加する必要があります。 入力配列と出力配列がAとBであり、A の次元iのサイズがn iであると仮定します。BはAと同じ次元数を持ち、次元iのサイズはn i +1になります。B j 1、j 2、...、j mは、A k 1、k 2、...、k mの合計です。ここで、 kはiは J = iが jの場合、I <= N Iを 0 <k i <= n i j i = n i +1の場合 入力用: [[1 2 3] [4 5 6]] プログラム(または関数)が出力するはずです: [[1 2 3 6] [4 5 6 15] …


4
(やや)dan病な誕生日のパラドックス
バックグラウンド 誕生日のパラドックスは、(ほとんどの人々の)数学的な直感を覆す確率論で人気のある問題です。問題のステートメントは次のとおりです。 与えられたNの人々 、それらの少なくとも2つが同じ誕生日(年を無視)を持っている確率は何ですか。 この問題は通常、うるう日を完全に無視することで簡素化されます。この場合、N = 23の答えは(一般的な例として)P(23)≈0.5072972です。リンクされたウィキペディアの記事は、この確率に到達する方法を説明しています。あるいは、このNumberphileビデオは本当に良い仕事をします。 ただし、この課題に対しては、正しく実行したいので、うるう年を無視しないでください。2月29日を追加する必要があるため、これはやや複雑ですが、この特定の誕生日は他のすべての誕生日よりも少ない可能性があります。 また、完全なうるう年のルールを使用します。 年が400で割り切れる場合は、うるう年です。 それ以外の場合、1年が100で割り切れる場合、うるう年ではありません。 それ以外の場合、1年が4で割り切れる場合はうるう年です。 そうでなければ、it年ではありません。 混乱した?つまり、1700年、1800年、1900年、2100年、2200年、2300年はうるう年ではなく、1600年、2000年、2400年は(4で割り切れる他の年と同様)です。このカレンダーは400年ごとに繰り返され、これらの400年にわたる誕生日の均一な分布を想定します。 N = 23の修正結果は、現在P(23)≈0.5068761です。 チャレンジ 整数1 ≤ N < 100を指定するNと、うるう年の規則を考慮して、少なくとも2人の人が同じ誕生日を持っている確率を決定します。結果は、小数点以下6桁までの精度の浮動小数点数または固定小数点数でなければなりません。末尾のゼロを切り捨てることは許容されます。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 ソリューションは、わずか数秒で99の入力すべてに対して出力を生成できる必要があります。これは主に、大量のサンプルを使用するモンテカルロ法を除外するためです。したがって、非常に遅い難解な言語で主に高速で正確なアルゴリズムを使用している場合は、この規則に余裕を持たせます。 テストケース 結果の全表は次のとおりです。 1 => 0.000000 2 => 0.002737 3 => 0.008195 4 => 0.016337 5 => 0.027104 6 => 0.040416 7 => 0.056171 8 => …

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