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

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

13
連結整数からの最大値と最小値
この問題は、すべてのソフトウェアエンジニアが1時間以内に解決できるはずの5つのプログラミング問題に由来しています。最初のいくつかの問題は些細なことですが、4番目の問題はもう少し興味深いものです。 標準入力で単一のスペースで区切られた整数のリストが与えられた場合、整数をそれぞれの行に連結することで取得できる最大値と最小値を出力します。 例えば: 入力: 5 56 50 出力: 50556 56550 さまざまな注文ポイント: 結果の順序は最小から最大です。 印刷できるのは最小値と最大値のみです(すべてのバリエーションを繰り返して印刷することは無効です)。 リストには常に2つ以上の整数があります。 最大と最小の結果が同じになる可能性があります。inputの場合5 55、数値555を2回印刷する必要があります。 整数は必ずしも明確ではありません。5 5有効な入力です。 0整数の先頭のs は有効な入力ではありません。あなたはなりませんためのアカウントに必要05 55。 これはコードゴルフであるため、最短のエントリーが勝ちです。
14 code-golf  number 

6
制御不能の丸めエラー
バックグラウンド 最近、小さな会計事務所に雇われました。会計の世界はあなたにとっていくぶん外国のものなので、あなたがすべての専門家のガイドラインに従っているかどうかはわかりません。特に、これらすべての数値をいつ、どの方向に丸めるべきかわからないので、ほとんどの場合、あなたはそれを翼に乗せて最善を望みます。 入力 入力は、単純な計算を表す単一の文字列です。文字で区切られたいくつかの非負の整数が含まれています+-*/。文字列は左から右に読み取られ、通常の優先順位規則は無視されるため、"23+1*3/4"「23で始まり、1を加算し、3を乗算し、4で除算する」ことを意味します。結果は18になります。0(0それ自体を除く)、またはゼロによる除算。 出力 計算の各段階で、結果を最も近い整数に切り上げまたは切り捨てるか、そのままにしておくことができます。最後に、整数の結果を得るために切り上げまたは切り捨てます。あなたの出力は、そのような計算から生じる可能性のある整数のリストであり、ソートされ、重複はありません。 ルール 完全なプログラムまたは関数のいずれかを作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース "42" -> [42] "2+0+4-0" -> [6] "23+1*3/4" -> [18] "5/2" -> [2,3] "5/2+7/3*6-1" -> [17,18,19,23] "23/2/2*30-170/3" -> [-7,-6,-2,-1,0,1,3,4] "1/3*2*2*2*2*2*2" -> [0,16,20,21,22,24,32,64] "1/3*9" -> [0,3,9]

7
L字型トロミノを使用して2 ^ N x 2 ^ Nグリッドをタイリングする
数学的帰納法の証明手法について最初に生徒に教えるとき、一般的な例は、2 N ×2 NグリッドをL字型のトロミノでタイリングし、1つの所定のグリッドスペースを空のままにする問題です。(Nは非負の整数です。) あなたがまだそれを知らないならば、私はあなたにそれを任せます。それについて議論する多くのリソースがあります。 ここでのタスクは、Nの値と、空のままにするグリッド空間の座標を取り込んで、結果のtrominoタイルグリッドのASCII表現を出力するプログラムを作成することです。 キャラクターOは空のスペースを埋め、トロミノの4つの回転は次のようになります。 | +- | -+ -+ | +- | (はい、曖昧なことができ+ていると行く-と|、特定の手配のために、それは大丈夫です。) プログラムは、N = 0(1×1グリッドの場合)から少なくともN = 8(256×256グリッドの場合)まで動作する必要があります。の座標であるxとyの値が与えられますO: xは水平軸です。X = 1、左グリッド縁で、X = 2 Nは右グリッドエッジです。 yは垂直軸です。= 1 Yは、Y = 2、上部グリッドエッジでNは、ボトムグリッドエッジです。 xとyは両方とも常に[1、2 N ]の範囲にあります。 したがって、指定されたN、x、およびyに対して、プログラムは、x、yグリッド座標を除く、L字型のトロミノで完全に並べられた2 N ×2 Nグリッドを印刷する必要がありOます。 例 N = 0の場合、xとyは両方とも1でなければなりません。出力は単純に O N = 1、x = 1、y = …

