Codegolf Rainbow:反射による色の並べ替え


9

前書き:

2つの虹に関連する課題を投稿した後:Codegolf Rainbow:Fun with Integer-Arrays 1Codegolf Rainbow:Draw in Black-and-White 2、次のコメントは@ChrisMによってASCIIで作成されました(Draw in Black-and-White)挑戦

多分あなたはこれを知っていて、それは設計によるものです(虹は菱形でもアスキーでもないことを知っています、そしてより高次の位置はより複雑になります)、しかし2番目の虹では色が反転していませんか?

そして、彼は確かに正しい。二重の虹が見えるとき、2番目の虹は実際には最初の虹を反映しているため、色が逆になります。3つの虹は実際の二重の虹であり、3番目の虹は他の2つの虹の1つを反映しています。そして、4つの場合、2つの虹とそれらの2つの反射があります。
ここに画像の説明を入力してください

それでは、その事実を使用して、3番目の関連する課題を作成しましょう。

チャレンジ:

入力:正の整数でnあり>=2、かつサイズの整数のリスト>= n+1
出力:次のように順序付けられた同じリスト:

  1. 最初に、入力リストをサイズのサブリストに分割しますn(末尾のサブリストは範囲内の任意のサイズにすることができます[1,n])。
  2. 次に、サブリストのm数に基づいて次のことを行います。
    • m - m//2サブリストの最初の量を最低から最高にソートします(//整数除算はです)。(つまり、6つのサブリストを使用すると、最初の3つは最低から最高にソートされます。5つのサブリストを使用すると、最初の3つは最低から最高にソートされます。)
    • m//2サブリストの最後の量を最高から最低まで並べ替えます(//整数除算はです)。(つまり、6つのサブリストがある場合、最後の3つは最も高いものから最も低いものへと並べ替えられます。5つのサブリストがある場合、最後の2つは最も高いものから最も低いものへと並べ替えられます。)
  3. すべてのサブリストをマージして、再び単一のリストを形成します

例:

入力:n=7および[3,2,1,-4,5,6,17,2,0,3,5,4,66,-7,7,6,-5,2,10]
ステップ1:[[3,2,1,-4,5,6,17],[2,0,3,5,4,66,-7],[7,6,-5,2,10]]
ステップ2:[[-4,1,2,3,5,6,17],[-7,0,2,3,4,5,66],[10,7,6,2,-5]]
ステップ3 /出力:[-4,1,2,3,5,6,17,-7,0,2,3,4,5,66,10,7,6,2,-5]

入力:n=4および[7,4,-8,9,3,19,0,-23,-13,13]
ステップ1:[[7,4,-8,9],[3,19,0,-23],[-13,13]]
ステップ2:[[-8,4,7,9],[-23,0,3,19],[13,-13]]
ステップ3 /出力:[-8,4,7,9,-23,0,3,19,13,-13]

チャレンジルール:

  • 整数入力nは1より大きいことが保証されています。
  • integer-listのサイズは、より大きいことが保証されていますn
  • 末尾のサブリストは、より小さくすることができますn(例とテストケースで確認できます)。
  • I / Oフォーマットは、あらゆる合理的なフォーマットに柔軟に対応できます。整数または小数のリスト/配列、コンマ/スペース/改行で区切られた文字列、整数のストリームなどにすることができます(出力は、ステップ2のようなリストの2Dリストではない場合があります。ステップ3でリストをフラットに戻しますこのチャレンジには必須です。)

一般的なルール:

  • これはなので、バイト単位の最短の回答が優先されます。
    コードゴルフ言語では、コードゴルフ言語以外の言語で回答を投稿しないようにしないでください。「あらゆる」プログラミング言語について、可能な限り短い答えを考え出すようにしてください。
  • 回答には標準規則が適用されるため、STDIN / STDOUT、関数/メソッドを適切なパラメーターと戻り値の型の完全なプログラムで使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテストを含むリンクを追加してください。
  • また、回答の説明を追加することを強くお勧めします。

