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

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

5
モンドリアン絵画記述言語
この課題は、モンドリアン絵画記述言語(MPDL)のインタープリターのコーディングにあります。 言語定義 この言語は、長方形のスタックで動作します。長方形は、左上の座標と右下の座標で定義されます。座標は整数でなければなりません。スタックは、属性を持つ単一の長方形で初期化されます(1,1,254,254) 各コマンドの形式は次のとおりです。 <character><integer> 次の3つのコマンドがあります。 v<integer>:スタック内の最新の長方形で、パラメーターで示された位置(パーセンテージ)で垂直分割を実行します。ソースの長方形はスタックから削除され、分割の結果の2つの新しい長方形に置き換えられます。左の長方形がスタックにプッシュされ、次に右の長方形がプッシュされます。長方形の座標は整数であるため、分数は最も小さい整数に丸められる必要があります。 h<integer>:水平分割。上の長方形がスタックにプッシュされ、次に下の長方形がプッシュされます。 c<integer>:スタックから最新の長方形を削除し、パラメーターとして指定された色にペイントします。1 =白、2 =赤、3 =青、4 =黄 チャレンジ パラメータとしてペイントの説明を取り、ペイントされた長方形の256x256ビットマップ表現を作成するプログラムを作成します。長方形は、3ピクセルの黒い線で区切る必要があります。1ピクセルまたは2ピクセルの長方形は、黒以外のピクセルを境界線の黒ピクセルで非表示にする必要があります。 入力は、パラメータまたはファイルとして読み取ることができます。コマンドはスペースで区切る必要があります。入力ファイルには正しい構文があり、末尾または先頭のスペース、タブなどがないと仮定できます。出力は、画面に直接表示するか、ファイルを自分で保存できます。 最短のコードが優先されます。 テスト 次のソース: v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1 赤、青、黄色のコンポジションIIを生成する必要があります。

17
シーケンス内で最も1が多いサブストリングを見つける
前書き 私はほとんどとサブ見つけたい1「の順にS 0、S」と1のを。 入力 プログラムには、シーケンスとサブストリングの長さの2つの入力があります。 シーケンスは、任意の数である0のと1の: 01001010101101111011101001010100010101101010101010101101101010010110110110 サブストリングの長さは任意の正の非ゼロの整数です。 5 出力 プログラムは、指定された長さの最初の部分文字列の開始インデックスを出力します1。上記の入力では、出力は次のとおりです。 10 文字列の最初の文字はのインデックスで始まり0ます。 得点 最短のコードが勝ちます! ルール プログラムは、有効な入力に対して常に正しいインデックスを出力する必要があります。 デフォルトのオプションで正のスコアを持つ回答から入力/出力方法を選択できます。回答で選択する方法を指定してください。

14
一言:コンウェイ再訪
今までにConwayシーケンス(別名「look-and-say」-sequence)に慣れている必要があります。 1 11 21 1211 111221 312211 etc 任意の番号で開始点として開始することもできます。ましょうf(s)シーケンスの次の要素になります。今与えられたsものごとに見つけることができますf(s)。逆は些細なようではありません:それはすべてのためではありませんy前身に見つけることが可能sなことをf(s) = y。たとえばy = 1、前任者を見つけることができません。ただし、長さが偶数の場合yは、先行の各部分を記述する数字のペアに分割できます。 513211 divides in 51,32,11 so: 51 comes from 11111 32 comes from 222 11 comes from 1 put together: 111112221 したがって、この方法で、偶数の長さごとに一意の先行を定義できますy。 注:sこの方法で定義された「先行」は、一般に満たされないf(s) = y。 ゴール 入力として数字の文字列を受け入れる関数/プログラムスニペットを記述します 入力文字列の長さが奇数の場合、Conwayシーケンスの次の要素を計算します 入力文字列の長さが偶数の場合、上記で定義された入力文字列の先行を計算します。 バイト単位の最短コードが優先されます。 発言シーケンスに基づく最近の質問: 見て、言うシーケンス ポイントフリーのルックアンドセイシーケンス 発言シーケンスのn番目の項の長さをすばやく見つける
16 code-golf 

