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

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

6
スニペットがどのプログラミング言語であるかを検出する
あなたの課題は、入力としていくつかのソースコードを受け取り、それが記述されているプログラミング言語を出力することです。 たとえば、あなたは入力を持つことができます class A{public static void main(String[]a){System.out.println("Hello, World!");}} そして出力 Java 主な2つの目標は、多様性(検出できるプログラミング言語の数)と精度(これらの言語の検出能力)です。 ポリグロット(複数の言語で有効なプログラム)の場合、何をするかを決定できます。プログラムがより可能性が高いと考える言語を出力するか、エラーを出力するか、可能な選択肢の配列を出力することができます(おそらくエラーよりも多くの賛成票を得るでしょう!)。 別の客観的な勝利基準を指定することは非常に難しいため、これは人気コンテストです。投票者は、検出できる言語の数と正確さについて投票してください。

10
異常な値の抵抗器
前書き 電子回路プロジェクトを構築するとき、回路図では通常とは異なる値(510オームなど)の抵抗器が必要になる場合があります。部品箱を確認すると、510Ωの抵抗器がないことがわかります。ただし、この値の上下には多くの共通値があります。抵抗を並列および直列に組み合わせることにより、510Ωの抵抗をかなりうまく近似できるはずです。 仕事 抵抗値(ストックする抵抗)とターゲット値(概算を目指す)のリストを受け入れる関数またはプログラムを作成する必要があります。プログラムは以下を考慮する必要があります。 個別の抵抗器 直列の2つの抵抗 並列の2つの抵抗 プログラムは、ストックリストから1と2の抵抗器のすべての可能な組み合わせ(同じ抵抗値の2つのコピーを含む)を計算し、それらの直列抵抗と並列抵抗を計算し、ターゲット値にどれだけ近似するかに従って構成をソートする必要があります。 出力形式は、ラインごとに1つの構成で、+直列と|並列を表し、ネット抵抗の前にスペースまたは=記号を付ける必要があります。 フォーミュラ 1つの抵抗の抵抗は R1 直列の2つの抵抗の正味抵抗は R1 + R2 並列の2つの抵抗の正味抵抗は 1 / (1/R1 + 1/R2) 近似抵抗値と目標値の間の距離は、線形距離ではなく、擬似対数距離として計算できます dist = abs(Rapprox / Rtarget - 1)。たとえば、200は100よりも350に近いです。 より良い距離測定は真の対数距離 dist = abs(log(Rapprox/Rtarget))ですが、これは元の質問では指定されていないため、どちらの測定も自由に使用できます。 得点 スコアは、通常のゴルフ規則に従って、コードの文字で測定されます。最低スコアが勝ちます。 例 在庫には次の抵抗があり、オーム[100, 150, 220, 330, 470, 680, 1000, 1500, 2200, 3300, 4700]をターゲットにしたいと考えてい510ます。プログラムは、おおよそ次のように143の構成を出力する必要があります(形式は変更できますが、意味は簡単に判断できます)。 680 | …

5
Brainfuckでのゴルフのヒント
ブレインファックでゴルフをするための一般的なヒントは何ですか?私は、少なくとも一般的にゴルフの問題をコーディングするのに適用できるアイデアを探しています。これは、少なくともある程度、brainfuckに固有のものです(たとえば、「コメントを削除する」は答えではありません)。回答ごとに1つのヒントを投稿してください。

6
平面を分割する円
仕事 平面に円のセットが与えられ、中心が線y = 0になります。円のペアが複数の共通点を持たないことが保証されています。 あなたのタスクは、円が平面を分割する領域の数を決定することです。領域は、円のいずれとも交差しない包含最大連続点のセットです。 円の説明が与えられたときにこの答えを計算するプログラムを作成する必要があります。 以下に例を示します。 左側には、平面に描かれた円があります。ただし、写真の右半分では、円によって生成される領域は明確に色付けされています(領域ごとに1色)。この例には6つの領域があります。 入力 入力の最初の行には、数字N、、続く円の説明の数が含まれています。この行はオプションです。ソリューションが機能しない場合は問題ありません。 次のN行にはそれぞれ2つの整数x iおよびr i > 0が含まれ、中心(x i、0)および半径r iの円を表します。 円のペアが複数の共通点を持たないことが保証されています。さらに、x iとr iが10^9絶対値を超えないことが保証されます(したがって、32ビット整数に快適に適合します)。 入力は次のとおりです。 STDINから読み取る I現在のディレクトリにある名前のファイルから読み取る または、入力は次のようになります。 グローバル変数の文字列(改行を含む)として利用可能 スタック上 出力 これは、生成されるリージョンの数である単一の整数でなければなりません。これは、STDOUTまたはO現在のディレクトリで指定されたファイルに書き込まれる必要があります。 ルール バイト単位の最短コードが勝つ コードにランタイム+スペース複雑度多項式がない場合、+ 200バイトのペナルティ n 最悪の場合の予想ランタイム+スペースの複雑さに対する-100バイトのボーナス O(n log n) 最悪の場合の予想ランタイム+スペースの複雑さに対する-50バイトのボーナス O(n) 確定的なランタイム+スペースの複雑さに対する-100バイトのボーナス O(n) ランタイムの評価中: O(1)操作と入力データのシーケンスに関係なく、ハッシュテーブルに挿入、削除、およびルックアップのランタイムが必要であると想定します。これは、実装がランダム化を使用するかどうかに応じて、真である場合とそうでない場合があります。 プログラミング言語の組み込みソートには確定的なO(n log n)時間がかかると仮定します。ここnで、入力シーケンスのサイズです。 入力数の算術演算にはO(1)時間がかかると仮定します。 実用的な理由から、入力番号は定数でバインドされていると想定しないでください。つまり、基数ソートやカウントソートなどのアルゴリズムは線形時間ではありません。一般的に、非常に大きな一定の要因は避けるべきです。 例 入力: …

