Hoán vị nguồn


14

Một hoán vị của một tập là một song ánh chức năng . Ví dụ: nếu thì hàm \ pi: x \ mapsto 1 + (x + 1 \ mod 4) là một hoán vị:S= ={S1,S2,Giáo dục,Sn}π:SSS= ={1,2,3,4}π:x1+(x+1mod4)

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

Chúng ta cũng có thể có hoán vị trên các tập hợp vô hạn, hãy lấy N làm ví dụ: Hàm π:xx1+2(xmod2) là một hoán vị, hoán đổi số lẻ và chẵn số nguyên trong khối hai. Các yếu tố đầu tiên như sau:

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

Thử thách

Nhiệm vụ của bạn cho thử thách này là viết một hàm / chương trình thực hiện bất kỳ 1 hoán vị nào trên các số tự nhiên dương. Điểm của giải pháp của bạn là tổng số điểm sau khi ánh xạ chúng với hoán vị được thực hiện.

Thí dụ

Giả sử chúng ta thực hiện hoán vị trên được thực hiện với Python:

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

Hãy thử trực tuyến!

Ký tự dcó điểm mã 100 , pi(100)=99 . Nếu chúng ta làm điều này cho mọi nhân vật, chúng ta sẽ nhận được:

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

Tổng của tất cả các ký tự được ánh xạ này là 2463 , đây sẽ là điểm cho chức năng đó.

Quy tắc

Bạn sẽ thực hiện hoán vị dưới dạng hàm hoặc chương trìnhπ

  • đã cho một số tự nhiên , trả về / đầu raxπ(x)
  • nhằm mục đích thách thức này không không chứaN0
  • hoán vị phải không hoán vị một tập con vô hạn củaN
  • chức năng / chương trình của bạn không được phép đọc nguồn của chính nó

Chấm điểm

Điểm số được tính bằng tổng của tất cả các điểm mã (byte không có thể không phải là một phần của mã nguồn) theo hoán vị đó (các điểm mã phụ thuộc vào ngôn ngữ của bạn 2 , bạn có thể sử dụng SBCS, UTF-8, v.v. ngôn ngữ của bạn hỗ trợ nó).

Bài nộp với số điểm thấp nhất sẽ thắng, mối quan hệ bị phá vỡ bằng cách gửi sớm nhất.


  1. Ngoại trừ các hoán vị chỉ hoán vị một tập con hữu hạn của , nghĩa là tập hợp phải là vô hạn.N{x|π(x)x}

  2. Nếu nó cải thiện điểm số của bạn, ví dụ, bạn có thể sử dụng đệ trình Jelly được mã hóa UTF-8 thay vì SBCS thông thường.


1
@JoKing "byte không có thể không phải là một phần của mã nguồn" re: câu hỏi thứ hai
ASCII chỉ có

Câu trả lời:


6

Thạch , điểm  288 250 212  199

-38 cảm ơn Erik the Outgolfer!

C-*+

Hoán đổi ngay cả với lẻ.

Điểm số là - xem tự chấm điểm tại đây .67+45+44+43=199

Hãy thử trực tuyến!


Rõ ràng, Leaky Nun -*ạcó số điểm 300 ... tuy nhiên, -*_@có số điểm 250. Có lẽ tôi nên đăng bài đó như của riêng mình, mặc dù đó là cùng một hoán vị.
Erik the Outgolfer

Ah quan sát tốt bởi Leaky Nun, vì vậy -*N+điểm số 212
Jonathan Allan


3
C-*+âm thanh như một số biến thể trong tương lai của C++.
val nói Phục hồi lại


4

Perl 6 , Điểm: 201

*-!0+^40+!0

Hãy thử trực tuyến!

Câu trả lời của cảng Arnauld . Điều này mang lại lợi ích từ xor ( +^) có cùng mức độ ưu tiên như -+, và việc sử dụng bất cứ lambda nào để giảm các ký tự tổng thể. Ngoài ra, tôi không thể tìm ra cách thể hiện nó khác biệt để có điểm cao hơn.

Perl 6 , Điểm 804 702

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

Hãy thử trực tuyến!

Câu trả lời kiểu quine-y đầu tiên ở đây, và tôi nghĩ nó đạt điểm khá tốt.

Điều này tạo ra chuỗi 23,22,25,24 ... từ thân câu hỏi với phạm vi 1,2,3,4 ... 21 được chèn vào các chỉ mục của các mật mã được sắp xếp duy nhất của mã. Ví dụ, các phần tử thứ 30 đến 35 của chuỗi là 50,53,52,1,55,54 kể từ mã số thứ 33 !và đó là loại tiền mã hóa thấp nhất trong mã của tôi.


O_o đó là một cải tiến lớn
chỉ có ASCII

4

