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

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

17
または、2D配列の列と行をシフトします
目的 任意のサイズの2D配列が与えられた場合、列と行を交互にシフトするプログラムまたは関数を作成します 例 a b c d e f g h i j k l m n o 内のすべての要素最初の列シフトダウン一列、第二列シフトアップ一列、第三のシフトダウン彼らはエッジを1行ように、ラッピングに到達したとき。 k g m i o a l c n e f b h d j 最初の行のすべての要素は右にシフトし、2番目は左に、3番目は右に、など、端に達すると折り返されます。 o k g m i l c n e a j f b h d …

19
最初の「n」個の数字からゼロにする
チャレンジ 課題は、入力として正の整数「n」を取り、その合計がゼロに等しい。加算または減算のみを使用できることに注意してください。 たとえば、入力が3の場合、合計を0にする方法は2つあります。 1+2-3=0 -1-2+3=0 番号は1からn(この場合は3)まで順番に並んでいることに注意してください。例から明らかなように、最初の数値の符号も負になる可能性があるため、注意してください。 さて、3は非常に簡単でした。7番を検討する際のすべての方法をリストしましょう。 1+2-3+4-5-6+7=0 1+2-3-4+5+6-7=0 1-2+3+4-5+6-7=0 1-2-3-4-5+6+7=0 -1+2+3+4+5-6-7=0 -1+2-3-4+5-6+7=0 -1-2+3+4-5-6+7=0 -1-2+3-4+5+6-7=0 したがって、ここでは、合計8つの可能な方法があります。 入出力 前述のように、入力は正の整数になります。出力には、数値の合計がゼロになるすべての可能な方法が含まれている必要があります。同じことを行う方法がない場合は、好きなものを出力できます。 また、任意の形式で出力を印刷できます。しかし、それは理解できるはずです。たとえば、上記の例のように印刷できます。または、数字の記号を順番に印刷するだけでもかまいません。そうでない場合は、「0」と「1」を順番に印刷することもできます。「0」は負の符号を表示し、「1」は正の符号を表示します(またはその逆)。 たとえば、次を使用して1 + 2-3 = 0を表すことができます。 1+2-3=0 1+2-3 [1,2,-3] ++- 110 001 ただし、簡単にするために、最初の3つの形式のいずれかを使用することをお勧めします。すべての入力が有効であると想定できます。 例 7 -> 1+2-3+4-5-6+7=0 1+2-3-4+5+6-7=0 1-2+3+4-5+6-7=0 1-2-3-4-5+6+7=0 -1+2+3+4+5-6-7=0 -1+2-3-4+5-6+7=0 -1-2+3+4-5-6+7=0 -1-2+3-4+5+6-7=0 4 -> 1-2-3+4=0 -1+2+3-4=0 2 -> - 8 …

1
戦略的消失
この投稿は、このmathoverflow投稿に大まかに触発されています。 Vanisherは、ConwayのGame of lifeのパターンで、1ステップ後に完全に消えます。たとえば、次のパターンはサイズ9のVanisherです。 Vanishersの興味深い特性は、生きているセルを追加するだけで、任意のパターンを消失パターンにすることができることです。たとえば、次のパターンは、次のような消失パターンに完全に囲まれます。 ただし、さらに少ない数の生細胞を追加することで、そのパターンをVanisherにできます。 あなたの仕事は、私たちのためにこの仕事をするプログラムを書くことです。入力としてパターンが与えられ、入力を含む消失パターンを見つけて出力します。必ずしも最適なパターンを見つける必要はありません。 得点 プログラムにスコアを付けるには、サイズ6のポリレットすべてで実行する必要があります(対称的に同等の場合を二重にカウントするのではありません)。 これは、各ポリプレットを独自の行に含むペーストビンです。合計で524個あるはずです。これらは、(x,y)それぞれが生細胞の位置である6つの座標(タプル)のリストとして表されます。 スコアは、これらすべてのポリプレットをVanishersにするために追加された新しいセルの総数になります。 ネクタイ 同点の場合、実行するプログラムのサイズ7ポリレットのリストを提供します。 IO IOをかなり柔軟にして、適切な形式で入出力できるようにしますが、おそらく、入力した生の入力データと同じ形式で入力したいと思うでしょう。フォーマットは複数の実行で一貫している必要があります。 タイミング プログラムは、妥当なマシンで妥当な時間(1日未満)で実行する必要があります。私はこれをあまりにも強制するつもりはありませんが、私たち全員がうまくプレイしたいなら私は好むでしょう。

