सामान्यीकृत ऐरे रिफल


22

सप्ताह शुरू करने के लिए एक साधारण गोल्फ! आपको तीन ऐरे दिए गए हैं: बेस ऐरेB , वैल्यू ऐरे V और इंडेक्स ऐरे I । आपको एक और सरणी का उत्पादन करना चाहिए जहां से निर्दिष्ट सूचकांक Vमें मूल्यों को डाला जाता Bहै I। यहाँ एक उदाहरण है:

Base:    [5, 1, 4, 1, 3]
Values:  [0, 0, 7]
Indices: [5, 0, 3]

आधार सरणी में निम्नलिखित पदों पर सूचकांक इंगित करता है:

[ 5, 1, 4, 1, 3 ]
 ^        ^    ^
 0        3    5

इसलिए मान सरणी से संबंधित तत्व सम्मिलित करते हुए, परिणाम निम्न होना चाहिए:

[0, 5, 1, 4, 7, 1, 3, 0]

नियम

आप STDIN (या निकटतम विकल्प), कमांड-लाइन तर्क या फ़ंक्शन तर्क के माध्यम से एक कार्यक्रम या फ़ंक्शन लिख सकते हैं, और परिणाम को STDOUT (या निकटतम वैकल्पिक), फ़ंक्शन रिटर्न मान, या Bपैरामीटर के रूप में दिए गए सरणी को संशोधित करके परिणाम कर सकते हैं। ।

यदि आपका सबमिशन एक फ़ंक्शन है, Iऔर Vइसे किसी भी तरह से संशोधित किया जा सकता है, साथ ही Bअगर यह आउटपुट के लिए उपयोग नहीं किया जाता है।

आप इनपुट के बारे में निम्नलिखित अनुमान लगा सकते हैं:

  • आधार और मान सरणी के सभी तत्व गैर-नकारात्मक पूर्णांक होंगे।
  • मान सरणी में आधार सरणी की तुलना में अधिक एक तत्व होगा।
  • मान सरणी और अनुक्रमणिका सरणी में समान तत्वों की संख्या होगी।
  • सूचकांक सरणी में बार-बार सूचक नहीं होंगे, और सभी सूचकांक सीमा में होंगे।
  • आधार और मूल्य सरणियों में बार-बार तत्व शामिल हो सकते हैं।
  • कोई भी या सभी सरणियाँ खाली हो सकती हैं।
  • आपको यह नहीं मानना ​​चाहिए कि सूचकांक किसी विशेष क्रम में दिए गए हैं।
  • आप इनपुट प्राप्त कर सकते हैं और किसी भी सुविधाजनक, अस्पष्ट स्ट्रिंग या सूची प्रारूप में उत्पादन कर सकते हैं। आप एक अलग क्रम में तीन सरणियों को प्राप्त करने का विकल्प भी चुन सकते हैं।
  • आप 0-आधारित और 1-आधारित अनुक्रमण के बीच चयन कर सकते हैं।

यह कोड गोल्फ है, इसलिए सबसे छोटा उत्तर (बाइट्स में) जीतता है।

परीक्षण के मामलों

B V I => Result0-आधारित अनुक्रमण के लिए प्रारूप में दिया गया । यदि आप 1-आधारित अनुक्रमण का उपयोग कर रहे हैं, तो तृतीय सरणी के तत्वों को 1 से बढ़ाएँ।

[] [] [] => []
[] [1] [0] => [1]
[1,2] [] [] => [1,2]
[1,2] [3] [0] => [3,1,2]
[1,2] [3] [1] => [1,3,2]
[1,2] [3] [2] => [1,2,3]
[0,0,0] [1,1,1,1] [0,1,2,3] => [1,0,1,0,1,0,1]
[5,1,4,1,3] [0,0,7] [5,0,3] => [0,5,1,4,7,1,3,0]
[1,2,3,4] [4,3,2,1] [4,0,3,1] => [3,1,1,2,3,2,4,4]

मुझे पता है अगर आप अन्य दिलचस्प किनारे के मामलों में आते हैं, और मैं उन्हें जोड़ दूँगा।