Điểm Python 2 : 742 698 694 điểm

lambda a:a^96or~~96

Hãy thử trực tuyến!

-44 điểm nhờ rjan Johansen; -4 điểm thx đến xnor.


Rjan Johansen: Đã sửa (và nó đã tiết kiệm cho tôi 44 byte!)
Chas Brown

Tiết kiệm tốt (mặc dù đó không phải là byte)
Ørjan Johansen

Đó là một số tín dụng hào phóng!
Ørjan Johansen

Sẽ không chỉnh sửa nếu bạn không chỉ ra lỗ hổng :)
Chas Brown

Nó rẻ hơn để thay thế không gian trước đó 96với ~~.
xnor

2

Võng mạc 0.8.2 , 6 byte, điểm 260

T`O`RO

Hãy thử trực tuyến! Liên kết bao gồm chân trang tự ghi. Đơn giản chỉ cần hoán đổi chữ số 1937trong cơ quan đại diện thập phân, do đó con số không chứa chữ số nguyên tố cùng nhau để 10không bị ảnh hưởng.


2

C # (Trình biên dịch tương tác Visual C #) , 22 byte, Điểm số 247 245

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

Hãy thử trực tuyến!

Đơn giản, nếu dưới 66, trả về 66 trừ đầu vào, người khác sử dụng công thức trong câu hỏi hoán đổi số chẵn và số lẻ.


Có gì sai với phiên bản trước A=>A<66?66-A:A?
Jo King

2
N{x|π(x)x}

Ôi chết tiệt, tôi đã không nhận ra điều đó. Điều đó có nghĩa là câu trả lời của riêng tôi cũng không hợp lệ :(
Jo King

2

TI-BASIC, 9 byte, điểm 1088 1051 1000

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

Hoán đổi ngay cả với lẻ. Ngay cả bản đồ đến Ans-1và bản đồ lẻ đến Ans+1.

TI-BASIC được mã hóa, vì vậy chương trình này sẽ có các giá trị hex sau:

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

Do đó, điểm số là: 113+114+195+171+49+185+49+11+113= =1000

Chương trình kiểm tra đầu ra:

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

Đầu ra nào:

2
1
4
3
6
5
8
7
10
9

Ghi chú:

  • Giá trị mã thông báo của TI-BASIC có thể được tìm thấy ở đây .

  • Pauseđược sử dụng trong chương trình đầu ra để thấy rõ hơn hoán vị, vì máy tính chỉ có 8 dòng. Nhấn [ENTER] để xem hoán vị tiếp theo.


1

Than , 13 byte, điểm 681

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

Hãy thử trực tuyến! Liên kết là phiên bản tự chấm điểm với tiêu đề để ánh xạ qua một mảng các mã byte. (Than có trang mã tùy chỉnh nên tôi đã chèn thủ công mã byte chính xác vào đầu vào.) Hoạt động bằng cách đảo ngược phạm vi 233 số, sao cho 117, 350, 583 ... không thay đổi. Giải trình:

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

1

Haskell, điểm 985

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

Hãy thử trực tuyến!


Tôi không nghĩ rằng đây là một hoán vị, vì việc thêm vào a*200không có hiệu lực modulo 200 nên a không thành vấn đề.
xnor

@xnor Bắt tốt. Điều đó được cho là nằm ngoài mod. Tại một số thời điểm trong khi chơi golf, tôi phải làm rối trật tự hoạt động. Đã sửa bây giờ, cảm ơn!
Joseph Sible-Phục hồi Monica

Tôi nghĩ có một vấn đề khác là 40 bản đồ thành 0 nhưng thách thức đòi hỏi các số nguyên dương, điều này khiến cho các cách tiếp cận như thế này trở nên khó khăn.
xnor

1
Sử dụng sum[1|...]hơn if..then..elsesẽ giúp.
ბიმო


1

05AB1E , điểm: 488 trong trang mã của 05AB1E

È·<-

Hoán đổi lẻ và thậm chí giống như hàm ví dụ.

Sẽ cố gắng cải thiện điểm số từ đây.

Dùng thử trực tuyến với đầu vào trong phạm vi [1, 100] hoặc Thử trực tuyến với các điểm mã.

Giải trình:

È     # 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 byte, điểm 2988

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

Hãy thử trực tuyến!

Tôi đã sử dụng hoán vị được đưa ra trong phần giới thiệu. Vì đây là bijection, bạn có thể sử dụng nó như một mật mã đối xứng đơn giản tương tự như ROT13 hoặc Atbash. Giải pháp của tôi hoạt động trên các tế bào không giới hạn. Tuy nhiên, bằng cách giới hạn bản thân trong các ô 8 bit, bạn có thể tiết kiệm 2 điểm bằng cách thay thế [-]bằng [+].

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.