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

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

5
順列のステップ
整数のセットを取り、セットのすべての順列を出力する関数を記述し、各ステップ間でスワップを実行します 入力 整数のセット、たとえば(0、1、2) 出力 (set)(swap)(set)という形式の順列とスワップのリスト... テストケース Input: (3, 1, 5) Output: (3, 1, 5) (3, 1) (1, 3, 5) (3, 5) (1, 5, 3) (1, 3) (3, 5, 1) (3, 5) (5, 3, 1) (3, 1) (5, 1, 3) ルール 必要に応じて、数値セットをフォーマットできます。 スワップは任意の順序で行うことができます 新しいものを得るために順列と交換を繰り返すことができます コードは実際にスワップを実行する必要はありません。出力は、最後の出力と現在の出力の間で行われたスワップを示す必要があります。 コードは、2つ以上の要素を持つセットに対してのみ機能する必要があります 指定されたセットには繰り返し要素がありません(例(0、1、1、2)は無効です) これはコードゴルフなので、最短のコードが勝ちます!

8
最後の2つの先行モデルと互いに素であり、まだ出現していない最小の正の整数。a(1)= 1、a(2)= 2
定義 2つの整数は、以外の正の公約数を共有しない場合、互いに素です1。 a(1) = 1 a(2) = 2 a(n)integerに対して、a(n-1)と互いに素であり、a(n-2)まだ出現していない最小の正の整数n >= 3です。 仕事 正の整数を指定するとn、出力/印刷されますa(n)。 例 a(11) = 6これ6は、最後の2つの先行(つまり、11および13)と互いに素であり、6以前に出現したことがないためです。 ノート シーケンスは昇順ではないことに注意してください。つまり、要素は前のものよりも小さくなる場合があります。 スペック 1インデックスを使用する必要があります。 テストケース n a(n) 1 1 2 2 3 3 4 5 5 4 6 7 7 9 8 8 9 11 10 13 11 6 12 17 13 19 …

7
ダウンワードナンバーレース
あなたの仕事は、究極のナンバーレースの対決で以前の合計に乱数を追加するプログラムを作成することです。 各レーサー(列)は0から始まり、すべてのレーサーが勝つために必要なスコアに達するまで、レースの各ステップで前の合計に1または0を加算します。1または0はランダムに選択する必要があります(ランダムの標準的な定義はここにあります)。出力には、各列が1人のレーサーを表す、次の形式でレースの結果が表示されます。 >> racers:5,score needed:2 0 0 0 0 0 # all racers start at 0 + + + + + # add 1 0 0 0 1 # random 1 or 0 = = = = = # equals 1 0 0 0 1 # sum + + + …
10 code-golf 

16
怠惰な人のためのコードゴルフ
このコードゴルフであなたの目標は、2つの文字列を取ることです、languageそしてcode (あなたがこのために書いたgolfedコードが複数行ある場合、この変数は複数行になります。) 、および1つの整数bytes。これらは、プログラミング言語の変数、バイト数、およびコード自体を表します。 その後、コードゴルファーが行うようにフォーマットします。 出力変数はと呼ばれる複数行の文字列answerです。 次の場所で複数行の文字列を使用できます。 C ++ パイソン Perl JavaScript Stack Overflowを検索すると、それをサポートするプログラミング言語をさらに見つけることができるはずです。 出力マークダウンのテンプレートは次のとおりです。code変数は、コードブロックであり、第二のレベルのヘッダがあります。 ## {language}, {bytes} bytes {code} Markdownパーサーに貼り付けたときの出力は次のようになります。 {language}、{bytes}バイト {code} 変数は、コードゴルフエントリをコーディングした言語、バイト数、および実際のコードとしてすでに入力されていると想定されています。 次にコードとしての出力の別の例を示します。今回は変数が入力されています。 ## JavaScript, 1337 bytes document.getElementById("foo").innerHTML = bar; これがブロッククォートとしてのバージョンです: JavaScript、1337バイト document.getElementById("foo").innerHTML = bar; 次のJavaScriptコードのように、<p>idでHTMLの要素のテキストを設定する方法を使用する場合、バイトをコードから削除resultできます。 document.getElementById("result").innerHTML = answer; これ<p id="result"></p>が機能するように、JSFiddleのHTMLセクションにもを含めてください。 得点 すべてのコードゴルフ質問と同様に、バイト数が最も少ないコードが最適です。

