ফাংশন ক্লিপবোর্ড: পেস্ট করুন


20

এই চ্যালেঞ্জটি এমএটিএল ভাষার কিছু বৈশিষ্ট্যের সাথে সম্পর্কিত, মে 2018 এর ভাষার ইভেন্ট ইভেন্টের অংশ হিসাবে । সংযুক্ত চ্যালেঞ্জ: ফাংশন ক্লিপবোর্ড: অনুলিপি


ভূমিকা

এমএটিএল এর ফাংশন ক্লিপবোর্ডগুলি সাধারণ, ইনপুট গ্রহণের ক্রিয়াকলাপের জন্য চারটি সাম্প্রতিক কলগুলির ইনপুটগুলি ("অনুলিপিগুলি") সঞ্চয় করে। সাধারণ ফাংশনগুলি এমএটিএল-এ সর্বাধিক সাধারণ ফাংশন। ইনপুট নেওয়া মানে ফাংশনটি কমপক্ষে একটি ইনপুট নেয়। সঞ্চিত ক্লিপবোর্ডের সামগ্রীগুলি স্ট্যাকের উপরে ধাক্কা দেওয়া যায় ("আটকানো")।

এই চ্যালেঞ্জটি ক্লিপবোর্ডের সামগ্রীগুলিকে ইনপুট হিসাবে গ্রহণ করবে। এটি ধরে নেওয়া হবে যে ক্লিপবোর্ডের রাজ্য তৈরি করেছে এমন সমস্ত ফাংশন ইনপুট হিসাবে এক বা একাধিক ধনাত্মক পূর্ণসংখ্যা নিয়েছিল took সুতরাং ক্লিপবোর্ডের রাজ্যটি সংখ্যার তালিকার একটি তালিকা দ্বারা প্রতিনিধিত্ব করা যায়। (ক্লিপবোর্ডটি আসলে কীভাবে পূর্ণ হয় সে সম্পর্কিত আরও তথ্যের জন্য সম্পর্কিত চ্যালেঞ্জ দেখুন; তবে এটি বর্তমানের জন্য প্রয়োজনীয় নয়)।

ক্লিপবোর্ডের বিষয়বস্তু ব্যাখ্যা করা

উদাহরণ 1

প্রথম ভেতরের তালিকা বোঝায় সাম্প্রতিকতম ফাংশন কল, ইত্যাদি, সুতরাং ক্লিপবোর্ড রাষ্ট্র

[[11, 28], [12, 16], [4], [5, 6]]

নির্দেশ করে যে গত ফাংশন কল দুটি ইনপুট গ্রহণ, যথা 11, 28; দ্বিতীয় গত কল ইনপুট গ্রহণ 12, 16; ইত্যাদি (এই ক্লিপবোর্ডের রাজ্য সম্পর্কিত চ্যালেঞ্জের প্রথম উদাহরণে কোড দ্বারা উত্পাদিত হয়)।

উদাহরণ 2

যদি পর্যাপ্ত ফাংশন কল না করা থাকে তবে ক্লিপবোর্ডের কিছু অভ্যন্তরীণ তালিকা খালি থাকবে:

[[7, 5], [], [], []]

(এটি এমন কোনও প্রোগ্রাম দ্বারা উত্পাদিত হয়েছে যা কেবল যোগ করে 7এবং 5)।

উদাহরণ 3

ফাংশন কলগুলিতে যেকোন সংখ্যক ইনপুট থাকতে পারে তবে সর্বদা কমপক্ষে 1(কোনও ইনপুট না নেওয়া ফাংশনগুলি ক্লিপবোর্ডের স্থিতি পরিবর্তন করে না)। সুতরাং নিম্নলিখিতটিও সম্ভব।

[[3], [2, 40, 34], [7, 8, 15], []]

ক্লিপবোর্ডের সামগ্রীগুলি অ্যাক্সেস করা

ফাংশন ক্লিপবোর্ডের বিষয়বস্তুগুলি এমএটিএল এর ফাংশন ব্যবহার করে স্ট্যাকের উপরে ধাক্কা দেওয়া হয় M(যা উপায় দ্বারা কোনও সাধারণ ফাংশন নয়, তবে একটি ক্লিপবোর্ড ফাংশন)। এই ফাংশনটি ইনপুট হিসাবে একটি ধনাত্মক পূর্ণসংখ্যার গ্রহণ করে এবং ক্লিপবোর্ডের কিছু বিষয়বস্তু নীচে স্ট্যাকের উপরে ঠেলে দেয়। ক্লিপবোর্ডের রাজ্যের উদাহরণ সহ 1:

