การเปลี่ยนแปลงแหล่งที่มา


14

การเปลี่ยนแปลงของชุดS={s1,s2,,sn}เป็นbijectiveฟังก์ชั่นπ:SS S ตัวอย่างเช่นถ้าS={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ใด ๆกับจำนวนธรรมชาติบวก คะแนนของการแก้ปัญหาของคุณคือผลรวมของ codepoints หลังจากการแมปพวกเขาด้วยการเปลี่ยนแปลงที่ดำเนินการ

ตัวอย่าง

สมมติว่าเราใช้การเปลี่ยนแปลงข้างต้นที่ดำเนินการกับ Python:

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

ลองออนไลน์!

ตัวละครตัวนี้dมีจุดโค้ด100 , pi(100)=99 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)
  • สำหรับวัตถุประสงค์ของการท้าทายนี้Nไม่ได้มี0
  • การเปลี่ยนรูปจะต้องเปลี่ยนรูปแบบเซตย่อยแบบไม่สิ้นสุดของN
  • ฟังก์ชั่น / โปรแกรมของคุณไม่ได้รับอนุญาตให้อ่านแหล่งที่มาของมันเอง

เกณฑ์การให้คะแนน

คะแนนจะได้รับจากผลรวมของ codepoints ทั้งหมด (ศูนย์ไบต์อาจไม่ได้เป็นส่วนหนึ่งของซอร์สโค้ด) ภายใต้การเปลี่ยนแปลงนั้น (codepoints ขึ้นอยู่กับภาษาของคุณ2คุณสามารถใช้ SBCS, UTF-8 ได้ฟรีตราบใดที่ ภาษาของคุณรองรับ)

การส่งที่มีคะแนนต่ำที่สุดชนะความสัมพันธ์จะถูกหักโดยการส่งเร็วที่สุด


  1. ยกเว้นการเรียงสับเปลี่ยนซึ่งเปลี่ยนสับเซตเซต จำกัด ของNเท่านั้นซึ่งหมายความว่าเซต{x|π(x)x}ต้องไม่ จำกัด

  2. หากปรับปรุงคะแนนของคุณคุณสามารถใช้การส่งเยลลี่แบบเข้ารหัส UTF-8 แทน SBCS ปกติ


1
@JoKing "ศูนย์ไบต์อาจไม่ได้เป็นส่วนหนึ่งของซอร์สโค้ด" อีกครั้ง: คำถามที่สอง
ASCII-only

ที่เกี่ยวข้อง
Peter Taylor

คำตอบ:


6

เยลลี่ , คะแนน 288 250 212  199

-38 ขอบคุณ Erik the Outgolfer!

C-*+

สลับแม้กับคี่

คะแนนคือ67+45+44+43=199 - ดูตัวเองให้คะแนนที่นี่

ลองออนไลน์!


เห็นได้ชัดว่า Leaky Nun -*ạมีคะแนน 300 ... แต่-*_@มี 250 คะแนนบางทีฉันควรโพสต์สิ่งนั้นด้วยตัวเองแม้ว่ามันจะเป็นการเปลี่ยนแปลงแบบเดียวกันก็ตาม
Erik the Outgolfer

อาสังเกตดีโดย Leaky Nun ดังนั้น-*N+คะแนน 212
Jonathan Allan


3
C-*+C++เสียงเหมือนบางรูปแบบในอนาคตของ
พูดว่า Reinstate Monica


4

Perl 6 , คะแนน: 201

*-!0+^40+!0

ลองออนไลน์!

ท่าเรือคำตอบ Arnauld ของ สิ่งนี้ได้รับประโยชน์จาก xor ( +^) ที่มีความสำคัญเท่ากัน-และ+และการใช้ lambda ก็ตามเพื่อลดอักขระโดยรวม นอกเหนือจากนั้นฉันไม่สามารถหาวิธีที่จะแสดงความแตกต่างที่ได้คะแนนดีกว่าได้

Perl 6 , คะแนน804 702

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

ลองออนไลน์!

คำตอบแรกในประเภท quine-y ที่นี่และฉันคิดว่าคะแนนค่อนข้างดี

สิ่งนี้จะสร้างลำดับที่23,22,25,24 ...จากเนื้อความของคำถามที่มีช่วง1,2,3,4 ... 21แทรกไว้ที่ดัชนีของ codepoints ที่เรียงลำดับเฉพาะของรหัส ตัวอย่างเช่นอิลิเมนต์ลำดับที่ 30 ถึง 35 ของลำดับคือ50,53,52,1,55,54เนื่องจาก codepoint ที่ 33 คือ!และนั่นคือ codepoint ที่ต่ำที่สุดในรหัสของฉัน