6
ハスクでのゴルフのヒント
Huskは、PPCGユーザーのLeoとZgarbによって作成された、まったく新しいゴルフ言語です。Jellyや05AB1Eなど、非常に簡潔であることが知られている言語の近くにとどまるか、さらには打ち負かすことさえあります。 ハスク特有のゴルフテクニックをいくつか挙げてみましょう。いつものように、回答ごとに1つのヒントを投稿してください。
15 code-golf  tips 

9
お気に入りの時間を見つける
特定のパターンに従う時間が本当に好きです。特に、すべての数字が同じであるか、すべての数字が左から右に1ずつ算術的に増加する時間が好きです。さらに、私が人々が私の時代に手紙を書くとき、私は内心的に嫌うので、そのAM / PMナンセンスのすべては私にとって死んでいます。したがって、私の好きな時間は次のとおりです。 0000 0123 1111 1234 2222 2345 私の心の平和のために、入力として現在の時間を与えられた単一のプログラムを書く必要があります:(A)今が私のお気に入りの時間の1つではない場合、私に両方を教えます(i)何分(ii)今から何分後に私の次のお気に入りの時間が発生するのと同様に、私の最後のお気に入りの時間からです。および(B)それがあればある今、私のお気に入りの回の1、単一の「信号値」を提供しています。 入力 プログラムはstdin、次のいずれかの形式で、現在の時刻を(関数引数、コマンドライン引数などの方法で)受け入れる必要があります。 文字列としての4桁の時刻 文字列として4桁の時刻を作成するために左側にゼロを追加できる整数 シーケンスの最初の整数が時間入力の左端(有効)桁になるように順序付けられた4つ(またはそれ以下)の整数のシーケンス(たとえば、または0951として有効に表現できます)[0, 9, 5, 1][9, 5, 1] 0000長さゼロのシーケンスとして表現することは受け入れられます 文字列入力の場合、数字のみを含む必要があり、コロンやその他の句読点は使用できません。 入力は常に有効な24時間と見なすことができます: HHMM、ここで0 <= HH <= 23および0 <= MM <= 59。うるう秒の可能性を無視します。 出力 プログラムは、入力値がターゲット時間であるかどうかに応じて、(A)または(B)のstdoutいずれかを提供する必要があります(関数の戻り値などはすべて問題ありません)。 のために): 次のような適切な形式の2つの数値を指定します。 適切な区切り文字を使用した単一文字列出力 連続した整数/文字列出力。たとえば、次のbash2行を出力しますstdout。 49 34 Pythonリスト、C配列など、長さ2の順序付けられた戻り値: [49, 34] 値はどちらの順序でもかまいません。たとえば、次の両方は、入力に対する有効な出力になります1200。 49 34 34 49 ただし、順序と区切り文字はすべての入力値で同じでなければなりません! (B)の場合: …
15 code-golf  date 

7
作る本があります!
あなたは仮想の昔ながらの印刷機で働いています。モノスペース文字をより速く整理できるように、できる限り短いプログラムを作成することにします。テキストの文字列とページサイズを指定して、テキストの各ページを生成して出力します。 例 たとえば、ページ幅14、高さ7、テキストの場合、本は次のようになります。 14, 7, "Fruits make an extremely good snack due to their utterly scrumptious sweetness. They are also very healthy for you." +------------+ | Fruits | | make an | | extremely | | good snack | | due to | +------------+ +------------+ | their | | utterly …

