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

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

17
9に収束しましょう!
整数n> 2が与えられた場合、a(n、k)= 9である最小の非負整数kを出力または返します。ここで、a(n、k)は次のように定義されます。 a(n、0)= n a(n、k + 1)= (N、K)/ 2 + 1であれば(N k)が偶数であります a(n、k)が奇数の場合、a(n、k)²(10を底とする)の桁の合計 例 以下のために、N = 5、期待される出力は、K = 4: a(5, 0) = 5 a(5, 1) = 7 (5² = 25 and 2 + 5 = 7) a(5, 2) = 13 (7² = 49 and 4 + 9 = 13) …

12
ダイエットハスケルを作ろう
Haskellには、次のように記述できるタプルがあります。 (a,b,c) ただし、これは (,,)a b c 一般に、nタプルは、... の間にn-1が 続くスペースで区切られた要素で構成されます。例えば、7組は、によって形成することができます,()(1,2,3,4,5,6,7) (,,,,,,)1 2 3 4 5 6 7 Haskellには1タプルがないため、形成できません。また、空のタプルについても責任を負いません。 ネストされたタプルは、括弧を使用して形成され、操作の順序をオーバーライドできます。 ((1,2),3) == (,)((,)1 2)3 Haskellからすべての構文糖を削除する私たちの追求の一環として 、Haskellのタプルから構文糖を削除するプログラムを作成するようにお願いします。 プログラムは、タプル、配列、または砂糖の多いタプルを表す文字列を受け取り、「シュガーフリー」タプルを表す文字列を出力する必要があります。入力タプルには、正の整数または他のタプルのみが含まれます。 ここでゴルフをしているので、あなたのアウトプットは短いはずです。不要なものを含めるべきではありません スペース。スペースは、タプル関数の引数を分離するためにのみ使用し、aの後)または前には表示しないでください。( 括弧。括弧は、タプル関数を作成するとき、またはタプルをネストするときにのみ使用する必要があります。 これはコードゴルフの質問なので、回答はバイト単位で記録され、バイト数は少ない方が良いでしょう。 テストケース (1,2) -> (,)1 2 (1,2,3) -> (,,)1 2 3 ((1,2),3) -> (,)((,)1 2)3 (1,2,3,4) -> (,,,)1 2 3 4 (1,(2,3)) …

25
最大サブアレイ
指定された配列の「最大サブ配列」を「最大合計を持つ(連続した)サブ配列」として定義します。「非ゼロ」要件はないことに注意してください。その合計を出力します。 可能であれば、コードの説明を入力してください。 サンプル入力1: 1 2 3 -4 -5 6 7 -8 9 10 -11 -12 -13 14 サンプル出力1: 24 説明1: 最大の合計は、切り取り6 7 -8 9 10と合計によって得られます。 サンプル入力2:-1 -2 -3 サンプル出力2:0 説明2:簡単です:)空のサブアレイは「最大」です。 要件: stdin以外は何も読み込まないでください。出力はstdoutに送られます。 標準的な抜け穴の制限が適用されます。 ランキング:最短プログラムがこのcode-golfを獲得します。

8
長方形の数を数えられますか?
私のお気に入りの数学的な楽しみの1つは、長方形のグリッドを描画し、そのグリッドに表示されているすべての長方形を見つけることです。ここで、この質問に答えて、自分で冒険しましょう! 長方形の数を数えられますか? +-----+-----+-----+-----+ | | | | | | | | | | +-----+-----+-----+-----+ | | | | | | | | | | +-----+-----+-----+-----+ | | | | | | | | | | +-----+-----+-----+-----+ | | | | | | | | | | +-----+-----+-----+-----+ この4 x 4 …

