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

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

11
緩い範囲の解釈
緩い範囲の解釈 ListSharpは、多くの機能を備えたインタープリター型プログラミング言語です。これらの機能の1つは、次のように機能する1つのインデックスベースの範囲作成者です。 あなたはと範囲を定義する(INT) TO (INT)か、単に(INT)どこの両方または単一のintは分からに行くことができる最大のint32値 次に、これらの範囲を使用して、境界を超えることを恐れずに配列の要素を抽出できます したがって: 1 TO 5 生成: {1,2,3,4,5} 3 生成: {3} AND演算子を使用して範囲を追加できます 1 TO 5 AND 3 TO 6 生成: {1,2,3,4,5,3,4,5,6} これは負の数でも機能することを忘れないでください 3 TO -3 生成: {3,2,1,0,-1,-2,-3} 課題は次のとおりです。 入力 文字配列および文字列として以前に定義された範囲句 出力 1インデックスの要素は範囲の位置に基づいています(非既存/負のインデックスは空の文字に変換されます) 勝つ方法 コードゴルフの挑戦として、あなたは勝つために最短のバイト数でプログラムを作成することになっています 空の文字は存在しないことが指摘されているため、無視する必要があります(ここでは、わかりやすくするためだけに示しましたが、混乱させています) テストケース: input array is: {'H','e','l','l','o',' ','W','o','r','l','d'} range clause: "1 TO 3" …
13 code-golf  array-manipulation  parsing  code-golf  string  ascii-art  kolmogorov-complexity  code-challenge  code-golf  sequence  code-golf  number  array-manipulation  sorting  code-golf  string  function  code-golf  arithmetic  code-golf  math  sequence  number-theory  primes  restricted-source  javascript  code-challenge  polyglot  rosetta-stone  code-golf  code-golf  regular-expression  code-golf  math  code-golf  math  primes  code-golf  ascii-art  kolmogorov-complexity  binary  code-golf  math  sequence  code-golf  sequence  subsequence  code-golf  string  code-golf  parsing  music  code-golf  grid  game  path-finding  board-game  code-golf  string  binary  code-golf  array-manipulation  balanced-string  code-golf  code-golf  algorithm  code-golf  string  number  arithmetic  array-manipulation  code-golf  array-manipulation  binary-tree  tree-traversal  code-golf  code-golf  tips  code-golf  string  base-conversion  code-golf  tips  s.i.l.o.s  code-golf  string  ascii-art  code-golf  code-challenge  code-golf  game 

4
スタッガードスタート
レーサーがカーブしたトラックの少なくとも1回転を回るレースでは、各レーサーの開始位置がずらされているため、各レーサーはトラックの同じ距離を移動します(そうでなければ、最も内側の車線のレーサーが大きな利点を持ちます)。 楕円形のトラックの長軸と短軸(または必要に応じてセミメジャーとセミマイナー)の長さとトラック内の車線の数を指定して、各車線の最も内側の車線の開始点からの距離を出力しますずらす必要があります。 仕様書 各レーンは、半長軸が次に短いレーンより5ユニット長い楕円形です。簡単にするために、レーンの幅は0であると仮定します。 最も内側の車線は常に0から始まり、他のすべての開始点は前の開始点以上の正の整数です。 入力および出力は、便利で妥当な形式であれば何でもかまいません。 入力は常に整数です。 実際の値の0.01単位以内でトラックの円周を計算する必要があります。 出力は、最も近い整数に切り捨てられます(フロア)。 フィニッシュラインは、最も内側のレーサーの出発点です。レースには1ラップしかない。 軸の長さは、トラックの最も内側の車線を使用して測定されます。 最も内側の車線のオフセットに0を出力することはオプションです。 テストケース フォーマット: a, b, n -> <list of offsets, excluding innermost lane> 20, 10, 5 -> 30, 61, 92, 124 5, 5, 2 -> 31 15, 40, 7 -> 29, 60, 91, 121, 152, 183 35, 40, 4 …