लीडरबोर्ड

यहां एक नियमित लीडरबोर्ड और भाषा के अनुसार विजेताओं का अवलोकन करने के लिए एक स्टैक स्निपेट है।

यह सुनिश्चित करने के लिए कि आपका उत्तर दिख रहा है, कृपया अपना उत्तर शीर्षक मार्कडाउन टेम्पलेट का उपयोग करके शीर्षक के साथ शुरू करें:

# Language Name, N bytes

Nआपके प्रस्तुत करने का आकार कहां है। यदि आप अपने स्कोर में सुधार करते हैं, तो आप पुराने अंकों को हेडलाइन में रख सकते हैं , उनके माध्यम से स्ट्राइक करके। उदाहरण के लिए:

# Ruby, <s>104</s> <s>101</s> 96 bytes


4
आप NULLभाषाओं के लिए एक खाली सरणी के बारे में कैसा महसूस करते हैं जहां एक खाली सरणी है NULL?
एलेक्स ए

@AlexA। यदि यह एक आम / है कहा भाषा (ओं) में खाली सरणी का प्रतिनिधित्व, मैं उस के साथ ठीक हूँ।
मार्टिन एंडर

3
एक साधारण गोल्फ ? यही सबसे मुश्किल काम है जो मैंने पूरे सप्ताह CJam में किया। : पी
डेनिस

जवाबों:


13

अजगर, 14 बाइट्स

s.icFPQmedSCtQ

प्रदर्शन।

यह प्रोग्राम इनपुट बेस, इंडिसेस, वैल्यूज़ में लिस्ट के 3-ट्यूपल के रूप में लेता है।

उदाहरण पर स्पष्टीकरण [5, 1, 4, 1, 3], [5, 0, 3], [0, 0, 7]:

  1. इनपुट लें: निहित, क्यू इनपुट है।

  2. सूचकांक बनाएं, मूल्य जोड़े: CtQ=[(5, 0), (0, 0), (3, 7)]

  3. सूचकांक क्रम में जोड़े को क्रमबद्ध करें: SCtQ=[(0, 0), (3, 7), (5, 0)]

  4. प्रत्येक जोड़ी से मूल्य निकालें: medSCtQ=[0, 7, 0]

  5. आधार सूची को संकेत के स्थान पर विभाजित करें: cFPQ=[[], [5, 1, 4], [1, 3], []]

  6. इंटरलेव 3 और 4: .icFPQmedSCtQ=[[], 0, [5, 1, 4], 7, [1, 3], 0, []]

  7. एक सूची में मिलाएं: s.icFPQmedSCtQ=[0, 5, 1, 4, 7, 1, 3, 0]


अरे नहीं। कब से हम एक interleave विधि है? बस पोस्ट करना चाहता था ssC,cFPQamedSCtQ]
जकुबे

5
@ जाकुब इसाक ने 6 दिन पहले चुपके से इसे अंजाम दिया।
orlp

@ जकूब चूंकि github.com/isaacg1/pyth/commit/…
isaacg

3
@ जेकब से पाइथ किसी भी समस्या को हल करने के लिए बढ़ सकता है। यही कारण है कि गोल्फ भाषाओं के साथ समस्या है। गूढ़ भाषाएं गूढ़ भाषाओं के लिए मौजूद हैं; के रूप में वे * बाद में डिजाइन किए हैं।
भेजा

@sentiao निष्पक्ष होने के लिए, होस्ट भाषा (पायथन) ने कुछ समय के लिए एक अलग नाम के तहत इंटरलेयिंग किया है ।
मीगो

16

अजगर 2, 54

lambda B,*X:map(B.insert,*zip(*sorted(zip(*X))[::-1]))

के रूप में इनपुट लेता है B,I,VBजब कहा जाता है तो इनपुट को संशोधित करता है (मुझे याद दिलाने के लिए मार्टिन ब्यूटनर का धन्यवाद)।