[[11, 28], [12, 16], [4], [5, 6]]
  • 1Mফেরৎ সমস্ত ইনপুট সাম্প্রতিকতম ফাংশন কল করা হয়। সুতরাং, বিবেচনা উদাহরণস্বরূপ, এটি দেয় 11, 28
  • একইভাবে, 2M, 3Mএবং 4Mদ্বিতীয় সমস্ত ইনপুট ফিরে তৃতীয় ও চতুর্থ সাম্প্রতিকতম ফাংশন কল। সুতরাং 2Mদেয় 12, 16; 3Mদেয় 4; এবং 4Mদেয় 5, 6
  • তার পরেও নাম্বার 4সিলেক্ট পৃথক ইনপুট ফাংশন কল নেন একাধিক ইনপুট। তাই 5Mফেরৎ গত ইনপুট সাম্প্রতিকতম যেমন কল। আমাদের ক্ষেত্রে এটি দেয় 286Mফেরৎ পূর্ববর্তী পৃথক ইনপুট, যা 117Mদ্বিতীয়-শেষ কলটির শেষ ইনপুট দেয় , যা 16, এবং 8Mদেয় 12। এখন, 9Mদেয় 6। কীভাবে ইনপুট 4এড়ানো যায় তা নোট করুন কারণ এটির ফাংশন কলের একমাত্র ইনপুট ছিল । শেষ পর্যন্ত, 10Mদেয় 5

ক্লিপবোর্ড রাজ্যের জন্য উদাহরণস্বরূপ 3:

[[3], [2, 40, 34], [7, 8, 15], []]
  • 1Mদেয় 32Mদেয় 2, 40, 343Mদেয় 7, 8, 15
  • 4Mঅপরিবর্তিত আচরণ রয়েছে (এই চ্যালেঞ্জের উদ্দেশ্যে), কারণ সেখানে কেবল তিনটি ফাংশন কল এসেছে।
  • 5Mদেয় 346Mদেয় 407Mদেয় 28Mদেয় 159Mদেয় 8, 10Mদেয় 7
  • 11M,, 12M... এরও অপরিবর্তিত আচরণ রয়েছে

চ্যালেঞ্জ

ইনপুট :

  • ক্লিপবোর্ডের রাজ্য, তালিকার তালিকা হিসাবে বা অন্য কোনও যুক্তিসঙ্গত বিন্যাস হিসাবে;
  • ধনাত্মক পূর্ণসংখ্যা n

আউটপুট : ইনপুট হিসাবে এনM সহ ফাংশন কল করার ফলাফল । আউটপুটটি দ্ব্যর্থহীন বিভাজক সহ এক বা একাধিক সংখ্যা বা কোনও যুক্তিসঙ্গত বিন্যাসে যেমন একটি তালিকা বা অ্যারে হবে।

ব্যাখ্যা:

  • ক্লিপবোর্ডের রাজ্যে সংখ্যার চারটি তালিকা থাকে। উদাহরণস্বরূপ 2 এবং 3 হিসাবে কিছু অনুসরণযোগ্য তালিকাগুলি খালি থাকতে পারে, যদি পছন্দ হয় তবে আপনি খালি তালিকাগুলি অনুসরণ না করে ক্লিপবোর্ডটি ইনপুট করতে পারেন। উদাহরণস্বরূপ 3 হয়ে যাবে [[3], [2, 40, 34], [7, 8, 15]]
  • ক্লিপবোর্ডের সমস্ত নম্বর সম্ভবত একাধিক সংখ্যার সাথে ইতিবাচক পূর্ণসংখ্যার হবে।
  • নম্বর এনটি বৈধ হওয়ার গ্যারান্টিযুক্ত। সুতরাং উপরে 3 উদাহরণস্বরূপ, nহতে পারে 4বা হতে পারে না 11

অতিরিক্ত নিয়ম:

পরীক্ষার মামলা

Clipboard state
Number
Output(s)

[[11, 28], [12, 16], [4], []]
2
12, 16

[[11, 28], [12, 16], [4], []]
5
28

[[7, 144], [12], [4, 8], [3, 4, 6]]
1
7, 144

[[7, 144], [12], [4, 8], [3, 4, 6]]
10
4

[[30], [40], [50, 60], [70, 80, 90]]
2
40

