Codegolf Rainbow: Sortowanie kolorów z odbiciem

9

Wprowadzenie:

Po tym, jak opublikowałem dwa wyzwania związane z tęczą : Codegolf Rainbow: Fun with Integer-Arrays 1 i Codegolf Rainbow: Draw in Black-and-White 2 , następujący komentarz został opublikowany przez @ChrisM w ASCII ( Draw in Black-and-White ) wyzwanie :

Być może wiesz o tym i jest to zgodne z projektem (wiem, że tęcze też nie są rombami ani ascii, a pozycje wyższych rzędów stają się bardziej skomplikowane), ale czy kolory w drugiej tęczy nie są odwrócone?

I rzeczywiście ma rację. Kiedy widzisz podwójną tęczę, druga faktycznie jest odbiciem pierwszej, więc kolory są odwrócone. Z trzema tęczami jest to prawdziwa podwójna tęcza, a trzecia jest odbiciem jednego z pozostałych dwóch. A przy czterech są dwie tęcze i dwa ich odbicia.
wprowadź opis zdjęcia tutaj

Zróbmy trzecie powiązane wyzwanie, korzystając z tego faktu.

Wyzwanie:

Dane wejściowe: dodatnia liczba całkowita, nktóra jest >=2, oraz lista liczb całkowitych wielkości >= n+1.
Dane wyjściowe: ta sama lista uporządkowana w następujący sposób:

  1. Najpierw podziel listy wejściowe na podlisty o rozmiarze n(gdzie końcowa podlista może mieć dowolny rozmiar w zakresie [1,n]).
  2. Następnie wykonujemy następujące czynności w oparciu o liczbę list podrzędnych m:
    • Posortuj pierwszą m - m//2liczbę list podrzędnych od najniższej do najwyższej (gdzie //jest dzielenie całkowite). (Tj. Z 6 podlistami pierwsze trzy zostaną posortowane od najniższego do najwyższego; przy 5 podlistach pierwsza trzy zostaną posortowane od najniższego do najwyższego.)
    • Posortuj ostatnią m//2liczbę list podrzędnych od najwyższej do najniższej (gdzie //jest dzielenie liczb całkowitych). (Tj. Z 6 listami podrzędnymi, ostatnie trzy zostaną posortowane od najwyższej do najniższej; w przypadku 5 list podrzędnych dwie ostatnie zostaną posortowane od najwyższej do najniższej.)
  3. Scal wszystkie podlisty razem, aby ponownie utworzyć jedną listę

Przykłady:

Wejścia: n=7i [3,2,1,-4,5,6,17,2,0,3,5,4,66,-7,7,6,-5,2,10]
Krok 1: [[3,2,1,-4,5,6,17],[2,0,3,5,4,66,-7],[7,6,-5,2,10]]
Krok 2: [[-4,1,2,3,5,6,17],[-7,0,2,3,4,5,66],[10,7,6,2,-5]]
Krok 3 / Wyjście:[-4,1,2,3,5,6,17,-7,0,2,3,4,5,66,10,7,6,2,-5]

Wejścia: n=4i [7,4,-8,9,3,19,0,-23,-13,13]
Krok 1: [[7,4,-8,9],[3,19,0,-23],[-13,13]]
Krok 2: [[-8,4,7,9],[-23,0,3,19],[13,-13]]
Krok 3 / Wyjście:[-8,4,7,9,-23,0,3,19,13,-13]

Zasady konkursu:

  • nGwarantowana liczba całkowita jest większa niż 1.
  • Rozmiar listy liczb całkowitych jest z pewnością większy niż n.
  • Końcowa lista podrzędna może być mniejsza niż n(jak widać w przykładach i przypadkach testowych).
  • Format we / wy jest elastyczny w dowolnym rozsądnym formacie. Może być listą / tablicą liczb całkowitych lub dziesiętnych, łańcuchem rozdzielanym przecinkami / spacją / znakiem nowej linii, strumieniem liczb całkowitych itp. (Dane wyjściowe mogą nie być listą 2D list, jak krok 2. Krok 3, aby spłaszczyć go z powrotem na pojedynczą listę jest wymagane do tego wyzwania).