प्रत्येक सूचकांक / तत्व जोड़ी पर mapकॉल करने के लिए उपयोग करता है B.insert। तत्वों को सम्मिलित किए जाने के कारण सूची सूचकांकों के मुद्दे से बचने के लिए, एक बदसूरत ज़िप / सॉर्ट / अनज़िप द्वारा सूचकांक के घटते क्रम में जोड़े को टाइप करें। यदि स्थानांतरण मुद्दे के लिए नहीं, तो हम कर सकते हैं map(B.insert,*X)

पुरानी विधि (65):

B,V,I=input()
for i,v in sorted(zip(I,V))[::-1]:B[i:i]=v,
print B

5

हास्केल, 62 बाइट्स

import Data.List
f b v i=map snd$sort$zip[0.5,1.5..]b++zip i v

प्रयोग उदाहरण: f [5,1,4,1,3] [0,0,7] [5,0,3]-> [0,5,1,4,7,1,3,0]

यह कैसे काम करता है: आधार सूची को "और-एक-आधा" सूचकांकों के साथ शुरू करना 0.5(जैसे [(0.5,5),(1.5,1),(2.5,4),(3.5,1),(4.5,3)]) और इसे सूचकांक-मूल्य जोड़े के साथ संक्षिप्त करना। अनुक्रमणिका को सॉर्ट और त्यागें।

टिप्पणी : अगर मैं यहाँ धोखा दे रहा हूँ नहीं जानता। गणितीय दृष्टिकोण से यह ठीक है, लेकिन एक प्रोग्रामर यह तर्क दे सकता है कि सूचकांकों [5,0,3]की सूची Integersअनुरोध के अनुसार सूची नहीं है , लेकिन Fractionals(सटीक होने के लिए, प्रकार की एक सूची बहुरूपिक है, लेकिन Fractionalकक्षा से संबंधित होनी चाहिए , जैसे Floatया Double)।


5

रूबी, 60 59 53 बाइट्स

->a,b,c{c.zip(b).sort.reverse.map{|i,v|a.insert i,v}}

और अनगोल्ड संस्करण

def riffle(array, values, indices)
    indices.zip(values).sort.reverse.each do |index, value|
        array.insert(index, value)
    end
end

2
आप इसे एक अनाम फ़ंक्शन बनाने के बजाय इसे छोटा कर सकते हैं ->a,b,c{...}:। इसके अलावा संभावना को insertकोष्ठक की जरूरत नहीं है।
मार्टिन एंडर

@ मार्टिनबटनर को मैं लैंबडा के साथ अनाम फ़ंक्शन के बारे में जानता था, लेकिन मुझे ऐसा नहीं लगा कि यह चुनौती की भावना में था (जो आमतौर पर एक नामित फ़ंक्शन के लिए पूछता है)। परों को हाजिर करने के लिए धन्यवाद, हालांकि।
डायलन फ्रेज

जब तक चुनौती विशेष रूप से नामित फ़ंक्शन के लिए नहीं पूछती है, अनाम कार्य हमेशा स्वीकार्य होते हैं । और मैंने एक नामित फ़ंक्शन के लिए नहीं पूछा (मैं कभी नहीं करता;))।
मार्टिन एंडर

5

सीजाम, 34 23 18 बाइट्स

{.\2/\ee+{0=}$1f=}

मेरा पहला सीजेएम सबमिशन। सलाह का स्वागत है, मुझे यकीन है कि गोल्फ के लिए बहुत कुछ है।

@ मार्टिनबटनर और @ डेनिस की मदद से 16 बाइट्स बचाए गए।

स्टैक पर क्रम में इनपुट की अपेक्षा करना B V I(मैं सबसे ऊपर है)।

उदाहरण का उपयोग:

[5 1 4 1 3] [0 0 7] [5 0 3] {.\2/\ee+{0=}$1f=}~

तरीका:

  • सरणी के iतत्व को युग्मित करेंi+0.5
  • आवेषण पदों के साथ जोड़ी मान डालें
  • परिणामी दो सरणियों को मर्ज करें
  • स्थिति तत्वों के आधार पर सॉर्ट सरणी
  • मूल्य तत्व रखें