11
私を逆さまのクリスマスツリーにしよう!
チャレンジ 私たちは皆、通常のクリスマスツリーについて知っていますが、逆さまのクリスマスツリーについてはどうでしょうか。これはかなり簡単な、クリスマスをテーマにした挑戦です。このチャレンジの目的は、私をASCIIの逆さまのクリスマスツリーにすることです。このチャレンジのルールは次のとおりです。 奇数の正の整数を受け入れます。常にとの間にある7と仮定でき51ます。 ツリーのベースは、次の文字で構成されます。 ___ \ / | ツリーの上部(星)は、単一ので構成され*ます。 ツリーの各ラインの形式使用して構築される任意の数であるSを。たとえば、長さの行を作成する場合、行はである必要があります。または、長さの行を作成する場合、行は。<?>?-5<--->8<------> 以下にツリーのボディを構築する方法を示します。 n入力として与えられた奇数を取り、その長さの木の線を作成します。 減算4からn、その長さの木の行を作成します。 減算2からn、その長さの木の行を作成します。 nによる減少2。その後、n等しく5ない限り、手順2に戻ります。 ベース(ステップ2を参照)、星(ステップ3を参照)、ツリーの各行(ステップ4および5を参照)はすべて、元の奇数入力(ステップ1を参照)を最大として中央に配置する必要があります。幅。 例/テストケース odd number inputed: 7 ___ \ / | <-----> line length -> 7 <-> line length -> 7 - 4 = 3 <---> line length -> 7 - 2 = 5 * odd …

17
配列のXORソート
キーと文字列の配列が与えられたら、配列をシャッフルして、各要素がキーとXORされたときにソートされるようにします。 2つの文字列のXOR キーで文字列をXORするには、キーが永久に繰り返されると想定して、キーのペアで文字列の各文字値をXORします。たとえば、abcde^123次のようになります。 a b c d e 1 2 3 1 2 -------------------------------------------- 01100001 01100010 01100011 01100100 01100101 00110001 00110010 00110011 00110001 00110010 -------------------------------------------- 01010000 01010000 01010000 01010101 01010111 -------------------------------------------- P P P U W 仕分け 並べ替えは、常にXORされた文字列を辞書的に行う必要があります。つまり、1 < A < a < ~(ASCIIエンコードを想定) 例 "912", ["abcde", "hello", "test", "honk"] …

15
「初期の鳥」の正方形
定義 正の整数の正方形のシーケンスを取得し、それらを数字の文字列(つまり149162536496481100...)に連結する場合、「初期の鳥」の正方形は、自然な位置の前にこの文字列で見つかるものです。 たとえば、7 2(数値49)は、文字列のオフセット2にありますが、自然な位置はオフセット10です。したがって、7は最初の「早い鳥」の正方形です。 「初期の鳥」の正方形と見なされるには、正方形内のすべての数字が自然な位置の開始前に発生する必要があることに注意してください。自然な位置と部分的に重複する一致はカウントされません。 a(n)k 2が「初期の鳥」の正方形であるようなn番目の正の整数k です。 仕事 正の整数を指定するとn、出力されますa(n)。 1ベースまたは0ベースのインデックスを使用できますが、0ベースのインデックスを使用する場合は、回答の中でそう言ってください。 ソリューションは、少なくともa(53)(または、0ベースのインデックス付けを使用している場合)と同等の高さを処理できる必要がありますa(52)。 テストケース n a(n) 1 7 2 8 3 21 4 25 5 46 6 97 7 129 8 161 9 196 10 221 ... 13 277 ... 50 30015 51 35000 52 39250 53 46111 参照資料 OEIS A181585

14
ラインが通る象限
仕事 線の表現が与えられたら、その線が通過する象限の数を出力します。 線の有効な表現 次のように線を表すことができます 三つの符号付き整数A、BおよびC共通因数を共有しない、どこでどのAとBラインを表し、両方ともゼロではありませんAx + By = C、 四つの符号付き整数、、、および、点を通る直線を表すと、またはX1Y1X2Y2(X1, Y1)(X2, Y2) 言語に行がある場合、行を記述するデータ型(縦線をサポートする必要があります)。 垂直線を許可しない形式(傾斜切片形式など)で入力を行うことはできません。入力として整数を使用することを選択した場合、整数が包括的範囲にあると想定できます[-127, 128]。 仕様書 出力は常に0、2、または3になります(ラインは4つの象限すべてを通過することはできず、1つの象限だけを通過することもできません)。 軸上の線は、象限を通過しないと見なされます。原点を通る線は、2つの象限のみを通過すると見なされます。 どのクアドラントがパススルーされているかを返す必要はありません(ただし、明確にするためにテストケースにはそれらが含まれています)。 これはcode-golfなので、最短の有効な回答(バイト単位で測定)が勝ちます。 テストケース これらを使用する前に、適切な形式に変換する必要があります。 1x + 1y = 1 -> 3 (quadrants I, II, and IV) -2x + 3y = 1 -> 3 (quadrants I, II, and III) 2x + -3y = …

