Codegolf Rainbow: clasificación de colores con reflejo

9

Introducción:

Después de publicar dos desafíos relacionados con el arco iris: Codegolf Rainbow: Fun with Integer-Arrays 1 y Codegolf Rainbow: Draw in Black-and-White 2 , @ChrisM hizo el siguiente comentario en ASCII ( Draw in Black-and-White) ) desafío :

Tal vez lo sepas y es por diseño (sé que los arcoíris no son rombos o ascii, y las posiciones de las órdenes superiores se vuelven más complicadas), pero ¿no se invierten los colores en el segundo arcoíris?

Y de hecho tiene razón. Cuando ves un arcoíris doble, el segundo es en realidad un reflejo del primero, por lo que los colores se invierten. Con tres arcoíris, es un arcoíris doble real, siendo el tercero un reflejo de uno de los otros dos. Y con cuatro, hay dos arcoiris y dos reflejos de ellos.
ingrese la descripción de la imagen aquí

Entonces, hagamos un tercer desafío relacionado usando ese hecho.

Desafío:

Entradas: un entero positivo nque es >=2, y una lista de enteros de tamaño >= n+1.
Salida: la misma lista ordenada de la siguiente manera:

  1. Primero divida las listas de entrada en sublistas de tamaño n(donde la sublista final podría ser de cualquier tamaño en el rango [1,n]).
  2. Luego hacemos lo siguiente en función de la cantidad de sublistas m:
    • Ordene la primera m - m//2cantidad de sublistas de menor a mayor (donde //está la división entera). (Es decir, con 6 sublistas, las tres primeras se ordenarán de menor a mayor; con 5 sublistas, las tres primeras se ordenarán de menor a mayor).
    • Ordene la última m//2cantidad de sublistas de mayor a menor (donde //está la división entera). (Es decir, con 6 sublistas, las tres últimas se ordenarán de mayor a menor; con 5 sublistas, las dos últimas se ordenarán de mayor a menor).
  3. Combine todas las sublistas juntas para formar una sola lista nuevamente

Ejemplos:

Entradas: n=7y [3,2,1,-4,5,6,17,2,0,3,5,4,66,-7,7,6,-5,2,10]
Paso 1: [[3,2,1,-4,5,6,17],[2,0,3,5,4,66,-7],[7,6,-5,2,10]]
Paso 2: [[-4,1,2,3,5,6,17],[-7,0,2,3,4,5,66],[10,7,6,2,-5]]
Paso 3 / Salida:[-4,1,2,3,5,6,17,-7,0,2,3,4,5,66,10,7,6,2,-5]

Entradas: n=4y [7,4,-8,9,3,19,0,-23,-13,13]
Paso 1: [[7,4,-8,9],[3,19,0,-23],[-13,13]]
Paso 2: [[-8,4,7,9],[-23,0,3,19],[13,-13]]
Paso 3 / Salida:[-8,4,7,9,-23,0,3,19,13,-13]

Reglas de desafío:

  • Se ngarantiza que la entrada entera sea ​​mayor que 1.
  • Se garantiza que el tamaño de la lista de enteros será mayor que n.
  • La sublista final puede ser menor que n(como se puede ver en los ejemplos y casos de prueba).
  • El formato de E / S es flexible en cualquier formato razonable. Puede ser una lista / matriz de enteros o decimales, una cadena delimitada por comas / espacios / líneas nuevas, una secuencia de enteros, etc. se requiere para este desafío).

Reglas generales:

  • Este es el , por lo que la respuesta más corta en bytes gana.
    No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación.
  • Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
  • Las lagunas predeterminadas están prohibidas.
  • Si es posible, agregue un enlace con una prueba para su código.
  • Además, se recomienda agregar una explicación para su respuesta.

Casos de prueba:

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
fuente

Respuestas:

5

Brachylog , 18 17 16 bytes

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

Pruébalo en línea!

-1 byte gracias a @sundar

Espera entrada como [<integer list>, n]. Tenga en cuenta que los enteros negativos se representan con _"bajo negativo" de Brachylog. La variable de salida es R.

La primera vez que intento Brachylog, así que me imagino que es subóptimo y maduro para reducir en bytes.

Explicación

Partición, bifurcar, ordenar según el índice (0: asc, 1: desc), aplanar.

ġ₎               | 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
redundancia
fuente
Un pequeño ajuste a su segunda solución, para obtener 17 bytes: ¡ Pruébelo en línea!
Sundar - Restablece a Mónica el
@sundar Tenía una sospecha furtiva de que estaba mapeando demasiado, ¡gracias!
redundancia
¿Para qué es este lenguaje?
Sam Orozco
@SamOrozco Terse programación lógica declarativa. ¡Intenta hacer clic en el nombre del idioma!
Adám
3

Jalea , 9 bytes

sṢ€ŒHUÐeF

Pruébalo en línea!

Sr. Xcoder
fuente
1
No entiendo por qué existe este lenguaje de programación.
Sam Orozco
@SamOrozco Su único propósito es resolver problemas con el código más corto posible.
Adám
Oh enserio. Eso es genial.
Sam Orozco
2

05AB1E (heredado) , 9 bytes

ô€{2ä`í«˜

Pruébalo en línea!

Pruébalo en línea! en 05AB1E (reescritura de elixir) : espera que la entrada esté en la pila, un método de E / S predeterminado.

A Kevin se le ocurrió su propio 11 bytes que solía llegar a 10. Luego se me ocurrió algo más para 9 bytes.

Sr. Xcoder
fuente
Buena esa. Aquí fue mi solución inicial como alternativa 11 bytes: ô€{2äRć€R)˜.
Kevin Cruijssen
1
@KevinCruijssen Tienes 10 usando tu enfoque jaja. EDITAR : 9 ahora!
Sr. Xcoder
Oh bien. Completamente olvidado í. Y bonito golf adicional.
Kevin Cruijssen
2

JavaScript (ES6), 82 81 bytes

Guardado 1 byte gracias a @redundancy

Toma entrada como (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)

Pruébalo en línea!

Arnauld
fuente
Dado que aes unidimensional, creo que se puede sustituir a>[]con a+apara comprobar el caso que no esté vacía y ahorro 1 byte. ¡Una estrategia recurrente realmente inteligente para particionar y determinar cuándo revertir el ordenamiento, también!
redundancia
@redundancy Eso debería ser seguro de hecho. ¡Gracias!
Arnauld