소스 순열


14

순열 세트의 A는 전단 사 함수 . 예를 들어 경우 함수 \ pi : x \ mapsto 1 + (x + 1 \ mod 4) 는 순열입니다.S={s1,s2,,sn}π:SSS={1,2,3,4}π:x1+(x+1mod4)

π(1)=3,π(2)=4,π(3)=1,π(4)=2

무한 세트에 대한 순열을 가질 수도 있습니다 . 예를 들어 N 을 보자 : π:xx1+2(xmod2) 는 순열이며 짝수와 짝수 두 블록의 정수. 첫 번째 요소는 다음과 같습니다.

2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,

도전

이 과제의 과제는 양의 자연수에 대해 1 개의 순열을 구현하는 함수 / 프로그램을 작성하는 것 입니다. 솔루션 점수는 구현 된 순열로 매핑 한 코드 포인트의 합계입니다.

파이썬으로 구현 된 위의 순열을 가정 해 보자.

def pi(x):
    return x - 1 + 2*(x % 2)

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

문자 d는 코드 포인트 100 , pi(100)=99 입니다. 모든 캐릭터에 대해이 작업을 수행하면 다음과 같은 이점이 있습니다.

99,102,101,31,111,106,39,119,42,57,9,31,31,31,31,113,102,115,118,113,109,31,119,31,46,31,50,31,44,31,49,41,39,119,31,38,31,49,42

이러한 모든 매핑 된 문자의 합은 2463 이며 이는 해당 함수의 점수입니다.

규칙

순열 를 함수 또는 프로그램으로 구현합니다.π

  • 자연수 주어지면 , 리턴 / 출력xπ(x)
  • 이 도전의 목적으로 은 포함 하지 않습니다N0
  • 순열은 의 무한 부분 집합을 사소하게 순열해야합니다.N
  • 함수 / 프로그램이 자체 소스를 읽을 수 없습니다

채점

점수는 해당 순열 (코드 포인트는 언어 2 에 따라 다르며 SBCS, UTF-8 등을 자유롭게 사용할 수 있음) 하의 모든 코드 포인트 (0 바이트는 소스 코드의 일부가 아닐 수 있음)의 합계로 제공 됩니다. 당신의 언어는 그것을 지원합니다).

점수가 가장 낮은 제출물이 이기면 관계는 가장 빠른 제출물로 구분됩니다.


  1. 의 유한 부분 집합 만 치환하는 순열을 제외하고 , 는 무한대 여야합니다.N{x|π(x)x}

  2. 점수가 향상되면 예를 들어 일반적인 SBCS 대신 UTF-8 인코딩 Jelly 제출을 사용할 수 있습니다.


1
@JoKing "제로 바이트는 소스 코드의 일부가 아닐 수 있습니다"re : 두 번째 질문
ASCII 전용

답변:


6

젤리 , 점수  288 250 212  199

Outgolfer Erik에게 감사합니다 -38!

C-*+

홀수로도 스왑합니다.

점수는 67+45+44+43=199 입니다. 여기에서 자기 평가를 참조 하십시오 .

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


분명히, 새는 수녀의이 -*ạ300의 점수가 ...하지만, -*_@어쩌면 내가 그 내 자신으로,이 같은 순열 비록 게시한다 (250)의 점수를 가지고 있습니다.
Outgolfer Erik

Leaky Nun의 멋진 관찰, -*N+점수 212
Jonathan Allan

그것은 관찰이 아니었고 , 그의 (지금 꽤 오래된) 도전대한 자기 대답 이었습니다 . ;-)
Outgolfer Erik

3
C-*+의 향후 변형처럼 들립니다 C++.
발은


4

펄 6 , 점수 : 201

*-!0+^40+!0

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

포트 Arnauld의 대답 . 이것은 xor ( +^) 와와 같은 우선 순위를 -가지며 +, 전체 문자를 줄이기 위해 Whatever 람다를 사용하는 것이 좋습니다. 그 외에는 더 나은 점수를 얻은 다른 표현 방법을 찾을 수 없었습니다.

6 펄 , 스코어 804 702

{{(++$ords(q[!$%()+-2?[]_doqrsx{}∉])??++$+22-$++%2-$++%2!!++$)xx$_}()[-!$+$_]}

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

첫 번째 quine-y 유형이 여기에 답하며, 나는 그것이 꽤 좋은 점수라고 생각합니다.

그러면 코드에서 고유 한 정렬 된 코드 포인트의 인덱스에 1 , 2 , 3 , 4 ... 21 범위가 삽입 된 질문 본문에서 23,22,25,24 ... 시퀀스가 생성 됩니다. 예를 들어, 시퀀스의 30 ~ 35 번째 요소 는 33 번째 코드 포인트이므로 내 코드에서 가장 낮은 코드 포인트이므로 50 , 53 , 52 , 1 , 55 , 54 입니다.1,2,,4 ... 2150,53,52,1,55,54!


O_o 대단한 개선
ASCII 전용

4

파이썬 2 점수 : 742 698 694 점

lambda a:a^96or~~96

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

Ørjan Johansen 덕분에 -44 포인트; xnor에 -4 포인트.


Ørjan Johansen : 고정 (그리고 44 바이트 절약)
Chas Brown

