Codegolf Rainbow: Farben mit Reflexion sortieren

9

Einführung:

Nachdem ich zwei Herausforderungen im Zusammenhang mit Regenbogen gepostet hatte: Codegolf Rainbow: Spaß mit Integer-Arrays 1 und Codegolf Rainbow: Zeichnen in Schwarzweiß 2 , wurde der folgende Kommentar von @ChrisM im ASCII ( Zeichnen in Schwarzweiß) abgegeben ) Herausforderung :

Vielleicht wissen Sie das und es ist beabsichtigt (ich weiß, dass Regenbogen auch keine Rauten oder Ascii sind und die Positionen höherer Ordnungen komplizierter werden), aber sind die Farben im 2. Regenbogen nicht umgekehrt?

Und er hat tatsächlich Recht. Wenn Sie einen doppelten Regenbogen sehen, ist der zweite tatsächlich ein Spiegelbild des ersten, sodass die Farben umgekehrt sind. Mit drei Regenbogen ist es ein doppelter Regenbogen, wobei der dritte ein Spiegelbild eines der beiden anderen ist. Und mit vier gibt es zwei Regenbogen und zwei Reflexionen davon.
Geben Sie hier die Bildbeschreibung ein

Lassen Sie uns anhand dieser Tatsache eine dritte Herausforderung stellen.

Herausforderung:

Eingänge: Eine positive ganze Zahl , ndie ist >=2, und eine Liste von ganzen Zahlen von Größe >= n+1.
Ausgabe: Dieselbe Liste wie folgt geordnet:

  1. Teilen Sie zuerst die Eingabelisten in Unterlisten mit einer Größe auf n(wobei die nachfolgende Unterliste eine beliebige Größe im Bereich haben kann [1,n]).
  2. Dann machen wir Folgendes basierend auf der Anzahl der Unterlisten m:
    • Sortieren Sie die erste m - m//2Anzahl von Unterlisten von der niedrigsten zur höchsten (wobei //die Ganzzahl geteilt ist). (Dh mit 6 Unterlisten werden die ersten drei vom niedrigsten zum höchsten sortiert; bei 5 Unterlisten werden die ersten drei vom niedrigsten zum höchsten sortiert.)
    • Sortieren Sie die letzte m//2Anzahl von Unterlisten vom höchsten zum niedrigsten (wobei //die Ganzzahldivision ist). (Dh mit 6 Unterlisten werden die letzten drei vom höchsten zum niedrigsten sortiert; bei 5 Unterlisten werden die letzten beiden vom höchsten zum niedrigsten sortiert.)
  3. Führen Sie alle Unterlisten zu einer einzigen Liste zusammen

Beispiele:

Eingänge: n=7und [3,2,1,-4,5,6,17,2,0,3,5,4,66,-7,7,6,-5,2,10]
Schritt 1: [[3,2,1,-4,5,6,17],[2,0,3,5,4,66,-7],[7,6,-5,2,10]]
Schritt 2: [[-4,1,2,3,5,6,17],[-7,0,2,3,4,5,66],[10,7,6,2,-5]]
Schritt 3 / Ausgang:[-4,1,2,3,5,6,17,-7,0,2,3,4,5,66,10,7,6,2,-5]

Eingänge: n=4und [7,4,-8,9,3,19,0,-23,-13,13]
Schritt 1: [[7,4,-8,9],[3,19,0,-23],[-13,13]]
Schritt 2: [[-8,4,7,9],[-23,0,3,19],[13,-13]]
Schritt 3 / Ausgang:[-8,4,7,9,-23,0,3,19,13,-13]

Herausforderungsregeln:

  • Der Integer-Eingang nist garantiert größer als 1.
  • Die Größe der Integer-Liste ist garantiert größer als n.
  • Die nachfolgende Unterliste kann kleiner sein als n(wie in den Beispielen und Testfällen zu sehen ist).
  • Das E / A-Format ist in jedem vernünftigen Format flexibel. Kann eine Liste / ein Array von Ganzzahlen oder Dezimalstellen, eine durch Kommas / Leerzeichen / Zeilenumbrüche getrennte Zeichenfolge, ein Strom von Ganzzahlen usw. sein. (Die Ausgabe ist möglicherweise keine 2D-Liste von Listen wie in Schritt 2. Schritt 3, um sie wieder in eine einzelne Liste zu reduzieren ist für diese Herausforderung erforderlich.)

