Kaynak permütasyonu


14

Bir permütasyon bir dizi içinde a, örten fonksiyonu . Örneğin, ise \ pi: x \ mapsto 1 + (x + 1 \ mod 4) işlevi bir permütasyondur:S={s1,s2,,sn}π : S S S = { 1 , 2 , 3 , 4 }π:SSS={1,2,3,4}π:x1+(x+1mod4)

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

Sonsuz kümelerde permütasyonlara da sahip olabiliriz, örnek olarak N örneğini alalım: π:xx1+2(xmod2) fonksiyonu, tek ve hatta takas eden bir permütasyon iki blok halinde tamsayılar. İlk unsurlar aşağıdaki gibidir:

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

Meydan okuma

Bu görev için göreviniz , pozitif doğal sayılar üzerinde 1 permütasyon uygulayan bir fonksiyon / program yazmaktır . Çözümünüzün puanı, uygulanan permütasyon ile eşleştirildikten sonra kod noktalarının toplamıdır.

Misal

Python ile uygulanan yukarıdaki permütasyonu aldığımızı varsayalım:

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

Çevrimiçi deneyin!

Karakter 100d kod noktasına sahiptir , \ texttt {pi} (100) = 99 . Bunu her karakter için yaparsak: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

Tüm bu eşlenen karakterlerin toplamı 2463 , bu fonksiyonun puanıdır.

kurallar

Bir permütasyon uygulayacak bir fonksiyonu veya program olarak yaπ

  • doğal bir sayı verildiğinde , dönüş / çıkışxπ(x)
  • Bu zorluk amacıyla etmez değildir içerenN 00
  • permütasyon önemsiz bir şekilde sonsuz alt kümesine izin vermelidirN
  • işlevinizin / programınızın kendi kaynağını okumasına izin verilmiyor

puanlama

Skor, bu permütasyon altında tüm kod noktalarının (sıfır bayt kaynak kodun bir parçası olmayabilir) toplamı tarafından verilir (kod noktaları dilinize bağlıdır 2 , SBCS, UTF-8 vb. diliniz destekliyor).

En düşük puana sahip sunum kazanır, bağlar en erken sunumla kesilir.


  1. Sadece sonlu bir alt kümesine izin veren permütasyonlar hariç , yani sonsuz olmalıdır.N{x|π(x)x}

  2. Puanınızı artırırsa, örneğin normal SBCS yerine UTF-8 kodlu Jelly gönderimi kullanabilirsiniz.


1
@JoKing "sıfır bayt kaynak kodun bir parçası olmayabilir" re: ikinci soru
sadece ASCII-sadece

Yanıtlar:


6

Jöle , skor  288  250212199

-38 Outgolfer Erik sayesinde!

C-*+

Garip de olsa takas eder.

Skor 199 - bakınız burada puanlı kendini .67+45+44+43=199

Çevrimiçi deneyin!


Görünüşe göre, Leaky Nun's -*ạ300 puan var ... Ancak, -*_@250 puanı var. Belki de aynı permütasyon olmasına rağmen, kendi olarak ilan etmeliyim.
Outgolfer Erik

Leaky Nun tarafından güzel bir gözlem, yani -*N+skorlar 212
Jonathan Allan


3
C-*+gelecekteki bir varyasyon gibi geliyor C++.
val diyor Reinstate Monica


4

Perl 6 , Puan: 201

*-!0+^40+!0

Çevrimiçi deneyin!

Arnauld Limanı'nın cevabı . Bu +^, ve ile aynı önceliğe sahip olan xor ( ) yönteminden -ve +genel karakterleri azaltmak için Whatever lambda kullanımından yararlanır. Bunun dışında, daha iyi bir puan alan farklı bir şekilde temsil etmenin bir yolunu bulamadım.

6 Perl , Skor 804 702

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

Çevrimiçi deneyin!

Burada ilk quine-y tipi cevap var ve bence oldukça iyi.