テストケース:

Inputs: n=7 and [3,2,1,-4,5,6,17,2,0,3,5,4,66,-7,7,6,-5,2,10]
Output: [-4,1,2,3,5,6,17,-7,0,2,3,4,5,66,10,7,6,2,-5]

Inputs: n=4 and [7,4,-8,9,3,19,0,-23,-13,13]
Output: [-8,4,7,9,-23,0,3,19,13,-13]

Inputs: n=2 and [7,-3,1]
Output: [-3,7,1]

Inputs: n=3 and [1,6,99,4,2]
Output: [1,6,99,4,2]

Inputs: n=2 and [5,2,9,3,-5,-5,11,-5,4,12,9,-2,0,4,1,10,11]
Output: [2,5,3,9,-5,-5,-5,11,4,12,9,-2,4,0,10,1,11]

Inputs: n=3 and [5,2,9,3,-5,-5,11,-5,4,12,9,-2,0,4,1,10,11]
Output: [2,5,9,-5,-5,3,-5,4,11,12,9,-2,4,1,0,11,10]

回答:


5

Brachylog18 17 16バイト

ġ₎↔ḍ↔{izo₎ᵐ↔}ᶠcc

オンラインでお試しください!

@sundarのおかげで-1バイト

入力がであることを期待しています[<integer list>, n]。負の整数は_、Brachylogの「低マイナス」で表されることに注意してください。出力変数はRです。

初めてBrachylogを試すので、バイト数を減らすには最適ではなく、熟していると思います。

説明

パーティション、分岐、インデックス(0:asc、1:desc)に基づく並べ替え、フラット化。

ġ₎               | split head of input into groups of length n (last of list)
  ↔              | reverse so that...
   ḍ             | dichotomize splits in two, attaching any additional element to the second list
    ↔            | reverse so first half of partitions corresponds to the 0 index
     {      }    | apply
      i          | : append index
       z         | : zip each sublist with the index of its parent
        o₎ᵐ      | : map over sublists, ordering by the zipped index
           ↔     | : undo earlier reverse
             ᶠ   | find all outputs
              cc | flatten two levels

2番目のソリューションを少し調整して、17バイトを取得します。オンラインでお試しください!
サンダー-モニカを復活させる'19年

@sundar私はこっそりと疑いました。
冗長性

この言語は何のためですか?
Sam Orozco

@SamOrozco Terse宣言型論理プログラミング。言語名をクリックしてみてください!
アダム2018




2

05AB1E(レガシー)、9バイト

ô€{2ä`í«˜

オンラインでお試しください!

オンラインでお試しください!05AB1E(エリクサー書き換え) -入力がスタック上にあると想定し、デフォルトのI / O方法。

ケビンは、私が10に到達するために使用していた彼自身の11バイターを思い付きました。


良いですね。これが11バイトの代替案としての私の最初のソリューションですô€{2äRć€R)˜
Kevin Cruijssen、2018

1
@KevinCruijssenアプローチを使用して10に到達しました。編集:今すぐ9!
Xcoder氏18

あ、いいね。完全に忘れてしまったí。そして素敵な追加ゴルフ。
Kevin Cruijssen、2018

2

JavaScript(ES6)、82 81バイト

@redundancyのおかげで1バイト節約

入力をとして受け取ります(list)(n)

a=>n=>(g=z=>a+a?[...a.splice(0,n).sort((x,y)=>1/z?x-y:y-x),...g(a[i+=n])]:a)(i=0)

オンラインでお試しください!


以来a、一次元である、私はあなたが交換することができると信じていa>[]a+a、空でないケースを確認し、1つのバイトを保存します。パーティションを設定し、いつソートを逆にするかを決定するための本当に賢い再帰的な戦略!
冗長性

@redundancyそれは確かに安全であるべきです。ありがとう!
Arnauld
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.