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

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

23
Javascript左パッドゴルフ
前書き left-pad npmパッケージ falloutをきっかけに、left-padを実装するためのコードゴルフをしましょう。 左パッドの機能は、フォームで、2つのデフォルト引数と1つの追加の引数で構成された文字列、長さ、(padchar)。padcharが指定されていない場合、これはスペース文字に標準化されます。2つの引数を持つ例を見てみましょう。 left_pad("abc", 6) まず、文字列の長さ3を観察します。この後、完全な文字列の長さが関数で指定された長さに達するまで、この文字列を左側に埋め込む必要があります。この場合6。padcharが指定されていないため、これにスペースを埋め込む必要があります。 abc これは、3つのスペースと最初の文字列を含む文字列であり、長さ6の文字列になります。次に、与えられたpadcharの例を示します。 left_pad("abc", 6, "-") 上記の例と同じことを行いますが、スペースをpadcharに置き換えます。この場合、ハイフン: ---abc タスク 与えられた文字列、長さ、および多分追加の引数padchar、出力左詰めの文字列。長さの数値は、文字列の長さ以上であると想定できます。padcharは常に1文字で構成されます。 テストケース left_pad("string", length, ("padchar")) === "left-padded string" left_pad("foo", 5) === " foo" left_pad("foobar", 6) === "foobar" left_pad("1", 2, "0") === "01" left_pad("1", 2, "-") === "-1" これはcode-golfであるため、バイト数が最小の提出が勝ちです!
27 code-golf  string 

21
wc coreutilを再実装します
この課題はこの古い課題と似ていますが、仕様のいくつかの不明確な部分が打ち出され、I / O要件が厳しくなっています。 印刷可能なASCIIと改行のみで構成される文字列の入力を指定すると、そのさまざまなメトリック(バイト、ワード、行カウント)を出力します。 出力する必要があるメトリックは次のとおりです。 バイト数。入力文字列はASCII内にとどまるため、これは文字数でもあります。 単語数。これはwc、「単語:」の非空白文字のシーケンスの定義です。たとえば、abc,def"ghi"1つの「単語」です。 行数。これは一目瞭然です。入力には常に末尾の改行が含まれます。つまり、行カウントは「改行カウント」と同義です。末尾の改行は1つしかありません。 出力は、デフォルトのwc出力を正確に複製する必要があります(ファイル名を除く)。 llama@llama:~$ cat /dev/urandom | tr -cd 'A-Za-z \n' | head -90 > example.txt llama@llama:~$ wc example.txt 90 165 5501 example.txt 行カウントが最初に来て、次にワードカウント、最後にバイトカウントになることに注意してください。さらに、各カウントはすべて同じ幅になるようにスペースで左詰めする必要があります。上記の例で5501は、は4桁の「最長」番号であるため165、1つのスペースと902 つのスペースが埋め込まれます。最後に、数字はすべて、各数字の間にスペースを入れて単一の文字列に結合する必要があります。 これはcode-golfであるため、バイト単位の最短コードが優先されます。 (ああ、ちなみに... wc答えにコマンドを使用することはできません。それが明らかでない場合は。) テストケース(\n改行を表します。オプションで追加の末尾改行も必要になる場合があります): "a b c d\n" -> "1 4 8" "a b c d e f\n" -> …
27 code-golf  string 

15
隣接する単語の一致
このチャレンジでは、2つの単語が渡されます。あなたの仕事は、それらが隣接しているかどうかを判断することです。 次の場合、2つの文字が隣接しています。 同じ文字、または それらは辞書的に隣接しています。 たとえば、JはI、J、およびKのみに隣接しています。 ZはAに隣接していません 次の場合、2つの単語が隣接します。 それらは同じ長さであり、 各文字は、他の単語の一意の文字に隣接しています。 たとえば、C> D、A> A、T> Sのように、CATはSADに隣接しています。FREEはGRRDに隣接していません(各Eとペアにする文字が必要 です)。 入出力 2つの文字列が渡され、それらが隣接している場合は真の値を返し、そうでない場合は偽の値を返す必要があります。以下のすべてのテストケースについては、1分以内に戻る必要があります。 文字列には大文字のアルファベットのみが含まれると想定できます。 2つの文字列は、引用符付きまたは引用符なしでリストとして渡すか、連結できます。 テストケース 真実: A A A B C B DD CE DE FC ABCD BCDE AACC DBBB DJENSKE FDJCLMT DEFGHIJKL HJLEHMCHE IKLIJJLIJKKL LJLJLJLJLJHI ACEGIKMOQSUWY BLNPRDFTVHXJZ QQSQQRRQSTTUQQRRRS PQTTPPTTQTPQPPQRTP ELKNSDUUUELSKJFESD DKJELKNSUELSDUFEUS 偽物: A C A …