4
N個のコインと各金種を使用したコイン変更問題の列挙
硬貨釣銭の問題は非常によく文書化されています。宗派のコインの無限の供給を考えるx_1とx_m、あなたまで追加の組み合わせの数を見つける必要がありますy。例えば、与えられたx = {1,2,3}とy = 4我々は4つの組み合わせがあります。 {1,1,1,1} {1,1,2} {1,3} {2,2} 前書き コイン交換の問題にはいくつかのバリエーションがあります。このバリエーションでは、2つの追加の制限があります。 すべての額面を少なくとも1回使用する必要があります。 正確に固定された数のコインを合計で使用する必要があります。 例えば、与えられたx = {1,2,3}、y = 36そしてn = 15どこnに使用しなければならないコインの総数であり、我々は4つの組み合わせを取得します: {1,2,2,2,2,2,2,2,3,3,3,3,3,3,3} (1個、7個の2個、7個の3個) {1,1,2,2,2,2,2,3,3,3,3,3,3,3,3} (2個、5個の2個、8個の3個) {1,1,1,2,2,2,3,3,3,3,3,3,3,3,3} (3個、3個の2個、9個の3個) {1,1,1,1,2,3,3,3,3,3,3,3,3,3,3} (4個、1個の2個、10個の3個) チャレンジ 課題は、enumerate上記のすべての組み合わせを列挙する、選択した言語で関数を作成することです。 宗派のリスト。たとえば{1,5,10,25}。リストまたは配列のいずれかを使用できます。 yすべての組み合わせの合計を示す負でない整数。 nコインの総数を示す負でない整数。 引数の順序は関係ありません。ポイントフリー機能が許可されています。 enumerate関数の出力は、組み合わせのリストでなければなりません。各組み合わせは一意である必要があり、合計がのn整数のリストである必要がありますy。すべての額面は、各組み合わせで少なくとも1回出現する必要があり、組み合わせが欠落してはなりません。整数と組み合わせの順序は関係ありません。出力にはリストまたは配列を使用できます。 次のエッジケースに注意してください。 両方の場合yとがnゼロであり、金種のリストが空で、出力が1つの組み合わせのリストである、空の組み合わせ(すなわち、{{}})。 そうでなければ、yがゼロ、ゼロ、nまたは金種のリストが空の場合、出力はゼロの組み合わせのリスト(つまり{})になります。 より一般的にyは、金種の合計よりも小さい場合、または金種nの数よりも少ない場合、出力はゼロの組み合わせのリストになります。 スコアリングは、バイト単位のプログラム全体のサイズに基づきます。これには、enumerate関数、ヘルパー関数、インポートステートメントなどが含まれることに注意してください。テストケースは含まれません。

9
2つのリストの未分類のメジャー化
定義 ベクターを含有するn個の要素があると言われている majorize又は 支配 AベクトルBとN個の すべての値のIFF要素は、k個のように1つの≤ K ≤ Nの最初の要素の和↓介してK番目の要素↓大きいとよりや介して第1の和に等しいk個の要素番目 B ↓、vは↓ベクトルを表し、Vは、降順にソート。 あれは、 a_1 >= b_1 a_1 + a_2 >= b_1 + b_2 a_1 + a_2 + a_3 >= b_1 + b_2 + b_3 ... a_1 + a_2 + ... + a_n-1 >= b_1 + b_2 + ... + b_n-1 a_1 …

