백투 프론 순열 인덱스


12

도전

항목의 수를 감안할 때, n비 비어에, 인덱스가,리스트 출력 분류 i(n),하는 그
" 앞뒤 순열 "
고 말했다 순열이 사전 식 분류 된 경우 모든 순열의 목록에있는 것입니다.

결과는 (입니다 어떤 말을, 0 또는 1을 기반으로 할 수있다 i, 없다 n).

대수 순열

... 모든 항목이 새 목록으로 이동 될 때까지 앞으로 정렬 된 (왼쪽에서 오른쪽으로) 목록의 뒤로 (오른쪽), 앞 (왼쪽)을 반복해서 가져 와서 항목 목록을 작성한 결과입니다. :

Input being consumed     Output being built
----------------------+----------------------
[1,2,3,4,5,6,7]       |   []
[1,2,3,4,5,6]         |   [7]
  [2,3,4,5,6]         |   [7,1]
  [2,3,4,5]           |   [7,1,6]
    [3,4,5]           |   [7,1,6,2]
    [3,4]             |   [7,1,6,2,5]
      [4]             |   [7,1,6,2,5,3]
       []             |   [7,1,6,2,5,3,4]
----------------------+----------------------
                Result:   [7,1,6,2,5,3,4]

순열 인덱스

경우 n이다 7(위의 앞뒤의 예로서)가 7! = 5040제 (별개의) 항목의 수 순열.

사전 순으로 정렬 된 모든 순열 목록의 첫 번째 (또는 원하는 경우 0) 항목은 [1,2,3,4,5,6,7]그 자체입니다.
두 번째 항목은입니다 [1,2,3,4,5,7,6].
두 번째 항목은입니다 [7,6,5,4,3,1,2].
마지막 항목은입니다 [7,6,5,4,3,2,1].

목록의 어딘가에 앞뒤 [7,1,6,2,5,3,4]순열이 있습니다.
실제로 인덱스 4421 (또는 4420, 0 기반)에 있습니다.

(1 기반) 일련의 i(n)진술 의 첫 100 용어는 다음 과 n=1같습니다.