4
停止するOracleで3つの未解決の問題を解決する
次の関数が与えられます:h1(f、* args)およびh2(f、* args) どちらも既に定義されているメソッドです(ここで、アスタリスクは可変数の引数を示しています) fは関数、* argsはその関数に渡されるパラメーターのリスト h1はブール値を返します:* argsで呼び出されたときに関数fが停止する場合はtrue、そうでない場合はfalse無限の時間とメモリを処理する方法を知っています)。 f(* args)がh1またはh2を呼び出す場合、h1は例外をスローします h2はh1とまったく同じように動作しますが、fがh1を呼び出す場合、h2は例外をスローしません。 できるだけ少ない文字で、入力を受け取らずに出力するプログラムを作成します。 The Collatz Conjecture is {True/False} Goldbach's Conjecture is {True/False} The Twin Primes Conjecture is {True/False} これらの推測のそれぞれの妥当性に基づいています。 以下は、各推測を説明するウィキペディアのリンクです。 http://en.wikipedia.org/wiki/Collat​​z_conjecture http://en.wikipedia.org/wiki/Goldbach%27s_conjecture http://en.wikipedia.org/wiki/Twin_prime 使用する言語を選択した任意の大きな整数ライブラリは、任意の大きな整数を正常に表すと仮定できます。言い換えれば、表現できる言語/ライブラリは、十分に機能的なマシンで3**(3**10)も表現できると仮定します3**(3**(3**10))。 プログラムを実行することは不可能であるため、コードと一緒にどのように動作するかの説明を提供してください
23 code-golf  math 

6
レゴギア比
巨大なレゴロボットを構築していますが、ギアのセットを使用して特定のギア比を生成する必要があります。一般的なレゴギアサイズ(8、16、24、または40歯)のギアがたくさんあります。ギア比を入力する場所で使用できるプログラムを作成すると、プログラムは、要求された比を得るために使用するギアの組み合わせを教えてくれます。 入力比率は、コロンで区切られた2つの整数を使用して、標準入力(または言語の同等)で指定されます。比率とa:bは、出力軸がa/b入力軸と同じくらい速く回転することを意味します。 標準出力に出力の形態におけるギヤ比のスペースで区切られたリストを含む単一の行、でなければならないx:y場合x、入力軸上のギヤのサイズであり、y出力軸上の歯車の大きさです。指定された比率のギアの最小数を使用する必要があります。それぞれxとyのいずれかでなければなりません8,16,24,40。 例: 1:5 -> 8:40 10:1 -> 40:8 16:8 9:4 -> 24:16 24:16 7:1 -> IMPOSSIBLE 7:7 -> 6:15 -> 16:40 希望のギア比が不可能な場合は、「IMPOSSIBLE」を印刷します。ギアが必要ない場合は、空の文字列を印刷します。 これはコードゴルフで、最短回答が勝ちます。
23 code-golf  math 

5
Goのゲームを獲得する
Goゲームの得点は、それほど簡単ではないタスクです。過去には、発生する可能性のあるすべての奇妙なコーナーケースをカバーするルールを設計する方法について、いくつかの議論がありました。幸いなことに、このタスクでは、生死や関の検出などの複雑な作業を行う必要はありません。このタスクでは、KomiなしでTromp-Taylorルールに従ってゲームを採点するプログラムを実装する必要があります。 スコアリング手順は非常に簡単です。 Pから色Cの点まで(垂直または水平に)隣接する点のパスがある場合、Cの色ではない点PはCに到達すると言われます。 プレイヤーのスコアは、彼女の色の点の数です、プラス彼女の色だけに達する空のポイントの数。 たとえば、次のボードを検討してください。X、Oおよび-黒、白、および無着色の交差点を示します。 - - - X - O - - - - - - X - O - - - - - - X - O - - - - - - X O - - O - X X X O - O O - - …

