Sumber permutasi

14

Sebuah permutasi dari himpunan S={s1,s2,,sn} adalah bijektif fungsi π:SS . Misalnya, jika S={1,2,3,4} maka fungsi adalah permutasi:π:x1+(x+1mod4)

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

Kita juga dapat memiliki permutasi pada set infinite, mari kita ambil sebagai contoh: Fungsi adalah permutasi, bertukar yang aneh dan genap bilangan bulat di blok dua. Elemen pertama adalah sebagai berikut:Nπ:xx1+2(xmod2)

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

Tantangan

Tugas Anda untuk tantangan ini adalah menulis fungsi / program yang menerapkan permutasi 1 pada bilangan asli positif. Skor dari solusi Anda adalah jumlah dari codepoint setelah memetakannya dengan permutasi yang diterapkan.

Contoh

Misalkan kita mengambil permutasi di atas diimplementasikan dengan Python:

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

Cobalah online!

Karakter dmemiliki titik kode , . Jika kita melakukan ini untuk setiap karakter, kita mendapatkan:100pi(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

Jumlah semua karakter yang dipetakan ini adalah , ini akan menjadi skor untuk fungsi itu.2463

Aturan

Anda akan mengimplementasikan permutasi baik sebagai fungsi atau programπ

  • diberi bilangan alami , return / outputxπ(x)
  • untuk tujuan tantangan ini tidak tidak mengandungN0
  • permutasi harus secara non-trivial mengubah subset tak terbatas dariN
  • fungsi / program Anda tidak diizinkan untuk membaca sumbernya sendiri

Mencetak gol

Skor diberikan oleh jumlah semua codepoints (nol byte mungkin bukan bagian dari kode sumber) di bawah permutasi itu (codepoints tergantung pada bahasa Anda 2 , Anda bebas menggunakan SBCS, UTF-8 dll. Asalkan bahasa Anda mendukungnya).

Pengajuan dengan skor terendah menang, ikatan diputus oleh pengajuan paling awal.


  1. Kecuali untuk permutasi yang hanya mengubah bagian terbatas dari , yang berarti bahwa himpunan harus tidak terbatas.N{x|π(x)x}

  2. Jika ini meningkatkan skor Anda, misalnya Anda dapat menggunakan pengiriman Jelly yang disandikan UTF-8 alih-alih SBCS biasa.

ბიმო
sumber
1
@ JoKing "nol byte mungkin bukan bagian dari kode sumber" re: pertanyaan kedua
ASCII-only
Terkait .
Peter Taylor

Jawaban:

6

Jelly , skor  288 250 212  199

-38 Terima kasih kepada Erik the Outgolfer!

C-*+

Swap bahkan dengan aneh.

Skornya adalah 67+45+44+43=199 - lihat penilaian diri di sini .

Cobalah online!

Jonathan Allan
sumber
Rupanya, Leaky Nun's -*ạmemiliki skor 300 ... namun, -*_@memiliki skor 250. Mungkin aku harus mempostingnya sebagai milikku, meskipun permutasi yang sama.
Erik the Outgolfer
Ah pengamatan yang bagus dari Leaky Nun, jadi -*N+skor 212
Jonathan Allan
Itu bukan pengamatan, itu adalah jawaban atas tantangannya (sekarang sudah cukup tua) . ;-)
Erik the Outgolfer
3
C-*+terdengar seperti beberapa variasi masa depan C++.
val berkata Reinstate Monica
5

JavaScript (ES6), Nilai =  276  268

$=>(--$^40)+!0

Cobalah online!

Arnauld
sumber
tetapi 54^54adalah0
Jonathan Allan
@JonathanAllan Terima kasih telah memberi tahu. Saya entah bagaimana melewatkan bagian itu. Seharusnya benar sekarang.
Arnauld
4

Perl 6 , Nilai: 201

*-!0+^40+!0

Cobalah online!

Jawaban Port of Arnauld . Ini menguntungkan dari xor ( +^) yang memiliki prioritas yang sama dengan -dan +, dan penggunaan lambda Apapun untuk mengurangi karakter keseluruhan. Selain itu, saya tidak dapat menemukan cara untuk mewakili secara berbeda yang mendapat skor lebih baik.

Perl 6 , Skor 804 702

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

Cobalah online!

Jenis quine-y jawaban pertama di sini, dan saya pikir skornya cukup baik.

23,22,25,24 ...1,2,3,4 ... 2150,53,52,1,55,54!

