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.


1
@ JoKing "nol byte mungkin bukan bagian dari kode sumber" re: pertanyaan kedua
ASCII-only

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!


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


3
C-*+terdengar seperti beberapa variasi masa depan C++.
val berkata Reinstate Monica


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!


O_o itu peningkatan besar
ASCII


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.


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.


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.


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

1

Haskell, skor 985

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

Cobalah online!


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.
ბიმო



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 [+].

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.