[[30], [40], [50, 60], [80, 90]]
7
90

[[15], [30], [2, 3, 5], [4, 5, 10]]
3
2, 3, 5

[[15], [30], [2, 3, 5], [4, 5, 10]]
7
2

আমরা কি 0-ইনডেক্সড এন নিতে পারি ?
আর্নৌল্ড

3
@ আর্নল্ড আমি না বলতে যাচ্ছি, কারণ এটি এমএটিএল এর আসল আচরণের উপর ভিত্তি করে
লুইস মেন্ডো

উত্তর:


3

2
আপনার কোন ব্যাখ্যা যুক্ত করতে আপত্তি আছে?
লর্ডক্লাস

@ লর্ডক্লাস ḊƇসমস্ত নন- সিলেটটন নির্বাচন করুন, Uবিপরীত এবং সমতল করুন। ইনপুট জন্য [[11, 28], [12, 16], [4], []]এটি পায় [16, 12, 28, 11], এর 5Mমাধ্যমে মানগুলি 8M। এখন এই তালিকাতে মূল ইনপুটটি তৈরি করুন ⁸;এবং অন্যান্য ইনপুট দ্বারা ফলাফলের তালিকায় সূচী করুন ⁹ị
লিন

@ লর্ডক্লাস আহ, দুঃখিত, আমি কেবল অনুরোধে ব্যাখ্যা (কারণ নিনজা) যুক্ত করি, তবে আমি ঘুমিয়ে ছিলাম। লিন এটির বেশ ব্যাখ্যা করেছেন, তবে আমি যুক্ত করতে চাই Uযা ফলাফলের বিপরীত নয় ḊƇ, বরং এর প্রতিটি উপাদানকেই যুক্ত করে। কেবল যদি আমি কোনওভাবে হ্রাস করতে পারি ḊƇUẎ⁸;...
এরিক দি আউটগল্ফার

4

হাস্কেল , 56 51 47 বাইট

-5 -9 বাইট লাইকোনিকে ধন্যবাদ (দৈর্ঘ্যটি নিশ্চিত করতে প্যাটার্ন ম্যাচ> 1 এবং doতালিকা বোঝার উপর নোটেশন ব্যবহার করে )!

c!n=([]:c++do l@(_:_:_)<-c;reverse$pure<$>l)!!n

এটি অনলাইন চেষ্টা করুন!

পয়েন্টফ্রি, 58 55 বাইট

-3 বাইট লাইকনি (চলমান ([]:)এবং প্রতিস্থাপন id) এর জন্য ধন্যবাদ !

বিকল্পভাবে আমরা এই পয়েন্টফ্রি সংস্করণটি ব্যবহার করতে পারি

(!!).(([]:)<>map pure.(>>=reverse).filter((1<).length))



3

জাভাস্ক্রিপ্ট (নোড.জেএস) , 57 বাইট

a=>n=>a.map(e=>e[1]&&a.push(...[...e].reverse()))&&a[n-1]

এটি অনলাইন চেষ্টা করুন!

এটি একটি বেনামে, তরকারিযুক্ত ফাংশন। এটি দিয়ে চালান( function code )(clipboard)(n)

ব্যাখ্যা

a=>n=>{
    // The strategy is to append the individual clipboard inputs to the end of a,
    // after the function calls (lists). We then return a[n-1] to offset JavaScript's
    // zero indexing.
    a.map(e=>{
        e[1]&& // if this list has more than one element...
            a.push(...[...e].reverse()) // add each element to a, in reverse order.
            // reverse() modifies the original array, so we have to use [...e] to "clone" e
    })
    return a[n-1]
}



2

জাভা 8, 110 বাইট

একটি ল্যাম্বডা (তরকারি) ক্লিপবোর্ডের রাজ্যটিকে একটি হিসাবে int[][]এবং সংখ্যা হিসাবে intএবং রিটার্নিং হিসাবে গ্রহণ করে intবা int[](একক সংখ্যা উভয় প্রকারের মাধ্যমেই ফেরত দেওয়া যেতে পারে)।

s->n->{if(--n<4)return s[n];else{int i=0,l;for(n-=4;(l=s[i].length)<=n|l<2;i++)n-=l>1?l:0;return s[i][l+~n];}}

এটি অনলাইন চেষ্টা করুন

Ungolfed

s ->
    n -> {
        if (--n < 4)
            return s[n];
        else {
            int i = 0, l;
            for (
                n -= 4;
                (l = s[i].length) <= n | l < 2;
                i++
            )
                n -= l > 1 ? l : 0;
            return s[i][l + ~n];
        }
    }