4
スラッシュでランダムウォークを描く
(STDIN /コマンドライン/関数引数を介して)N整数正にかかるプログラムまたは機能を記述し、プリント又は戻る二次元の文字列表現ランダムウォーク Nが長いステップされ、スラッシュから引き出さ:/ \(プラススペースと間隔の改行)。 2Dランダムウォークは、無限整数格子の原点から始まります。その後、N回繰り返し、基本方向(上、下、左、右)がランダムに均一に選択され、歩行者はその方向に1ユニット移動します。結果として得られるパスは、ランダムウォークです。 N = 6のランダムウォークを次に示します。(-1、3)に達すると、それ自体をトラバースします。 これをスラッシュで描くには、基本的に全体を時計回りに45°回転させる必要があります。スラッシュバージョンでは、軸と開始点と終了点は描画されません。 / \ \ /\ このようなより複雑なウォーク(N = 20、ただし伝える方法はありません): これになります: / /\/ /\ \/\/ /\/ \/ プログラムは、これらのタイプのランダムウォークのスラッシュバージョンを生成する必要があります。ウォークが進むそれぞれの新しい方向をランダムに選択する必要があるため、特定のNのプログラムを実行するたびに、ほぼ確実に異なるウォークが生成されます。(疑似ランダム性は問題ありません。) 最低および最高のスラッシュの上下に空行が存在することはありません(オプションの末尾の改行を除く)。また、左端および右端のスラッシュの前後にスペースの空の列があってはなりません。 したがって、N = 1の場合、出力は常に/or \ですが、次のようなことはありません。 / 末尾のスペースは、右端のスラッシュの列を超えない限り許可されます。 最少バイトの送信が勝ちです。これは便利なバイトカウンターです。