[1, 2, 5, 20, 101, 620, 4421, 35900, 326981, 3301820, 36614981, 442386620, 5784634181, 81393657020, 1226280710981, 19696509177020, 335990918918981, 6066382786809020, 115578717622022981, 2317323290554617020, 48773618881154822981, 1075227108896452857020, 24776789629988523782981, 595671612103250915577020, 14915538431227735068422981, 388375922695377900515577020, 10500493527722974260252422981, 294387851083990886241251577020, 8547374142655711068302364422981, 256705485669535347568006115577020, 7966133168508387470157556764422981, 255164703765185142697060455395577020, 8428152915046701352821133945884422981, 286804646124557439494797475697635577020, 10046343320261587490171853861825564422981, 361946983469639629977827594289009635577020, 13401806107756705416338151987291892764422981, 509620811358844406343669072112782398435577020, 19888261269838598952296612667790114958364422981, 796027021978059135393314656928325779313635577020, 32656499591185747972776747396512425885838364422981, 1372349618161694150570365858847999144050545635577020, 59042913445212141486784766209665998363213966364422981, 2599228661343236626556841044804949891956424561635577020, 117022992204136957935406320450852765172427309198364422981, 5385599167607951991914899108349402127789224443761635577020, 253237642343560228651049456045262577841408407945358364422981, 12160677950192512442211239591328112460680077946732401635577020, 596121186084075048430040923729967264426872753432477838364422981, 29817972015629302995182567242334801579950768815528034161635577020, 1521300781271752977229060449226968409483308951201458077838364422981, 79136874389672125594431576407176798565806196489681819746161635577020, 4195746409670353438703582176982222851124537591877131904925838364422981, 226647950929571027033389160506045358232154026979930809227362161635577020, 12469755402728704898931711687060471601348167024469505953048477838364422981, 698528832402134746955113935776664478135149811856698952734398562161635577020, 39828390672475082008725487969655657656845234984369903192450082717838364422981, 2310732940610403489820749422545419026172017083196773021228249831522161635577020, 136372385605079432248118270297843987319730859689490659519593045108637838364422981, 8184614727136310712028222912925520393434441746671755292929684651300962161635577020, 499395599150088488088828589263699706832570087241364247806476254829684637838364422981, 30970577661237849037564293765687064381179710710016867944356691992991422562161635577020, 1951637737743202215078582414596211073163593979517251760161922907619738331037838364422981, 124935294448140961888354806920565269729701922195027940438639971467594965899362161635577020, 8122715297634329704834815499864930982456556629150409552483483162921360809076637838364422981, 536222223779808734298894424747977821661836507759648464980376643706749720339339362161635577020, 35934888694408876553950964671857486605505798806289876128721251856561212716604532637838364422981, 2444100653742421723047039453897314094441893402549077796242989486161660232995578763362161635577020, 168678351774398889649421299427375524997828651490971291597405051437095619521145068660637838364422981, 11809893318195492906423362422261723211461109491055454565957957813190913963268700251019362161635577020, 838668695249666824614744281817664287077123498629740781320472805575397766414810317446260637838364422981, 60395789681636420036909326103457008453700968286067588202502542158402987220806878956757899362161635577020, 4409719671831047920854347812021594101623099731996837427616577550212019116846376438060145780637838364422981, 326378824480107593305098680409232188044060152088938133742995349285199216584125189021190726539362161635577020, 24482761986915290498641378436184801472882183734481184704052899163370643460988742220422624697460637838364422981, 1861011939679134964489290882424961756757512351644848150968435083798473400034549180897307347526539362161635577020, 143322080088606734669581493203883323226982866872563510695813139604263517949121870899167900513721460637838364422981, 11180959098117691096787939665528162905504766712615688479353149686064571807285078895345918312663622539362161635577020, 883437253980179837588356231874303489164303450066956218734514913541773418886216781638015892528346553460637838364422981, 70686019792283622457223177491312228676420353892298796358374930144685265836593932061030928974752467526539362161635577020, 5726440000955084363422511054086796876735936890839327162387490119571704913857298124195153605274993472953460637838364422981, 469637893700329090478715695935318149767077357177154001454773443957172289821041850488811978203204173646406539362161635577020, 38985601803506257421418755484185292421669426050466292273769584084412579273175587484390779961900566697260473460637838364422981, 3275254532761847009577968823645945995578996860191583194845076448298646552018541276645494943006816186458917446539362161635577020, 278435156905293180685369975402415213484477637470382623210256836304261379607777392174394791509334107831816205753460637838364422981, 23948660226767439201080153228038844501800392914958999127628507660415900870134672884615069843391985357739844389446539362161635577020, 2083808638152760278012520365471350750727983345146397213195344003554238214857458501196068353393022808146994627392953460637838364422981, 183398833619245678836784325280074933629492985604252949471226236983335323969170740817904072891411479020269638889458246539362161635577020, 16324556327289215402380134937173544376210173250892288905442294470849835710409338998582008497896189183708810744110298553460637838364422981, 1469391408154472281907142598683652193509359788033796478036774569234135557383656537547410122872987870461908423725867813446539362161635577020, 133730761359685823973259426160811489954077506688872881313704960027919535214176338228137873831877461557289259913042140378553460637838364422981, 12304683293281621431502064899712741587623914209186541475526534622910218175769343180214908250005163885795818227069614613285446539362161635577020, 1144467823788359953327703097406527694627129315367226993710615746590336588945697972034988381266839681418043178062317463477466553460637838364422981, 107592147841885948074037582159380073309559674264815645313786758687454863280472229658194120833316575777142822473140067877053221446539362161635577020, 10222386340397173314525664517235347022088186665852557223898463812546839124314230895213571254552107892786139414391086539473362138553460637838364422981, 981455548530552515895045737024658454136095461985415238220477591025945383684777269092475904782448641089288955324574667766166512421446539362161635577020, 95211304133951567337433380212539040258207718457187560919883999728307800228797098229713403270806624010171995234355103499880901319898553460637838364422981, 9331679144749296178288752362844703433551486045621764102574354777566399269794426700653262755936922495813433855354253356929531746247461446539362161635577020, 923930475294692230638703636199822301473608196598194450583355284174609600662504729388761377005628260366723545352917984225582320362921178553460637838364422981, 92402284968649460451060535220066878189242360067783427018009608611042990392567410879552702599150890025886974375474305774025602890553942821446539362161635577020

( i(0)=i(1)=1그러나 도전 자체는 비어 있지 않은 목록 만 처리합니다)

게시 시점에서이 순서는 OEIS에 나타나지 않았습니다 .

출력은 이론적으로 만 작동해야합니다 (예를 들어, 정수가 넘치거나 리소스 부족에 대해 걱정하지 마십시오).

이것은 이므로 바이트 단위의 최단 답변이 이깁니다.

그러나 코드 골프 언어가 당신을 설득하지 못하게하십시오-좋은 솔루션은 공감해야합니다!


1
이것으로 모든 것이 잘되기를 바랍니다. 피드백없이 한 달 이상 샌드 박스에있었습니다.
Jonathan Allan


이들은 모든 다른 항목이 1 씩 증가함에 따라 대체 계승 입니다.
xnor

@xnor 예, 앞뒤 순열은 앞뒤 인덱스에 대한 이전 인덱스를 갖습니다.
Jonathan Allan

답변:


8

하스켈 , 32 바이트

f 1=1
f n=product[1..n]+1-f(n-1)

온라인으로 사용해보십시오!

관계를 사용합니다 f(n-1) + f(n) = n! + 1. 시퀀스의 인접 멤버는 계승에 1을 더합니다.

1,   2,   5,   20,   101,   620,   4421, ...
  3     7    25    121    721   5041  ...
 2!+1  3!+1  4!+1  5!+1   6!+1  7!+1 

6

젤리 , 6 바이트

R!ḅ-_Ḃ

0부터 시작합니다. 온라인으로 사용해보십시오!

@Neil 의 ES6 답변에서 크게 영감을 받았습니다 .

설명

R!ḅ-_Ḃ
R       Create the range [1..N].
 !      Take the factorial of each.
  ḅ-    Convert from base -1; that is, sum, but alternate between adding and subtracting.
    _Ḃ  Subtract N%2.

그러나 어떻게?

ES6 답변 에서 각 숫자를 계산하는 관련 기술을 설명 합니다. 공식은 다음과 같습니다.

(n-1)(n-1)! + (n-3)(n-3)! + (n-5)(n-5)! + ...

@Neil의 ES6 answer 을 읽으면서 깨달았습니다 . 이 공식은 다음과 같이 단순화 할 수 있습니다.

(n-1)(n-1)!        + (n-3)(n-3)!            + (n-5)(n-5)!            + ...
(n(n-1!) - (n-1)!) + ((n-2)(n-3!) - (n-3)!) + ((n-4)(n-5)! - (n-5)!) + ...
(n!      - (n-1)!) + ((n-2)!      - (n-3)!) + ((n-4)!      - (n-5)!) + ...
n! - (n-1)! + (n-2)! - (n-3)! + (n-4)! - (n-5)! + ...

젤리 코드 R!ḅ-는이 공식을 계산합니다. 그러나 각 홀수 값의 끝에는 n여분 + 0!이 있으며 뺄셈하여 처리 n%2합니다.


1
축하합니다 내 솔루션을 찾았습니다! (0 기반임을 유의하십시오).
Jonathan Allan

ḅ-조만간 사용할 수치 ... : P 잘 했어!
Dennis

@JonathanAllan 나는 당신이 몰래 젤리 답변이있을 것이라는 도전을 게시 한 것을 보자 마자 알았습니다. 누군가가 그것을 찾는 데는 꽤 오랜 시간이 걸렸습니다. 중대한 도전 :-)
ETHproductions