3
15パズルを解く(タイルスライドパズル)
15パズルは、4x4グリッド上で15個のタイルをスライドさせる有名なパズルです。ランダムな構成から始めて、目標はタイルを正しい順序に並べることです。解決された15パズルの例を次に示します。 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 パズルの各動きは、上/下/左/右の形式です。「下へ」の移動は、空のスポットの上にあるタイルを下にスライドさせることで構成されます。「右」の動きは、タイルを右にスライドさせて空の場所に入れることです。下と右に移動した後のボードの外観は次のとおりです。 01 02 03 04 05 06 07 08 09 10 11 13 14 15 12 このチャレンジの目標は、15パズルを解くために必要な一連の動きを出力できるプログラムを書くことです。勝者は、5つのテストケース(以下)を最小の合計移動で解決するプログラムです。生成されたソリューションは完全なソリューションである必要はなく、競合他社よりも優れている必要があります。個々のテストケースごとに、プログラムは適切なマシンで10秒以上かかることはありません。 あなたのプログラムは解決可能なパズルを解くことができなければなりません、私はこれらの5つのテストケースを採点として使用しています。 プログラムは、未解決の15パズルを2D配列の形式で入力として受け取ります。2D配列は、使用する言語に従ってフォーマットするか、言語に2D配列がない場合は変更できます。最初のサブ配列の最初の要素は左上の数字になり、最初のサブ配列の最後の要素は右上にある数字になります。A 0は空のスペースになります。 出力として、プログラムは移動のリストを実行する必要がある順序で印刷する必要があります。結果の使いやすさを高めるために、各ステップに番号を付ける必要があります。 編集:コメントに基づいて、出力をDown / Up / etcの形式または移動するピースの座標の形式にすることができます。これはコードゴルフではないので、最も重要な部分はパズルを解くことです。 他の一般的な規則には、外部ソースの使用などが含まれないものがあります。 テストケース1 ([5,1,7,3],[9,2,11,4],[13,6,15,8],[0,10,14,12]) 出力例: 1: Down 2: Down …

7
中置式を後置記法に変換する
この非公開の質問のタイトルを見たとき、私はそれが面白いコードゴルフチャレンジのように見えると思いました。そのため、次のように紹介します。 チャレンジ: 算術式を考慮すると、プログラム、発現またはサブルーチン書き込みインフィックス表記法、等1 + 2、に同一の発現出力ポストフィックス表記、すなわち1 2 +。 (注:1月前半に同様の課題が投稿されました。 ただし、この個別の課題を正当化するために2つのタスクの詳細が十分に異なっていると感じます。また、下のすべてを入力した後、他のスレッドにのみ気づいたので、むしろただ捨てるだけではありません。) 入力: 入力は、以下からなる有効中置演算式から成る番号(非負整数は一つ以上の桁のシーケンスとして表される)、バランスのとれた括弧グループ化された部分式を示すために、4つの中置バイナリ演算子 +、-、*および/。これらはどれも、無視する必要のある任意の数のスペース文字で区切ることができます(そして式全体を囲むことができます)。1 正式な文法が好きな人のために、有効な入力を定義する簡単なBNFのような文法を以下に示します。簡潔にするため、文法にはオプションのスペースは含まれていません。スペースは、2つのトークン(数字の中の数字以外)の間にある場合があります。 expression := number | subexpression | expression operator expression subexpression := "(" expression ")" operator := "+" | "-" | "*" | "/" number := digit | digit number digit := "0" | "1" | "2" | …
23 code-golf  math 

30
電話番号の文字
問題: たとえば1-800-program、のような特殊な電話番号を入力できる新しい電話を作成すると、1-800-7764726(前の例のように)使用可能な電話番号に自動的に変換されます。 プログラムは、数字、文字、ダッシュを含む長さがある場合は文字列を受け取り、すべての文字を対応する数字に変換します。 参照用のキーパッドは次のとおりです。 ルール: プログラムは文字列を受け取ります それを処理し、別の文字列を返し/印刷します すべての言語が受け入れられます それがあるので、コード・ゴルフ、最短コードの勝利
23 code-golf  number 