14
文字列のパーセントエンコード
前書き ご存じの方もいるかもしれませんが、URLには実際に特別なことをする文字のリストがあります。例えば、/文字がURLの一部を分離し、そして?、&と=文字がサーバにクエリパラメータを渡すために使用されています。実際、特別な機能を持つ文字の束があります$&+,/:;=?@。特別な機能以外の理由でURLでこれらの文字を使用する必要がある場合、percent-encodingと呼ばれる処理を行う必要があります。 パーセントエンコーディングは、文字の16進値を取得%し、その先頭に文字を付加する場合です。たとえば、文字?はとしてエンコードされ%3F、文字&はとしてエンコードされ%26ます。特にURLでは、解析の問題を引き起こすことなく、これらの文字をURL経由でデータとして送信できます。あなたの課題は、文字列を取得し、エンコードする必要があるすべての文字をパーセントエンコードすることです。 チャレンジ コードポイント00-FF(ASCIIおよび拡張ASCII文字)の文字で構成される単一の文字列を取り込むプログラムまたは関数を作成します。その後、必要に応じて、各文字をパーセントエンコードした同じ文字列を出力または返す必要があります。このタスクを実行するビルトインは許可されておらず、標準的な抜け穴もありません。参考のために、パーセントエンコードする必要があるすべての文字のリストを以下に示します。 制御文字(コードポイント00-1Fおよび7F) 拡張ASCII文字(コードポイント80-FF) 予約文字($&+,/:;=?@、つまりコードポイント24、26、2B、2C、2F、3A、3B、3D、3F、40) 安全でない文字(" <>#%{}|\^~[]`、つまりコードポイント20、22、3C、3E、23、25、7B、7D、7C、5C、5E、7E、5B、5D、60) 同じリストがありますが、代わりに10進コードポイントのリストがあります。 0-31, 32, 34, 35, 36, 37, 38, 43, 44, 47, 58, 59, 60, 62, 61, 63, 64, 91, 92, 93, 94, 96, 123, 124, 125, 126, 127, 128-255 これはコードゴルフであるため、バイト単位の最短コード(または承認された代替スコアリング方法)が勝ちます! テストケース http://codegolf.stackexchange.com/ => http%3A%2F%2Fcodegolf.stackexchange.com%2F [@=>]{#} => %5B%40%3D%3E%5D%7B%23%7D Test String => …
13 code-golf  string 

19
このキー暗号を実装する
このキー暗号を実装する ゴール アルゴリズム(「アルゴリズム」セクションで説明)を使用して、特定の暗号を実装します。 プログラムは、STDINまたは利用可能な最も近い同等物から入力を読み取り、アルゴリズムを使用して暗号文とキーを生成する必要があります。 暗号文とキーは、STDOUTまたは利用可能な最も近いものに書き込まれます。暗号文とキーを出力する限り、任意の形式が許可されます。 アルゴリズム 文字列内の文字をそれぞれのASCII値に変換します。例えば: Hello -> 72 101 108 108 111 次に、0〜9の範囲の乱数を含む文字列である限り、キーを生成する必要があります。 Hello -> 62841 乱数列の整数を文字列のASCII値に追加します。上記の例では、72は78にな​​り、101は104になります。 72 + 6 = 78, 101 + 2 = 103, 108 + 8 = 116, etc 次に、新しい値を文字に戻します。上記の例では、テキストHelloはになっていNgtppます。 例 (これらは出力がどのように見えるかの単なる例です。出力は変化する可能性があります。) Hello World Lfrlu)_supg 41606984343 This will be encoded Zhjs$~koo gj$iuhofgj 60104723305544750226 ルール …

4
レオのポーカーフェイス
ポーカーフェース 前書き レオはポーカーを楽しんでいますが、Tech Inc.での彼の仕事は、彼が上手にプレーする方法を学ぶことを要求しすぎています。コンピュータ科学者であるレオは落胆していません。彼はポーカーを学ぶために必要な時間よりも多くの時間を費やすことに決め、それを使ってポーカーボットを作成し、より良いプレーを支援します。しかし、今レオには問題があります:少し上手にプレイする方法を理解するために、レオは複数の「人」の複数のゲームを観察する必要がありますが、「人」はゲームの品質と現実を改善するために異なるプレイスタイルを必要とします。 チャレンジ レオは、実際にプログラミングの課題に特化したウェブサイトがあり、あなたの助けを募集していることを思い出します!あなたの仕事は、修正版の5カードポーカー「Pokerface」をプレイするプログラムを書くことです。プログラムは、希望する形式で5カードの手として入力を受け取り、その後、プログラムは出力します。 プレーヤーがカードを交換する場合は、正確に(大文字と小文字を区別する) "true" "1"または "t"、その他の場合は空でない他の出力。 trueの場合、プレーヤーが交換したいカードのインデックスおよび/またはカード名のリスト。 プレーヤーが必要とする追加のカードの数を指定する0〜3の単一の数値。 プレーヤーが使用したい手を印刷します。 (以下のフォーマットを参照) ポーカーフェイスのルール pokerfaceはテキストベースのアドベンチャーゲームであるため、カードは一貫した方法で提示する必要があります。カードは2つの文字コードで表され、最初の文字はスーツ、2番目の文字はカードの名前です。 カード: 2-9 = 2-9 10 = T ジャック= J クイーン= Q キング= K エース= A スーツ: スペード= S クラブ= C ハート= H ダイヤモンド= D したがって、スペードのエースはSA、ハートの10はHT、ダイヤモンドの4番目はD4などになります。 Pokerfaceの1ラウンドは4つのステップで構成されています。 デッキがシャッフルされ、各プレイヤーに5枚のカードが配られます。 各プレイヤーには、好きなだけカードを交換する機会が与えられます。 各プレイヤーには、最大3枚のカードを獲得する機会が与えられます。 各プレイヤーはベストハンドを公開する必要があります。 最高のハンドが勝ち、そのプレーヤーにポイントを獲得します。同点の場合、両方のプレイヤーがポイントを獲得します。 単一のゲームでは、10ラウンドがプレイされ、最もポイントの多いプレーヤーが勝ち、単一の「勝ち点」を獲得します。同点の場合、両方のプレイヤーが勝利ポイントを獲得します。 レオには実際には多額のお金がないので、ボットはこれが賭けのない完璧な世界であると想定できます。 手 …