Główne zasady:

  • To jest , więc najkrótsza odpowiedź w bajtach wygrywa.
    Nie pozwól, aby języki code-golf zniechęciły Cię do publikowania odpowiedzi w językach innych niż kodowanie Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania.
  • Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
  • Domyślne luki są zabronione.
  • Jeśli to możliwe, dodaj link z testem swojego kodu.
  • Zalecane jest również dodanie wyjaśnienia do odpowiedzi.

Przypadki testowe:

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
źródło

Odpowiedzi:

5

Brachylog , 18 17 16 bajtów

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

Wypróbuj online!

-1 bajt dzięki @sundar

Oczekuje danych wejściowych jako [<integer list>, n]. Zauważ, że ujemne liczby całkowite są reprezentowane _przez „niski minus” Brachyloga. Zmienna wyjściowa to R.

Po raz pierwszy próbuję Brachylog, więc wyobrażam sobie, że jest nieoptymalny i dojrzały do ​​zmniejszenia liczby bajtów.

Wyjaśnienie

Podział, dzielenie, sortowanie na podstawie indeksu (0: asc, 1: desc), spłaszczanie.

ġ₎               | 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
nadmiar
źródło
Drobne poprawki do drugiego rozwiązania, aby uzyskać 17 bajtów: Wypróbuj online!
Sundar - Przywróć Monikę
@sundar Miałem podejrzane podejrzenie, że mapowałem jeden za dużo, dzięki!
redundancja
Do czego służy ten język?
Sam Orozco
@SamOrozco Terse deklaratywne programowanie logiki. Spróbuj kliknąć nazwę języka!
Adám
3

Galaretka , 9 bajtów

sṢ€ŒHUÐeF

Wypróbuj online!

Pan Xcoder
źródło
1
Nie rozumiem, dlaczego ten język programowania istnieje.
Sam Orozco,
@SamOrozco Jego jedynym celem jest rozwiązywanie problemów przy użyciu możliwie najkrótszego kodu.
Adám
Naprawdę. To super.
Sam Orozco
2

Japt , 10 bajtów

òV ®nÃÇwÃc

Also 10 bytes
òV mn ow c

Wypróbuj online!

Luis Felipe De Jesus Munoz
źródło
2

05AB1E (starsza wersja) , 9 bajtów

ô€{2ä`í«˜

Wypróbuj online!

Wypróbuj online! w 05AB1E (przepisywanie eliksirów) - oczekuje wejścia na stosie, domyślnej metody We / Wy.

Kevin wymyślił swój własny 11-bajtowy, który uzyskiwałem do 10. Potem wymyśliłem coś jeszcze za 9 bajtów.

Pan Xcoder
źródło
Niezłe. Tu było moje pierwsze rozwiązanie jako 11-bajtowy alternatywa: ô€{2äRć€R)˜.
Kevin Cruijssen
1
@KevinCruijssen Dostałem do 10 za pomocą twojego podejścia haha. EDYCJA : teraz 9!
Pan Xcoder,
Ach, miło. Zupełnie zapomniałem o í. I miły dodatkowy golf.
Kevin Cruijssen,
2

JavaScript (ES6), 82 81 bajtów

Zapisano 1 bajt dzięki @redundancy

Pobiera dane wejściowe jako (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)

Wypróbuj online!

Arnauld
źródło
Ponieważ ajest jednowymiarowa, uważam, że można zastąpić a>[]z a+asprawdzić niepusty sprawę i oszczędzania 1 bajt. Naprawdę sprytna strategia cykliczna do partycjonowania i określania, kiedy należy odwrócić sortowanie!
redundancja
@redundancy To naprawdę powinno być bezpieczne. Dzięki!
Arnauld,