8
ピエトモンドリアン作曲の再現
こんにちは、 あなたの目標は、最小限のソースコードバイトで、Piet Mondrianの「Composition」ペインティング(たとえば、コンポジション#10)を再作成することです。 レクリエーションでは、実際の色を使用するか、Windowsのデフォルト16カラーパレットから適切な色に置き換えることができます。 レクリエーションは、PNG、BMP、またはNetPBMで、ファイルまたはSTDOUTに出力するか、直接画面に出力できます。 レクリエーションは、512x512以上の解像度である必要があります。 あなたのレクリエーションはインターネットにアクセスしてはいけません。プログラムでデータファイルが必要な場合、そのサイズがソースのサイズに追加されます。 スコアは、ソースファイルのサイズ(バイト単位)になります。 どの絵を再現しているのかをエントリーに明記し、オリジナルへのリンクとレクリエーションの写真を提供してください。 がんばろう。

21
繰り返し小数を小数に変換します
この質問は、小数の終端だけに適用する必要はありません-小数の繰り返しは、アルゴリズムを介して分数に変換することもできます。 あなたの仕事は、入力として繰り返される小数をとるプログラムを作成し、その小数展開を生成する対応する分子と分母(最低条件で)を出力することです。1より大きい分数は、などの不適切な分数として表す必要があります9/5。入力が正であると仮定できます。 繰り返される小数はこの形式で与えられます: 5.3.87 次のように、2番目のドットの後のすべてが繰り返されます。 5.3878787878787... プログラムは、分子(分母)を表す2つの整数をスラッシュ(またはプレーンテキストを出力しない場合は言語の同等の形式)で区切って出力します。 889/165 小数点の終了には、2番目のドットの後には何もありません。また、繰り返しのない小数部分のない小数点には、2つのドットの間に何もありません。 テストケース これらのテストケースは、必要なすべてのコーナーケースをカバーしています。 0..3 = 1/3 0.0.3 = 1/30 0.00.3 = 1/300 0.6875. = 11/16 1.8. = 9/5 2.. = 2/1 5..09 = 56/11 0.1.6 = 1/6 2..142857 = 15/7 0.01041.6 = 1/96 0.2.283950617 = 37/162 0.000000.1 = 1/9000000 0..9 = 1/1 …

12
グレースケールイメージのディザリング
独自のアルゴリズムを使用して、グレースケール画像を純粋な白黒にディザリングします。 ガイドライン:独自の新しいアルゴリズムを考え出す必要があります。既存のアルゴリズム(例:Floyd-Steinburg)は使用できませんが、一般的な手法は使用できます。プログラムは、画像を読み取り、同じサイズの画像を生成できる必要があります。これは人気コンテストであるため、最高の(オリジナルに最も近い)および最も創造的な(投票によって決定される)制作者が勝者となります。コードが短い場合はボーナスですが、これは必須ではありません。 任意のグレースケール画像を入力として使用できます。300x300より大きくする必要があります。どのファイル形式でも構いません。 入力例: 出力例: これはかなり良い仕事ですが、まだ目に見える線とパターンがあります。

15
地形文字列
以下に入力例を示します。そのため、問題が何であるかを説明できます。 ((1 2)(3 (4 5) moo)) (i (lik(cherries)e (woohoo))) このテキスト行は、いくつかの山の地形図と考えてください。括弧の各セットは、高度の1単位を示しています。 これを側面から「見る」と、山が垂直に見えるようになります。 4 5 cherries woohoo 1 2 3 moo lik e i これらの地形図のいずれかを指定して、地図を出力しますが、上記の出力のように垂直スケールで出力します。次のアイテムまでの文字数でマップ内のさまざまなアイテムを分離します。たとえば、mooとの間の出力には4つのスペースがありますi。同様に、mooとの間の入力には4文字がありますi。 最小限の文字数でこれを行うコードが勝ちです。

30
10 PRINT CHR $(205.5 + RND(1)); :PHPのGOTO 10(またはそのほか)
この質問は、Code Golf Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 次のBASICステートメントの簡潔さについて同僚と「元気な」会話をしました。 10 PRINT CHR$(205.5+RND(1)); : GOTO 10 これはこの本のタイトルであり、2つの文字をランダムに交互に並べ/て\文字列を印刷するだけで、次のようなパターンになります。 (http://www.flickr.com/photos/rndmcnlly/5058442151/sizes/o/in/photostream/から借りた画像) PHPの傾向があるため、PHPで同じことを書く最もコンパクトな方法は何だろうと考えて、これを思いつきました。 while(1) { echo chr(47 + 45 * rand(0,1)); } chr(47)は/文字であり、chr(92)は\です。そのため、このステートメントecho chr(47 + 45 * rand(0,1));は、2つのアドネウザムをランダムに代替します。 選択した言語で、文字\と/文字の無限のランダムシーケンスを出力する最短のプログラムまたは関数を記述します。各文字は選択される確率が等しくなります。

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