12
スペースで垂直に区切られた3列を印刷します
仕事 スペースで区切られた入力文字列を取得します。 単語をアルファベット順に並べ替えます。 スペースで区切られた3列で縦に印刷します。 チャレンジ 3つの列の高さはすべて、可能な限り均等に重み付けする必要があります。 3つの列はすべて左揃えにする必要があります。 これはcode-golfなので、最短のコードが勝ちます! 例 入力が次の場合: "cat caterpillar pie frog elephant pizza", 出力は次のようになります。 cat elephant pie caterpillar frog pizza 入力が次の場合、ケースに注意してください。 "a b c d e f g" 次のように印刷する必要があります。 a c e b d f g # or a d f b e g c # and …
15 code-golf  string 

6
16進数で色をコーディングする方法
六角形のテッセレーション、または平面のタイルは3色です-つまり、赤、青、緑などの3色のみを使用すると、色を共有する境界線を共有する2つの六角形がなくても、すべての六角形を着色できます。そのようなパターンを示す部分的な例。 ASCIIでの部分的な六角形のタイル(STDIN、ファイルからの読み取りなど)が与えられた場合、この色に合うように文字の色(ANSIコード、画像操作など)を変更します。ねじれは六角形の中央(*下の)は3色であり、その間の線は、対応する2つのヘックスの*色の混合である必要があります。線が外側の境界線にある場合、対応すると一致する必要があり*ます。 たとえば、 / \ / \ / \ / \ | * | * | * | * | \ / \ / \ / \ / | * | * | * | \ / \ / \ / 左上のヘックス*を赤に、その隣の2つを青と緑(時計回り)に色付けするとします。次に、|線はマゼンタで、/線は黄色である必要があります。色付けを続けると、最終的には次のようなものになります(わかりやすくするために拡大します)。 または、の入力に対して / \ | * | / \ …

7
振動の平等
on [l, r]から始まる、時間単位ごとに1単位の速度で、2つの整数点間で振動するオブジェクトがあります。あなたが仮定することができます。たとえば、オブジェクトがで振動する場合、次のようになります。lt=0l < r[3, 6] t=0 -> 3 t=1 -> 4 t=2 -> 5 t=3 -> 6 t=4 -> 5 t=6 -> 4 t=7 -> 3 t=8 -> 4 しかし、オブジェクトは継続的に振動するため、ともt=0.5 -> 3.5ありt=3.7 -> 5.3ます。 、の間[l1, r1]で振動する2つのオブジェクトが与えられた[l2, r2]場合t、2つのオブジェクトが同じ位置を共有するような時間が存在するかどうかを判断します。l1, r1, l2, r2任意の便利な形式でテイクを作成し、真実/偽の値を出力します。 真実の入力: [[3, 6], [3, 6]] [[3, 6], [4, 8]] …
15 code-golf  array-manipulation  decision-problem  code-golf  math  number-theory  palindrome  integer-partitions  code-golf  math  decision-problem  geometry  code-golf  string  random  code-golf  ascii-art  code-golf  kolmogorov-complexity  primes  code-golf  kolmogorov-complexity  code-golf  graphical-output  code-golf  number-theory  primes  integer  factoring  code-golf  sequence  array-manipulation  integer  code-golf  array-manipulation  matrix  code-golf  sequence  binary  code-golf  game  cellular-automata  game-of-life  binary-matrix  code-golf  string  ascii-art  code-golf  random  generation  logic  code-golf  string  code-golf  code-golf  sequence  array-manipulation  random  apl  code-golf  code-golf  sequence  primes  code-golf  math  sequence  integer  code-golf  number  arithmetic  array-manipulation  decision-problem  code-golf  ascii-art  number  code-golf  restricted-source  quine  code-golf  chess  board-game  code-golf  math  sequence  code-golf  number  sequence  kolmogorov-complexity  code-golf  number  sequence  arithmetic  code-golf  math  number  alphabet  code-golf  ascii-art  classification  statistics  apl  code-golf  array-manipulation  matrix  code-golf  string  kolmogorov-complexity  code-golf  sequence  binary  base-conversion  binary-matrix  code-golf  string  classification  code-golf  tips  python  code-golf  combinatorics  binary  subsequence  restricted-time  code-golf  number  number-theory  code-golf  math  number  complex-numbers  code-golf  string  code-golf  string  code-golf  string  random  game  king-of-the-hill  python  code-golf  number  sequence  code-golf  number  sequence  code-golf  code-golf  math  number  array-manipulation  code-golf  array-manipulation  decision-problem  code-golf  string  code-golf  sequence  integer 