1
ゴルフのPython文字列リテラル
バックグラウンド Python 3には多くの種類の文字列リテラルがあります。たとえば、文字列this 'is' an exa\\m/pleは次のように表すことができます。 'this \'is\' an exa\\\\m/ple' "this 'is' an exa\\\\m/ple" r"this 'is' an exa\\m/ple" '''this 'is' an exa\\\\m/ple''' """this 'is' an exa\\\\m/ple""" r'''this 'is' an exa\\m/ple''' r"""this 'is' an exa\\m/ple""" ご覧のとおり、文字列に異なる区切り文字を使用すると、特定の文字に必要なエスケープを変更することで文字列を延長または短縮できます。一部の区切り文字はすべての文字列に使用できません:上にr'ありません(説明については後述)。あなたの弦を知ることは、コードゴルフで非常に役立ちます。 複数の文字列リテラルを1つに結合することもできます。 'this \'is\' an ''''exa\\\\m/ple''' "this 'is' an "r'exa\\m/ple' チャレンジ 課題は、印刷可能なASCII文字列が与えられた場合、Pythonで最短のリテラル表現を出力することです。 弦力学の詳細 文字列を使用して区切ることができ'、"、'''と"""。開始デリミタがエスケープされずに再びヒットすると、文字列は終了します。 文字列リテラルがで始まる'''か"""、区切り文字として使用される場合。それ以外の場合、'または"使用されます。 文字をエスケープするには、\それらの前にを配置します。これにより、文字列に文字が挿入され、その特殊な意味が排除されます。たとえば'a …

14
脆弱なバイナリ壁
バイナリ壁の作成に触発 正の整数のリストが与えられた場合、[2, 6, 9, 4]例として、次のようにそれらをすべて上に書き出すことができます。 0010 0110 1001 0100 これを壁として想像できます。 ..#. .##. #..# .#.. しかし、これは非常に弱い壁であり、崩壊しました!各1(#)は、「地面」または別の1(#)に当たるまで落ちます。0S(.S)が移動することにより左スポット中に存在する1S。 これは次のようになります。 .... .... .##. #### 次のように変換されます: 0000 0000 0110 1111 これは、数字のリストとしてです[0, 0, 6, 15]。 別のテストケース [10, 17, 19, 23] これは次のようになります。 01010 10001 10011 10111 になる: 00000 10011 10011 11111 に翻訳する: [0, 19, 19, 31] チャレンジ …

