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

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

19
2つの数値の最大公約数の素因数分解を出力します
タイトルがすべてを語っています。2つの入力32ビット正整数m, n >= 2、gcd(m,n)素因数分解形式で出力。 入力 コマンドライン引数または1行のstdinで問題ありません。ゴルフに適しています。 出力 指数で区切られた単一のスペース(追加のスペースなし)。入力が比較的素数の場合は何も出力しません。 例: $ ./factorize 96 162 2^1 3^1 $ ./factorize 14 15 $ ./factorize 196 294 2^1 7^2 ルール 分解またはGCDに外部リソース、数学ライブラリ、組み込み関数を使用することはできません。例:Java、いいえjava.lang.Math。ruby、no prime_division、perl、no factorなど
17 code-golf  math 

4
怠zyな括弧を終了する
キーボードの括弧はすべて使い古されているため、できるだけ使用しないでください。あなたの課題は、各行の前後に括弧を追加して、括弧を含む行のバランスをとることです。 これは、TI-Basicの自動括弧と文字列の閉鎖(つまりOutput(1, 1, "Hello, World!)に似ています。また、プログラムから貴重なバイトを節約します! 入力例: This line has no parentheses alert(Math.max(1, 2 1+1)*2).toString() function() { alert('Hello, World!'); })( 出力例: This line has no parentheses alert(Math.max(1, 2)) ((1+1)*2).toString() (function() { alert('Hello, World!'); })() 仕様: 入力の各行に対して、 行の括弧のバランスをとるために、必要に応じて行の先頭に開いている括弧を追加し、行の終わりに閉じる括弧を追加します 「バランス」の定義は次のとおりです。 同じ量(と)ラインで 文字列の先頭から始まるすべての部分文字列について、この部分文字列には開き括弧よりも多くの閉じ括弧を含めることはできません たとえば、開き括弧より閉じ括弧が多い(foo))(barため、バランスが取れ(foo))ていません 必要に応じて、コードを短くする場合は、余分な不要な括弧を追加できます 文字列リテラルなどを心配する必要はありません。すべての括弧のバランスを取る必要があると仮定してください 括弧をバランスさせて各行を出力します これはcode-golfなので、バイト単位の最短コードが勝ちます!

7
男がどこへ行くかを予測する
男(0, 0)は、町の北西の角に高さhと幅を持って住んでいwます。毎日彼は自宅から国境(?, w)か国境まで歩いてい(h, ?)ます。次の例では、男性は(3, 3)今日に行きます。 (0, 0) +--+ + + . (0, 4) | + +--+--+ . | + + + + . | (3, 0) . . . . . (3, 4) 男性は各ポイントで少し記録します(+上記の例)。彼がポイントに達するたびに、彼はビットがあれば東に、1そうでなければ南に行きます。彼が去った後、ビットは反転されます。例えば: Day 1: 1--0 1 1 Day 2: 0 1 1 1 Day 3: 1--1--1--1-- Day 4: …

7
コミュニティが人だったら
まあ、コミュニティは単なるボットです。しかし、もしそれが人だったらどうだろう? あなたの仕事は、コミュニティが行った編集に対して評判が与えられていた場合、コミュニティの評判がどうだったのかを見つけることです(単純に2 * edits)。 これはどのサイトでも機能するはずですが、この質問ではPP&CGを検討します。 data.stackexchangeでも機能する任意の言語を使用します。 それはコードゴルフであるため、最小のコードが私が得る+15ほどの評判に勝ちます(賞金によって、私は自分のために101を残します:P)。 編集:評判を高めるあらゆる種類の編集を検討してください。
17 code-golf 

5
Bealの$ 1,000,000を取得しましょう
あなたがそれを証明/反証すると、Beal's Conjectureの賞金は100万ドルになります。 それは場合と述べA、B、C、X、Y、及びZは、X、Y、Z> 2、次にA、Bとの正の整数であり、そしてCここで、共通の素因数を有します。 これに反論する反例を検索するプログラムを作成することが課題です! ルール ビールの予想の反例を検索するプログラムを書く 徹底的な検索(つまり、この形式に適合する数値のすべての可能な組み合わせ)を実行するか、いくつかの最適化を使用できます(たとえば、AとBは対称です)。 任意精度の整数を使用する必要があります。 ノート これは人気コンテストです。クリエイティブに! 速度は必要ありませんが、より面白くなります。最適化! また、最短のコードを見ることにも興味があります。あなたは私から+1を受け取ります! 私がアクセスできるスーパーコンピューターで優勝プログラムを実行します! この推測は真実であると考えられていますが、それは私たちが試すことができないという意味ではありません! GoogleのPeter Norvigもこの問題を試みました。彼のページをガイダンスとして使用できます。彼には、例として使用できる短いPythonプログラムがあります。 他の人(たまたまGoogleで働いている人)はNorvigのアプローチを大幅に改善しました。彼のページ(ソースコード付き)はここにあります。 2年前のこれに関連する私のSO質問も役立つかもしれません:Fin all A ^ x in a given range。

1
最小バイトを使用して2048の確定的バージョンを解きます
ゲーム2048の決定論的なバリアントへの移動の勝利シーケンスを生成するプログラムを記述します。シーケンスは、0〜3の数字のストリングの形式で、0:上、1:右、2:下、3である必要があります。左。たとえば、文字列「1132」は、右下左下を意味します。受賞プログラムは、2048に達する最短のソースコードです! 決定論的2048のルール:ゲームは、左上隅に最初に1タイルを含む4x4グリッドでプレイされます。各移動は、コマンド「左」、「右」、「上」または「下」で構成されます。左のコマンドは、グリッド上のすべてのタイルを左にスライドし、左から始まるタイルのように結合して合計します。同様に、コマンドrightは、タイルを右にスライドし、右から開始して結合します。 各タイルは、移動ごとに1つの組み合わせにのみ参加できます。 移動後、左から1番目の列に使用可能なスペースがある新しい2タイルが作成され、その列の上部から最初に使用可能なスペースが作成されます。 たとえば、「right right left down」というシーケンスは状態につながります 2___ ____ ____ ____ 2__2 ____ ____ ____ 2__4 ____ ____ ____ 24__ 2___ ____ ____ 2___ ____ ____ 44__ 行_ 2 2 2に適用されるコマンド権は_ _ 2 4になります行2 2 2 2に適用されるコマンド権は_ _ 4 4になります http://jmfork.github.io/2048/に触発されたこの質問

4
ピタゴラスの木が好き
...だからこれは私を木にする挑戦です。 単一の整数引数Nを取り、Nレベルのピタゴラスツリーを描画するtreeと呼ばれるプログラムまたは関数を作成します。レベル0はトランクのみです。 ツリーの各ジャンクションは、周囲のランダムなポイントに三角形の頂点を配置する必要があります(このポイントは、少なくとも5つの等間隔のポイント、または半円全体に均等に分散する必要があります)。 必要に応じて、時刻に応じてツリーを3Dにしたり、カラフルにしたり、点灯させたりできます。ただし、これはコードゴルフなので、最小のファイルが優先されます。 編集:コンテストを終了し、1週間経過したら最小の回答を受け入れます

3
人生のゲームを3Dで実装する
課題は、人生のゲームの3Dでの最短の実装を見つけることです(例)。これらは規則です: 隣接するセルが1つ以下のセル(この場合はキューブ)は、まるで孤独であるかのように死にます。 空のセルを正確に5つのセルが囲む場合、それらは繁殖してそれを埋めます。 セルに8個以上の近隣がある場合、過密状態で死にます。 少なくとも10x10x10にします。レイヤーは次のように個別に出力されます。 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X 0 0 X 0 0 0 0 0 0 0 X X X …

17
部分文字列から最小の素数を見つける
1946年、エルドスとコープランドは、特定の数が通常の数であることを証明しました。 ユーザーは一連の数字を入力し、その文字列を10進数で含む最小の素数を見つけます。 例: input -> output "10" -> 101 "03" -> 103 "222" -> 2221 "98765" -> 987659 バイト単位の最短コードが優先されます。一部の言語(mathematica、sage、pari-gp ...)には、素数に関連する組み込み関数が付属していることを知っています。プログラムがそのような関数に依存していない場合は-50バイト。あなたの言語がすでに大きな利点を持っているなら、これをだまそうとしないでください、ボーナスを請求しないでください。 編集 以下のいくつかのコメントによると、「03」を含む最小の素数は3です。これは本当に違いがありますか?私が考えることができる唯一のことは、おそらく文字列よりも数字の方が扱いやすいということです。 「03」などの場合、優先出力は103になります。ただし、プログラムの基本的な部分とは考えていません。したがって、バイトカウントを低くする場合は、先行ゼロを無視してもかまいません。
17 code-golf  primes 

1
邪悪なコードを非表示-ディレクトリツリーの任意の場所に特定の文字列を含むファイルを印刷する[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Code Golf Stack Exchangeのトピックになるようにします。 閉じた3年前。 このパズルのポイントは、悪意のあるコードがプログラム内でどのように隠され、発見されるかを学ぶことです。 人が質問をしています: Plzでは、現在のディレクトリまたはそのサブディレクトリにファイルを検索する方法があるコードを提供しています。 (これは、1つのサイトに投稿した実際の質問の変形です。) 具体的には、OPは文字列とディレクトリを受け入れるプログラムを作成することを望んでいます。ディレクトリ内のすべてのファイルと、そのすべてのサブディレクトリを再帰的に走査します。各ファイルについて、ファイルに文字列が含まれているかどうかを確認し、含まれている場合はファイルの名前を出力します。(プログラムは、必要に応じて、主な目的に関連する限り、追加の機能を持つことができます。)走査順序に要件はありません。 ただし、このパズルの主なタスクは、ユーザー/同僚/上司などの目でプログラムを要求する人を馬鹿にする追加コードをプログラムに隠すことです。たとえば、次のようなある時点で屈辱的なテキストを印刷します。プログラムの作成者はプログラミングの方法がわからないため、卒業証書を返して解雇される必要があります。クリエイティブに。 ルール: ソリューションは有害であってはなりません(もちろん、OPをだますことを除いて)。エンドユーザーに不可逆的な損害を与えてはなりません(のようなものはありませんrm -rf)!このようなソリューションは失格となります。 OPが簡単に見つけられないように、トローリングアイテムは非表示にする必要があります。 OPをトローリングしていることは明らかではありません。コードは本物に見えるはずです。 解決策は、必要がありますが付属して適切な誰もがあなたのソリューションから何かを学ぶことができるように、それはOPのトロール方法の説明。説明は、クリックするまで非表示のテキスト(ネタバレ)で非表示にする必要があります。判断するときは、説明を見ずにトローリングを発見し、発見が難しいものに投票してください。 また、コードを数回実行しようとする場合は、OPからトローリングを隠そうとします。おそらく、特定の日付の後、またはずさんなプログラマーがテストしない条件の下でのみトローリングを開始します。創造的であり、トリックを説明することを忘れないでください。 grepまたはなどの既存のツールを使用してスクリプトを作成しないでくださいfind。プログラムを最初から作成します。ライブラリを避け、低レベルの呼び出しを好む-これはコードをより複雑にし、そこにある邪悪なものを隠す機会を与えます。 これは人気コンテストです。上記の点に従って判断してください。

30
Pi計算コードゴルフ[終了]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 2年前に閉店しました。 チャレンジ 可能な限り短い長さでpiを計算する必要があります。どの言語でも参加できます。また、円周率の計算には任意の式を使用できます。少なくとも小数点以下5桁までのpiを計算できる必要があります。最短、文字で測定されます。競争は48時間続きます。ベギン。 注:この同様の質問は、PIはシリーズ4 *(1 – 1/3 + 1/5 – 1/7 +…)を使用して計算する必要があることを示しています。この質問にはこの制限はありません。実際、ここでの多くの回答(勝つ可能性が最も高いものを含む)は、他の質問では無効になります。したがって、これは複製ではありません。

19
Brainfuckプログラムを確認する
さらに別のBrainfuck解析問題ですが、今回は...異なります。 あなたはさまざまな興味深い問題を解決するためにBrainfuckプログラムを作っているInfinite Monkeys Incorporatedで働いています(偶然にも、結局のところ、会社はランダムなプログラムを作っています)。ただし、Brainfuckのみを実行する高速チューリングマシンには、構文エラーに関する小さくて高価な問題があるようです。1つを作成すると、コンピューターが爆発します。それはおそらく設計上の欠陥かもしれませんが、それがなぜ起こるのかわからない人はいませんでした。 チューリングマシン(特に高速なマシン)は高価なので(結局、無限のRAMが必要です)、コードを実行する前にプログラムに構文エラーがないことを確認した方が良いでしょう。会社は大量のコードを実行するため、手動検証は機能しません。BrainfuckコードのSTDINを読み取るプログラムを作成し、プログラムに構文エラーがある場合(たとえば、]一致しないため構文エラーである場合)、終了ステータスを0(エラー)以外に設定して終了します[。プログラムが完全に正常であれば、終了ステータスを0に設定して終了します。 プログラムがを含む間違いを正しく認識していることを確認してください[]。別のコンピューターを爆発させたくないでしょうか?ああ、それができる限り短いことを確認してください-あなたのボスは短いプログラムの代金を払っています(彼は彼らが速いか何かを考えているからです)。ああ、Brainfuckでコーディングする必要はありません(実際、Brainfuckは終了コードをサポートしていないため、できません)-コードは通常のコンピューターで実行されます。 したがって、ご覧のとおり、あなたの仕事はBrainfuckプログラムが「有効」である(ペアの[]シンボルがある)かどうかを確認することです。Brainfuckプログラムには以外の文字を使用できる[]ため、他のコマンドがあるという理由だけでプログラムを拒否しないでください。最小のコードが勝ちますが、おそらくあなたはとにかくupvotesにもっと関心があるでしょう。

10
水流のマップを分割する
これは、Parantir Technologiesがインタビューで尋ねたインターネット上の課題です。 ある農民グループには標高データがあり、降雨が農地をどのように流れるかを理解できるようにします。土地を2次元の高度の配列として表し、水が下り坂を流れるという考えに基づいて、次のモデルを使用します。 セルの隣接する4つのセルすべての高度が高い場合、このセルをシンクと呼びます。水は流しにたまります。それ以外の場合、水は最低高度の隣接セルに流れます。セルがシンクではない場合、一意の最下位ノードがあり、この近隣ノードはセルよりも低いと想定できます。 同じ流しに直接または間接的に流出する細胞は、同じ流域の一部であると言われています。 あなたの課題は、マップを盆地に分割することです。特に、標高のマップを指定すると、コードはマップを盆地に分割し、盆地のサイズを降順に出力する必要があります。 標高マップが正方形であると仮定します。入力は、マップの高さ(および幅)である1つの整数Sを持つ行で始まります。次のS行にはそれぞれマップの行が含まれ、それぞれにS整数(行のSセルの標高)が含まれます。下の例のような小さな土地区画を持つ農家もあれば、大きな区画を持つ農家もいます。ただし、農家がS = 5000を超える土地の区画を所有することはありません。 コードは、流域サイズのスペース区切りリストを降順で出力する必要があります。(末尾のスペースは無視されます。) いくつかの例を以下に示します。 入力: 3 1 5 2 2 4 7 3 6 9 出力: 7 2 AおよびBのラベルが付いた盆地は次のとおりです。 A A B A A B A A A 入力: 1 10 出力: 1 この場合、盆地は1つだけです。 入力: 5 1 0 2 5 8 2 3 …

3
Unicode UTFコンバーター
目標は、UTF FAQに記載されている公式のUnicodeエンコーディング間で完全に準拠したコンバーターを作成することです。これがユニコードに集中していることを考えると、関連するエンコーディング(おそらく、APLでプログラムしない限りUTF-8になる)の可能な限り最高のバイトカウントで回答を受け入れます。長い投稿をおa びしますが、その多くは公式仕様(pdf、セクション3.9 D90-D92)、またはWikipediaでもアクセスできるエンコードについて説明しています。 仕様書 選択した言語がいつでも要件を完全に満たせない場合は、指定されたルールの精神を維持するものに置き換えてください。例えば。すべての言語に組み込みの配列、関数などがあるわけではありません。 文字列ライブラリ/関数の使用、またはライブラリ/関数のエンコードはありません。このコードの目的は、ビット/バイト操作を使用してコンバーターを実装することです。ただし、文字列自体を文字またはバイト配列として使用することは許可されています。ああ、また、変換を実行するOS呼び出しもありません。 コンバーターは、エンコードされた入力文字列を表すバイト配列、および数値として表される「入力」および「出力」エンコーディングの3つのパラメーターを受け取る関数です。UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, and UTF32LE0から6までの番号をこの順序で任意に割り当てます。数があるかどうかをチェックする必要はありません< 0か> 6、私たちはこれらのパラメータが正しいと仮定しますが。コンバーターは、目的の出力エンコーディングで有効なバイト配列を返します。 ヌル文字(U+0000)をストリングターミネーターとして使用します。この後は何でも構いません。入力配列のどこかにヌル文字があると想定しますので、境界チェックを行う必要はありません。 FAQのとおり、入力バイト配列が宣言されたエンコーディングに対して無効な場合、エラーを通知する必要があります。次のいずれかの方法でこれを行います:プログラムをクラッシュさせる、例外をスローする、nullを返す、または最初の4バイトがすべて0である配列を返す(U+0000すべてのエンコードで認識できるように)。 エンコーディング 公式の仕様に従う必要がありますが、ウィキペディアはエンコーディングの適切な(そして正しいと思う限り)説明を提供します。完全を期すためにここで要約します。UTF-16およびUTF-32には、エンディアンのバリエーションがあることに注意してください。 UTF-32、UTF-32LE、UTF-32BE 最も単純なエンコード、各コードポイントは、その数値に等しい4バイトでエンコードされます。LE / BEは、エンディアン(リトルエンディアン/ビッグエンディアン)を表します。 UTF-16、UTF-16LE、UTF-16BE からのコードポイントU+0000 - U+FFFFは、その数値に等しい2バイトでエンコードされます。より大きな値は、から予約された値であるサロゲートのペアを使用してエンコードされますU+D800 - U+DFFF。したがって、より大きいポイントをエンコードするにU+FFFFは、次のアルゴリズムを使用できます(Wikipediaから恥知らずにコピーされます)。 0x010000がコードポイントから差し引かれ、0..0x0FFFFFの範囲の20ビット数が残ります。 上位10ビット(0..0x03FFの範囲の数値)が0xD800に追加され、最初のコードユニットまたはリードサロゲートが与えられます。これは0xD800..0xDBFF [...]の範囲になります。 下位10ビット(0..0x03FFの範囲内)が0xDC00に追加され、2番目のコードユニットまたはトレイルサロゲートが与えられます。これは0xDC00..0xDFFF [...]の範囲になります。 UTF-8 からのコードポイントU+0000 - U+007Fは、その数値に等しい1バイトとしてエンコードされます。U+0080 - U+07FF彼らは次のようにエンコードされている110xxxxx 10xxxxxx、U+0800 - U+FFFFである1110xxxx 10xxxxxx 10xxxxxx、高い値です11110xxx 10xxxxxx 10xxxxxx 10xxxxxx。xさんは、コードポイントの数値からのビットです。 …

7
「BizzFuzz」プログラムを作成する
従来のFizzBu​​zzでは、1から100までの数字を印刷するように求められますが、3の倍数をすべて「Fizz」に、5の倍数を「Buzz」に、3と5の倍数(つまり15)を「 FizzBu​​zz」。 しかし、邪悪なインタビュアーとして、私は独自のツイストバージョンのFizzBu​​zzを発明しました。これをBizzFuzzと名付け、コーディングインタビューで提供することにしました。 ゲームのルールは次のとおりです。 番号が以下の条件のいずれかを満たす場合を除き、1から100までの各番号を印刷します。 数値が4で割り切れる場合は、「Fizz」と印刷します。 数値が5で割り切れる場合は、「バズ」を印刷します。 数が4で割り切れる場合は、その数のすぐ後にそれが5で割り切れる、代わりに「フィズ」の「FizzBu​​zz」を印刷し、定期的に次の番号を印刷します。 数が5で割り切れる場合は、その数のすぐ後にそれが4で割り切れる、代わりに「バズ」の「BuzzFizz」を印刷し、定期的に次の番号を印刷します。 数字が4と5で割り切れる数字の直前にある場合は、「Bizz」と印刷します。 数値が4と5の両方で割り切れる数値の直後にある場合は、「ファズ」と印刷します。 数値が4と5の両方で割り切れる場合、「BizzFuzz」を印刷します。 これらのすべてのルールを任意の言語で実装する最短のコードが優先されます。

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