2
これは一意に連結可能ですか?
で接頭コードについては、この課題は、我々は接頭コードが一意に連結可能であることを学びました。 つまり、区切り文字を使用せずに、あいまいさを排除して結合できます。 たとえば、[1,2,45]はプレフィックスコードであるため、セパレータなしで1245245112145として結合できます。あいまいさはありません。 ただし、その逆は常に正しいとは限りません。 たとえば、[3,34]はプレフィックスコードではありません。ただし、同じことを行うことができます:3333434334333。あいまいさはありません。スマートなパーサーが必要になるだけです。 ただし、[1,11]は一意に連結可能ではありません。1111は5つの方法で解釈できるためです。 ゴール あなたの仕事は、文字列のリスト(ASCII)を入力として受け取るプログラム/関数を記述し、それらが一意に連結可能かどうかを判断することです。 細部 重複はfalseとしてカウントされます。 得点 これはコードゴルフです。バイト単位の最短のソリューションが優先されます。 テストケース 正しい: [12,21,112] [12,112,1112] [3,4,35] [2,3,352] 誤り: [1,1] [1,2,112] [1,23,4,12,34] [1,2,35,4,123,58,8]
10 code-golf 

4
Winnable Solitaire Mancalaボード
マンカラは、通常、プレーヤーが操作するビーズで満たされた一連のカップを含むボードゲームのファミリーの名前です。このチャレンジでは、ゲームのソリティアバリアントに特定のルールセットを使用します。 ボードは、1つの端にある「バスケット」と、それに続く1から始まる無数のカップで構成されています。一部のカップには、いくつかのビーズが含まれています。場合n番目のカップを正確に持っているnことでビーズを、あなたはそれからビーズ「種をまく」ことがあります。播種とは、すべてのnビーズをカップから取り出し、各カップに1つずつバスケットに向かって堆積させることを意味します。最後のビーズがバスケットに入ります。ボード上のすべてのビーズがバスケットに入ったときにプレーヤーが勝利します。 明らかに、2番目のカップにビードが1つしかない場合など、勝てないボードがたくさんあります。ビーズが0個のカップはすべて播種できず、2番目のカップには播種するのに十分なビーズがないため、合法的なプレーはありません。これは明らかに面白くないので、あなたの仕事は勝てるボードを作ることです。 仕事 ビーズの数を表す正の整数が出力されると、上記のように勝てるボードを作るために各カップに入れる必要のあるビーズの数を表す非負の整数のリストが出力されます。このリストには、末尾にゼロを含めないでください。 任意の数のビーズに対して、常に1つの勝利可能なボード構成があります。 デモンストレーション これは、4の入力と勝者のボードをプレイする方法のデモです[0, 1, 3]。勝者のボードはです。利用可能な唯一の動きから始めて、3番目のカップからビーズを播種します[1, 2, 0]。今、私たちは実際に選択肢を持っていますが、唯一正しいのは最初のカップを播種して、を取得することです[0, 2, 0]。次に、2番目のカップを降伏させ[1, 0, 0]、最後に最初のカップを再び播種して、すべての空のカップを取得します。 テストケース: 1 => [1] 2 => [0, 2] 3 => [1, 2] 4 => [0, 1, 3] 5 => [1, 1, 3] 6 => [0, 0, 2, 4] 7 => [1, 0, 2, 4] …

25
相対論的速度を計算する
特殊相対、反対方向に移動している別の物体に対して移動する物体の速度は、以下の式によって与えられます。 s=v+u1+vu/c2.s=v+u1+vu/c2.\begin{align}s = \frac{v+u}{1+vu/c^2}.\end{align} s = ( v + u ) / ( 1 + v * u / c ^ 2) この式では、vvvとuuuはオブジェクトの速度の大きさであり、cccは光速です(これは約3.0×108m/s3.0×108m/s3.0 \times 10^8 \,\mathrm m/\mathrm s、この課題に十分近い近似値)。 たとえば、あるオブジェクトがで動いていてv = 50,000 m/s、別のオブジェクトがで動いてu = 60,000 m/sいる場合、他のオブジェクトに対する各オブジェクトの速度はおよそになりますs = 110,000 m/s。これは、ガリレオ相対論(速度が単純に追加される)の下で予想されることです。ただし、v = 50,000,000 m/sおよびのu = 60,000,000 m/s場合、相対速度はおよそとなり、ガリレイ相対性理論によって予測された106,451,613 m/sものとは大幅に異なり110,000,000 m/sます。 チャレンジ 二つの整数所与vとuするように0 <= v,u …

4
アスキーダンクスター
入力の説明 文字列(最良の結果を得るには、すべての文字が印刷可能で、幅が同じである必要があります)。 出力の説明 パターンに従うキャラクターの星: 0 0 0 1 1 1 222 0123210 222 1 1 1 0 0 0 ここで0、1...は文字列の後続の文字です。出力は必ずしも1つの文字列である必要はありません-コンソールにスター文字を1文字ずつ出力することは問題ありません。 例 >> star('overflow') >> o o o v v v e e e r r r f f f l l l ooo overflowolfrevo ooo l l l f f …