Bu, gövdesinden kodun benzersiz sıralı kod noktalarının dizinlerine eklenen aralığıyla soru gövdesinden dizisini üretir . Örneğin, dizinin 30. ila 35. öğeleri , 33. kod noktası olduğundan ve kodumdaki en düşük kod noktasıdır.23,22,25,24...1,2,3,4...2150,53,52,1,55,54!


O_o bu muazzam bir gelişme
sadece ASCII sadece


2

Retina 0.8.2 , 6 bayt, puan 260

T`O`RO

Çevrimiçi deneyin! Bağlantı kendi kendine puanlama altbilgisini içerir. Basitçe rakam değiştirir 1ve 9ve 3ve 7ondalık gösterimlerle, bu nedenle rakam içermiyorsa sayılar için asal olduğu 10etkilenmez.


2

C # (Visual C # Interactive derleyicisi) , 22 bayt, Skor 247 245

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

Çevrimiçi deneyin!

Basit, 66'dan küçükse, 66 eksi girdi döndürür, sorudaki çift ve tek sayıları değiştiren formülü kullanın.


Önceki sürümde sorun nedir A=>A<66?66-A:A?
Jo King

2
N{x|π(x)x}

Lanet olsun, bunu fark etmedim. Bu, kendi cevabımın da geçersiz olduğu anlamına geliyor :(
Jo King

2

TI-BASIC, 9 bayt, skor 1088 1051 1000

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

Tek bile olsa takas eder. Hatta haritalara Ans-1ve tek haritalara bile Ans+1.

TI-BASIC tokenleştirildi, bu nedenle bu program aşağıdaki onaltılı değerlere sahip olacak:

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

Çıktı test programı:

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

Hangi çıktılar:

2
1
4
3
6
5
8
7
10
9

Notlar:

  • TI-BASIC'in token değerlerini burada bulabilirsiniz .

  • Pausehesap makinesinde sadece 8 satır olduğundan, çıkış programında permütasyonu daha iyi görmek için kullanılır. Bir sonraki permütasyonu görüntülemek için [ENTER] tuşuna basın .


1

Kömür , 13 bayt, puan 681

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

Çevrimiçi deneyin! Bağlantı, bir bayt kodu dizisini eşleştirmek için üstbilgiye sahip kendi kendine puanlanan sürümdür. (Kömür özel bir kod sayfası vardır, bu yüzden girişe doğru bayt kodlarını manuel olarak ekledim.) 233 sayı aralığını tersine çevirerek çalışır, böylece 117, 350, 583 ... değişmez. Açıklama:

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

1

Haskell, skor 985

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

Çevrimiçi deneyin!


Bunun bir permütasyon olduğunu düşünmüyorum, çünkü eklemenin a*200modulo 200'ün bir etkisi yok , bu yüzden a önemli değil.
xnor

@xnor İyi yakaladın. Modun dışında olması gerekiyordu. Golf yaparken bir noktada, operasyon sırasını berbat etmeliydim. Şimdi düzeltildi, teşekkürler!
Joseph Sible-Eski durumuna getirme Monica

Sanırım 40'ın 0'a eşlediği başka bir sorun daha var, ancak zorluk pozitif tamsayılar gerektiriyor, bu da bu tür yaklaşımları zorlaştırıyor.
xnor

1
Kullanılması sum[1|...]üzerine if..then..elseyardımcı olmalıdır.
ბიმო



0

Brainfuck, 47 bayt, puan 2988

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

Çevrimiçi deneyin!

Giriş bölümünde verilen permütasyonu kullandım. Bu bijection olduğundan, ROT13 veya Atbash'e benzeyen basit bir simetrik şifre olarak kullanabilirsiniz. Çözümüm sınırsız hücreler üzerinde çalışıyor. Ancak, 8 bitlik hücrelere kendini kısıtlayarak, sen değiştirerek 2 puan kurtarabilecek [-]ile [+].

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.