4

자바 스크립트 (ES6), 38 바이트

f=(n,x=n%2,y=1)=>n-x&&f(n,++x,y*=-x)+y

인덱스가 0입니다. (실제로 왜 작동하는지 모르기 때문에 설명이 없습니다. 죄송합니다.)


1
아, 천재입니다. 내 답변은 (n-1)*(n-1)! + (n-3)*(n-3)! + (n-5)*(n-5)! + ...이며 이는 (n! - (n-1)!) + ((n+2)! - (n-3)!) + ((n-4)! - (n-5)!) + ...귀하의 답변 과 동일합니다 .
ETHproductions

3

자바 스크립트 (ES6), 44 바이트

f=(x,n=0,g=1)=>x-n&&(x-n&1)*g*n+f(x,++n,g*n)

0부터 시작합니다. 이는 숫자가 다음과 같은 패턴으로 계승의 합으로 표현 될 수 있다는 사실을 이용합니다.

       1   2   6  24 120 720
   0:                       
   1:  1
   4:      2
  19:  1       3
 100:      2       4
 619:  1       3       5
4420:      2       4       6

왜? 순열은 계승 기준으로 멋지게 표현 될 수 있습니다 . 나머지 목록 에서 n 번째 항목을 가져 오는 것은 해당 위치 의 n 숫자에 해당합니다 . 우리는 마지막 항목 (가장 높은 숫자)과 첫 번째 항목 (0)을 번갈아 가며 바꾸고 있습니다. 따라서 계승 기준에서이 숫자는 다음과 같이 나타낼 수 있습니다.

0
10
200
3010
40200
503010
6040200

등등.


2

MATL , 17 바이트

:t"&0)P]vG:Y@!=Af

출력은 1 인덱스입니다.

온라인으로 사용해보십시오!

설명

이 코드는 다음과 같은 정의를 적용합니다. 백 투프 순열을 만들고, 모든 순열을 생성하고, 전자를 후자와 비교하고, 일치하는 인덱스를 출력합니다.

:        % Input n implicitly. Push [1 2 ... n]
t        % Duplicate
"        % For each: do the following n times
  &0)    %   Push the last element and then the rest of the array
  P      %   Reverse
]        % End
v        % Concatenate the whole stack vertically. This produces into a column vector
         % with the back-to-front permutation