O_o นั้นเป็นการปรับปรุงที่ยิ่งใหญ่
เฉพาะ ASCII เท่านั้น

4

Python 2คะแนน: 742 698 694 คะแนน

lambda a:a^96or~~96

ลองออนไลน์!

-44 คะแนนขอบคุณØrjan Johansen; -4 คะแนนขอบคุณถึง xnor


Ørjan Johansen: แก้ไข (และช่วยฉัน 44 ไบต์!)
Chas Brown

Good save (although that's not bytes)
Ørjan Johansen

That's some generous crediting!
Ørjan Johansen

Wouldn't have edited if you hadn't pointed out the flaw :)
Chas Brown

It's cheaper to replace the space before 96 with ~~.
xnor

2

Retina 0.8.2, 6 bytes, score 260

T`O`RO

ลองออนไลน์! ลิงก์มีส่วนท้ายที่ให้คะแนนตัวเอง เพียงแค่สลับตัวเลข1และ9และ3และ7ในการแสดงทศนิยมเพื่อให้ตัวเลขที่มีตัวเลขไม่ coprime ที่จะ10ได้รับผลกระทบ


2

C # (Visual C # Interactive Compiler) , 22 ไบต์, คะแนน247 245

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

ลองออนไลน์!

ง่ายถ้าน้อยกว่า 66 ส่งคืนอินพุต 66 ลบมิฉะนั้นให้ใช้สูตรในคำถามที่สลับเลขคู่และคี่


What's wrong with the previous version A=>A<66?66-A:A?
Jo King

2
@JoKing Except for permutations which only permute a finite subset of N, meaning that the set {x|π(x)x} must be infinite. The set isn't infinite, since the only values in the set are 1-65, since above 65, all values of A map to A
Embodiment of Ignorance

โอ้ฉันไม่ได้สังเกตว่า นั่นหมายความว่าคำตอบของฉันเองก็ไม่ถูกต้องเช่นกัน :(
Jo King

2

TI-BASIC 9 ไบต์คะแนน1088 1051 1,000

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

สลับแม้กับคี่ แม้แมปไปและแผนที่แปลกที่Ans-1Ans+1

TI-BASIC ได้รับการโทเค็นดังนั้นโปรแกรมนี้จะมีค่าฐานสิบหกต่อไปนี้:

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 is used in the output program to better see the permutation, as the calculator only has 8 lines. Press [ENTER] to view the next permutation.


1

Charcoal, 13 bytes, score 681

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

Try it online! Link is to self-scoring version with header to map over an array of byte codes. (Charcoal has a custom code page so I've manually inserted the correct byte codes in the input.) Works by reversing ranges of 233 numbers, so that 117, 350, 583 ... are unchanged. Explanation:

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

1

Haskell, score 985

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

Try it online!


ฉันไม่คิดว่านี่เป็นการเปลี่ยนแปลงเนื่องจากการเพิ่มa*200ไม่มีผล modulo 200 ดังนั้นa ไม่สำคัญ
xnor

@ xnor ดีจับ ควรจะอยู่นอกตัวดัดแปลง เมื่อถึงจุดหนึ่งในขณะที่เล่นกอล์ฟฉันต้องทำให้งานยุ่งเหยิง แก้ไขแล้วขอบคุณ!
Joseph Sible-Reinstate Monica

ฉันคิดว่ามีอีกปัญหาที่ 40 แผนที่เป็น 0 แต่ความท้าทายต้องใช้จำนวนเต็มบวกซึ่งทำให้วิธีการเช่นนี้ยุ่งยาก
xnor

1
Using sum[1|...] over if..then..else should help.
ბიმო


1

05AB1E, score: 488 in 05AB1E's code page

È·<-

Swaps odd and even like the example function.

Will try to improve the score from here.

Try it online with input in the range [1, 100] or Try it online with the codepoints.

Explanation:

È     # 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 bytes, score 2988

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

Try it online!

I used the permutation given in the introduction. Since this is bijection you can use it as a simple symmetric cipher similar to ROT13 or Atbash. My solution works on unbounded cells. However, by restricting yourself to 8-bit cells, you could save 2 points by replacing [-] with [+].

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.