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

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

22
数字の三角形
チャレンジ: 入力:正の整数nnn 出力: 範囲でリストを作成し、それを文字列に結合します(つまり、が文字列になります)。[1,n][1,n][1,n]n=13n=13n=1312345678910111213 次に、この文字列のプレフィックスまたはサフィックスを使用して、入力整数に基づいて次の4つの方向のいずれかで三角形を出力します。 もしn≡0(mod4)n≡0(mod4)n\equiv 0\pmod 4、三角形状の出力を◣ もしn≡1(mod4)n≡1(mod4)n\equiv 1\pmod 4、三角形状の出力を◤ もしn≡2(mod4)n≡2(mod4)n\equiv 2\pmod 4、三角形状の出力を◥ もしn≡3(mod4)n≡3(mod4)n\equiv 3\pmod 4、三角形状の出力を◢ 例: 入力:n=13n=13n=13 ので、13≡1(mod4)13≡1(mod4)13\equiv 1\pmod 4、形状が◤あろう。ここでは、3つの有効な出力が考えられます。 12345678910111213 11111111111111111 12345678910111213 1234567891011121 2222222222222222 2345678910111213 123456789101112 333333333333333 345678910111213 12345678910111 44444444444444 45678910111213 1234567891011 5555555555555 5678910111213 123456789101 666666666666 678910111213 12345678910 77777777777 78910111213 1234567891 8888888888 8910111213 123456789 999999999 910111213 12345678 …

13
超順列
前書き あなたは、新しいハイテクスタートアップDejavuからいくつかの秘密の計画を盗むことを任された犯罪者です。奥の壁をこっそり覗き込みますが、ドアを開くにはピンが必要です。ロックのメーカーを認識し、0〜4のすべての数字を使用して5桁のピンを取ることを知っています。各桁が入力されると、ロックは入力された最後の5桁をチェックし、コードが正しい場合は開きます。あなたは、このロックをすり抜けなければなりません。 一言で言えば超順列 順列は、特定の数字セットのすべての可能な組み合わせです。たとえば、数字0、1、2のすべての順列は次のとおりです。 012、021、102、120、201、および210。 これらすべての順列を連結すると、スーパー順列が得られます。 012021102120201210 このスーパー順列には0、1、2の順列がすべて含まれていますが、これよりも短い順列を作成することもできます。ここでは少しスキップしますが、これらの数字の最短のスーパーパーミュテーションは次のとおりです。 012010210 私たちの意図と目的のために、これは本質的にそれらの数字のすべての可能な順列、すなわちスーパー順列を含む数字の最短文字列です。 仕事 心配する必要のある数字がさらに2桁あるため、上記のスーパー順列の例よりもタスクが少し難しくなります。-スーパー順列について読んでいない場合、または上記の私の例が少し不明瞭だった場合、このテーマに関するパトリック・ホナーのこの素晴らしい記事を読むことを強くお勧めします(この挑戦は彼の記事に非常に強く触発されたので、彼に敬意を表します):https://www.quantamagazine.org/unscrambling-the-hidden-secrets-of-superpermutations-20190116/。あなたの目標は、数字0〜4のスーパー順列を生成する可能な限り短いプログラムを書くことです。 得点 プログラムはいかなる種類の入力も受け付けず、0から4までの数字のスーパー順列を生成します。この結果のスーパー順列は、選択した言語が提供する範囲でコンソールに出力するか、ユーザーに表示する必要があります。これは可能な限り短い順列である必要はなく、有効なスーパー順列でなければなりません。このため、目標は最短の順列を持つ最短のプログラムを書くことです。そのため、次のようにスコアを計算する必要があります。 ファイルサイズ(バイト)*生成されたスーパーパーミュテーションの長さ(桁) たとえば、40バイトのプログラムがあり、スーパー順列の長さが153桁の場合、スコアは次のようになります。 40 * 153 = 6120 いつものように、目標はこのスコアをできるだけ低くすることです。 テンプレート 回答を投稿する方法は次のとおりです。 言語| スコア 作業環境のコードへのリンク(可能な場合) code snippet コードの説明など ファイナリティ これは、このサイトに関する最初の質問の1つです。それで、私が何かを逃しているのか、私の挑戦のセクションが不明確なのか教えてください。ありがとう、そして楽しいゴルフを!

