ソース順列


14

順列セットのS={s1,s2,,sn}である全単射関数π:SS。例えば、S={1,2,3,4}、関数π:x1+(x+1mod4)は順列です:

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

我々はまた、のは、見てみましょう、無限集合の順列を持つことができるN例として:関数π:xx1+2(xmod2)は、2つのブロックの奇数と偶数の整数を交換する順列です。最初の要素は次のとおりです。

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

チャレンジ

この挑戦のためにあなたの仕事は、任意の実装の機能/プログラムの書き込みにある1つの正の自然数の順列を。ソリューションのスコアは、実装された順列でマッピングした後のコードポイントの合計です。

Pythonで実装された上記の順列をとると仮定します。

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

オンラインでお試しください!

文字のdコードポイントは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

これらのマップされたすべての文字の合計は2463、これはその関数のスコアになります。

ルール

関数またはプログラムとして置換πを実装します

  • 自然数x与えられ、戻り値/出力π(x)
  • このチャレンジのために、N0が含まれていませ0
  • 順列はNの無限サブセットを非自明に置換しなければならないN
  • 関数/プログラムは独自のソースを読み取ることが許可されていません

得点

スコアは、その順列の下のすべてのコードポイントの合計によって与えられます(ゼロバイトはソースコードの一部ではない場合があります)(コードポイントは言語2に依存します。あなたの言語はそれをサポートしています)。

最も低いスコアの提出が勝ち、最も早い提出によって同点が破られます。


  1. N有限サブセットのみを置換する順列を除き、集合{x|π(x)x}は無限でなければなりません。

  2. スコアが改善される場合、たとえば、通常のSBCSの代わりにUTF-8エンコードのJelly提出を使用できます。


1
2番目の質問:@JoKing再「ゼロバイトは、ソースコードの一部ではないかもしれない」
ASCIIのみ

回答:


6

ゼリー、スコア 288 250 212  199

-38アウトゴルファーのエリックに感謝!

C-*+

奇数でもスワップします。

スコアは67+45+44+43=199 - ここで自己採点を参照してください。

オンラインでお試しください!


どうやら、Leaky Nun's -*ạは300のスコアを持っていますが、-*_@250のスコアを持っています。同じ順列ですが、それを自分のものとして投稿する必要があるかもしれません。
エリックアウトゴルファー

リーキー修道女による素晴らしい観察、-*N+スコア212
ジョナサンアラン


3
C-*+の将来のバリエーションのように聞こえC++ます。
バルはモニカを


4

Perl 6、スコア:201

*-!0+^40+!0

オンラインでお試しください!

アルノーの答え。これは、xor(+^)が-andと同じ優先順位を持っていることの恩恵を受けます+し、どのようなラムダを使用することは、全体の文字を低減することができます。それ以外は、より良いスコアを得るためにそれを異なって表現する方法を見つけることができませんでした。

Perl 6、スコア804 702

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

オンラインでお試しください!

ここで最初のクイニータイプの答えは、かなり良いスコアだと思います。

これにより、シーケンス生成されます。23222524 ...1234 ... 2150535215554!


大規模な改良だO_O
ASCIIのみの

4

Python 2スコア:742 698 694ポイント

lambda a:a^96or~~96

オンラインでお試しください!

-44ポイントはØrjanJohansenに感謝します。-4はthxからxnorを指します。


ØrjanJohansen:修正(44バイト節約できました!)
チャスブラウン

(つまり、バイトではないのですが)良い保存
Ørjanヨハンセン

それは寛大なクレジットです!
Ørjanヨハンセン

あなたが欠陥を指摘していなければ編集しなかっただろう:)
チャスブラウン

これは、前にスペースを置き換えるために安価だ96~~
xnor


2

C#(Visual C#Interactive Compiler)、22バイト、スコア247 245

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

オンラインでお試しください!

単純で、66未満の場合は66マイナス入力を返します。そうでない場合は、偶数と奇数を入れ替える質問の式を使用します。


以前のバージョンの何が問題になっていA=>A<66?66-A:Aますか?
ジョーキング

2
@JoKingの有限サブセットのみを置換する順列を除くN、つまりセット {バツ|πバツバツ}無限でなければなりません。セット内の値のみが、65以上のため、Aのマップのすべての値1-65あるのでセットが、無限ではない
無知の実施の形態

ああ、気づかなかった。それは私自身の答えも無効であることを意味します:(
ジョーキング

2

TI-BASIC、9バイト、スコア1088 1051 1000

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

奇数でもスワップします。へのAns-1偶数マップとへの奇数マップAns+1

TI-BASICはトークン化されているため、このプログラムには次の16進値が含まれます。

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計算機には8行しかないため、出力プログラムで順列を見やすくするために使用されます。[ENTER]を押して、次の順列を表示します


1

、13バイト、スコア681

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

オンラインでお試しください!リンクは、バイトコードの配列にマップするヘッダー付きの自己採点バージョンです。(Charcoalにはカスタムコードページがあるため、入力に正しいバイトコードを手動で挿入しました。)233番号の範囲を逆にすることで機能し、117、350、583 ...は変更されません。説明:

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

1

Haskell、スコア985

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

オンラインでお試しください!


加算a*200は200を法とする効果をa 持たないので、これは置換ではないと思います。
-xnor

@xnor良いキャッチ。これはmodの外にあるはずです。ゴルフ中のある時点で、私は操作の順序を台無しにしたに違いありません。今すぐ修正、ありがとう!
ジョセフ・シブル復興モニカ

40が0にマップされるという別の問題があると思いますが、チャレンジには正の整数が必要であるため、このようなアプローチが難しくなります。
-xnor

1
sum[1|...]オーバーif..then..elseを使用すると役立ちます。
ბიმო


1

05AB1E、スコア:05AB1Eのコードページで 488

È·<-

例の関数のように奇数と偶数を交換します。

ここからスコアを改善しようとします。

範囲内の入力でオンラインで試す[1, 100]、コードポイントでオンラインで試します。

説明:

È     # 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バイト、スコア2988

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

オンラインでお試しください!

序論で示した順列を使用しました。これは全単射なので、ROT13やAtbashに似た単純な対称暗号として使用できます。私のソリューションは、無制限のセルで動作します。ただし、8ビットセルに制限することにより、に置き換え[-]て2ポイント節約できます[+]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.