8
アイテムを収集して配置する
このチャレンジの目標は、リスト内の選択されたアイテムを収集し、それらをリスト内の特定の場所に移動することです。 視覚的な例として、入力値を取る(ブラックボックス化整数で表される)と(青色のボックスで表される、項目が選択され、真の意味がtruthy値の対応するリストTtruthyとFfalsyあります)。 最初の論理ステップは、真実ではなくマークされたアイテムを対応するリストに分けることです。各リストの相対的な順序を維持する必要があることに注意してください(つまり、選択したアイテムの順序はでなければならず1,4,5、選択していないアイテムの順序はでなければなりません2,3,6,7)。 2番目の論理ステップには、選択されていないアイテムの残りのリストにインデックスが与えられ、指定されたインデックスのアイテムの前にすべての選択されたアイテムを挿入します。インデックス作成が0から始まると仮定して、インデックス3に選択範囲を挿入するとします。これは、7ボックスの前のスポットに対応するため、選択したアイテムはの前に挿入する必要があり7ます。 最終的なソリューションは2,3,6,1,4,5,7です。 この論理図は、これを行う方法の1つを示していることに注意してください。出力が常に同じ観測可能な結果を​​生成する限り、プログラムは同じ論理手順を実行する必要はありません。 入力 プログラムには3つの入力が与えられます。 アイテムを表す整数のリスト。これは空のリストである可能性があります。このリストは常に一意の正の整数で構成され、必ずしもソート順ではありません(つまり、5はリストに2回含まれません)。 アイテムのリストと同じ長さの真実/偽の値のリスト。真実の値は、同じインデックスのアイテムが選択されたことを表します。 選択を挿入する場所を表す整数。リストの最初の項目のインデックスは、プログラムの実行ごとに一定である限り選択できます(たとえば、最初の項目はインデックス0またはインデックス1です)。プログラムが準拠している規則を指定してください。このインデックスは範囲内にある必要があります[starting_idx, ending_idx+1]。つまり、常に有効なインデックスになります。ケースインデックスがの場合ending_idx+1、選択はリストの最後に挿入する必要があります。この整数は、言語のネイティブ整数型に適合すると仮定できます。 入力は、任意のソース(stdio、関数パラメーターなど)から取得できます。 出力 出力は、アイテムの最終シーケンスを表すリストです。これは、任意のソース(stdio、戻り値、関数出力パラメーターなど)に対して行うことができます。任意の入力をインプレースで変更できます(たとえば、変更可能なリストを関数パラメーターとして指定し、そのリストで関数をインプレースで動作させる)。 テストケース 以下のテストケースはすべて、0ベースのインデックス付けを前提としています。0と1を使用して、それぞれセレクションマスクの偽/真の値を示しました。 テストケースのリストはたまたまフォーマットされています[a,b,c]が、入力リストが有限の順序のシーケンスを表している限りは問題ありません。 入力: [] [] 0 出力: [] 入力: [1,2,3,4,5,6,7] [1,0,0,1,1,0,0] 3 出力: [2,3,6,1,4,5,7] 入力: [1,2,3,4,5,6,7] [1,0,0,1,1,0,0] 0 出力: [1,4,5,2,3,6,7] 入力: [1,2,3,4,5,6,7] [1,0,0,1,1,0,0] 4 出力: [2,3,6,7,1,4,5] 入力: [1,2,3,4,5,6,7] [1,1,1,1,1,1,1] 0 出力: [1,2,3,4,5,6,7] 入力: [1,2,3,4,5,6,7] …