7
汚染の最終段階
5x5の受信者の内部にウイルスがいます。汚染がどのように伝播するかを知っているので、あなたの使命は汚染の最終段階を出力することです。 受取人 これは、5x5の2次元配列として表されます。 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 場所1とは、ウイルスがすでに汚染されて0いる場所と、汚染されていない場所を意味します。 ウイルスの伝播方法 汚染された位置はきれいにできません。 クリーンな位置は、隣接する位置(北、東、南、西のセル)の少なくとも2つが汚染されている場合にのみ、次の段階で汚染されます。 汚染の最終段階は、クリーンなセルを汚染できなくなったときに発生します。 サンプル 汚染の段階1として上記の受信者を使用すると、段階2は次のようになります。 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 …

2
Retinaでのゴルフのヒント
Retinaでゴルフするための一般的なヒントはありますか?Retinaに少なくともいくらか特有のコードゴルフ問題全般に適用できるアイデアを探しています(たとえば、「コメントの削除」は回答ではありません)。回答ごとに1つのヒントを投稿してください。 参考までに、オンラインコンパイラはこちらです。 @ Sp3000は、Regex Golfのヒントもあると指摘しました。ここでの回答は、一般的な正規表現のゴルフのヒントではなく、Retina機能に特に焦点を当てる必要があります。
10 code-golf  tips 

1
蟻は立方体の上を歩くことによって言葉を綴ることができますか?
正の整数nと単語のリストの2つのパラメーターを取る関数を記述します。 n x n x n単位の立方体が与えられた場合、各表面単位にランダムな文字(AZ)を割り当てます。(3x3x3の立方体の場合、各面に9つのサーフェスユニットがあります。) 次に、水面に沿って歩く(顔を横切ることができる)アリが、提供された各単語を綴ることができるかどうかを判断します。単語を綴るには、文字が上下または左右に隣接している必要がありますが、必ずしも同じ顔にある必要はありません。[ わかりやすくするために編集:アリはパスを逆にして、文字を複数回使用できます。各表面単位は1文字として数えるので、繰り返される文字で単語を綴る(「見る」など)には、蟻は隣接する3つの単位を訪問する必要があります。] 関数は次の2つを出力する必要があります。 1)トポロジーを推測できるように、各面の各文字。たとえば、2x2x2キューブの場合、許容される出力は次のようになります。 QW ER TY OP UI DF JK XC AS GH LZ VB 2)各単語と、アリが立方体の表面に沿って歩くことによって単語を綴ることが可能かどうかを表すブール値。例えば: 1 ask 0 practical 1 pure 0 full ボーナスチャレンジ(ちょうど楽しみのためのスコアへの要因、しません):代わりのn個の立方体のサイズのみを表し、聞かせてn個も形状の次元を表しています。したがって、nが2の場合、2x2の正方形になります。N 3は、3×3×3キューブをもたらすであろう。及びN 4は4x4x4x4のたTesseractをもたらすであろう。
10 code-golf 

4
凸包の点(2D)
バックグラウンド 凸包点の有限数の頂点として、または内部のいずれかで、点のすべてを含む最小の凸多角形です。詳細については、非常によく定義されているPGMに関するこの質問を参照してください。 入力 N+1N >= 3通過した2次元座標()STDINは、次の形式で(他の通常のゴルフ入力も許可されます)渡されます(小数点以下の桁数は異なる場合がありますが、「妥当」であり、各数値は浮動小数点数として表すことができると想定できます)。 0.00;0.00000 1;0.00 0.000;1.0000 -1.00;1.000000 出力 STDOUTリストの最初のポイント((0.00;0.00000)上記の例)が他のNポイントの凸包にある場合に出力される(または同等の)真の値、それ以外の場合は偽の値。 これはcode-golfなので、バイト単位の最短のソリューションが優先されます。 ボーダーケース:ポイントが凸包の境界にある場合(クラッシュしない)、任意の値を返すことができます。これは、確率がゼロであるため、凸包の側面またはハルの外側の境界の頂点にある場合です。イベント(妥当な確率で)。 禁止:幾何学的問題を解決するためにのみ存在するもの(言語、演算子、データ構造、組み込み、またはパッケージ)(例:MathematicaのConvexHull)。汎用数学ツール(ベクトル、行列、複素数など)が許可されています。 テスト 返されるはずTRUEです:spiralTest1-TRUE、squareTest1-TRUE 返されるはずFALSEです:spiralTest2-FALSE、squareTest2-FALSE