2
定規とコンパスでnゴンを作成する
タスクは、コンパスとマークのない定規のみを使用して、n辺の正多角形を描画することです。 入力(n)は、3、4、5、6、8、10、12、15、16、17の10個の数字のいずれかです。 方法:定規とコンパスしか持っていないため、点、線、円のみを描くことができます。 線のみ描画できます: 2つの既存のポイントを介して。 円は描くことができます: 1つのポイントを中心に、その周囲を2番目のポイントを通過します。 ポイントは描画のみ可能です: 2本の線の交点で、 直線と円の交点で、 2つの円の交差点で、 最初に、開始するために2点を引くことができます。 このプロセス(およびこのプロセスのみ)を通じて、要求されたnゴンのn本の線を、その段階に到達するために必要な作業とともに描画する必要があります。 編集:交差点の位置を計算する必要がありますが、線と円は言語が提供する任意の手段で描画できます。 出力は、n辺の正多角形のイメージであり、動作を示しています。 画像のサイズ、フォーマット、線の太さ、またはここで言及されていない他のものには、グラフィック上の制限はありません。ただし、異なる線、円、およびそれらの交差点を視覚的に区別できる必要があります。さらに: n-gonの側面を構成するn本の線は、「作業」(つまり、ポイント、円、または他の線)とは異なる色で、背景とは異なる色でなければなりません。 作業を行うと、描画領域の境界線を残すことができます。ただし、ポイントはすべて画像の可視境界内になければなりません。 円は、完全な円でも円弧でもかまいません(必要な交差点が表示されている限り)。 線は無限(つまり、描画領域を離れる)であるか、通過する2点で切れています。編集:線は任意の長さで描画できます。ポイントは、描画された線が視覚的に交差する場所にのみ作成できます。 ポイントは、マークしないことも含め、必要に応じて描画できます。 得点は2つあり、提出は、サポートする入力ごとに1ポイントを取得します(最大10ポイント)。引き分けの場合、最短のバイトカウントが優先されます。 承認は、最も少ないステップでn-gonを作成できるか、指定された範囲外でn-gonを作成できる提出物に与えられますが、スコアに役立ちません。 ウィキペディアの背景情報

1
MUパズルソルバーを構築する
MUのパズルは、あなたが回すことができるかどうかを知るしたパズルであるMIにMU与えられ、次の操作: 文字列がで終わる場合、末尾にIa Uを追加できます。(例MI -> MIU) 文字列がで始まる場合、文字列のM後Mにパートのコピーを追加できます。 (例MII -> MIIII) 文字列に3つの連続した文字列が含まれている場合、Iそれらをに変更できますU。 (例MIII -> MU) 文字列に2つの連続したが含まれている場合、Uそれらを削除できます。(例MUUU -> MU)。 あなたの仕事は、これが任意の開始文字列と終了文字列に対して実行可能かどうかを判断するプログラムを構築することです。 プログラムは、入力として2つの文字列を受け取ります。各文字列は次で構成されます。 一つM。 最大29 IのおよびUの文字列。 プログラムはtrue、2番目の文字列が最初の文字列から到達可能な場合(またはプログラミング言語の表現/ YPLRT)、falseそうでない場合(またはYPLRT)を返します。 入力と出力の例: MI MII true MI MU false MIIIIU MI true これを行うための任意の言語の最短コードが勝ちです。

10
平方根を元に戻す
あなたの仕事は、小数を整数の平方根の合計に戻すことです。結果には、少なくとも6桁の有効桁数の精度が必要です。 入力: 平方根の数を示す数値と、近似する数値を示す小数。 入力例: 2 3.414213562373095 出力:スペースで区切られた整数。平方根で加算された場合、少なくとも6桁の有効な10進数まで正確な元の10進数になります。 ソリューションではゼロを使用できません。 複数のソリューションがある場合、1つだけを印刷する必要があります。 出力例(順不同): 4 2 これが機能するのは Math.sqrt(4) + Math.sqrt(2) == 3.414213562373095ます。 これはコードゴルフです。最短コード(オプションのボーナス付き)が勝ちます! 常に解決策がありますが、整数の解決策がないときにプログラムが「いいえ」を出力する場合は-10です。さらに、プログラムが1つではなくすべてのソリューション(改行またはセミコロンなどで区切られた)を印刷する場合は-10。 テストケース: 3 7.923668178593959 --> 6 7 8 2 2.8284271247461903 --> 2 2 5 5.0 --> 1 1 1 1 1 5 13.0 --> 4 4 9 9 9 --> 81 …