यह फ्लोटिंग पॉइंट एप्रोच बहुत चालाक है और (दुख की बात है) मेरी तुलना में बेहतर है। q~.5fm.\2/\ee+$1f=pअनाम फ़ंक्शन का उपयोग करके आप 19 बाइट्स के साथ और 18 बाइट्स के लिए नीचे आ सकते हैं :{.5fm.\2/\ee+$1f=}
डेनिस

फ्लोटिंग-पॉइंट ट्रिक के बिना समान विचार: {.\2/\ee+{0=}$1f=}(अभी भी 18 बाइट्स)
डेनिस

@ डेनिस धन्यवाद, मुझे इसके लिए get array elementऑपरेटर नहीं मिला 1f=। मैं इसे एक पूर्ण कार्यक्रम के रूप में छोड़ूंगा।
यादृच्छिक

तुम्हारा कॉल। क्या आप मुझसे पूछते हैं कि आप एक समारोह पोस्ट करने के विरोध में क्यों हैं?
डेनिस

@ डेनिस मैंने अभी CJam शुरू किया है और यह सुनिश्चित नहीं है कि कार्यों का उपयोग कैसे करें। अब मैंने इसका पता लगा लिया इसलिए मैंने इसका जवाब बदल दिया।
यादृच्छिक

5

के, 22 21 बाइट्स

