बैक-टू-फ्रंट पर्मुटेशन इंडेक्स


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(अलग) वस्तुओं के संभव क्रमपरिवर्तन।

उन सभी क्रमपरिवर्तन की लेक्सिक रूप से सॉर्ट की गई सूची में पहला (या यदि आप चाहें तो) आइटम [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-आधारित) की श्रृंखला के पहले 100 मामले i(n)के साथ यह कहते हुए 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
आशा है कि यह सब ठीक है - बिना किसी प्रतिक्रिया के एक महीने से अधिक समय तक यह सैंडबॉक्स में था।
जोनाथन एलन


ये हैं बारी factorials हर दूसरे प्रवेश के साथ 1. की वृद्धि हुई
XNOR

@xnor हाँ, वे हैं - फ्रंट-टू-बैक परम्यूटेशन में पिछले इंडेक्स से बैक-टू-फ्रंट एक है।
जोनाथन एलन

जवाबों:



6

जेली , 6 बाइट्स

R!ḅ-_Ḃ

0-आधारित। इसे ऑनलाइन आज़माएं!

भारी @ नील के 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.

पर कैसे?

मैं अपने ईएस 6 में प्रत्येक संख्या की गणना के लिए संबंधित तकनीक का उत्तर देता हूं । सूत्र यह है:

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

@ नील के ES6 जवाब को पढ़ते हुए मुझे एक अहसास हुआ । इस सूत्र को इस तरह सरल बनाया जा सकता है:

(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-आधारित है)।
जोनाथन एलन

आंकड़े जो आप ḅ-जल्द या बाद में उपयोग करेंगे ...: पी अच्छा काम!
डेनिस

@JonathanAllan मुझे पता था जैसे ही मैंने देखा कि आपने चुनौती पोस्ट की थी कि एक डरपोक जेली जवाब होगा। हालांकि किसी को भी इसे खोजने में काफी समय लग गया। बड़ी चुनौती :-)
ETHproductions

4

जावास्क्रिप्ट (ईएस 6), 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

जावास्क्रिप्ट (ईएस 6), 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
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 है; 1 स्थिति में तत्व एक 6 है; 6 स्थिति में तत्व एक 5 है; 2 स्थिति में तत्व 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 बाइट्स तक लाने में सक्षम होना चाहिए।

पूरी तरह से भूल गया कि यह एक बात थी। धन्यवाद!
डेनिस

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

पायथ, 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.