9
交差する言葉
入力: 2つの文字列(注:入力の順序は重要です)。 出力: 両方の単語/文は、それらの間に1つの空行がある行で始まります。彼らは水平に「隣り合って」「歩きます」。しかし、同じ位置に同じキャラクターがいる場合、彼らは互いに交差し、「隣同士に」歩き続けます。 混乱する?例を挙げましょう: 入力:Words crossing over&Ducks quacking: Word quack n s i g Duck cross n over 悪いMSペイントを失礼します。 チャレンジルール: 「クロスオーバー」した後、再度クロスオーバーする前に、常に最初に直線を歩いて戻ります(上記のテストケースを参照{1}- ing等しいが、クロスした後i、最初に戻る必要があります直進します(したがって、無視nしますg)。 入力は異なる長さにすることができます。その場合、長い方が直線で歩き続けます(テストケース1、2、4、および6を参照)。 両方の入力を同じにすることができます(テストケース3を参照)。 入力にはタブも改行も含まれません。 スペースは(エッジケースとして)同じ文字として無視されます。その場合、その後の次の(非スペース)文字があれば、代わりに交差します(テストケース3、5、6を参照)。 入力には、同じ位置に隣接する(スペースではない)文字を含めることはできません。その場合、両方とも水平方向に直線で歩くだけです(テストケース2を参照)。 最初の文字が等しい場合でも、常に2行離れて開始します(テストケース3および6を参照)。 末尾のスペースと単一の末尾の改行はオプションです。 入力には印刷可能なASCII文字のみが含まれると想定できます(改行とタブは除外されます)。 入力は大文字と小文字が区別されるためA、a等しくなく、クロスオーバーしません(テストケース7を参照)。 入力長は両方とも常に2以上です。 入力と出力は任意の合理的な形式にすることができます。改行を含む単一の文字列にすることができます。文字列配列/リスト。STDOUTに印刷されます。文字の2D配列。等 一般的なルール: これはcode-golfであるため、バイト単位の最短回答が優先されます。 コードゴルフ言語では、コードゴルフ以外の言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。 回答には標準の規則が適用されるため、STDIN / STDOUT、適切なパラメーターと戻り値型、完全なプログラムを持つ関数/メソッドを使用できます。あなたの電話。 デフォルトの抜け穴は禁止されています。 可能であれば、コードのテストへのリンクを追加してください。 また、必要に応じて説明を追加してください。 テストケース: 1. Input: "Words crossing over" & …

16
ジッパー付き段落
(この挑戦に触発された) 2つの入力文字列(一方が他方より正確に1文字長い)が与えられた場合、文字列を、半分だけジッパーで留められたジッパーの2つの半分であるかのようにASCIIアートに配置します。長い単語はジッパーの下部を形成し、結合されたジッパー部分の最初と最後の文字です。その段落は理解しにくいので、いくつかの例を見てください。 zippered paragraph z i p p gerraepdh a r a p 注方法paragraph(長い単語)が底ファスナーを形成し、そしてg r a p h部分が封入e r e dの部分をzippered、そしてz i p pそしてp a r a部分が互いにずれています。 入力 任意の便利な形式の 2つのASCII文字列。1つは同じ長さで、もう1つはちょうど1文字長いことが保証されています。 どちらの文字列にも空白は含まれませんが、その他の印刷可能なASCII値が含まれる場合があります。 どちらの順序で入力してもかまいません。提出物に入力順序を明記してください。 出力 上記のように、任意の便利な形式での、ジッパー付き単語のASCIIアート表現の結果。 ルール 文字自体が正しく並んでいる限り、先頭または末尾の改行または空白はすべてオプションです。 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。 可能であれば、他の人があなたのコードを試すことができるように、オンラインテスト環境へのリンクを含めてください! 標準的な抜け穴は禁止されています。 これはコードゴルフなので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。 例 ppcg tests p p sctgs e t string strings …

19
パスカルの交互三角形
パスカルの三角形は1、各行を開始し、連続する加算から形成することで生成されます。ここでは、代わりに、乗算と加算を交互に行うことにより三角形を形成します。 我々は、行を開始する1だけで孤独で1。その後、奇数行で加算が行われ、偶数行(1-indexed)で乗算が行われます。追加ステップを実行するとき、三角形の外側のスペースが0sで埋められていると仮定します。乗算ステップを実行するとき、外側が1s で満たされていると仮定します。 7行までの完全な三角形です。*または+その行を生成するために行ったものステップ左側番組に。 1 1 2 * 1 1 3 + 1 2 1 4 * 1 2 2 1 5 + 1 3 4 3 1 6 * 1 3 12 12 3 1 7 + 1 4 15 24 15 4 1 チャレンジ inputが与えられると、この三角形のth番目の行をn出力しnます。 ルール 代わりに0インデックスを選択することもできますが、上記とまったく同じ三角形が生成されるように、加算行と乗算行がフリップフロップする必要があることに注意してください。これを行うことを選択した場合は、提出物に明記してください。 入力と出力は、言語のネイティブ整数型に適合すると仮定できます。 …

18
これは有効なTakuzuボードですか?
Takuzuは、0sと1s を含むセルでグリッドを完成させる必要があるロジックゲームです。グリッドは3つのルールに従う必要があります。 3つの水平または垂直の連続したセルを同じにすることはできません。 等しい数でなければなりません 01各行と列に sとs。 2つの行が同じであったり、2つの列が同じであったりすることはできません。 完成したグリッドを見てみましょう。 0011 1100 0101 1010 あなたが見ることができるように、このボードは、ルールを次の1、2そして3。同じ3つの水平または垂直セルはありません。すべての行と列には同じ数の0sと1s が含まれ、2つの行と2つの列は同じではありません。 無効なグリッドを見てみましょう。 110100 010011 011010 101100 100011 001101 このグリッドには多くの問題があります。たとえば、行に5は3つ0のsがあり、列に2は3つ1のsがあり、その後に3が続き0ます。したがって、これは有効なグリッドではありません。 仕事: あなたの仕事は、n* n 0の2D配列と1 sボードを検証して、それが有効な完成したTakuzuボードかどうかを確認ことです。 例: 0011 1100 0101 1010 このボードはすべての規則に従っているため、有効なTakuzuボードです。このために真実の値を返さなければなりません。 11 00 これは有効なボード行で1はありません2。ルールはルールに従いません。これにはfalsey値を返す必要があります。 100110 101001 010101 100110 011010 011001 これは有効なボードではありません。ルール3により失敗(のみ)します-1行目と4行目は同じです。 110100 001011 010011 101100 100110 011001 これは有効なボードではありません。ルール3が原因で(のみ)失敗します-1列目と4列目は同じです。 …

9
100000000003を法とする整数の逆数を計算します
タスクは次のとおりです。任意の方法でコードに与えられた整数x(xモジュロ100000000003がに等しくないなど)が与えられた場合0、別の整数を出力y < 100000000003し(x * y) mod 100000000003 = 1ます。 次のような入力を行う場合、標準デスクトップマシンでコードを実行するのに30分もかかりません。x|x| < 2^40 テストケース 入力:400000001。出力:65991902837 入力:4000000001。出力:68181818185 入力:2.出力:50000000002 入力:50000000002出力:2。 入力:1000000。出力:33333300001 制限事項 モジュロ演算(またはこの逆演算)を実行するライブラリまたは組み込み関数を使用することはできません。これは、自分でa % b実装しなければ実行できないことを意味します%。ただし、他のすべての非モジュロ算術組み込み関数を使用できます。 同様の質問 これはこの質問に似ていますが、興味を引くほど十分に異なることが望まれます。

20
まだ未使用のペア
正の整数のシーケンスを定義しましょう。偶数のシーケンスを前の用語の2倍に定義します。シーケンスの奇数インデックスは、シーケンスにまだ現れていない正の最小整数になります。 最初のカップルの用語は次のとおりです。 1,2,3,6,4,8,5,10,7,14,9,18,11,22,12,24,13,26,15,30 これは、連結ペア(n、2n)のリストと考えることもできます。ここで、nは、これまで使用されていない最小の正の整数です。 仕事 入力として数値nが与えられた場合、このシーケンスのn番目の項を計算します。 これはコードゴルフですので、ソースコードのサイズをバイト単位で最小化することを目指してください。 OEIS A036552

30
円は重なりますか?
中心の座標と2つの円の半径を指定して、重なるかどうかの真理値を出力します。 入力 入力は、STDINまたは同等の関数引数を介して取得できますが、変数としては取得できません。それらを単一の変数(リスト、文字列など)として、または複数の入力/引数として、任意の順序で受け取ることができます。 入力は6つのフロートになります。これらのフロートは、小数点以下3桁までです。座標は正でも負でもかまいません。半径は正になります。 出力 出力は、STDOUTまたは関数戻りを介して行うことができます。 プログラムには、正確な2つの出力が必要です。1つはTrue値(円はオーバーラップ)で、もう1つはFalse出力(オーバーラップしません)です。 テストケース (入力は[(x1, y1, r1), (x2, y2, r2)]テストケースのタプルのリストとして提供されます。任意の形式で入力を取得できます) 本当 [(5.86, 3.92, 1.670), (11.8, 2.98, 4.571)] [(8.26, -2.72, 2.488), (4.59, -2.97, 1.345)] [(9.32, -7.77, 2.8), (6.21, -8.51, 0.4)] 偽 [(4.59, -2.97, 1.345), (11.8, 2.98, 4.571)] [(9.32, -7.77, 2.8), (4.59, -2.97, 1.345)] [(5.86, 3.92, 1.670), (6.21, …

30
レンジ、リバース、サム!
入力として正の整数nを指定すると、nの逆の範囲の合計を出力します。 逆の範囲の合計は、1から始まりnを含む最大nの包括的範囲を作成し、内部の各数値を反転し、合計することによって作成されます。 例: 入力が10の場合、次のようになります。 範囲: [1,2,3,4,5,6,7,8,9,10] 反転:([1,2,3,4,5,6,7,8,9,01]反転した1文字の数字はそれ自体であり、反転した10文字は01または1です) 和: 46 3桁以上の数字は、2桁の数字と同じように反転します。たとえば、1234は4321になります。 テストケース: Input -> Output 10 -> 46 5 -> 15 21 -> 519 58 -> 2350 75 -> 3147 999 -> 454545 999の入力への完全なテキストの場合は、見つけることができるここでは、非常に多くのfireflame241 @のおかげで。

7
その眉をひそめて向きを変える
APLの多くの顔のお祝い 次の表の列1または列2の文字列の中から文字列を指定すると、その文字列の右隣の文字列が返されます。つまり、列1に文字列を指定すると、その行の列2の文字列が返され、列2に文字列を指定すると、その行の列3の文字列が返されます。 コードポイント(以外:)は右端にリストされています。 列1、列2、列3 :⊢ → ⍡ → ⊣: U + 22A2 U + 2361 U + 22A3 :▷ → ⍢ → ◁: U + 25b7 U + 2362 U + 25C1 :⋆ → ⍣ → ⋆: U + 22c6 U + 2363 U + 22c6 :∘ → ⍤ → …

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