5
Piでの数字の実行
あなたの目標は、pi(π)の連続した同一の数字の厳密に増加するシーケンスを出力することです。シーケンスの各用語は、前の用語より1桁長くする必要があります。したがって、3(piの0桁目)は、一連の数字(長さ1)が最初に発生するときです。次に発生するのは33(piの桁24および25)です。もちろん、このシーケンスでは、piの桁が10を底とする必要があります。 これまでに知られているもの、および最初の6つはすべて最初の800桁以内で発生します。 3 33 111 9999 99999 999999 3333333 44444444 777777777 6666666666 ... (not in first 2 billion digits) 同じランで連続した9がすべて一緒に発生することに注意してください。したがって、見つかった次の大きなランが1000の連続したものである場合、シーケンスの複数の項0が埋められます。 私は自分のプログラムにこれ以上条件を見つけていません。最初の50000桁以上にはもう用語がないことを知っています。私のプログラムは500000桁で時間がかかりすぎたため、あきらめました。 参照実装 してもいいです: シーケンスを永久に出力する 整数nを取り、nシーケンスの最初の数を見つけます 整数nをn取得し、piの最初の桁に含まれるシーケンスの数値を見つけます。 コードで実行するものを指定してください。番号nは0または1である場合があります。 このmathoverflowの質問に触発されました。
13 code-golf  sequence  pi 

5
周期表でスクラブルをプレイ
周期表のシンボルを含むタイルのセットがあります。各シンボルは1回表示されます。あなたは作る言葉を考えていますが、それが可能かどうか知りたいです。 チャレンジ 入力パラメーターとして文字列を受け取る、お気に入りの言語でプログラムを作成します。入力はヌルではなく、スペースがなく、ASCII文字で構成されていると想定できます。 プログラムはその文字列を取得し、その単語が元素周期表のシンボルで構成されている場合は真理値を、出力できない場合は偽値を出力する必要があります。 この課題をより困難にするために、シンボルを2回使用しないでください。したがって、窒素を使用Nする場合N、同じ言葉で再び使用することはできません。 ルール 標準の抜け穴は許可されていません。要素1-118(水素からUnunoctium)のシンボルを使用できます。ここですべての要素のリストを見つけることができます。必要に応じて、ファイルまたは入力引数からシンボルのリストを読み取ることができます。 テストケース: Laos - true (LaOs) Amputation - true (AmPuTaTiON) Heinous - true (HeINoUS) Hypothalamus - true (HYPoThAlAmUS) Singapore - true (SiNGaPoRe) Brainfuck - true (BRaInFUCK) Candycane - false これはコードゴルフの挑戦であり、最短のコードが勝ちます。 重複として閉じる前:これはこの課題に似ているように見えるかもしれませんが、「周期表から可能なすべての単語のリストを生成する」ではなく、「任意の入力を取得して、周期表から作成できます」
13 code-golf 

11
大文字と小文字の区別は重要ですか?
トムは、彼の発明の新しいプログラミング言語を実装する予定です。しかし、実際に作業を開始する前に、彼は自分の言語で大文字と小文字を区別するかどうかを知りたいと思っています。 一方で、大文字小文字の区別は実装しやすいようですが、変数を形成する文字の組み合わせの可能性が不足する可能性があることを心配しています。つまり、名前の衝突を避けるために長い変数名を使用する必要があることを意味しますたとえば、あなたが使用することができHello、HEllo、heLLoおよび他の可能性の束言語は大文字と小文字が区別されますが、場合にのみ、HELLOそうでない場合)。 しかし、トムは細心の注意を払っているので、心配するだけでは十分ではありません。彼は数字を知りたい。 チャレンジ n入力として整数を指定し、n大文字と小文字を区別して、または区別せずに長さの文字列で可能な置換数の差を出力する(または返す)関数(または、言語がサポートしない場合は完全なプログラム)を記述します。 トムの言語では、変数名にはすべてのアルファベット文字、アンダースコア、および2番目の文字から始まる数字を含めることができます。 テストケース Input (length of the variable) -> Output (difference between the possibilities with case sensitivity and the possibilities with case insensitivity) 0 -> 0 1 -> 26 2 -> 2340 5 -> 784304586 8 -> 206202813193260 9 -> 13057419408922746 競合しないC ++リファレンス実装 void diff(int n) …

