Codegolf Rainbow: сортування кольорів з відображенням


9

Вступ:

Після того як я опублікував два виклики, пов’язані з веселкою: Codegolf Rainbow: Fun with Integer-Arrays 1 та Codegolf Rainbow: Draw in Black-White 2 , наступний коментар зробив @ChrisM в ASCII ( Малюємо чорно-білим ) виклик :

Можливо, ви це знаєте, і це за дизайном (я знаю, що веселки теж не ромби чи асції, а позиції вищих ордерів ускладнюються), але чи не кольори перетворені у другій веселці?

І він справді правий. Коли ви бачите подвійну веселку, друга насправді є відображенням першої, тому кольори зворотні. З трьома веселками - це фактична подвійна веселка, третя - відображення однієї з двох інших. І з чотирма є дві веселки, і два відбиття цих.
введіть тут опис зображення

Отже, давайте зробимо третій пов'язаний виклик, використовуючи цей факт.

Виклик:

Введення: додатне ціле число, nяке є >=2, і список цілих чисел розміру >= n+1.
Вихід: той самий список упорядкований так:

  1. Спочатку розділіть вхідні списки на підсписки за розміром n(де підсумковий список може бути будь-якого розміру в діапазоні [1,n]).
  2. Тоді ми робимо наступне, виходячи з кількості підсписів m:
    • Сортуйте першу m - m//2кількість під-списків від найнижчої до найвищої (де //є цілочисельне ділення). (Тобто з 6 підсписів перші три будуть відсортовані від найнижчого до найвищого; з 5 підсписів кулак три буде відсортований від найнижчого до найвищого.)
    • Сортуйте останню m//2кількість підсписів від найвищої до найнижчої (де //ціле ділення). (Тобто з 6 підсписів останні три будуть відсортовані від найвищої до найнижчої; з 5 підсписів останні два будуть відсортовані від найвищої до найнижчої.)
  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.
  • Гарантовано, що розмір цілого списку буде більшим, ніж n.
  • Підсумковий список може бути меншим, ніж n(як це видно в прикладах та тестових випадках).
  • Формат вводу / виводу є гнучким у будь-якому розумному форматі. Це може бути список / масив цілих чисел або десяткових знаків, рядок з комою / пробілом / рядком з обмеженою лінією, потік цілих чисел тощо (Вихід може бути не двовимірним списком списків, як крок 2. Крок 3, щоб повернути його назад в єдиний список потрібно для цього виклику.)

Загальні правила:

  • Це є , тому найкоротша відповідь у байтах виграє.
    Не дозволяйте мовам з кодовим гольфом відштовхувати вас від публікації відповідей з мов, що не кодують гольф. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування.
  • Стандартні правила застосовуються до вашої відповіді, тому вам дозволяється використовувати STDIN / STDOUT, функції / метод із відповідними параметрами та повним програмами типу return. Твій дзвінок.
  • Лазівки за замовчуванням заборонені.
  • Якщо можливо, додайте посилання з тестом для вашого коду.
  • Також настійно рекомендується додавати пояснення до своєї відповіді.

Тестові приклади:

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

Брахілог , 18 17 16 байт

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

Спробуйте в Інтернеті!

-1 байт завдяки @sundar

Очікує введення як [<integer list>, n]. Зауважте, що негативні цілі числа представлені _символом Брахілога "низьким мінусом". Вихідна змінна - R.

Перший раз спробував Брахілог, тому я думаю, що це недостатньо оптимально і стигло для скорочення байтів.

Пояснення

Розділення, роздвоєння, сортування на основі індексу (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

Невеликий твір до вашого другого рішення, щоб отримати 17 байт: Спробуйте це в Інтернеті!
sundar

@sundar У мене виникла підозра, що я занадто багато малюю, дякую!
надмірність

Для чого ця мова?
Сем Орозько

@SamOrozco Terse декларативне логічне програмування. Спробуйте натиснути назву мови!
Adám




2

05AB1E (спадщина) , 9 байт

ô€{2ä`í«˜

Спробуйте в Інтернеті!

Спробуйте в Інтернеті! в 05AB1E (переписати Elixir) - очікує, що введення буде в стеці, метод вводу / виводу за замовчуванням.

Кевін придумав свій власний 11-байт, який я використовував до 10. Потім я придумав щось інше на 9 байт.


Хороший. Тут було моє перше рішення , як 11-байтовой альтернатива: ô€{2äRć€R)˜.
Kevin Cruijssen

1
@KevinCruijssen Перейшов до 10, використовуючи свій підхід ха-ха. РЕДАКЦІЯ : 9 зараз!
Містер Xcoder

Ах, приємно. Повністю забув í. І гарний додатковий гольф.
Кевін Кройсейсен

2

JavaScript (ES6), 82 81 байт

Збережено 1 байт завдяки @redundancy

Вводиться як " (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 Це дійсно повинно бути безпечно. Дякую!
Арнольд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.