15
ASCII Podiumを構築する
スポーツ競技では、勝者が表彰台に上ることがよくあります。1位の人が真ん中、2位の人が真ん中の高さ、3位の人が最も低く、右の方へ。ここで、いくつかの特別な調整を加えて再現します。 表彰台は以下のとおりです。 @---@ | @ | @---@| | | | @ || | | | | || | |@---@ | | || | || @ | これは、この課題の基礎となります。次のステップは、表彰台をその上にいる人々(印刷可能なASCII文字列)に合わせて十分に広くすることです。ただし、美的美しさを確保したいので(これは素晴らしい写真の機会です)、各表彰台は同じ幅である必要があり、幅は奇数でなければなりません。さらに、人々は(明らかに)表彰台の中央に立つことを望みます。そのため、弦はできるだけ中央に配置する必要があります。(左または右に揃えることができ、一貫している必要はありません。)上記の表彰台は最小サイズであり、3幅が広いと見なされます。 たとえば、["Tom", "Ann", "Sue"]1位、2位、3位をそれぞれ表す入力が与えられた場合、次の表彰台を出力します。 Tom @---@ Ann | @ | @---@| | | | @ || | | Sue | | || | |@---@ …

12
密パック10進数(DPD)から10進数
nandgameファンの場合:論理ゲートでもDPDを10進数で試してください! バックグラウンド 密パック10進数(DPD)は、10進数を2進数で効率的に格納する方法です。10ビットで3桁の10進数(000〜999)を保存します。これは、ナイーブBCD(4ビットで1桁を保存)よりもはるかに効率的です。 表記法 ato の小文字iは、10進表現にコピーされるビットです。 0および1は、入力または出力ビットパターンの正確なビットです。 x 変換ではビットは無視されます。 変換表 以下は、DPDの10ビットから3桁の10進数への変換表です。各10進数は4ビットバイナリ(BCD)として表されます。両側は、最上位桁から最下位桁に向かって左から右に書き込まれます。 Bits => Decimal (Digit range) a b c d e f 0 g h i => 0abc 0def 0ghi (0-7) (0-7) (0-7) a b c d e f 1 0 0 i => 0abc 0def 100i (0–7) (0–7) (8–9) …

6
2ダースのキス数近似
1から24までの数字が与えられた場合、キスの数字を最新の知識で出力します(一部の数字は複数の許容可能な出力を持ちます)。出力はすべて以下にリストされているため、ジオメトリの知識は必須ではありません。 キス番号問題に関するウィキペディアのページから: キス数は、それぞれが特定の単位球に触れるように配置できる、重なり合わない単位球の数として定義されます つまり、1つの単位球が与えられた場合、どれだけ多くの単位球が重なることなく、それに触れることができますか?質問は、球がN-1次元の球体であると理解されるN次元空間で行われます。 例えば: 2次元空間では、単位円は6つの他の単位円に触れることができます。 3次元空間では、単位球は他の12個の単位球に触れることができます。 ウィキペディアのページには、1〜24次元空間の値がリストされています。ただし、これらの一部はまだ正確にわかっていないため、下限と上限のみが指定されています。この表は、新しい証明による将来の範囲の狭小化に関係なく、固定されたままになるようにここに再現されています。将来的にウィキペディアのページが変更された場合でも、ソリューションはこの固定テーブルに対して判断されます。 境界の表 Dimension Lower bound Upper bound 1 2 2 2 6 6 3 12 12 4 24 24 5 40 44 6 72 78 7 126 134 8 240 240 9 306 364 10 500 554 11 582 870 12 840 1357 …

30
常に同じ長さの出力
以下のような課題にコードと同じ長さの出力と二回のコードの長さを出力を作成し、私は別のが、同様の課題を考えました。 タスクは出力を生成することです。文字列、文字のリスト、またはプログラムのデフォルトの出力形式を使用できます。ただし、入力に関係なく、出力は常に同じ長さでなければなりません。さらに重要なことに、出力は入力ごとに異なる必要があります。 入力 単一の整数nnnの範囲は、言語の選択によって決まります。お使いの言語が可変長整数を持っている場合、範囲は−231≤n&lt;231−231≤n&lt;231-2^{31} \leq n < 2^{31}。 出力 文字列または文字のリスト、またはSTDOUTまたはSTDERRへの印刷。これらの方法のいずれかのみを使用できます。出力は、入力に関係なく同じ長さである必要がありますが、どの長さを定義するかはユーザー次第です。出力には、数字0-9またはマイナス記号が含まれていない場合があります-。出力は決定的でなければなりません。 正式な証明、引数、または総当たり検索によって、すべての出力に対して可能な入力が1つしかないことを証明できるはずです。 これはコードゴルフの質問であるため、余分なバイトを取り除きます。すべての言語が歓迎されます、より良い!