1
1D言語の解析
0、1、2、および角かっこのみを含む文字列を指定すると、文字列の文法ツリーが出力されます。 Aに2は2つの引数が必要です-左に1つ、右に1つ A 1は単一の引数を必要とします-左または右のいずれかに A 0は引数を必要とせず、基本ケースです 角括弧のペアは1つの引数としてカウントされ、角括弧の内容は文字列の残りの部分とは別に評価されます。ネストされたブラケットが可能です 入力文字列は常に完全なツリーであり、文字が落ちることはありません。また、文字列には単一の正しい解しかありません。関数は可換であり、引数の配列は2受け入れことに。これらの要件に適合しない入力を処理する必要はありません。 出力文法形式はfunction(arguments)再帰的に形式になります テストケース 0 --> 0 01 --> 1(0) 020 --> 2(0,0) 101 --> 1(1(0)) 0120 --> 2(1(0),0) 0120210 --> 2(1(0),2(0,1(0))) 01210 --> 2(1(0),1(0)) (020)210 --> 2(2(0,0),1(0)) ((020)20)1 --> 1(2(0,2(0,0)))

8
マリオはこのマップの最後に行くことができますか
パスの入力が与えられたときに、マリオがで示されるE開始点からで示される終了点に到達できるかどうかを判断するプログラムを作成しますS。 パスは次のようになります。 S = E ===== パスでは、さまざまなシンボルとそれらが表すものは次のとおりです。 =:壁/床/天井。マリオは壁を歩くことができず、床を越えたり、天井を飛び越えたりすることはできません(頭にぶつかるでしょう) (スペース):空気。マリオはこれを歩いて、ジャンプして、落ちていくことができます S:空気、マリオが始まる場所を示すことを除く。これは、常に入力の左端の列のグランドレベルに表示されます。 E:マリオが行きたい場所を示す以外の空気。これは、常に入力の右端の列のグランドレベルに表示されます。 入力には、マリオが歩くことができるすべての場所にスペースがあります。 マリオは前進しかできない。この例では、マリオは目標を達成できません S === === E ==== また彼はこれで E == == #== == == == S == ====== ただし、#最大4セルまでジャンプできるため、(入力には表示されない)で示されるスペースに到達できます。マリオは超人的です。彼の超人間性の別の例として: S = = = = = = # = = = = = = E ======= マリオはE、遠くに落ちて生き残り、静かに歩いて行くことができますE。#マリオはまっすぐに倒れるので、彼はに到達できないことに注意してください。 マリオがジャンプすることができ、実際に比較することによって非常に遠く前方に高いではなく。 S E …

4
私の「キーボア」は私をキーボーリングしています!最小限のキーストロークを見つけるのを手伝ってください
この質問を思いついた@ Agawa001の功績。 説明 私の新しい「キーボア」には2つのボタン、つまり+とがあり-ます。 メモリ内の番号はから始まり0ます。 +または-を連続して押すたびに、連続して押された正確な回数だけメモリをインクリメント/デクリメントします。 したがって、+4回押すと、1回目は1、2回目は2、3回目は3、4回目は4を追加します10(10)。 ここで、-3回押すと、1回目は1、2回目2、3回目3が減算され、4(4)が残ります。 TL; DR +と-の文字列が与えられたら、文字が変わるたびにそれを分割します。次に、m +個のシンボルの各結果の文字列は、m番目の三角形番号を-加算し、n 個のシンボルの各文字列は、n番目の三角形番号を減算します。 ウォークスルー まだ理解していない場合は、+++--+--作成方法を説明します1。 Program | Counter | Memory ---------------------------- | 0 | 0 + | +1 | 1 ++ | +2 | 3 +++ | +3 | 6 +++- | -1 | 5 +++-- | -2 | 3 …


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