1
StackExchange Mustafaは、同じ質問を3回受けるのに耐えられません
オースティン:「誰があなたを送ったの?」 ムスタファ:「あなたは私を殺さなければならない!」 オースティン:「誰があなたを送ったの?」 ムスタファ:「お尻にキスして、パワーズ!」 オースティン:「誰があなたを送ったの?」 ムスタファ:「悪魔博士」 (...) ムスタファ:「同じ質問を3回聞かれるのは我慢できません。ただイライラさせられます。」 オースティンパワーズとムスタファの精神で、短い会話をシミュレートします。ただし、会話全体のデータソースはStackOverflowの質問になります(URLからの入力として提供されます)。 ルール 「オースティン」の代わりに質問者のユーザー名が使用されます。彼らが3回尋ねる質問は、質問のタイトルの最後の文から来ています(まだない場合は疑問符で終わることを余儀なくされています)。 StackExchangeが「ムスタファ」の役目を果たします。最終的に与えられる回答は、疑問符で終わらない回答の最初の文に由来し、回答したユーザーの名前に起因します。 質問がゲームに適格であるためには、(a)答えがなければならず、(b)元の質問に一連のコメントがなければなりません: 質問者以外からのコメント (スキップされたコメントの数) 質問者からのコメント 質問者以外からのコメント (スキップ可能なコメントの数) 質問者からのコメント 上位の回答の日付より前にこのシーケンスが満たされない場合、プログラムは単に出力する必要があります"Oh, behave!" StackExchange Mustafaの怒っているレトルトは、疑問符で終わらない質問者以外の誰かからのコメントの最初の文に由来し、感嘆符で終わることを保証します。コメントに疑問符で終わらない文が存在しない場合、レトルトの候補としてスキップされます。コメントレトルトは、作成者のユーザー名に起因します。 明確化 コメントから先頭の「@XXX」応答データを取り除きます。 StackOverflowはコメントが多数ある場合にコメントを要約するため、完全なリストを取得するには、おそらく2番目のリクエストを使用する必要があります。そのリクエストは/programming//posts/NNN/comments?_=MMM、Nに投稿ID、Mに質問IDを持つフォームです。たとえば、https://stackoverflow.com/posts/11227809/comments?_ = 211160を参照してください。 URLは、テキストのみをアンカーするために削除する必要があります。 「文」は、ピリオド、疑問符、または感嘆符で終わるコードブロックの外側にあるものとして定義します。テキストの連続にこの形式の終了句読点がない場合、テキストの終わりは文の終わりです。ピリオドで書かれているかのように。 修飾される可能性が高い面白いテストケースを探している場合は、ほとんどのコメントのある投稿など、StackExchange Data Explorerを使用してみてください。 ...さらに来て、賭けます... サンプル サンプル1 入力: /programming/2283937/how-should-i-ethically-approach-user-password-storage-for-later-plaintext-retrie/ 出力: shanee:「後でプレーンテキストを取得するために、ユーザーのパスワードストレージに倫理的にアプローチする方法は?」 stefanw:「彼はそれが良くないことを知っていると思います!」 shanee:「後でプレーンテキストを取得するために、ユーザーのパスワードストレージに倫理的にアプローチする方法は?」 ルーク:「おそらく、安全な方法でバッファオーバーフローの脆弱性を実装する方法を尋ねるべきです!」 shanee:「後でプレーンテキストを取得するために、ユーザーのパスワードストレージに倫理的にアプローチする方法は?」 Michael Burr:「パスワードがプレーンテキストである必要がある理由を尋ねます。ユーザーがパスワードを取得できるようにする場合、厳密に言えば、設定したパスワードを取得する必要はまったくありません(パスワードが何であるか覚えていませんとにかく、あなたは彼らが使用できるパスワードを彼らに与えることができる必要があります。」 サンプル2 入力: http://scifi.stackexchange.com/questions/2611/why-dont-muggle-born-wizards-use-muggle-technology-to-fight-death-eaters 出力: …

9
Hofstadterの図と図のシーケンスの生成
でゲーデル、エッシャー、バッハ、ダグラス・ホフスタッターは、一般に、図桁のシーケンスと呼ばれる整数配列を導入します。 2, 4, 5, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, ... チャレンジの一部としてシーケンスの定義を自分で作成することを楽しむこともできますが、それを理解できない場合はOEISでシーケンスA030124として、ウィキペディアで少し明確な定義を見つけることができます。 nSTDIN、ARGV、または関数引数を介して指定されたプログラムまたは関数を作成し、n適切なリスト形式でシーケンスの最初の番号のリストをSTDOUTに出力します。 これはコードゴルフで、バイト単位で最短のソリューションが勝ちます。