좋은 저장 (바이트는 아니지만)
Ørjan Johansen

관대 한 크레딧입니다!
Ørjan Johansen이

결함을 지적하지 않았다면 편집하지 않았을 것입니다 :)
Chas Brown

그것은 전에 공간을 대체 할 저렴 96~~.
xnor

2

Retina 0.8.2 , 6 바이트, 260 점

T`O`RO

온라인으로 사용해보십시오! 링크에는 자체 득점 바닥 글이 포함됩니다. 간단하게 자리 스왑 1937소수점 표현에, 그래서 숫자를 포함하지 않는 숫자가 서로 소 것이 10영향을받지 않습니다.


2

C # (C # 카메라 인터랙티브 컴파일러) , 22 바이트, 스코어 247 245

A=>A>65?A-1+A%2*2:66-A

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

66보다 작은 경우 단순은 66 빼기 입력을 반환하고, 그렇지 않으면 짝수와 홀수를 바꾸는 수식을 사용하십시오.


이전 버전의 문제점은 무엇입니까 A=>A<66?66-A:A?
Jo King

2
@JoKing 유한 하위 집합을 순열시키는 순열을 제외하고의미하는 것은 {엑스|π(엑스)엑스}무한해야합니다. 세트의 유일한 값은 1-65이므로 65 이상이므로 세트의 무한대는 아닙니다. A의 모든 값은 A
무지의 실시 예

아, 그거 알아 차리지 못했습니다. 그것은 내 자신의 대답도 유효하지
Jo King

2

TI-BASIC, 9 바이트, 1088 1051 1000 점

Ans-cos(π2fPart(2⁻¹Ans

홀수로도 스왑합니다. 에 매핑 Ans-1하고 홀수에 매핑합니다 Ans+1.

TI-BASIC은 토큰 화되므로이 프로그램의 16 진수 값은 다음과 같습니다.

Ans   -    cos(  π    2    fPart(  2   ⁻¹  Ans
72    71   C4    AC   32   BA      32  0C  72

따라서 점수는 다음과 같습니다. 113+114+195+171+49+185+49+11+113=1000

출력 테스트 프로그램 :

For(I,1,10
I
Ans-cos(π2fPart(2⁻¹Ans
Disp Ans
Pause
End

어떤 출력 :

2
1
4
3
6
5
8
7
10
9

노트:

  • TI-BASIC의 토큰 값은 여기 에서 찾을 수 있습니다 .

  • Pause계산기에는 8 줄만 있기 때문에 순열을 더 잘 볼 수 있도록 출력 프로그램에서 사용됩니다. 다음 순열을 보려면 [ENTER] 를 누르 십시오 .


1

, 13 바이트, 점수 681

⁻⁺²³²ι⊗﹪⊖ι²³³

온라인으로 사용해보십시오! 링크는 바이트 코드 배열을 매핑하기위한 헤더가있는 자체 스코어링 버전에 연결됩니다. (숯에는 사용자 정의 코드 페이지가 있으므로 입력에 올바른 바이트 코드를 수동으로 삽입했습니다.) 233 숫자 범위를 반대로하여 작동하므로 117, 350, 583 ...은 변경되지 않습니다. 설명:

     ι          Value
 ⁺              Plus
  ²³²           Literal 232
⁻               Minus
         ι      Value
        ⊖       Decremented
       ﹪        Modulo
          ²³³   Literal 233
      ⊗         Doubled

1

하스켈, 985 점

(\((.),(-))->(.)*200+mod(-39+(-))200+1).(\(*)->divMod((*)-1)200)

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


I don't think this is a permutation, since adding a*200 has no effect modulo 200 so a doesn't matter.
xnor

@xnor Good catch. That's supposed to be outside of the mod. At some point while golfing, I must have messed up order of operations. Fixed now, thanks!
Joseph Sible-Reinstate Monica

I think there's another issue that 40 maps to 0 but the challenge requires positive integers, which makes approaches like this tricky.
xnor

1
sum[1|...]over if..then..else를 사용하면 도움이 될 것입니다.
ბიმო


1

05AB1E , 점수 : 05AB1E의 코드 페이지에서 488

È·<-

예제 함수처럼 홀수로 바뀝니다.

여기에서 점수를 높이려고 노력할 것입니다.

범위 내에서 입력하여 온라인으로 [1, 100]시도 하거나 코드 포인트로 온라인으로 시도하십시오.

설명:

È     # Check if the (implicit) input is even (1 if truthy; 0 if falsey)
 ·    # Double (2 if truthy; 0 if falsey)
  <   # Decrease by 1 (1 if truthy; -1 if falsey)
   -  # Subtract it from the (implicit) input (and output implicitly)

0

Brainfuck, 47 바이트, 2988 점

,[-<+<+>>]<[->[>+<[-]]+>[<->-]<<]>[-<<++>>]<<-.

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

소개에 제공된 순열을 사용했습니다. 이것은 Bijection이므로 ROT13 또는 Atbash와 유사한 간단한 대칭 암호로 사용할 수 있습니다. 내 솔루션은 무제한 셀에서 작동합니다. 그러나 자신을 8 비트 셀로 제한하면로 대체 [-]하여 2 점을 절약 할 수 [+]있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.