25
パスワードを生成する
パスワードを思い出すのは非常に難しいので、パスワードを生成する方法を思いつきました。 パスワードを生成する方法は、次の手順に従って単語または文から行います。 左から右へ開始 各文字の数を見つける 順番に文字を入れてください 繰り返しの多い文字は最後になります 同じ繰り返しの文字はアルファベット順に並べられます 空白を含む数字と特殊文字は無視されます(9、4、@、(、*などは無視されます) 大文字と小文字を区別しないグループ文字。出力では、入力で最後に出現したケースを使用します 文字の数は、5H17M345Kなどの任意の数にすることができます 入力がすべて数字または特殊文字の場合、出力は空の文字列になります(例:入力 "12 $ * 34 ^!")次に「」を出力します アルファベット順の同じ出現の順序が重要でない場合、たとえば1a1B1c 例: Input: Kitkat Tango (2k / 1i / 3T / 2a / 1n / 1g / 1o) Output: 1g1i1n1o2a2k3T もう一つの例: Input: Database Partitions Task (1D / 5a / 4T / 1b / 3s …

11
バッテリー残量の表示
バッテリー残量を最大充電の割合として表示します 電話、電卓などでコードを実行できない場合は、少なくともラップトップに環境をインストールできることを忘れないでください。バッテリーを搭載したデバイスで絶対に実行できない場合、残念なことに、印刷するための有用な値がないため、言語は対象外です。 結果を画面に表示する必要があります。これは、理論的には、ユーザーがバッテリーをチェックするための便利なユーティリティであると想定されています。バッテリーの割合をファイルに書き込むのはあまりにも不格好で、ユーザーがファイルをチェックする必要があります。したがって、画面上に表示することは、デフォルトのIOでオーバーライドできない仕様の一部です。そうは言っても、STDOUTのようなものが通常の方法で画面に表示されるのを妨げるものは何もないと想定できます。 多くの携帯電話のように、OSによって常にバッテリーの割合が画面にすでに表示されている場合でも、ゼロバイトのソリューションがあるというわけではありません。組み込みのディスプレイが存在しないと仮定し、バッテリーパーセントを別の場所に再度表示する必要があります。 編集:出力形式が開かれています。パーセントの数字だけを表示することも、追加の出力を含む数字を表示することもできます。 Edit2:パーセントを表す数字は、出力内の既知の場所(出力の最後から50行以内)に表示​​される必要があり、その場所は呼び出し間で変化してはなりません。パーセントを表す数字は、各側に少なくとも1つの非数字文字で他の出力から分離する必要があります。 参考のため、変更前の古い出力形式を次に示します。 Remaining battery is ddd% または Remaining battery is ddd percent
26 code-golf 

23
配列を等化する
チャレンジ 整数の配列aaaが与えられます。では動きますができ増減配列の要素を1だけ。あなたの仕事は、配列をイコライズすることです。つまり、いくつかのmoveを実行して、配列のすべての要素を等しくします。しかし、それだけでは十分ではありません!また、できるだけ少ない動きをしたいです。 入力 整数の空でない配列 aaa 必要に応じて、長さの。aaa 出力 配列aを均等化するために必要な移動の最小数。aaa ルール 標準ルールのための有効な応募、I / O、抜け穴適用されます。 これはcode-golfなので、最短の解決策です(バイト単位)が優先されます。いつものように、ゴルフ言語のとてつもなく短い解決策で、選択した言語で長い回答を投稿することを妨げないでください。 これはルールではありませんが、ソリューションをテストするためのリンクとそれがどのように機能するかの説明が含まれていれば、あなたの答えはよりよく受け取られます。 例 Input --&gt; Output [10] --&gt; 0 [-1, 0, 1] --&gt; 2 [4, 7] --&gt; 3 [6, 2, 3, 8] --&gt; 9 [5, 8, 12, 3, 2, 8, 4, 5] --&gt; 19 [1,10,100] --&gt; 99

7
不潔でユニーク
この質問では、文字列としてのプログラムについて説明します。これは文字ではなくバイトの文字列です。結果のプログラムがどのようにレンダリングまたは表示されるかは、この課題にとって重要ではなく、メモリ内での表示方法のみが重要です。 自然のままのプログラムは、プログラムである実行がないエラーをしたときに、しかし、それはサイズのたび連続サブエラーになりますことを、N、1 ≤ N &lt;を| S | 、削除されます。SSSnnn1 ≤ N &lt; | S|1≤n&lt;|S|1\leq n < \left|S\right| 不潔プログラムは、プログラムで、反対側のランときに行い、エラー、サイズがいつでも連続サブN、1 ≤ nは&lt; | S | 、削除され、エラーにはなりません。SSSnnn1 ≤N &lt; | S|1≤n&lt;|S|1\leq n < \left|S\right| このチャレンジでは、エラーはSTDERRへの空でない出力です。 あなたの挑戦は、できるだけ多くのユニークなバイトを使用する不潔なプログラムを書くことです。これは、コードに表示される一意のバイトごとに1ポイントを獲得し、スコアが大きいほど良いことを意味します。したがって、最大スコアは256です。

2
いくつかのビットを削除してカウントする
2^n長さのすべての異なるバイナリ文字列を考慮しn、仮定しn &gt; 2ます。b &lt; n/2各バイナリ文字列からビットを正確に削除して、n-b残りの長さの文字列を残すことができます。残っている個別の文字列の数は、削除するビットによって異なります。残りの異なる文字列をできる限り少なくすることが目的であると仮定すると、この課題は、の関数として残すことができる文字数を計算するコードを記述することですn。 例、n=3およびb = 1。2つの文字列11とのみを残すことができます00。 ためn=9とb = 1,2,3,4、私たちは持っています70,18,6,2 ためn=8とb = 1,2,3、私たちは持っています40,10,4 ためn=7とb = 1,2,3、私たちは持っています20,6,2 ためn=6とb = 1,2、私たちは持っています12,4 ためn=5とb = 1,2、私たちは持っています6,2 この質問は、元々、MOに関する別の形式で2014年に私によって提起されました。 入出力 コードは整数nを取り込んで、b開始b = 0から増加する各値に対して単一の整数を出力する必要があります。 スコア あなたのスコアは、私のLinuxベースのPCで1分以内にnすべてのコードが完了する最大のものb &lt; n/2です。タイブレークの場合b、コードが獲得できる最大の値は、共同で最大の値をn獲得します。、あまりにもその基準にタイブレークの場合の最大値のための最速のコードnとbを決定します。時間が1〜2秒以内であれば、最初に投稿された回答が優先されます。 言語とライブラリ 任意の言語のライブラリを使用できます。私はあなたのコードを実行しなければならないので、それが無料で(ビールのように)Linuxで動作する場合に役立ちます。

18
それらを合計して10,000にする
最近、PPCGに関する10,000件の質問のしきい値に達しました。やった!これを簡単なチャレンジで祝いましょう。 入力 二つの整数との両方に、その結果、。AAABBB[ 1..9999 ][1..9999][1..9999]A + B &lt; 10000A+B&lt;10000A+B<10000 仕事 あなたの仕事は、これらの整数の1つに1桁を追加するか、ように両方に1桁を追加することです。と両方に数字を追加する場合、必ずしも同じ数字である必要はありません。A + B = 10000A+B=10000A+B=10000AAABBB 新しい数字は、元の整数の先頭、末尾、または途中のどこにでも追加できます。ただし、先行ゼロを追加することはできません。 例: 以下のために、次の変換が有効です。A = 923A=923A=923 192392739238192392739238\color{red}1923\\92\color{red}73\\923\color{red}8 しかし、これらは無効です: 0923109239427309231092394273\color{red}{0}923\\\color{red}{10}923\\9\color{red}{4}2\color{red}{7}3 与えられたおよび、2つの解決策があります。A=923A=923A=923B=72B=72B=72 9238+762=100009273+727=100009238+762=100009273+727=10000923\color{red}8 + 7\color{red}62 = 10000\\92\color{red}73 + 72\color{red}7 = 10000 出力 すべての可能なソリューションのリストを印刷または出力する必要があります。 上記の例では、予想される出力はになります[[9238,762],[9273,727]]。 ルール I / Oは、合理的で明確な形式で処理できます。整数の代わりに、文字列、数字のリストなどを使用できます。 入力には、少なくとも1つのソリューションがあることが保証されています。 出力を重複排除しないでください。ただし、テストコードが、たとえばTIOのフッターセクションなど、何らかの後処理でテストコードの重複を排除している場合は理解できます。 これはコードゴルフの挑戦です。 テストケース Input --&gt; Output 934, 654 --&gt; …

16
ローマ軍の盾
サンドボックスの投稿(削除済み) 古いローマ軍隊は世界中で非常に有名です。これらの陣形では、ローマ軍団は幾何学形状(通常は長方形)にグループ化され、側面を保護し、シールドを使用してその側面を保護します。内部の位置にいる軍団はシールドを頭の上に置いて上部を覆い、側面の軍団は2つ以上のシールドを運んだ。彼は3つの盾を持っていました、誰かが5つの盾を持っていたフォーメーションに一人でいた場合はい、私は人間が5つの盾を運ぶことは不可能ですが、どういうわけか彼らはそれをしました)。このフォーメーションを使用して、すべてのローマ軍団は自分自身を保護し、当時最も困難な敵でした。 歴史は、ローマの将軍が、最高のフォーメーションの形状は正方形(行と列の同数の軍団員)であると述べていたと伝えています。問題は、次の目的で軍隊を分割する必要があるフォーメーション(およびサイズ)の数を把握することでした。 軍団をフォーメーションから外さないでください(ただし、彼は単一の軍団フォーメーションを認めました) 必要なシールドの量を減らす 一般的に、彼はいくつかの数学と計算を行った後、この2つの条件を達成する最良の方法は、可能な限り最大の正方形から始め、軍団がなくなるまで繰り返すことだと考えました。 例: 彼の軍隊に35人の軍団がいる場合、フォーメーションは 5x5の軍団の広場(これが可能な最大の広場です)。 残りの軍団(10) 3x3の正方形 残りの軍団(1) 1x1の正方形。 最後に次のようになります。 5x5 * * * * * 3x3 * * * * * * * * 1x1 * * * * * * * * * * * * * * * * * * * * …
26 code-golf  matrix 

24
任意のランダム性
ランダムネスは楽しいです。意味のない挑戦は楽しいです。 整数入力が与えられると、すべての整数の合計がに等しくなるように(両端を含む)の完全にランダムな整数のセット(順序なし、一意)をn出力する関数を記述します。n1n^2n^2 有効な各セットに発生する可能性がゼロ以外であれば、ランダム性は均一である必要はありません。 バイト単位の最短回答(各言語ごと)が勝ちです。 例 Input (n) = 1, Target (n^2) = 1 Sample of possible outputs: 1 Input = 2, Target = 4 Sample of possible outputs: 3, 1 1, 3 Input = 3, Target = 9 Sample of possible outputs: 6, 1, 2 3, 5, 1 4, 3, …

3
ゴルフ無料ランチ
為替レート表を指定して、最大の利益をもたらす一連の交換を見つけます。 例として、通貨考えるriary(ホーム通貨)、Bの AHT、Cの EDI、およびDのいずれかから別の速度は(任意のトランザクションレートが課された後)に(行、列)エントリによって与えられるenarを以下の為替レート表: TO A B C D A 0.9999 1.719828 4.509549 0.709929 F B 0.579942 0.9999 2.619738 0.409959 R O C 0.219978 0.379962 0.9999 0.149985 M D 1.39986 2.429757 6.409359 0.9999 明らかにAをAに交換することは、このデスクが何もしないことで喜んで請求するので、素晴らしいアイデアではありません。 それほど明らかではありませんが、このテーブルでは、Aを他の通貨と交換してから再び交換することは損失メーカーです。 via B: 1.719828 × 0.579942 = 0.997400489976 via C: 4.509549 × 0.219978 = 0.992001569922 via …

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