8
四面体の表面積
チャレンジ この課題は非常に簡単です。4つの3次元ポイントが与えられたら、それらが形成する四面体の表面積を計算します。これはcode-golfなので、最短のコードが優先されます。標準的な抜け穴が適用されますが、4つのポイントが与えられた場合にこのタスクを実行する組み込み関数は禁止されるという追加の規定があります。 4つのポイントすべてが明確であり、STDINを介して1行に1ポイント与えられると仮定できます。各ポイントは、3つの16ビット符号なし整数で構成されます。3つのスペースで区切られた整数など、作業を簡単にする場合は、各ポイントの正確な形式を変更できます。ただし、各ポイントを別々の行に置くことは必須です。出力は、STDOUTを介して、少なくとも小数点以下2桁にする必要があります。 知らない人にとっては、四面体は4つの三角形の面で構成される3次元の立体です。 例 # input (format is up to you, see clarification above) [23822, 47484, 57901] [3305, 23847, 42159] [19804, 11366, 14013] [52278, 28626, 52757] # output 2932496435.95 私の数学が間違っていることに気づいたら、メモを残してください。
16 code-golf  math  3d 

8
山脈の範囲を描く
フィボナッチドミノタイルに触発され、この問題は、別の有名な組み合わせシーケンスを表すASCIIアートの生成に関するものです。 N段山図は正確に使用して、山脈の図であるN「/」とN「\」文字は、その最初の「高度」の下ディップ決して連続曲線をスケッチするように文字、。例えば、 /\/\ /\/ \ そして /\ /\/ \/\ どちらも4段階の山の図ですが、 /\ /\/\ \/ ではありません。 入力 プログラムは、stdinからの整数nを受け入れるか、関数のパラメーターとして受け入れる必要があります。 出力 すべてのnステップ山図を標準出力に出力します。図の順序は任意ですが、何らかの種類の空白で区切る必要があります。異なる図を水平、垂直などに出力するかどうかを決定できます。 ドミノタイルの問題と同様に、任意の空白を使用できます。これには、印刷出力の前後の余分な改行が含まれます。 例 n = 3の有効な出力のサンプル: 有効な出力A: /\ /\ /\ / \ /\/\ /\/\/\ / \/\ /\/ \ / \ / \ 有効な出力B: /\ /\/ \ /\/\ / \ /\/\/\ /\ / \ …