9
乱数をpiにマッピングします
小数点の倍精度表現では、小数点以下15桁の精度しか保証できないため、piは次のように近似されます。 3.141592653589793 あなたは桁があることがわかります3の位置にあり1, 10, 16、数字が1位置している2, 4など チャレンジ あなたの仕事は、0から1の間のランダムな倍数を作成し、その数の値をpiの値にマッピングするプログラムまたは関数を作成することです。これを行うには、数字がpiにある位置の乱数に異なる数字を配置します。piに数字が見つからない場合はスキップし、乱数に含まれないpiの数字はすべてで表されますx。各値は、左から1回だけ使用できます。 いくつかの例はおそらくこれをより明確にするでしょう。次の例では、最初の数値はpi、2番目の数値は乱数、最後の数値は目的の出力です。 3.141592653589793 0.111111111111111 x.1x1xxxxxxxxxxxx 3.141592653589793 0.531000000000000 3.1xx5xxxxxxxxxxx 3.141592653589793 0.123456789123456 3.141592653x8x7xx 3.141592653589793 0.967552381459391 3.14159265358979x ルール: 関数は入力を受け付けません(例外の可能性については箇条書き3で説明しています) 出力は、オプションの改行を含む出力文字列のみで構成されます(単一の後続スペースも受け入れられます) プログラムに組み込みのPi値やRNGがない場合は、Piをハードコーディングし、入力として乱数を使用できます。乱数をハードコーディングしたり、Piを入力として使用したりすることはできません。 Piのハードコードされた値と15桁のランダムな数字(0.0から1の間になることがわかっているのでスキップできます)は、バイトカウントに含まれます。 言語に必要な精度がない場合は、次の制限の下で精度を下げることができます Piの桁は、持っている精度まで正確でなければなりません 正確であることが保証されている以上の値を出力することはできません。つまり、精度が8桁の正確な小数しか許可しない場合は15桁を出力できません。 プログラムが8桁しかサポートしていない場合でも、ハードコードされたPiの値は16バイトとしてカウントされます(小数点は必要ありません)。 乱数の入力値は15バイトとしてカウントされます(必要ありません0.。これは、精度の低い言語に不当な利点がないためです。 プログラムは5桁の精度をサポートする必要があります(少なくとも)。 編集:答えを検証するには:何らかの方法で乱数を出力する必要がありますが、この操作をバイトカウントに含める必要はありません。たとえば、print rスクリプトの最後にaを挿入できる場合、その部分はスコアを増加させません。 別の必要な操作の一部である場合、バイトを減算することはできません。つまり、コードがの場合、print pi, r減算することしかできません, r。 :あなたは、コード内の部品にいくつかの場所を挿入する必要がある場合は、プリント乱数やコメントなどでないものという両方のバージョン(1を含めてください_pと_oNo。乱数を印刷するために必要とされるが、_pXXXを行い、_oNoいYYY。_pおよび_oNoバイト数には含まれません。 バイト単位の最短コードが勝ちます。 リーダーボード この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、b)全体的なリーダーボードとして、回答からカタログを生成します。 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 ## Language Name, N bytes N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば: ## …
27 code-golf  string  random  pi 

7
周辺国
他の国がどの国を取り囲んでいるのだろうか?私も時々やりますが、それが課題です。 この投稿の下部にあるコードブロックで認識しなければならない国とその国のリストを提供しました。入力国に隣接する国のレイヤーのリストを(あなたの言語で可能な限り最も便利な方法で)出力する完全なプログラムを作成する必要があります。したがって、たとえば: >>> "United Kingdom" 1 Republic of Ireland なぜなら"United Kingdom"国名で1あり、あなたが作りたい層の数だからです。実際、Republic of Ireland他の国に行く途中に海があるため、任意の数のレイヤー(0を除く)が返されます。 参照マップ: 例(括弧内のすべてはコメントです)(明らかに、出力の順序は重要ではありません): >>> Bhutan 2 India (layer 1, touching Bhutan) China (layer 1, touching Bhutan) Bangladesh (layer 2, touching India) Myanmar (layer 2, touching China and India) Laos (layer 2, touching China) Vietnam (layer 2, touching China) …

30
van der Corputシーケンスを出力します
Corput配列DERバンの最も簡単な例の一つである低食い違い配列。そのn-番目の用語はjust 0.(n written in base 10 and mirrored)なので、最初の用語は次のとおりです。 0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9、 0.01、0.11、0.21、0.31、0.41、0.51、0.61、0.71、0.81、0.91、 0.02、0.12、0.22、0.32、0.42、0.52、0.62、0.72、0.82、0.92、... チャレンジ van der Corputシーケンスの最初の項nよりも小さい正の整数を入力として取得10^6または出力するプログラミング言語でプログラムまたは関数を記述しますn。出力形式は、浮動小数点数のリスト、の形式の文字列のリスト0.digits、または用語がコンマや空白、改行で区切られている一意の文字列です。 標準的な抜け穴は禁止されています。最短のソースコードが優先されます。

7
ニンジン人気統計
でPPCGのチャットルーム十九バイトキャレット使用して、^(またはニンジンは)あなたがちょうどあなた以上前に作られたコメントの一つと一致していることを示すの方法です。 キャレットメッセージはN ^文字(Nは正の整数)のみで構成され、N 番目の前のメッセージとの一致を意味します。したがって、1つ^は直前のメッセージ^^との合意、2行目まで^^^のメッセージとの合意、3行目までのメッセージとの合意などを意味します。 さらに、キャレットメッセージXが別のキャレットメッセージYに同意する(別名)場合、XはYが同意するものに同意すると言われます。これには複数の層があり、最終的に、すべてのキャレットメッセージは1つの非キャレットメッセージとの一致を示しています。 たとえば、チャットの記録が次のようになっている場合:(1行に1メッセージ) I like dogs [line 1] I like cats [line 2] ^ [line 3] ^^^ [line 4] ^^ [line 5] I like turtles [line 6] ^ [line 7] ^^^ [line 8] ^^ [line 9] その場合、行1、2、および6は非キャレットメッセージであり、他のすべては非キャレットメッセージを指すキャレットメッセージです。 3行目は2行目を直接指しています。 行4は、行1を直接指しています。 行5は行3を指し、行3は行2を指します。 行7は行6を指しています。 行8は行5を指し、行5は行3を指し、行3は行2を指します。 行9は行6を指す行7を指します。 したがって、キャレット以外のメッセージを書いたユーザーを含めて(そして、人々が自分のメッセージを気にしないと仮定して)、次のように結論付けることができます。 2人が同意しますI like dogs(1行目と4行目) …
27 code-golf  string 

24
Atbash Self Palindromes
Atbash変換について考えてみましょう。 A|B|C|D|E|F|G|H|I|J|K|L|M Z|Y|X|W|V|U|T|S|R|Q|P|O|N A⇔ZおよびL⇔Oなど。一部の単語に共通する興味深い特性があります。一部の文字列がatbashに相当するものに翻訳されると、その翻訳は元の単語と逆になります。これらをAtbash Self Palindromesと呼びます。 例として、WIZARDを翻訳しましょう: W→D I→R Z→A A→Z R→I D→W 結果はDRAZIWされ、WIZARD逆転します。したがって、WIZARDはatbash self palindromeです。 目的印刷可能なASCII文字列を与え、その文字列がatbash self palindromeである場合は真実の値を出力するか、それ以外の場合は偽の値を返します。(これは、STDIN、最も近い同等の、機能的な入力などによって行われます。言語がこれらのいずれもできない場合は、入力をハードコーディングできる別の言語を選択することを検討してください。)入力が回文であり、atbashシーケンスの影響を受けない場合でも、回文+自体が回文であるため、trueを出力する必要があります。これはcode-golfであるため、バイト単位の最短プログラムが優先されます。 テストケース "Input" => true, false "WIZARD" => true "Wizard" => true // case doesn't matter "wIzArD" => true "W I Z A R D" => true "W IZ ARD" => false …

20
私の山脈にはいくつの山がありますか?
正の整数のリストは、各リストエントリが山の1つの垂直セクションの高さを表す、量子化された山の範囲として視覚化できます。 たとえば、リスト 1, 2, 2, 3, 4, 3, 5, 3, 2, 1, 2, 3, 3, 3, 2, 2, 1, 3 範囲になることができます x x x xxxxx xxx x xxxxxxxx xxxxxx x xxxxxxxxxxxxxxxxxx (詩の少ない人はこれを棒グラフと呼ぶかもしれませんが、私は脱線します。) この課題の問題は、任意のリストの山の範囲にいくつのピークがあるかということです。本質的に、リストにはいくつの極大がありますか? ピークは、すべて同じ高さの山脈の1つまたは複数の列の連続したセクションとして定義されます。ここで、左右の列の高さは低くなります。 この例では、括弧で囲まれた位置に4つのピークがあることが視覚的にわかりやすくなります。 1, 2, 2, 3, (4), 3, (5), 3, 2, 1, 2, (3, 3, 3), 2, …

4
正規表現を逆にする
チャレンジ 有効な正規表現が与えられた場合、同じ文字列のセットに一致するが逆の正規表現を出力します。 タスク この課題は、最も基本的な正規表現の操作を使用しています:^、$、?、+、*、[]、{}、|。キャプチャグループなどの複雑なものはありません。特殊文字はエスケープできます。 サンプル入出力 注:無効な入力は決して与えられず、通常、与えられた入力に対して複数の可能な答えがあります! Input | Sample Output -----------|------------- abc | cba tuv? | v?ut a(b|c) | (c|b)a 1[23] | [23]1 a([bc]|cd) | (dc|[bc])a ^a[^bc]d$ | ^d[^bc]a$ x[yz]{1,2} | [yz]{1,2}x p{2} | p{2} q{7,} | q{7,} \[c[de] | [de]c\[ ab[c | <output undefined> a(?bc) | <output undefined> a[]]bc …

17
多項係数を計算する
すべてが参加できる簡単なチャレンジの時間です! 多項定理の状態: 括弧内の式は、次のように定義される多項係数です。 用語が可能にk個のIのすべての整数のパーティション上の範囲にn個与えるNパスカルの番目のレベルM -simplexを。あなたの仕事は、この係数を計算することです。 仕事 m個の数値、n、k 1、k 2、...、k m-1を取り、対応する多項係数を出力または返すプログラムまたは関数を記述します。プログラムは、必要に応じて、オプションでmを追加の引数として使用できます。k mは入力にないことに注意してください。 これらの数値は、多項係数の実際の計算がエンコードプロセスではなくコードによって実行される限り、任意の形式で入力できます。たとえば、リストにグループ化されるか、単項でエンコードされるなどです。 出力形式も同様に柔軟です。 nおよびmの場合、すべてのコードは1000 分まで1分未満で実行されます。 整数オーバーフローを心配しないでください。 多項係数を計算するために設計された組み込み関数は許可されていません。 標準の抜け穴が適用されます。 得点 これはコードゴルフです。バイト単位の最短ソリューションが勝ちです。 テストケース Input: 3, [2, 0] Output: 3 Input: 3, [1, 1] Output: 6 Input: 11, [1, 4, 4] Output: 34650 Input: 4, [1,2] Output: 12 Input: 15, [5,4,3,2] Output: 37837800 …

4
文字列をヒルベルト曲線にマッピング
いくつかの文字列を2D空間、フラクタルスタイルにマッピングしましょう。あなたの仕事は、ヒルベルト曲線を計算し、それに沿って文字列を置くことです。 仕事 タスクは、単一行の入力文字列を取得し、それを含むのに十分な大きさのヒルベルト曲線に沿ってそれを配置することです。バイト数をできるだけ少なくしてください。これは 結局コードゴルフです! 条件 空白が埋め込まれるギャップ。ただし、行末にパディングは必要ありません。 線の始点は左上隅に、終点は左下になければなりません。 プログラムまたは関数を作成できます。 いくつかの新しいテストケースが表示される場合があるため、何もハードコードしないでください! ボーナス 注:ボーナスは-50% & -20% on 100B= -20% on 50Bまたは-50% on 80B=のようにスタックします40B。 -50%入力が複数行の文字列である場合、元の入力を作成するプロセスを逆にします。ボーナスのテストケース:既存のものを使用するだけです(ボーナステストケースを含む!) -20%出力から不要な空白をすべて削除した場合(行末など)。 -5%グローバルネームスペースを汚染しない場合(私の意味はわかります!) テストケース abcdefghijklmn adef bchg nij mlk The quick brown fox jumps over the lazy dog. Thn f ju ewooxpm qckr rs ui btevo hlaz e y do …

18
連続整数の合計
誰かが何かを言う前に、似ていると似ています。しかし、これはduではありません。 いくつかの正の整数は、少なくとも2つの連続する正の整数の合計として記述できます。たとえば、9=2+3+4=4+5。入力として正の整数を取り、その合計として増加する連続する正の整数の最長シーケンスを出力として出力する関数を記述します(出力が+上記のように区切られた増加シーケンスである場合は-5バイトですが、任意の形式が許容されます) 。そのようなシーケンスが存在しない場合、番号自体を印刷する必要があります。 これはコードゴルフです。標準ルールが適用されます。バイト単位の最短コードが優先されます。 サンプル(フォーマットが異なることに注意してください) Input: 9 Output: 2,3,4 Input: 8 Output: 8 Input: 25 Output: [3,4,5,6,7]

5
文字通りゴルフ[終了]
現代の基準ではゴルフは、ゲームプレイするに変換ゴルフをしながら、ゴルフ自体はフォルクスワーゲン製の車に変換します。 ですから、通常のゴルフのコードの代わりに、あなたは今日ゴルフをコーディングするでしょう。 チャレンジ 言語Bの別のプログラム(B)のソースコードを出力する言語Aでプログラム(A)を記述します。これにより、実行時に出力されます。Vroom vrooom! ルール プログラムAのソースコードは、素敵なASCII車にフォーマットされています(必ずしもフォルクスワーゲンではありません)。 プログラムAは、投稿した形式で実行可能でなければなりません。 言語Aは言語Bと同じ言語ではありません。 プログラムBの出力は、新しい行で終了する場合と終了しない場合があります。 プログラムAは入力を受け取りません。 非自明な言語(難解)では、プログラムAを説明してください。 あなたは# Language A, Language B例えばであなたの答えを始めなければなりません。# Brainfuck, Python。 有効な言語には、このチャレンジが投稿された時点で、英語版のウィキペディアの記事、エソランの記事、またはロゼッタコードの記事が必要です。 クリエイティブに :-) 得点 これは人気コンテストです。10月4日までに最も高い投票数を獲得した回答が勝者として宣言されます。 例 Brainfuck、Python 2 ++++++++++[>+++> ++++ ++>+++ ++++ +++< << -]>>> ++++++++++++. ++ .------ ---.+++++.++++++.<<++.++.>++++++++++++++ ++++++++++++.>--.---..--.<<--.>>+++++++++. ----.---...--.---------------------------- --------------------------------------- \--o--/ \--o--/ \-_./ \+_./ これにより、Python 2で実行可能な次のコードが出力されます。 print "Vroom vrooom!"

18
素因数の合計
2013年には素因数分解があり3*11*61ます。2014年には素因数分解があり2*19*53ます。これらの因数分解に関する興味深い特性は、2013年と2014年の因数分解に異なる数の素数が存在し、それらの合計が同じ数になることです11+61=19+53=72。 2番目の数の選択された素因数の合計に等しい1つの数の選択された素因数の合計が存在する場合、1より大きい2つの正の整数を入力として受け取り、真理値を返すプログラムまたは関数を記述します。それ以外の場合はfalsey値。 明確化 3つ以上の素因数を使用できます。数のすべての素因数を合計で使用する必要はありません。2つの数から使用される素数の数が同じである必要はありません。 数の因数分解で素数が1を超える累乗に引き上げられたとしても、その数の素数の合計で1回しか使用できません。 1は素数ではありません。 両方の入力数は未満になり2^32-1ます。 テストケース 5,6 5=5 6=2*3 5=2+3 ==>True 2013,2014 2013=3*11*61 2014=2*19*53 11+61=19+53 ==>True 8,15 8=2^3 15=3*5 No possible sum ==>False 21,25 21=3*7 25=5^2 No possible sum (can't do 3+7=5+5 because of exponent) ==>False これはコードゴルフです。標準ルールが適用されます。バイト単位の最短コードが優先されます。

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