G:       % Push [1 2 ... n] again
Y@!      % Permutations of [1 2 ... n]. Gives a matrix. Each column is a permutation
=        % Test for equality, element-wise with broadcast
A        % All: true for columns that have all entries equal to true. Gives a row vector
f        % Find: index of non-zero value. Implicitly display

2

젤리 , 9 바이트

RU;¥/ỤUŒ¿

온라인으로 사용해보십시오!

허, 나는 이것을 FGITW하려고 노력했다. @Dennis가 먼저 게시되었지만 결과는 더 짧습니다.

설명

RU;¥/ỤUŒ¿
R           List of numbers from 1 to {the input}
   ¥/       Left-fold the list by
 U;         prepending the reverse of the list to the next element
     Ụ      Invert permutation
      U     Reverse the list
       Œ¿   Find index of permutation

Œ¿와 같은 내장 매우 편리 여기에 다른 7 바이트는 앞뒤 순열을 구성 할 책임이 있습니다, 그래서 우리가, 색인에 순열 변환시키는.

이를 수행하는 방법은 먼저 다음 패턴을 통해 다른 순열을 구성하는 것입니다.

1
1 2
2 1 3
3 1 2 4
4 2 1 3 5
5 3 1 2 4 6
6 4 2 1 3 5 7

매번 우리는 지금까지 가지고 있던 목록을 되돌리고 다음 정수를 추가합니다. 그것은 앞뒤 순열을 생성하지는 않지만 명확하게 관련되어 있습니다.

우리가 얻으려는 순열 은 7 1 6 2 5 3 4입니다. 이것은 어떻게 관련이 있습니까? 우리가 가지고있는 순열의 7 번째 위치에있는 요소는 7입니다. 첫 번째 위치의 요소는 6입니다. 6 번째 위치의 요소는 5이며; 두 번째 위치의 요소는 4입니다. 다시 말해, 그것은 우리가 가진 순열의 역수입니다 (요소를 역순으로). 따라서 감소 후에는 순열을 반전시키고 결과를 반대로하여 U원하는 전후 순열을 얻을 수 있습니다.

서둘러 작성되었으며 물건을 재정렬 할 가능성이 적어도 있다고 생각하기 때문에 여기에 저축이있을 수 있습니다. 그래도 전체 바이트를 저장할 수 있는지 확실하지 않습니다.


2

젤리 , 10 8 바이트

RṚżRFQŒ¿

2 바이트의 골프를 치고 엄청난 속도를 올린 @ ais523에 감사드립니다!

온라인으로 사용해보십시오!

작동 원리

RṚżRFQŒ¿  Main link. Argument: n

R         Range; yield [1, ..., n].
 Ṛ        Reverse; yield [n, ..., 1].
   R      Range; yield [1, ..., n] again.
  ż       Zip; yield [[n, 1], ..., [1, n]].
    F     Flatten.
     Q    Unique; deduplicate the results.
      Œ¿  Compute the permutation index of [n, 1, n-1, 2, ...].

1
Œ¿내장 을 놓친 것 같습니다 . 목록을 구성하는 방법은 내 것보다 짧은 바이트이므로이를 대체 할 수 있다면 i@Œ!이것을 8 바이트로 낮추어 내 대답을 꺾을 수 있어야합니다.

그것은 완전히 잊어 버렸습니다. 감사!
Dennis

0

PHP, 86 바이트

for($i=$argv[1];$i>0;$i--)$o+=gmp_strval(gmp_fact($i))*($i%2==$argv[1]%2?1:-1);echo$o;

GNU 다중 정밀도 확장을 사용합니다 .

이 기능 i(n)은 다음과 같은 사실을 이용 합니다.n! - (n-1)! + (n-2)! - (n-3)! etc

고장

for($i=$argv[1];$i>0;$i--) {        // Simple decreasing for loop (added { for readability)
    $o+=                            //  increment output with
        gmp_strval(gmp_fact($i))    //      $i!
    * ($i%2 == $argv[1]%2 ? 1 : -1) //      multiplied by -1 if ($i is odd when the input is even) or (if $i is even when the input is odd), else by 1
    ;
}
echo $o;                            // echoes output

0

배치, 79 바이트

@set/ax=%1%%2-1,y=z=1
@for /l %%i in (-%1,1,%x%)do @set/az+=y*=x-=1
@echo %z%

인덱스가 0입니다.


0

Pyth, 12 바이트

x.pQ<Q.i_UQU

인덱스가 0입니다.

설명

x.pQ<Q.i_UQU
      .i       Interleave
        _UQUQ  Reversed range and range
    <Q         Take first n
x              Find the index
 .pQ           In the list of permutations
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.