4
人生のルールを変える
リアルなセルラーオートマトンは、コンウェイのゲームオブライフに似たセルラーオートマトンであり、(理論的に)無限大の正方形グリッドで動作します。 。 ただし、これらのLike-likeバージョンは重要な点で異なります。特定のセルが生き残るためのルールと、特定のセルが次世代に生き残るためのルールです。 たとえば、古典的なGame of Lifeはルールを使用しますB3/S23。つまり、新しいセルを生成するには3つの生きたセルが必要であり、生き残るには2つまたは3つの生きている隣人が必要です。この挑戦のために、我々は隣人がそれ自身を含まないので、各セルがちょうど8つの隣人を持っていると仮定します。 タスクには、開始構成、出生ルール、生存ルール、および正の整数(実行する世代数)が与えられ、可能な限り短いコードで指定された世代数のルールを使用して、Life-likeオートマトンをシミュレートします。最初の構成は、正方行列/ 2次元配列または複数行の文字列になりますが、選択できます。その他は、合理的な形式と方法で提供されます。 たとえば、出生規則が12345678(任意の生きている隣人)である場合、生存規則は2357あり、開始構成は 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 次の2世代は Generation 1: Generation 2: 0 0 0 0 0 1 1 1 1 1 0 …

14
フランケンシュタインの怪物の名前
前書き: ハロウィーンに近いので、ハロウィーンをテーマにしたランダムなチャレンジを考えていました。最終的に私はフランケンシュタインのウィキペディアのページを読んでいて、次のテキストに出くわしました: 生き物 フランケンシュタインが彼の創造を拒否した理由の1つは、彼が名前を付けていないという事実です。代わりに、「惨め」、「怪物」、「生き物」、「悪魔」、「悪魔」、「悪魔」、「それ」などの言葉で呼ばれます。フランケンシュタインは、第10章でクリーチャーと会話するとき、「卑劣な昆虫」、「忌まわしいモンスター」、「悪魔」、「惨めな悪魔」、および「忌まわしい悪魔」と呼びます。 ソース チャレンジ: 2つの整数(年と章)が与えられた場合、次の規則に基づいて文字列を出力します。 年が1818未満の場合:空の文字列を出力† 年がちょうど1818で、章が10未満の場合:リストからランダムな文字列を出力します["wretch", "monster", "creature", "demon", "devil", "fiend", "it"] 年がちょうど1818で、章が10以上の場合:リストからランダムな文字列を出力します["vile insect", "abhorred monster", "fiend", "wretched devil", "abhorred devil"] 1818年を超える年(したがって、本が出版された年)に戻り"Frankenstein's Monster"ます。 チャレンジルール: 小文字で出力するか、大文字で出力するか、組み合わせて出力するかを選択できます。 年は常に範囲内になります 1500-2017 チャプターは常に範囲内にあります1-24(グーグルで正しく検索した場合、本には24のチャプターがあります) †代わりに、オプション1に空の文字列を出力する、あなたはまた、出力に許可されているnull、undefined、false、0、またはお好みの任意の他の値が他の3つのオプションの一部ではないが、(あなたがあなたの答えに使用してきた内容を指定してください)。 出力には、先頭または末尾のスペース/タブ、または先頭の改行を含めることはできません。オプションの末尾の改行を1つ含めることができます。 一般的なルール: これはcode-golfであるため、バイト単位の最短回答が優先されます。 コードゴルフ言語では、非コードゴルフ言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。 回答には標準の規則が適用されるため、STDIN / STDOUT、適切なパラメーターを持つ関数/メソッド、完全なプログラムを使用できます。あなたの電話。 デフォルトの抜け穴は禁止されています(特に「偽の乱数」)。 可能であれば、コードのテストへのリンクを追加してください。 また、必要に応じて説明を追加してください。 テストケース: year,chapter possible outputs: 1700,1 ""; null; undefined; …

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