{,//+(y@<z;(z@<z)_ x)}

हम एक 3 तर्क फ़ंक्शन {…}को अंतर्निहित चर के साथ परिभाषित करते हैं x, yऔर zक्रमशः शुरुआती सूची, मूल्य सूची और सूचकांक सूची का प्रतिनिधित्व करते हैं। "कट" ऑपरेटर ( _) का उपयोग दिए गए सूचकांकों की क्रमबद्ध सूची के अलावा प्रारंभिक सूची को विभाजित करने के लिए किया जाता है (z@<z)। हम एक सूची ( (a;b)) बनाकर , इसके स्थानान्तरण ( +) और परिणाम को समतल करके ( ,//) के आधार पर मूल सरणी के विखंडन के साथ मानों (उन्हें इसी तरह छाँटने के बाद ) को इंटरलेव करते हैं ।

उपयोग उदाहरण:

  f:{,//+(y@<z;(z@<z)_ x)}
{,//+(y@<z;(z@<z)_ x)}

  f[1 2 3 4;4 3 2 1;4 0 3 1]
3 1 1 2 3 2 4 4

  f[5 1 4 1 3;0 0 7;5 0 3]
0 5 1 4 7 1 3 0

अंडरस्कोर के चारों ओर रिक्तियाँ आवश्यक हैं क्योंकि K पहचानकर्ताओं में अंडरस्कोर की अनुमति देता है। K5 इस संभावित अस्पष्टता को दूर करता है। यदि हम बढ़ते क्रम में आने वाले सूचकांकों पर भरोसा कर सकते हैं और अंडरस्कोर मान्य पहचानकर्ता नहीं थे, तो हम बहुत अच्छे 13 बाइट प्रोग्राम का उपयोग कर सकते हैं:

{,//+(y;z_x)}

(आहें।)

संपादित करें:

{,//+(y@<z;(z@<z)_ x)} / before
{,//+(y@<z;z[<z]_ x)}  / after

समरूपता को तोड़ता है, लेकिन हम […]इन्फिक्स @इंडेक्सिंग ऑपरेटर के बजाय ब्रैकेट-इंडेक्सिंग ( ) का उपयोग करके एक बाइट बचा सकते हैं । आमतौर पर यह कार्यक्रम लंबा बनाता है, लेकिन इस मामले में हमें zकट प्रदर्शन करने से पहले छंटनी करने के लिए किसी भी तरह से पैरेंस की आवश्यकता थी ।


4

पायथ, 17 बाइट्स

ssC,cFPQamedSCtQ]

@ आइसाकग ने मेरे समाधान को पहले ही हरा दिया। लेकिन जब से मैं अपने प्रलेखन समाप्त हो गया था, मैं बस वैसे भी यह पोस्ट करने वाला हूँ।

यह प्रारूप में इनपुट लेता है B, I, V। आप इसे यहाँ आज़मा सकते हैं: प्रदर्शन या टेस्ट सूट

स्पष्टीकरण:

मैं B = [5,1,4,1,3], I = [5,0,3], V = [0,0,7]ओपी से उदाहरण का उपयोग कर रहा हूं ।

                    implicit: Q = input()
      PQ            all elements but last of Q   => [[5,1,4,1,3], [5,0,3]]
    cF              split B it the indices in I  => [[], [5,1,4], [1,3], []]

              tQ    all elements but first of Q  => [[5,0,3], [0,0,7]]
             C      zip                          => [(5,0), (0,0), (3,7)]
            S       sort                         => [(0,0), (3,7), (5,0)]
         med        extract the end of each pair => [0,7,0]
        a       ]   append an empty list         => [0,7,0,[]]

   ,                create a pair => ([[], [5,1,4], [1,3], []], [0,7,0,[]])
  C                 zip           => [([],0), ([5,1,4],7), ([1,3],0), ([],[])]
 s                  sum           => ([],0,[5,1,4],7,[1,3],0,[],[])
s                   sum           => [0,5,1,4,7,1,3,0]

4

जावास्क्रिप्ट (ईएस 6), 75

3 सरणी मापदंडों के साथ एक फ़ंक्शन, एक सरणी वापस लौटना। अजीब तरह से, यह फ़ंक्शन अपने iपैरामीटर को संशोधित करता है (जैसा कि ओपी द्वारा अनुमति दी गई है)

स्निपेट, फ़ायरफ़ॉक्स को हमेशा की तरह चलाने का परीक्षण करें।

f=(b,v,i,j=0)=>b.concat(v).map(p=>(p=i.indexOf(j))<0?b[j++]:(i[p]=-1,v[p]))

// TEST
out=x=>O.innerHTML+=x+'\n'

test=[
{ b:[], v:[], i:[], k:[] },
{ b:[], v:[1], i:[0], k:[1] },
{ b:[1,2], v:[], i:[], k:[1,2] },
{ b:[1,2], v:[3], i:[0], k:[3,1,2] },
{ b:[1,2], v:[3], i:[1], k:[1,3,2] },
{ b:[1,2], v:[3], i:[2], k:[1,2,3] },
{ b:[0,0,0], v:[1,1,1,1], i:[0,1,2,3], k:[1,0,1,0,1,0,1] },
{ b:[5,1,4,1,3], v:[0,0,7], i:[5,0,3], k:[0,5,1,4,7,1,3,0] },
{ b:[1,2,3,4], v:[4,3,2,1], i:[4,0,3,1], k:[3,1,1,2,3,2,4,4] }
];

test.forEach(x=>{
  r = f(x.b,x.v,x.i.slice(0)) // pass a copy of i, as the function will alter it
  ok = ''+r==''+x.k
  s='Test ' + (ok?'OK':'FAIL')
  +'\n B ['+x.b
  +']\n V ['+x.v
  +']\n I ['+x.i
  +']\n Result ['+r
  +']\n Check  ['+x.k
  +']\n'
  out(s)
  
})
<pre id=O></pre>


जिज्ञासा से बाहर, कोड के बारे में क्या यह फ़ायरफ़ॉक्स के लिए विशिष्ट बनाता है? क्या इसलिए कि यह ES6 है?
एलेक्स ए।

@ AlexA.it क्योंकि यह ES6 है, हाँ। विशेष रूप fat arrow functionसे क्रोम (AFAIK) के डेवलपर संस्करण में भी लागू नहीं किया गया है
edc65

दरअसल, क्रोम का कैनरी बिल्ड भी इसका समर्थन नहीं करता है।
डॉकमैक्स

4

गणितज्ञ, ५२ ५१ बाइट्स

Last/@(Tr@#2->#&~MapIndexed~#⋃Thread[#3+.5->#2])&

उदाहरण:

In[1]:= f = Last/@(Tr@#2->#&~MapIndexed~#⋃Thread[#3+.5->#2])&;

In[2]:= f[{5, 1, 4, 1, 3}, {0, 0, 7}, {5, 0, 3}]

Out[2]= {0, 5, 1, 4, 7, 1, 3, 0}

स्पष्टीकरण:

ऊपर दिए गए उदाहरण का उपयोग करना।

  • Tr@#2->#&~MapIndexed~# => {1 -> 5, 2 -> 1, 3 -> 4, 4 -> 1, 5 -> 3}
  • Thread[#3+.5->#2] => {5.5 -> 0, 0.5 -> 0, 3.5 -> 7}
  • फिर इन दो सूचियों के (सॉर्ट किए गए) संघ को लें। (=> {0.5 -> 0, 1 -> 5, 2 -> 1, 3 -> 4, 3.5 -> 7, 4 -> 1, 5 -> 3, 5.5 -> 0})
  • और फिर प्रत्येक जोड़ी का अंतिम तत्व लें। (=> {0, 5, 1, 4, 7, 1, 3, 0})


3

आर, 75 बाइट्स

function(b,v,i){n=b;j=0;for(g in v)n=append(n,g,i[j<-j+1]+sum(i<i[j])-1);n}

यह एक अनाम फ़ंक्शन बनाता है। इसे कॉल करने के लिए, इसे एक नाम दें, उदा f=function...। ध्यान दें कि सरणियों को 1-अनुक्रमित होना चाहिए क्योंकि यह सिर्फ आर रोल कैसे होता है।

असंगठित + स्पष्टीकरण:

f <- function(b, v, i) {
    # Initialize the output vector to b
    n <- b

    # Initialize an index over the indices
    j <- 0

    # Loop over the values to insert
    for(g in v) {
        # Get the index of the next given insertion index
        j <- j + 1

        # Insert g into n.
        # The position at which to insert the value is determined by
        # adding the number of indices less than the current one and
        # subtracting 1. The subtraction is because we're using the
        # `after` argument in the `append` function.

        n <- append(n, g, i[j] + sum(i < i[j]) - 1)
    }

    # Return n
    n
}

उदाहरण:

> f(c(), c(), c())
[1] NULL

> f(c(0, 0, 0), c(1, 1, 1, 1), c(1, 2, 3, 4))
[1] 1 0 1 0 1 0 1

> f(c(5, 1, 4, 1, 3), c(0, 0, 7), c(6, 1, 4))
[1] 0 5 1 4 7 1 3 0

सुझावों का हमेशा की तरह स्वागत है!


2

CJam, 19 बाइट्स

l~_,)N*q~.{t}~.\N-p

यह एक पूर्ण कार्यक्रम है जो एसटीडीआईएन से , बी , आई और वी (एक प्रति पंक्ति, उस क्रम में) को पढ़ता है ।

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

l~    e# Evaluate the first line of input.
_,)   e# Compute the array length and add 1.
N*    e# Push a string of that many linefeeds.
q~    e# Evaluate the remaining input.
.{t}~ e# Vectorized array set: for each index in the array from line 2, replace the
      e# LF at that index by the corresponding element of the array from line 3.
.\    e# Interleave the two arrays on the stack.
N-    e# Remove the linefeeds.
p     e# Print.

CJam, 20 बाइट्स

{Qa+@@.{a2$2$=+t}e_}

यह एक अनाम फ़ंक्शन है जो स्टैक से B , V और I (ऊपर से नीचे) को पॉप करता है और बदले में स्टैक पर एक एकल सरणी छोड़ता है।

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

Qa+      e# Append [[]] to B.
@@       e# Rotate V and I on top of B.
.{       e# For each v in V and the corresponding i in I:
   a     e#     Push [v].
   2$2$= e#     Retrieve b := B[i].
   +     e#     Append to push [v b].
         e#     The stack now consists of: B i [v b]
   t     e#     Set B[i] := [v b].
}        e#
e_       e# Flatten B.

1

रूबी, 48 बाइट्स

मुझे लगता है कि यह नियमों का अनुपालन करता है, लेकिन कृपया जाँच करें।

->b,v,i{l=-1;i.map{|j|b[j]=[v[l+=1],b[j]]};b*?:}

इनपुट के रूप में तीन सरणियों को लेने का कार्य करें। रूबी अभिव्यक्ति के साथ संख्याओं की एक सरणी में एक स्ट्रिंग है कि unambiguously पार्स किया जा सकता है आउटपुट x.split(/:+/).map(&:to_i)

Ideone पर परीक्षण के मामले ।

मैं 3 और बाइट्स बचा सकता था, लेकिन आउटपुट प्रारूप [1,2,[nil,5]]नियमों को थोड़ा बहुत बढ़ा रहा है, हालांकि यह बहुत ही अस्पष्ट है।


मुझे लगता है कि वर्तमान प्रारूप ठीक है। Interleaving nilमूल्यों के साथ नेस्टेड सरणियाँ थोड़ा खिंचाव हैं। लेकिन किसी भी मामले में यह प्रतियोगिता नहीं जीत रहा है, इसलिए मैं वास्तव में इसके बारे में चिंतित नहीं हूं।
मार्टिन एंडर

1

आर, 60

एक अनाम फ़ंक्शन के रूप में जो b, v और i लेता है

function(b,v,i){e=c(NA,rbind(b,NA));e[i*2+1]=v;e[!is.na(e)]}

एनए के साथ बी का विस्तार अंतराल को भरता है जहां वी के साथ आवश्यकता होती है एनए के बिना वेक्टर लौटाता है

> f=function(b,v,i){e=c(NA,rbind(b,NA));e[i*2+1]=v;e[!is.na(e)]}
> f(c(), c(), c())
logical(0)
> f(c(0, 0, 0), c(1, 1, 1, 1), c(0, 1, 2, 3))
[1] 1 0 1 0 1 0 1
> f(c(5, 1, 4, 1, 3), c(0, 0, 7), c(5, 0, 3))
[1] 0 5 1 4 7 1 3 0

1

जावा, 253, 226, 219, 209

बिल्कुल विजेता नहीं, लेकिन अच्छी तरह से ओह।

यह मानते हुए कि B, V, और मैं शून्य नहीं हैं। v (लोअरकेस v) वैल्यूज़ / इंडिमिट्री एरेज़ की लंबाई है। R दिया गया सरणी है। आर लौटे सरणी की लंबाई है। x, y, और i सभी अस्थायी स्याही हैं।

int[]f(int[]B,int[]V,int[]I){int v=V.length,r=B.length+v,x,y,i;int[]R=java.utils.Arrays.copyOf(B,r);for(x=0;x<v;x++){i=I[x];for(y=0;y<x;y++)if(I[x]>I[y])i++;for(y=r-2;y>=i;y--)R[y+1]=R[y];R[i]=V[x];}return R;}

विस्तार:

int[]f( int[] B, int[] V, int[] I ) {
    int v = V.length, //length of Values
        r = B.length + v, //length of the result
        x, y, i; //temps
        int[] R = java.utils.Arrays.copyOf( B, r );       
        for( x = 0; x < v; x++ ) {
        i = I[x];
        for( y = 0; y < x; y++ )
            if( I[x] > I[y] )
                i++;
        for( y = r - 2; y >= i; y-- )
            R[y+1] = R[y];
        R[i] = V[x];
    }
    return R;
}

1

एपीएल, 22 बाइट्स

{(∊⌽2↑⍵)[⍋(2⊃⍵),⍳≢⊃⍵]}

⎕IO to 0 में परीक्षण मामलों का मिलान करने के लिए।

यह एक मानक एल्गोरिथ्म है: पहले तर्क के सूचकांक वेक्टर को दिए गए अनुक्रमित (3 डी तर्क) से जोड़ा जाता है। क्रमांकन की गणना करता है जो अनुक्रमित क्रम में अनुक्रमित करेगा। चूंकि एपीएल की छंटाई एल्गोरिथ्म परिभाषा के अनुसार स्थिर है, परिकलित गणना क्रमबद्धता के तत्व को दूसरे और पहले तर्क के सही स्थान पर रखती है।

उदाहरण के लिए :

    {(∊⌽2↑⍵)[⍋(2⊃⍵),⍳≢⊃⍵]}(5 1 4 1 3)(0 0 7)(5 0 3)
0 5 1 4 7 1 3 0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.