Codegolf Rainbow : 리플렉션을 사용한 색상 정렬


9

소개:

: 나는 두 개의 무지개 관련 문제에 게시 한 후 Codegolf 레인보우 : 정수 배열 재미 (1)Codegolf 무지개 : 블랙 앤 화이트에 그리기 2 , 다음 주석에 의해 만들어진 @ChrisM 아스키에 ( 블랙 앤 화이트에 그리기 ) 도전 :

어쩌면 당신은 이것을 알고 있으며 의도적으로 설계된 것입니다 (무지개는 마름모 또는 아스키가 아니며 높은 주문 위치는 더 복잡하다는 것을 알고 있습니다).하지만 두 번째 무지개의 색상이 반전되지 않습니까?

그리고 그는 정말로 옳습니다. 이중 무지개를 볼 때 두 번째 무지개는 실제로 첫 번째 무지개를 반영하므로 색상이 반전됩니다. 세 개의 무지개는 실제 이중 무지개이며 세 번째는 다른 두 개의 무지개 중 하나입니다. 그리고 4 개에는 2 개의 무지개와 2 개의 반사가 있습니다.
여기에 이미지 설명을 입력하십시오

자, 그 사실을 이용하여 세 번째 관련 도전을하겠습니다.

도전:

입력 : 양의 정수 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보다 큽니다.
  • 정수 목록의 크기는보다 큽니다 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

Brachylog , 18 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

두 번째 솔루션을 약간 조정하여 17 바이트를 얻으십시오 : 온라인으로 사용해보십시오!
sundar-복 직원 모니카

@ sundar 나는 몰래 의심스러워서 너무 많이 매핑했습니다. 감사합니다!
중복성

이 언어는 무엇입니까?
Sam Orozco

@SamOrozco Terse 선언적 논리 프로그래밍. 언어 이름을 클릭하십시오!
Adám




2

05AB1E (레거시) , 9 바이트

ô€{2ä`í«˜

온라인으로 사용해보십시오!

온라인으로 사용해보십시오! in 05AB1E (Elixir rewrite) – 입력이 기본 I / O 방법 인 스택에있을 것으로 예상합니다.

케빈은 내가 10 살까지 썼던 자신의 11 바이 터를 생각 해냈다. 그리고 나서 나는 9 바이트 동안 다른 것을 생각 해냈다.


좋은데 다음은 11 바이트 대안으로서의 초기 솔루션 ô€{2äRć€R)˜입니다.
Kevin Cruijssen

1
@KevinCruijssen 접근 방식을 사용하여 10으로 이동했습니다. 편집 : 9 지금!
Mr. Xcoder

아 좋아. 에 대해 완전히 잊었습니다 í. 그리고 멋진 추가 골프.
Kevin Cruijssen

2

자바 스크립트 (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.