25
一瞬よりも短い!
チャレンジ この質問のタスクは、整数の入力配列を、その配列内のすべての整数の2回目の出現で分割することです。 十分に明確ではない?ここに役立つ例があります 入力配列: [2 1 1 2 3 2 2 4 5 6 7 3 7 0 5] 出力: [[2 1] [] [3 2 2 4 5 6 7] [] [0] []] 説明: これは、2番目の要素だけが太字で強調表示されている配列です。 [2 1 1 2 3 2 2 4 5 6 7 3 7 0 5 …

13
集計を表示します(さまざまなベースで)
タリーは、ベース5で機能するシンプルなカウントシステムです。世界中でさまざまな集計システムが使用されていますが、ほとんどの英語圏の国で使用されているものは、おそらく最もシンプルです。 5番目のマークごとに、前の4つのコレクションに水平線が引かれます。これにより、タリーマークが5つのグループにクラスター化されます(また、カウントが簡単になります)。 指定した値までの集計マークを表示するプログラムを作成します。しかし、ベース5だけで集計するのは退屈です!したがって、プログラムは異なるベースで集計を表示することもできなければなりません。 入力 入力は、コンマ(またはまたは)で区切られた1つまたは2つの負でない整数値です。最初の数値は、集計によって表示される値です。2番目の値は集計のベースです。2番目の値が指定されていない場合、基数5を使用します。98,4 出力 出力は、ASCIIアートタリーマークとして表される入力値になります。以下に、プログラムをテストできるいくつかの例を示します-出力はそれらと正確に一致するはずです! 入力:12または12,5 | | | | | | | | | | -+-+-+-+- -+-+-+-+- | | | | | | | | | | | | 入力: 7,3 | | | | | -+-+- -+-+- | | | | | | 入力: 4,2 | …

3
ドットとボックスの最速プレーヤー
課題は、古典的な鉛筆と紙のゲームDots and Boxesのソルバーを書くことです。あなたのコードでは、2つの整数を取る必要がありますmし、nボードのサイズを指定する入力として。 空のドットグリッドから始めて、プレーヤーは交わり、隣接していない2つのドット間に単一の水平線または垂直線を追加します。1×1ボックスの4番目のサイドを完了したプレーヤーは1ポイントを獲得し、別のターンを取ります。(ポイントは通常、ボックスにプレーヤーの識別マーク(イニシャルなど)を置くことで記録されます)。これ以上行を配置できない場合、ゲームは終了します。ゲームの勝者は、最もポイントの多いプレーヤーです。 n = mまたはが少なくとも2であるn = m - 1と仮定できmます。 課題はsolve、1分以内で可能な最大のドットとボックスゲームです。ゲームのサイズは単純n*mです。コードの出力はである必要がありますwin。drawまたは、lose両方のプレーヤーが最適にプレイすると仮定した場合の最初のプレーヤーの結果になります。 コードは、簡単にインストールできる無料のツールを使用して、ubuntu上でコンパイル/実行できる必要があります。時間とともに1分でコンピューターで解くことができる最大の領域としてスコアを報告してください。次に、コンピューターでコードをテストし、ランク順に並べられたエントリのテーブルを作成します。 タイブレークの場合、勝者は1分以内に解決できる最大サイズのボードで最速のコードになります。 出力されたコードが勝ち負けだけでなく、実際のスコアも出力した方が良いでしょう。これにより、正当性の健全性チェックが行われます。

2
逆の正規表現-正規表現を分解する
問題 いくつかのコードで使用する必要がある正規表現がたくさんありますが、正規表現をサポートしていないプログラミング言語を使用しています!幸いなことに、テスト文字列は最大長であり、印刷可能なASCIIのみで構成されることがわかっています。 チャレンジ 入力する必要があり、正規表現と数n、及び出力の印刷可能なASCII文字(ASCIIコード32包括的な126、から構成されるすべての文字列に対して~未満又は等しい長さの、ないタブや改行)n正規表現ものと一致します。コードで組み込みの正規表現または正規表現一致関数を使用することは一切できません。正規表現は次のものに制限されます。 リテラル文字(およびエスケープ、文字を強制的にリテラルにするため\.、リテラル.、\nはリテラルn(ちょうどに相当n)、および\wに相当しwます。エスケープシーケンスをサポートする必要はありません。) . -ワイルドカード(任意の文字) 文字クラスは、[abc]「aまたはbまたはc」を[d-f]意味し、dからfまでのすべてを意味します(so、dまたはeまたはf)。文字クラスで特別な意味を持つ唯一の文字は[、および](常にエスケープされるため、それらを心配しないでください)、\(エスケープ文字、もちろん)、^文字クラスの先頭(否定です) )、および-(範囲です)。 |-OR演算子、交互。foo|bar手段のいずれかfooまたはbar、そして(ab|cd)e試合のいずれかabeまたはcde。 * -貪欲に0回以上繰り返された前のトークンに一致します(可能な限り何度も繰り返します) + -貪欲な1回以上の繰り返し ? -0回または1回 のトークンをグループ化するために|、括弧でグループ化します*。+、または? 入力正規表現は常に有効になります(つまり、あなたは次のように入力を処理する必要はありません?abcか、(fooまたは無効な入力)。任意の順序で文字列を出力できますが、各文字列は一度だけ表示する必要があります(重複を出力しないでください)。 テストケース 入力:.*、1 出力:(空の文字列)、 、、 、...、 、!"}~ 入力:w\w+、3 出力:ww、www 入力:[abx-z][^ -}][\\]、3 出力:a~\、b~\、x~\、y~\、z~\ 入力:ab*a|c[de]*、3 出力:c、cd、ce、aa、cde、ced、cdd、cee、aba 入力:(foo)+(bar)?!?、6 出力:foo、foo!、foofoo、foobar 入力:(a+|b*c)d、4 出力:ad、cd、aad、bcd、aaad、bbcd 入力:p+cg、4 出力:pcg、ppcg 入力:a{3}、4 出力:a{3} 勝者 これはcode-golfなので、バイト単位の最短コードが勝ちます!

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