Allgemeine Regeln:

  • Dies ist , also gewinnt die kürzeste Antwort in Bytes.
    Lassen Sie sich nicht von Code-Golf-Sprachen davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, eine möglichst kurze Antwort für "jede" Programmiersprache zu finden.
  • Für Ihre Antwort gelten Standardregeln , sodass Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden dürfen. Ihr Anruf.
  • Standardschlupflöcher sind verboten.
  • Wenn möglich, fügen Sie bitte einen Link mit einem Test für Ihren Code hinzu.
  • Es wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.

Testfälle:

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]
Kevin Cruijssen
quelle

Antworten:

5

Brachylog , 18 17 16 Bytes

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

Probieren Sie es online aus!

-1 Byte dank @sundar

Erwartet Eingabe als [<integer list>, n]. Beachten Sie, dass negative Ganzzahlen mit _Brachylogs "niedrigem Minus" dargestellt werden. Ausgangsvariable ist R.

Ich versuche es zum ersten Mal mit Brachylog, daher stelle ich mir vor, dass es nicht optimal und reif für die Reduzierung von Bytes ist.

Erläuterung

Partition, Gabelung, Sortierung nach Index (0: aufsteigend, 1: absteigend), Abflachen.

ġ₎               | 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
Redundanz
quelle
Eine kleine Änderung an Ihrer zweiten Lösung, um 17 Bytes zu erhalten: Probieren Sie es online aus!
Sundar - Reinstate Monica
@ Sundar Ich hatte den schleichenden Verdacht, dass ich eine zu viele kartografiert habe, danke!
Redundanz
Wofür ist diese Sprache?
Sam Orozco
@SamOrozco Knappe deklarative Logikprogrammierung. Klicken Sie auf den Namen der Sprache!
Adám
3

Gelee , 9 Bytes

sṢ€ŒHUÐeF

Probieren Sie es online aus!

Mr. Xcoder
quelle
1
Ich verstehe nicht, warum diese Programmiersprache existiert.
Sam Orozco
@SamOrozco Der einzige Zweck besteht darin, Probleme mit möglichst kurzem Code zu lösen.
Adám
Ja wirklich. Das ist cool.
Sam Orozco
2

05AB1E (Legacy) , 9 Bytes

ô€{2ä`í«˜

Probieren Sie es online aus!

Probieren Sie es online aus! in 05AB1E (Elixir rewrite) - erwartet, dass sich die Eingabe auf dem Stapel befindet, eine Standard-E / A-Methode.

Kevin hat sich seinen eigenen 11-Byter ausgedacht, den ich auf 10 gebracht habe. Dann habe ich mir für 9 Bytes etwas anderes ausgedacht.

Mr. Xcoder
quelle
Schön. Hier war meine ursprüngliche Lösung als 11-Byte-Alternative : ô€{2äRć€R)˜.
Kevin Cruijssen
1
@ KevinCruijssen Mit deinem Ansatz auf 10 gekommen haha. EDIT : 9 jetzt!
Herr Xcoder
Ah schön. Völlig vergessen í. Und schönes zusätzliches Golf.
Kevin Cruijssen
2

JavaScript (ES6), 82 81 Byte

1 Byte dank @redundancy gespeichert

Nimmt Eingabe als (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)

Probieren Sie es online aus!

Arnauld
quelle
Da aeindimensional ist, glaube ich , Sie ersetzen können a>[]mit a+aüberprüfen , die nicht leeren Fall und speichern 1 Byte. Wirklich clevere rekursive Strategie zum Partitionieren und Bestimmen, wann die Sortierung ebenfalls umgekehrt werden soll!
Redundanz
@redundancy Das sollte in der Tat sicher sein. Vielen Dank!
Arnauld