Jo King
sumber
O_o itu peningkatan besar
ASCII
4

Skor Python 2 : 742 698 694 poin

lambda a:a^96or~~96

Cobalah online!

-44 poin berkat Ørjan Johansen; -4 poin thx ke xnor.

Chas Brown
sumber
Ørjan Johansen: Memperbaiki (dan itu menyelamatkan saya 44 byte!)
Chas Brown
Selamat menyimpan (walaupun itu bukan byte)
Ørjan Johansen
Itu beberapa kredit murah hati!
Ørjan Johansen
Tidak akan diedit jika Anda tidak menunjukkan kekurangannya :)
Chas Brown
Lebih murah untuk mengganti ruang sebelumnya 96dengan ~~.
xnor
2

Retina 0.8.2 , 6 byte, skor 260

T`O`RO

Cobalah online! Tautan termasuk catatan kaki penilaian sendiri. Cukup menukar angka 1dan 9dan 3dan 7dalam representasi desimal, sehingga angka yang tidak mengandung angka coprime 10tidak akan terpengaruh.

Neil
sumber
2

C # (Visual C # Interactive Compiler) , 22 byte, Skor 247 245

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

Cobalah online!

Sederhana, jika kurang dari 66, kembalikan input minus 66, jika tidak gunakan rumus dalam pertanyaan yang bertukar nomor genap dan ganjil.

Perwujudan Ketidaktahuan
sumber
Apa yang salah dengan versi sebelumnya A=>A<66?66-A:A?
Jo King
2
N{x|π(x)x}
Sial, aku tidak memperhatikan itu. Itu berarti jawaban saya sendiri juga tidak valid :(
Jo King
2

TI-BASIC, 9 byte, skor 1088 1051 1000

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

Swap bahkan dengan aneh. Bahkan peta ke Ans-1dan peta aneh Ans+1.

TI-BASIC adalah tokenized, sehingga program ini akan memiliki nilai hex berikut:

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

Program uji keluaran:

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

Output yang mana:

2
1
4
3
6
5
8
7
10
9

Catatan:

  • Nilai-nilai token TI-BASIC dapat ditemukan di sini .

  • Pausedigunakan dalam program output untuk melihat permutasi dengan lebih baik, karena kalkulator hanya memiliki 8 baris. Tekan [ENTER] untuk melihat permutasi berikutnya.

Tau
sumber
1

Arang , 13 byte, skor 681

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

Cobalah online! Tautan adalah untuk mencetak versi sendiri dengan tajuk untuk memetakan di atas array kode byte. (Arang memiliki halaman kode khusus jadi saya secara manual memasukkan kode byte yang benar dalam input.) Bekerja dengan membalikkan rentang angka 233, sehingga 117, 350, 583 ... tidak berubah. Penjelasan:

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

Haskell, skor 985

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

Cobalah online!

Joseph Sible-Reinstate Monica
sumber
Saya tidak berpikir ini adalah permutasi, karena menambahkan a*200tidak memiliki efek modulo 200 jadi a tidak masalah.
xnor
@xnor Tangkapan yang bagus. Itu seharusnya di luar mod. Pada titik tertentu saat bermain golf, saya pasti mengacaukan urutan operasi. Tetap sekarang, terima kasih!
Joseph Sible-Reinstate Monica
Saya pikir ada masalah lain yang 40 peta ke 0 tetapi tantangannya membutuhkan bilangan bulat positif, yang membuat pendekatan seperti ini rumit.
xnor
1
Menggunakan sum[1|...]lebih dari if..then..elseseharusnya akan membantu.
ბიმო
1

05AB1E , skor: 488 di halaman kode 05AB1E

È·<-

Swap aneh dan bahkan suka fungsi contoh.

Akan mencoba meningkatkan skor dari sini.

Cobalah online dengan input dalam rentang[1, 100] atau Coba online dengan codepoint.

Penjelasan:

È     # 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)
Kevin Cruijssen
sumber
0

Brainfuck, 47 byte, skor 2988

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

Cobalah online!

Saya menggunakan permutasi yang diberikan dalam pengantar. Karena ini adalah bijection, Anda dapat menggunakannya sebagai cipher simetris sederhana yang mirip dengan ROT13 atau Atbash. Solusi saya berfungsi pada sel yang tidak terikat. Namun, dengan membatasi diri Anda untuk sel 8-bit, Anda bisa menghemat 2 poin dengan mengganti [-]dengan [+].

orthoplex
sumber