2

হুশ , 12 বাইট

!S+(m;ṁ↔f(¬ε

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

হাস্কেল উত্তরের একটি খুব সরাসরি বন্দর:

!S+(m;ṁ↔f(¬ε  -- example inputs: [[1],[2,3],[4],[5,6,7],[]] 7
 S+           -- concatenate itself with itself modified by
        f(    -- | filter
           ε  -- | | length 1
          ¬   -- | | not
              -- | : [[2,3],[5,6,7],[]]
      ṁ       -- | map and flatten
       ↔      -- | | reverse
              -- | : [3,2,7,6,5]
              -- | map
              -- | | pure
              -- | : [[3],[2],[7],[6],[5]]
              -- : [[1],[2,3],[4],[5,6,7],[],[3],[2],[7],[6],[5]]
!             -- index into it: [2]

2

আর , 58 বাইট

function(M,n)c(M,unlist(lapply(M[lengths(M)>1],rev)))[[n]]

এটি অনলাইন চেষ্টা করুন!

ভেক্টর Mহিসাবে গ্রহণ করে ; প্রতিস্থাপন তাই সঙ্গে , সঙ্গে এবং সঙ্গে আর পরীক্ষার বিষয় মধ্যে পরীক্ষার বিষয় রুপান্তর করা উচিত নয়।listc()[[list([c(])

n<=4"অপরিবর্তিত আচরণ" সহ ইনপুটগুলির জন্য , ফেরত দেওয়া NULLএবং অন্যান্য অবৈধ ইনপুটগুলির জন্য, "সীমার বাইরে সাবস্ক্রিপ্ট" ত্রুটি ছুঁড়ে দেয়।

function(M,n)
                                        [[n]]	# take the nth element of
c(M,                                   )	# M concatenated with:
    unlist(                           )		# the individual elements of
           lapply(               ,rev)		# in-place reversals of
                  M[lengths(M)>1]		# elements of M with length > 1

[n]পরিবর্তে ব্যবহার করে সম্ভবত পালাতে পারে [[n]]
জেএডি

2

স্ট্যাক্স , 12 14 13 বাইট

àJ├∙ε╝F▀ÿi☻Ia

এটি চালান এবং এটি ডিবাগ করুন

ব্যাখ্যা:

vsc{%vfr$r+@]|u Full program, unpacked, implicit input
vs              Decrement the number and get the list
  c{  f         Copy and filter:
    %v            Length not equal to 1?
       r$r      Reverse, flatten, and reverse again
          +     Concat orig array and and modified array
           @]|u Index, wrap into array, uneval

স্ট্যাক্স, 12 বাইট

Å{b≈\☼╣Δ@░ ‼

প্যাক করা নেই:

{vsc{%vfr$r+@}

এটি একটি ব্লক, সুতরাং আমি এ থেকে মুক্তি পেতে ]|uপারি, তবে আমি জানি না যে এটি কোনও ব্লক প্যাকিংয়ের কারণে এটি বৈধ কিনা।


2

জে , 33 22 বাইট

-11 বাইট (1/3 সংক্ষিপ্ত) ফ্রাউনফ্রোগের সমাধানের জন্য ধন্যবাদ!

{0;],|.&.>;/@;@#~1<#&>

এটি অনলাইন চেষ্টা করুন!

আমার প্রাথমিক সমাধান:

জে , 33 বাইট

<:@[{(,[:<"0@;[:|.&.>(1<#)&>#])@]

খুশি নয় - আমি নিশ্চিত যে এটি আরও গল্ফ করা যেতে পারে।

ব্যাখ্যা:

একটি ডায়াডিক ফাংশন, ক্লিপবোর্ডের রাজ্যটিকে তার অনমনীয় যুক্তি হিসাবে গ্রহণ করে, বাম আর্গুমেন্ট n

<:@[ বাম আর্গুমেন্ট থেকে 1 বিয়োগ করুন

{iডানদিকে তালিকা থেকে তম উপাদানটি (উপরে গণনা করা) নির্বাচন করে

(...) পুরো তালিকা

# কপি

] ক্লিপবোর্ড রাজ্যের তালিকা থেকে

(1<#) 1 টিরও বেশি দৈর্ঘ্য সহ সাবলিস্টগুলি

|.&.> প্রতিটি অনুলিপি করা সাবলিস্ট ঘোরান

<"0@; রাজে এবং বাক্স - প্রতিটি সংখ্যা একটি পৃথক বাক্সে রাখে

, ক্লিপবোর্ডের রাজ্যের তালিকায় নতুন তালিকা যুক্ত করুন

@] সম্পূর্ণ ক্রিয়াটি (...) একজাতীয় করে তোলে

এটি অনলাইন চেষ্টা করুন!


পছন্দ 0;করুন ধন্যবাদ!
গ্যালেন ইভানভ

এটি সম্পূর্ণরূপে আপনার সমাধান, কেবল গল্ফড :)
ফ্রাউনফ্রগ

2

ভি + কোর্টিলস , 53 45 43 42 40 বাইট

-9 ধন্যবাদ বাইট DJMcMayhem (ব্যবহার VGÇ /dউপর :,$g/^[^ ]*$/d, D@"ddউপর "aDÀddএবং !!উপর :.!)!

ভি তে আমার প্রথম প্রচেষ্টা (টিপস স্বাগত!), নীচের কোডটি পঠনযোগ্যতার জন্য বৃত্তাকার অক্ষর (উদাহরণস্বরূপ \xf) ব্যবহার করছে:

jäGⓞVGÇ /d
ⓞò!!tr \  \\n|tac
jòHD@"ddjdG

এটি অনলাইন চেষ্টা করুন!

Hexdump

00000000: 6ae4 470f 5647 c720 2f64 0a0f f221 2174  j.G.VG. /d...!!t
00000010: 7220 5c20 205c 5c6e 7c74 6163 0a6a f248  r \  \\n|tac.j.H
00000020: 4440 2264 646a 6447                      D@"ddjdG

ব্যাখ্যা

প্রথম লাইনে n রয়েছে এবং নীচের লাইনগুলিতে ক্লিপবোর্ডের এন্ট্রি রয়েছে, প্রতিটি প্রবেশ একাধিক ইনপুট থাকলে স্পেস দ্বারা পৃথক করা হয়:

j                        " move to the beginning of the clipboard entries
 äG                      " duplicate the clipboard
   ⓞ                    " <C-o> move cursor to the beginning of the 2nd copy
     VG                  " select everything from cursor to the end of buffer and ..
       Ç /d              " .. delete every line that doesn't contain a space

ⓞ                       " <C-o> move cursor to the beginning of the 2nd copy (now without single arguments)
  ò                   ò  " do the following until the end of buffer
   !!                    "   on the current line execute the shell command
     tr \  \\n           "   replace spaces with newlines
              |tac⮠     "   and reverse the lines
                    j    "   move to next line

H                        " go to the beginning of buffer (where n is)
 D                       " delete n (stores it in register ")
  @"                     " that many times ..
    dd                   " .. remove the line
      j                  " move cursor to next line
       dG                " delete everything from here to the end of buffer


1

সি (জিসিসি) , 176 বাইট

#define p printf("%d ",
int*_,i;f(x,n)int**x;{if(n<5){for(_=x[2*n-2];_-x[2*n-1];++_)p*_);}else{n-=4;for(i=0;i<8;i+=2)if(n&&x[i]+1-x[i+1])for(_=x[i+1];_-x[i]&&n;--_,--n);p*_);}}

এটি অনলাইন চেষ্টা করুন!

4 টি শুরু / শেষ পয়েন্টার জোড়গুলির তালিকা হিসাবে অ্যারে নেয়, তারপরে এন n

বর্ণনা:

#define p printf("%d ",  // This gives us the short-hand for printing
int*_,                   // This defines _ as a pointer to int
i;                       // This defines i as an integer
f(x,n)int**x;{           // This defines f as a function taking int **x and int n
                         // NOTE: x is {start, end, start, end, start, end, start, end}
if (n<5) {               // This is for the 1-4 case
  for(_=x[2*n-2];        // Loop _ from the 'end pointer' 
  _-x[2*n-1];++_)        // Until the 'start pointer'
  p*_);                  // Using the short-hand, print *_
}else{                   // This is for the 5+ case
  n-=4;                  // Cut n to improve indexing
  for(i=0;i<8;i+=2)      // Loop over each 'start pointer index'
    for(_=x[i+1];        // Loop _ from the 'end pointer'
        _-x[i]&&n;       // Until the 'start pointer' or n becomes 0
        --_,--n);        // Decreasing n each time
  p*_);}}                // _ now points to the 'correct' index, so print it
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.