1
正方形の対称性を見つける
正の整数のリストを受け取るプログラムまたは関数を作成します。これらの整数はそれぞれ、2D平面上の正方形の辺の長さを表します。各正方形は、平面内の任意の整数座標に移動できますが、回転することはできず、他の正方形と重なることはできません。 空白ごとに異なる印刷可能なASCII文字を使用して(空に使用されるスペースを除く)、プログラム/関数は、反射対称の水平線または垂直線を持つ正方形の単一配列を印刷する必要があります。そのような配置が存在しない場合は、何も印刷しないでください。 四角は区別できるように異なる文字です。すべての正方形の結合によって作成された形状のみが対称である必要があります。リストには94を超える要素は含まれないと想定できます(94文字があるため)。 たとえば、入力がの[2, 1, 2, 2, 2]場合、可能な出力は次のとおりです。 DD-- DD-- Z FFPP FFPP この形状には、反射対称の水平線があります。その上半分と下半分は鏡像です。他にもいくつかの可能性があります:(正方形に触れる必要はなく、同じ文字で2つの正方形が作られていない限り、任意の文字を使用できます。) 55 55 %% %% @ HH HH (( (( G 11 33 11 33 22 44 22 44 対称線は、文字間の境界でもあります。例[2, 4]: !!!! !!!! ++ !!!! ++ !!!! いくつかの正方形のセットは、対称的に配置することは不可能[1, 2, 3]です。 AAA BB C AAA BB (these can't …

3
リストの結合解除
前書き ほとんどの人は、数値のリストをソートするためのマージソートアルゴリズムに精通しています。アルゴリズムの一部として、merge2つのソート済みリストを1つのソート済みリストに結合するというヘルパー関数を作成します。Pythonのような擬似コードでは、関数は通常次のようになります。 function merge(A, B): C = [] while A is not empty or B is not empty: if A is empty: C.append(B.pop()) else if B is empty or A[0] ≤ B[0]: C.append(A.pop()) else: C.append(B.pop()) return C アイデアは、最初の要素の小さい飛び出る維持することであるAとのB両方のリストが空である、とに結果を収集するまでC。場合AとBの両方にソートされ、その後、そうですC。 逆に、if Cがソートされたリストであり、それを任意の2つのサブシーケンスに分割した場合、AおよびB、AおよびBもソートされますおよびmerge(A, B) == C。興味深いことに、Cソートされていない場合、これは必ずしも当てはまらないため、この課題が発生します。 入力 あなたの入力はリストとして与えられたいくつかの最初の2*n非負整数の順列です。[0, 1, 2, ..., 2*n-1]n > …

4
スパイラルプログラミング
単一の整数Nを受け入れ、下のスパイラルの最初のNバーを中央の垂直バーから時計回りに外側に向かって(文字列として)出力または返す名前付き関数またはプログラムを作成します。 _______________ / _____________ \ / / ___________ \ \ / / / _________ \ \ \ / / / / _______ \ \ \ \ / / / / / _____ \ \ \ \ \ / / / / / / ___ \ \ \ \ \ \ …

4
ax + bの最大値を見つける
(a、b)のリストとxのリストが与えられます。各xの最大ax + bを計算します。a、b、およびxが非負の整数であると仮定できます。 (あなたのコードがそれを必要とする場合は、入力、ランダムにではない)あなたのプログラムや機能が期待される中で実行する必要がありますO(NログN)時間、nは入力長の合計(両方のリストの長さの合計または最大値)です。 これはコードゴルフです。最短のコードが優先されます。 例 [[2 8] [4 0] [2 1] [1 10] [3 3] [0 4]] [1 2 3 4 5] 出力: [11 12 14 16 20] 説明: 11 = 1*1 + 10 12 = 1*2 + 10 = 2*2 + 8 14 = 2*3 + 8 16 …

6
仕様から長方形を生成する
前書き この課題は、2Dパターンマッチング言語であるGrimeに触発されました。基本的に、文字の2次元グリッドを記述する「グラマー」が与えられ、あなたの仕事はグラマーに従ってグリッドを生成することです。さらに、グリッドは特定の弱い意味で可能な限り小さくする必要があります。 入力 入力は、小文字のASCII文字と記号|およびを含む文字列-です。簡単にするために、入力には繰り返し小文字が含まれていません。文字列は、文字の長方形グリッドのクラスの仕様であり、次のようにスタックを使用して左から右に解析されます。 小文字の文字を考えるとc、スタックにプッシュしm×nた文字のグリッドをc任意のため、m, n ≥ 1。 パイプが与えられたら、|2つのグリッドAをポップBし、スタックから(B一番上にありました)、AB連結Bして得られたグリッドをの右側にプッシュしAます。これには、AそれBが必要で、同じ高さがあります。 ハイフンを指定すると-、2つのグリッドAをBスタックから(上にBあった)ポップし、A/B連結Bして得られたグリッドをの一番下にプッシュしAます。これは、ことが必要AとB等しい幅を持っています。 解析プロセス(文字ごとに異なる場合があります)の一部の選択mおよびn作成中に、入力仕様がスタックの最後に残っている長方形を正しく記述することが保証されます。 出力 出力は、入力で指定された文字の長方形のグリッドです。行または列を削除するとグリッドが無効になるという意味で、グリッドは最小限でなければなりません。改行で区切られた文字列(末尾の改行の有無にかかわらず)、2Dの文字配列、または文字列の配列のうち、最も便利な形式を返すことができます。 上記のとおりに入力を処理する必要はありません。唯一重要なことは、出力が正しいことです。 例 仕様を検討する par-s||e- まず、プッシュすることを選択した1×2の矩形をp、と1×1の長方形aとr(この理由は、後に明らかであろう)。その後、我々はポップaやr長方形を、その垂直連結を押します a r 次に、の1×2長方形をプッシュし、sそれと上の長方形をポップし、それらの水平連結をプッシュします as rs 次に、その四角形と四角形をポップしp、それらの連結をプッシュします pas prs 最後に、の3×1長方形をプッシュし、eそれと上の長方形をポップし、垂直連結をプッシュします pas prs eee これは、プログラムの出力、または少なくとも1つの可能性です。ただし、 ppas ppas pprs eeee また、仕様によって生成されます。多くの行と列を削除できるため、有効な出力ではありません。 より微妙な例として、考慮してください co|m|p|il|e|r|- この仕様は長方形を生成します comp iler これは有効な出力です。ただし、それはまた生成します commp iiler 無効にすることなく単一の行または列を削除することはできないため、これも有効です。 ルール 完全なプログラムまたは機能を提供できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 追加のテストケース これらを使用してプログラムをテストできます。 Input: …

2
ICS海事旗アルファベット
国際信号旗のアルファベット は、船舶、特に静的信号の通信に使用されます。 あなたの課題は、STDINからまたは引数として文字列を取得し、ICSフラグアルファベットで対応するテキストを表示するプログラムまたは関数を作成することです。言語が画面に表示されない場合は、ファイルに保存しても問題ありません。 あなたのプログラムや関数は、文字をサポートするものAZ大文字と小文字で、プラススペースや改行を。他の文字との動作は未定義です。 ディスプレイは、少なくとも水平方向に8フラグ、垂直方向に6フラグを表示 できる大きさでなければなりません。改行を受信する前に右端に到達した場合、またはメッセージが長すぎてディスプレイに垂直に収まらない場合の動作は未定義です。 フラグのアルファベットは以下のとおりです(ローマ字は参照用であり、出力には必要ありません)。 寸法 これらのフラグの寸法については、普遍的に合意された標準はないため、この課題の目的のために以下が適用されます。 フラグは60x60ピクセルで、水平方向と垂直方向の両方に30ピクセルのギャップがあります。 AとBのアゲハチョウは、深さ15ピクセルでなければなりません。 他のすべての線は、水平、垂直、または45度でなければなりません。 特徴は、旗を辺3、4、5または6の仮想NxNグリッドに分割することにより配置されます。上記の画像を参照してください。ただし、さらに明確にするために: A、E、H、K、L、およびUは2x2グリッドに基づいています。各カラーゾーンの幅は30ピクセルです。また、Fのダイアモンドのポイントは、旗の両側に沿って中間になければならない。 JとTは3x3グリッドに基づいています。各バンドは20ピクセルです。 P、N、およびSは4x4グリッドに基づいています。また、Yの対角線は、フラグのエッジを4に分割します。 C、D、R、およびXは、5x5グリッドに基づきます。十字の帯と腕の幅は12ピクセルでなければなりません。 G、W、M、Vは6x6グリッドに基づいています。GのバンドとWのボーダーは幅10ピクセルでなければなりません。MとVの十字の腕は、旗の各端の最初と最後の10ピクセルをカバーし、長い端に沿って40ピクセルの三角形ゾーンを残します。 Iの円は旗の中心にあり、直径は30ピクセルです。 上記のテキストからの+/- 1ピクセルのエラーは許可されます。ご使用の言語がスケーラブルなグラフィックスのみをサポートしている場合、「ピクセル」を「ユニット」を意味すると解釈できます。 色 色は、言語またはそのドキュメントで定義されているように、赤、白、青、黄、黒でなければなりません。言語で色が定義されていない場合は、赤FF0000、白FFFFFF、青0000FF、黄FFFF00、黒0000000を使用できます。 背景は灰色でなければなりません(r、g、bチャンネルは等しく、強度は25%から75%です)。 得点/ループホール これはcodegolfです。バイト単位の最短コードが優先されます。 標準の抜け穴は許可されていません。 フラグを表示するための組み込み関数またはライブラリ関数は使用できません。出力は非テキストである必要があります(特に、ユニコード文字はフラグの形状を構築するために使用されません)。 例 JFK got my VHS PC and XLR web quiz 以下を生成する必要があります

10
辞書順でソートされた順序で、先頭と末尾の順列のセットを生成します
次の手順で生成できる番号の順列となるように、長さの前付加シーケンスを定義します。n1, 2, ..., n 番号から始め1ます。 番号ごと2にn列(いずれかの最初や最後に、この数場所、先頭に追加または追加して、シーケンスの名前の由来)。 たとえば、これは長さ4のprepend-appendシーケンスを生成する有効な方法です。 1 21 [beginning] 213 [end] 2134 [end] あなたの仕事は、入力としてnから3を取得するプログラムまたは関数を構築し、辞書式順序30で長さのすべての追加/追加シーケンスを印刷または返すnことです(リストではなく文字列を出力する場合、9を超える数が表されます文字として、文字a-u列の長さを保持します)。たとえば、これは次の順序ですn = 4。 1234 [RRR] 2134 [LRR] 3124 [RLR] 3214 [LLR] 4123 [RRL] 4213 [LRL] 4312 [RLL] 4321 [LLL] 一般に、lengthの2 n-1の前置/後置置換がありますn。 コード内の言語で組み込みの並べ替え関数を使用することはできません。任意の言語でこれを行う最短のプログラムが勝ちます。

6
> <>(魚)でのゴルフのヒント
私は最近多くの&gt; &lt;&gt;提出物を見ているので、ヒントページを用意するのは良い考えだと思いました。 密接に関連している場合を除き、投稿ごとに1つのヒントを使用してください。 公式Pythonインタープリター オンラインインタープリター(いくつかのバグが存在しますが、ほとんどの場合に適しています)
14 code-golf  tips 

2
整数間隔を最大限に拡張
整数の非交差区間のセットが与えられたと仮定します[a1,b1],[a2,b2],[a3,b3],...,[aN,bN]。([a,b]整数以上のセットはa、以下ですb。) インデックスの間隔XはbX - aX + 1値をカバーします。この番号を呼び出しますcX。 それぞれの間隔が... 変更なし(そのまま[aX,bX])、 +番号の側に向かって右に伸びるcX(になる[aX,bX + cX])、 または-、番号の側に向かって左に拡張しますcX(になります[aX - cX,bX])、 すべての更新された間隔がまだ交差していない場合、すべての更新された間隔の和集合でカバーできる値の最大数はいくつですか? フォームの文字列を取り、[a1,b1],[a2,b2],[a3,b3],...,[aN,bN]この最大値を計算する関数またはプログラムを作成します。関数を記述する場合、値を返します。完全なプログラムを作成する場合は、入力にstdinを使用し、値をstdoutに出力します(または最も近い代替を使用します)。 すべての値は、通常の符号付き32ビット整数の制限内であり、すべてのインデックスaX以下であると仮定できます。間隔は任意の順序でかまいませんが、必ずしも常に増加しているわけではありません。上記の形式の文字列として指定する必要があります。文字列は空の場合があります。その場合、答えは0になります。bXX バイト単位の最短提出が勝ちです。 例 入力が[-3,0],[1,2],[4,9]出力の場合、22になります。中央の間隔にはどちらの方法でも拡張する余地がないため、変更しないでおく必要があります。左右の間隔は[-7,0]、[4,15]それぞれに拡張することができます。[-7,0]and [1,2]とunionの結合には、[4,15]-7から15までのすべての値が含まれます(3を除く)。22の値です。

2
文字列構築ゲームの勝利戦略
バックグラウンド アリスとボブは、バイナリワードの構築と呼ばれるゲームをプレイします。ゲームをプレイするには、長さn &gt;= 0、ゴールセットと呼ばれるG長さのnバイナリワードのセット、およびターン順序と呼ばれる文字とを含む長さのn文字列tを修正します。ゲームはターンの間続き、ターンでは、によって定義されたプレーヤーがbitを選択します。ゲームが終了すると、プレイヤーは構築したバイナリワードを確認します。この単語が目標セットで見つかった場合、アリスがゲームに勝ちます。そうでなければ、ボブが勝ちます。ABnit[i]w[i]wG たとえば、の修正をしましょうn = 4、G = [0001,1011,0010]とt = AABA。アリスは最初のターンを取得し、彼女はを選択しw[0] = 0ます。2番目のターンもアリスであり、彼女はを選択しw[1] = 0ます。ボブは3番目のターンを持ち、彼はを選択しw[2] = 0ます。最終ターンで、アリスはを選択しw[3] = 1ます。結果の単語0001がにGあるため、アリスがゲームに勝ちます。 今、ボブがを選択した場合w[2] = 1、アリスはw[3] = 0彼女の最後のターンで選択し、まだ勝つことができました。これは、アリスがボブのプレー方法に関係なくゲームに勝つことができることを意味します。この状況では、アリスには勝利戦略があります。この戦略は、Bobのターンに対応するレベルで分岐し、すべての分岐に次の単語が含まれるラベル付きバイナリツリーとして視覚化できますG。 A A B A -0-0-0-1 \ 1-0 アリスは、自分のターンに枝をたどるだけでプレーします。ボブがどのブランチを選んでも、最終的にアリスが勝ちます。 入力 入力として長さn、およびG長さの文字列の(空の場合もある)セットとしてのセットが与えられますn。 出力 出力は、アリスが勝利戦略を持っているターン順のリストです。これは、上記のバイナリツリーの存在に相当します。順番の順番は関係ありませんが、重複は禁止されています。 詳細なルール 完全なプログラムまたは関数を作成できます。プログラムの場合、入力と出力の区切り文字を選択できますが、両方で同じにする必要があります。最短のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース 3 [] -&gt; [] 3 [000,001,010,011,100,101,110,111] -&gt; [AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB] 4 [0001,1011,0010] -&gt; …
14 code-golf  game 

7
nのべき乗を合計します
行き方 入力整数n(n &gt;= 0)が与えられると、最小の正の整数 mを出力するプログラムを作成します。ここで、 n = a[1]^b[1] + a[2]^b[2] + a[3]^b[3] + ... + a[k]^b[k] aとbは、同じ長さの有限シーケンスです すべての要素は、a以下でありますm すべての要素は、b以下でありますm のすべての要素aは異なり、整数ですa[x] &gt;= 0 のすべての要素bは異なり、整数ですb[x] &gt;= 0 a[x]またb[x]、両方とも0ではありません(0 ^ 0は不確定であるため) これはcode-golfなので、バイト数が最も少なくなります。 例 In 0 -&gt; Out 1 Possible Sum: In 1 -&gt; Out 2 Possible Sum: 1^0 In 2 -&gt; Out 3 …

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