4
コンテキスト内のタイトルキーワード
この課題は、D。Parnas、システムをモジュールに分解する際に使用される基準について説明されている問題に基づいており、J。Morrisの「関数型言語でのリアルプログラミング」で詳しく説明されています。 書籍のタイトルのリストをstdin引数として使用するプログラムまたは関数を、言語に適した便利な形式で記述します。例えば、 Green Sleeves Time Was Lost または ("Green Sleeves";"Time Was Lost") stdoutキーワードのアルファベット順のリストに戻るか印刷して、各キーワードを山括弧(<および>)で囲んで、元のタイトル内のコンテキストを示します。入力と同様に、出力は適切な形式にすることができます。これは、言語、改行で区切られた行、文字列のリストなどに便利です。 <Green> Sleeves Time Was <Lost> Green <Sleeves> <Time> Was Lost Time <Was> Lost タイトルは、1つのスペースで区切られた一連のキーワードで構成されます。キーワードにはアルファベット文字のみが含まれます。キーワードは辞書式にソートされます。タイトルは一意であり、キーワードは各タイトル内で一意ですが、同じキーワードが複数のタイトルに存在する場合があります。キーワードが複数のタイトルに存在する場合、出力には各外観が任意の順序でリストされます。たとえば、次の入力があるとします。 A Dugong A Proboscis 有効な出力は次のいずれかです。 <A> Proboscis <A> Dugong A <Dugong> A <Proboscis> または: <A> Dugong <A> Proboscis A <Dugong> A <Proboscis> これはコードゴルフです …

3
ユーカーボット(カードゲーム)
この課題のアイデアは単純です。カードゲームユーカーをプレイするボットを作成します。 それらをまだ知らない皆さんのために、私はここでユーカーにこの挑戦に関係するルールを書き留めました。 私はpythonまたは類似のものを使用することをお勧めしますが、唯一の実際の制限は、コントローラーコードと互換性がある必要があることです。 入力: ユーカーボットは、ゲームまたはラウンドの現在のフェーズに応じて、さまざまな種類の入力を取得します。一般的に言えば、最初の行にゲームフェーズが表示され、その後にコンマとチームのポイント数が続き、その後に関連するデータが次の行に表示されます。 年代順に、ボットは次の順序で入力を受け取ります。 Ordering Trump: js,ah,qc,ts,jc // the cards in your hand 2 // number of points your team has 0 // number of tricks your team has taken ordering // the phase of the game th // the turned up card p,p // each previous player’s …

1
理論的演算を設定(+および*)[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、 Code Golf Stack Exchangeのトピックとなるようにします。 4年前休業。 理論演算を設定する 前提 乗算演算子なし(こことここ)で乗算することを含むいくつかの課題がすでにあり、この課題も同じように(2番目のリンクに最も類似しています)です。 この課題は、以前の課題とは異なり、自然数(N)の集合論的定義を使用します。 そして 例えば、 等々。 チャレンジ 私たちの目標は、セット演算(下記参照)を使用して、自然数を加算および乗算することです。この目的のために、すべてのエントリは同じ「設定言語」であり、そのインタープリターは下にあります。これにより、一貫性とスコアリングが容易になります。 このインタプリタを使用すると、自然数をセットとして操作できます。あなたの仕事は2つのプログラム本体(以下を参照)を書くことです。1つは自然数を追加し、もう1つはそれらを乗算します。 セットに関する予備的な注記 セットは通常の数学的構造に従います。ここにいくつかの重要なポイントがあります: セットは注文されていません。 セット自体は含まれていません 要素はセットに含まれるかどうか、これはブール値です。したがって、セット要素は多重度を持つことができません(つまり、要素はセットに複数回存在することはできません)。 通訳と詳細 この課題の「プログラム」は「設定言語」で記述され、ヘッダーと本文の2つの部分で構成されます。 ヘッダ ヘッダーは非常に単純です。それはあなたが解決しているプログラムをインタプリタに伝えます。ヘッダーはプログラムの最初の行です。+or *文字のいずれかで始まり、スペースで区切られた2つの整数が続きます。例えば: + 3 5 または * 19 2 有効なヘッダーです。最初は、あなたが解決しようとしていること3+5、つまりあなたの答えが正しいことを意味します8。2つ目は乗算を除いて同様です。 体 本文は、通訳に対する実際の指示がある場所です。これが、真に「加算」または「乗算」プログラムを構成するものです。答えは、各タスクに1つずつ、2つのプログラム本体で構成されます。次に、実際にテストケースを実行するようにヘッダーを変更します。 構文と手順 指示は、コマンドとそれに続く0個以上のパラメーターで構成されます。次のデモンストレーションでは、アルファベット文字は変数の名前です。すべての変数はセットであることを思い出してください。labelはラベルの名前です(ラベルはセミコロン(つまりmain_loop:)が後に続く単語です)int。整数です。以下は有効な手順です。 フロー制御: jump label無条件にラベルにジャンプします。ラベルは、セミコロンが後に続く「単語」main_loop:です。たとえば、ラベルです。 je A label Aが空の場合はラベルにジャンプ jne A label …

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