ননজারো এবং তাদের প্রতিবেশী রাখুন


26

স্ট্যাক ওভারফ্লো এ প্রশ্ন থেকে নেওয়া । কিছু কোণার ক্ষেত্রে যে পরীক্ষাগুলি ইনপুটগুলি দেওয়া হয়েছে তার পরামর্শ দেওয়ার জন্য @ মাইলস এবং @ দাদাকেও ধন্যবাদ।

চ্যালেঞ্জ

পূর্ণসংখ্যার মানগুলির একটি অ্যারে দেওয়া, এমন কিছু শূন্যগুলি সরান যা কিছু ননজারো মান দ্বারা ফ্ল্যাঙ্ক হয় না।

সমানভাবে, একটি এন্ট্রি হয় যদি তা ননজারো হয় বা এটি যদি শূন্য হয় যা অবিলম্বে একটি ননজারো মানের কাছাকাছি হয়।

যে এন্ট্রিগুলি রাখা হয় তাদের আউটপুটটিতে ইনপুটটিতে থাকা ক্রমটি বজায় রাখা উচিত।

উদাহরণ

প্রদত্ত

[2 0 4 -3 0 0 0 3 0 0 2 0 0]

মুছে ফেলা উচিত মানগুলি একটি দিয়ে চিহ্নিত করা হয় x:

[2 0 4 -3 0 x 0 3 0 0 2 0 x]

এবং তাই আউটপুট হওয়া উচিত

[2 0 4 -3 0 0 3 0 0 2 0]

বিধি

ইনপুট অ্যারে খালি থাকতে পারে (এবং তারপরে আউটপুটটিও ফাঁকা হওয়া উচিত)।

ইনপুট এবং আউটপুট ফর্ম্যাটগুলি যথারীতি নমনীয়: অ্যারে, তালিকা, স্ট্রিং বা যুক্তিসঙ্গত কিছু।

কোড গল্ফ, সেরা সেরা।

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

[2 0 4 -3 0 0 0 3 0 0 2 0 0] -> [2 0 4 -3 0 0 3 0 0 2 0]
[] -> []
[1] -> [1]
[4 3 8 5 -6] -> [4 3 8 5 -6]
[4 3 8 0 5 -6] -> [4 3 8 0 5 -6]
[0] -> []
[0 0] -> []
[0 0 0 0] -> []
[0 0 0 8 0 1 0 0] -> [0 8 0 1 0]
[-5 0 5] -> [-5 0 5]
[50 0] -> [50 0]

আমি কি এর _2পরিবর্তে ব্যবহার করতে পারি -2? বেশ কয়েকটি ভাষা সে বিন্যাসটি ব্যবহার করে।
Leaky নুন

আমরা কি করব -0?
Leaky নুন

@ লেকিউন 1 হ্যাঁ 2 না
লুইস মেন্ডো

সংখ্যার কি কখনও নেতৃত্বের শূন্য থাকবে? পছন্দ [010 0 0 01 1]?
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান নোপ
লুইস মেন্ডো

উত্তর:


16

জাভাস্ক্রিপ্ট (ES6), 35 বাইট

a=>a.filter((e,i)=>e|a[i-1]|a[i+1])

দুটি অতিরিক্ত বাইটের জন্যও ফ্লোটে কাজ করে।


10

পাইথন, 50 বাইট

f=lambda l,*p:l and l[:any(l[:2]+p)]+f(l[1:],l[0])

একটি পুনরাবৃত্ত ফাংশন যা একটি tuple লাগে। প্রথম দুটি উপাদানগুলির মধ্যে যদি কোনও ননজারো মান থাকে বা শেষ সময় থেকে সঞ্চিত পূর্ববর্তী মান থাকে তবে প্রথম উপাদানটি অন্তর্ভুক্ত করে। তারপরে, প্রথম উপাদানটি সরিয়ে পুনরাবৃত্তি করে। পূর্ববর্তী উপাদানটি সিঙ্গলটন-তালিকায় সংরক্ষণ করা হয় p, যা স্বয়ংক্রিয়ভাবে তালিকাতে প্যাক করে এবং খালি হিসাবে শুরু হয় (এটি দিয়ে 3 বাইটের জন্য ডেনিসকে ধন্যবাদ)।


55 বাইট:

lambda l:[t[1]for t in zip([0]+l,l,l[1:]+[0])if any(t)]

তালিকার সমস্ত দৈর্ঘ্য -3 অংশ তৈরি করে, প্রথমে শুরু এবং শেষের দিকে জিরো রেখে, এবং সমস্ত শূন্য নয় এমনগুলির মধ্যবর্তী উপাদানগুলিকে নিয়ে যায় takes

একটি পুনরাবৃত্তি পদ্ধতির দীর্ঘতর হয়েছে (58 বাইট)

a=0;b,*l=input()
for x in l+[0]:a|b|x and print(b);a,b=b,x

এটি ঠিক কাজ করে না কারণ b,*lপাইথন 3 প্রয়োজন, তবে পাইথন 3 inputএকটি স্ট্রিং দেয়। সূচনাটিও কুৎসিত। সম্ভবত একটি অনুরূপ পুনরাবৃত্তি পদ্ধতির কাজ করবে।

দুর্ভাগ্যক্রমে, এর সূচীকরণ পদ্ধতি

lambda l:[x for i,x in enumerate(l)if any(l[i-1:i+2])]

কাজ শুরু করে না কারণ তালিকার শেষে হিসাবে l[-1:2]ব্যাখ্যা -1করে, এটি শুরুর আগে একটি পয়েন্ট নয়।


10

হাস্কেল, 55 48 বাইট

h x=[b|a:b:c:_<-scanr(:)[0]$0:x,any(/=0)[a,b,c]]

ব্যবহারের উদাহরণ: h [0,0,0,8,0,1,0,0]-> [0,8,0,1,0]

scanrশুরু এবং শেষের দিকে xঅতিরিক্ত দিয়ে ইনপুট তালিকাটি পুনর্নির্মাণ করে 0। প্রতিটি পদক্ষেপে আমরা 3 টি উপাদানের সাথে প্যাটার্নটি তৈরি করি এবং কমপক্ষে একটি অ-শূন্য উপাদান থাকে তবে মাঝখানে একটি রাখি।

ধন্যবাদ থেকে সুইচিং 7 বাইট জন্য @xnor zip3করতে scanr


এটি করা ভাল হবে h x=[snd t|t<-zip3(0:x)x$tail x++[0],(0,0,0)/=t]তবে আমি অনুমান করি যে আসলে 3-টিউপলের দ্বিতীয়-উপাদানটি পাওয়ার কোনও ছোট উপায় নেই।
xnor

আউট খাটো করিয়া একটি আউট triples পেতে scanএকটি চেয়ে zip3: h x=[b|a:b:c:_<-scanr(:)[0]$0:x,any(/=0)[a,b,c]]
xnor

8

মতলব, 29 27 বাইট

ইনপুটটিতে অবশ্যই একটি 1*nম্যাট্রিক্স থাকতে হবে (যেখানে n=0সম্ভব)। (এটি 0*0ম্যাট্রিকগুলির জন্য একটি ত্রুটি নিক্ষেপ করবে ))

@(a)a(conv(a.*a,1:3,'s')>0) 

সংকল্প সাফল্যের মূল চাবিকাঠি।


's''same'<- :-D এর পরিবর্তে
লুইস মেন্ডো

এই কৌশলটি বিল্টিনস =) এর সাথে অনেক সময় কাজ করে

আমি এই কৌশলটি দেখেছি, এমনকি অ-গল্ফিং প্রশ্নগুলির জন্যও, পতাকা সহ 'UniformOutpout'(বোধগম্য)। তবে আমি
এটির

1
আপনি কি ~~aপরিবর্তে ব্যবহার করতে পারেন a.*a?
ফেয়ারসাম

2
@ ফেয়ারসাম মতলব দুর্ভাগ্যক্রমে logicalঅ্যারেগুলিকে মিলিত করতে অস্বীকার করেছেন । এটি প্রায়শই বিল্ট-ইনগুলির জন্য সমস্যা যা মাতলাব নিজেই লিখিত হয় না । অন্যথায় লজিক্যাল অ্যারেগুলি অনেকগুলি সংখ্যার মতো আচরণ করে। এটি অষ্টাভে ভেবে কাজ করতে পারে তবে এই মুহূর্তে আমার এটি ইনস্টল করা নেই।
flawr

6

জে, 17 14 বাইট

#~0<3+/\0,~0,|

@ Zgarb এর সহায়তায় 3 বাইট সংরক্ষণ করা হয়েছে।

ব্যবহার

   f =: #~0<3+/\0,~0,|
   f 2 0 4 _3 0 0 0 3 0 0 2 0 0
2 0 4 _3 0 0 3 0 0 2 0
   f ''

   f 0 0 0 8 0 1 0 0
0 8 0 1 0

ব্যাখ্যা

#~0<3+/\0,~0,|  Input: array A
             |  Get the absolute value of each in A
           0,   Prepend a 0
        0,~     Append a 0
    3  \        For each subarray of size 3, left to right
     +/           Reduce it using addition to find the sum
  0<            Test if each sum is greater than one
                (Converts positive values to one with zero remaining zero)
#~              Select the values from A using the previous as a mask and return

এখানে চেষ্টা করুন।


0<জায়গায় কাজ করবে 0~:?
Zgarb

@ জগারব 3 আকারের ইনফিক্সগুলি প্রক্রিয়া করার পরে ধনাত্মক বা নেতিবাচক হতে পারে।
মাইল

আহ, আমি নেতিবাচক মান সম্পর্কে ভুলে গেছি।
জাগারব

6

এমএটিএল , 8 বাইট

tg3:Z+g)

আউটপুট হ'ল স্পেস দ্বারা পৃথক সংখ্যার স্ট্রিং। আউটপুটে একটি খালি অ্যারে কিছুই হিসাবে প্রদর্শিত হয় (একটি নতুন লাইনও নয়)।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

কোড ইনপুটটিকে লজিকাল টাইপে রূপান্তর করে, যেমন ননজারো এন্ট্রি হয়ে যায় true(বা 1) এবং শূন্য এন্ট্রি হয়ে যায় false(বা 0)। এটি তখন কার্নেলের সাথে মিশে যায় [1 2 3]। একটি ননজারো মান সেই অবস্থান এবং তার পার্শ্ববর্তী অবস্থানগুলিতে ননজারো ফলাফলের কারণ হয়। যৌক্তিকতে রূপান্তর করা trueউচিত এমন মানগুলির জন্য দেয় যা রাখা উচিত, সুতরাং এর সাথে ইনপুটটিকে ইনডেক্স করে কাঙ্ক্ষিত আউটপুট তৈরি করে।

t    % Input array implicitly. Duplicate
g    % Convert to logical: nonzero becomes true, zero becomes false
3:   % Push array [1 2 3]
Z+   % Convolution, keeping size of first input
g    % Convert to logical
)    % Index into original array. Implicitly display

5

জल्फ, 14 বাইট

এখন যেহেতু আমি এটির কথা ভাবি, জল্ফ হ'ল গল্ফিং ভাষার জাভা। দীর্ঘশ্বাস এখানে চেষ্টা করুন।

ψxd||H.nwS.nhS

ব্যাখ্যা

ψxd||H.nwS.nhS
ψxd             filter input over this function
   ||           or with three args
     H           the element
      .nwS       the previous element
          .nhS   or the next element

5

পাইথন 3, 55 বাইট

lambda s:[t[1]for t in zip([0]+s,s,s[1:]+[0])if any(t)]

1
কি দারুন. আপনি এর আগে @xnor উত্তরটি দেখেছেন কিনা আমি জানি না তবে ল্যাম্বদার নাম হ'ল একমাত্র পার্থক্য সহ আপনার ঠিক একই কোড রয়েছে। আপনি যদি তার কোড ব্যবহার করেন, তাকে ক্রেডিট দিন, যদি না হয়, তবে এটি কতটা কাকতালীয় কাকতালীয় ঘটনা!
থিও

কারও কোড দেখে নি।
রুটটো দুই

3
@ টি.লুকিন একই কোডটি নিয়ে আসার বিষয়টি আসলে অস্বাভাবিক নয়। আপনি এই নৈরাজ্য গলফ, যেখানে কোড নির্দিষ্ট সময়সীমা পর্যন্ত গোপন নেই ঘটতে দেখতে পারেন, এবং একাধিক ব্যক্তি মত একই সমাধান একই বিন্দুতে মিলিত এই এক
xnor

4

জেলি , 9 বাইট

0,0jo3\Tị

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

কিভাবে এটা কাজ করে

0,0jo3\Tị  Main link. Argument: A (array)

0,0        Yield [0, 0].
   j       Join, separating with A. This prepends and appends a 0 to A.
    o3\    Reduce each group of three adjacent integers by logical OR.
       T   Truth; get the indices of all truthy results.
        ị  At-index; retrieve the elements of A at those indices.

4

পার্ল, 34 + 1 ( -pপতাকা) = 35 বাইট

s/([^1-9]0 |^)\K0 ?(?=0|$)//&&redo

চালাতে পি-পি পতাকা লাগবে। ইমপুট হিসাবে সংখ্যার একটি তালিকা নেয়। এই ক্ষেত্রে :

perl -pe 's/([^1-9]0 |^)\K0 ?(?=0|$)//&&redo' <<< "0 0 0 8 0 1 0 0
0 0 0
-5 0 5"

আমি 5ইনপুট থাকলে আমি পাই 50 0
ফেয়ারসাম

@ ফেয়ারসাম স্থির, ধন্যবাদ
দাদা

4

হাস্কেল, 48 বাইট

p%(h:t)=[h|any(/=0)$p:h:take 1t]++h%t
p%e=e
(0%)

পূর্ববর্তী উপাদান p, প্রথম উপাদান hএবং তার পরে উপাদানটি (যদি থাকে) এবং যদি কোনওটি ননজারো হয় তবে প্রথম উপাদানটিকে সংশোধন করে h

শর্তটি any(/=0)$p:h:take 1tদীর্ঘতর, বিশেষতঃ take 1t। আমি এটি সংক্ষিপ্ত করার একটি উপায় সন্ধান করব, সম্ভবত প্যাটার্ন মেলানোর মাধ্যমে।


4

রেটিনা , 42 35 33 বাইট

মার্টিন ইন্ডারকে 7 বাইট ধন্যবাদ

(? <= ^ | \ b0) 0 (? = $ | 0)

 + +

^ | $

শেষ লাইন প্রয়োজনীয়।

একবারে সমস্ত টেস্টকেস যাচাই করুন। (সমস্ত টেস্টকেস একবারে চালানোর জন্য সামান্য সংশোধিত।)

এটি করার জন্য নিখুঁত ভাষা বলে মনে হচ্ছে ... এখনও বেশিরভাগ উত্তরের দ্বারা পরাজিত হয়েছে।


আমি কেবল I / O ফর্ম্যাট থেকে বন্ধনীগুলি খনন করব।
মার্টিন ইন্ডার


3

সি, 96 বাইট

f()পূর্ণসংখ্যার তালিকার একটি পয়েন্টার এবং তালিকার আকারের জন্য একটি পয়েন্টার দিয়ে কল করুন । তালিকা এবং আকারটি স্থানে পরিবর্তন করা হয়েছে।

i,t,e,m;f(int*p,int*n){int*s=p;for(i=m=e=0;i++<*n;s+=t=m+*s||i<*n&&p[1],e+=t,m=*p++)*s=*p;*n=e;}

আদর্শে এটি চেষ্টা করুন


কে ও আর প্যারামিটারের স্টাইল প্রায়শই খাটো, তবে এখানে নয় - f(int*p,int*n)একটি বাইট সংরক্ষণ করে। বা sতৃতীয় প্যারামিটার হিসাবে সংজ্ঞায়িত করুন (এটি পাস হয়নি it
ugoren

3

ব্র্যাচল্যাগ , 44 38 বাইট

,0gL:?:Lc:1fzbh.
~c[A:.:B],[0:0:0]'.l3

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

এই ভাষাটি প্রমাণ করার মতো জিনিস, যা আমরা ব্যবহার করব।

পূর্বাভাস 0 (প্রধান ভবিষ্যদ্বাণী)

,0gL:?:Lc:1fzbh.
 0gL               [0] = L    (assignment works both ways)
   L:?:Lc          [L:input:L] = temp
         :1f       find all solutions of predicate 1 with temp as input
            zbh.   then transpose and take the middle row and assign to output

ভবিষ্যদ্বাণী 1 (সহায়ক ভবিষ্যদ্বাণী)

~c[A:.:B],[0:0:0]'.l3
~c[A:.:B]                 input is in the form of [A:output:B]
         ,                and
          [0:0:0]'.       output is not [0:0:0]
                  .l3     and length of output is 3

2

চিত্র প্রসেসিং সরঞ্জামবক্স, 27 বাইট সহ মতলব

@(a)a(~imerode(~a,~~(1:3)))

এটি একটি বেনামে ফাংশন।

উদাহরণ ব্যবহার:

>> @(a)a(~imerode(~a,~~(1:3)))
ans = 
    @(a)a(~imerode(~a,~~(1:3)))
>> ans([0 0 0 8 0 1 0 0])
ans =
     0     8     0     1     0

1
আমিও ভেবেছিলাম imerode, তবে আমার সংস্করণগুলি আমার বর্তমানের তুলনায় দীর্ঘতর থাকবে, খুব ভাল কাজ =)
flawr

2

বাশ + জিএনইউ ব্যবহার, 25

grep -vC1 ^0|grep -v \\-$

একটি নতুন লাইন-বিচ্ছিন্ন তালিকা হিসাবে ইনপুট গ্রহণ করে।

আইডিয়ন - টেস্ট ড্রাইভার কোড সহ স্পেস-বিচ্ছিন্ন এবং নতুনলাইন দ্বারা পৃথক করে / থেকে রূপান্তর করে সমস্ত টেস্টকেসগুলি একসাথে চালানোর জন্য যুক্ত করা হয়েছে।


2

চেদার , by 78 বাইট

a->([[]]+a.map((e,i)->e|(i?a[i-1]:0)|(i-a.len+1?a[i+1]:0)?[e]:[])).reduce((+))

পরীক্ষা স্যুট.

চেড্ডারের কোনও ফিল্টার নেই, তাই ফিল্টারিংয়ের মাধ্যমে আমরা চাই উপাদানগুলি মোড়ানো এবং খালি অ্যারেগুলিতে আমরা চাই না এমন উপাদানগুলিকে রূপান্তর করে এবং তারপরে সবকিছুকে একত্রিত করে কাজ করা হয়।

উদাহরণস্বরূপ, [0,0,0,8,0,1,0,0]হয়ে যায় [[],[],[0],[8],[0],[1],[0],[]]এবং তারপরে সংক্ষিপ্ত অ্যারে হবে [0,8,0,1,0]


.reduce((+))->.sum
ডাউনগোট

@ ডাউনগোট আপনি কখন এটি ঠিক করেছেন?
ফাঁস নুন

ওহ, দুঃখিত কিছু নয়। আমি ভেবেছিলাম আপনি অ্যারের যোগফল দিচ্ছেন। অ্যারেগুলিতে যোগ দিচ্ছেন না
ডাউনগোট

1

এপিএল, 14 বাইট

{⍵/⍨×3∨/0,⍵,0}

টেস্ট:

      {⍵/⍨×3∨/0,⍵,0}2 0 4 ¯3 0 0 0 3 0 0 2 0 0
2 0 4 ¯3 0 0 3 0 0 2 0

ব্যাখ্যা:

  • 0,⍵,0: the এর শুরু এবং শেষে একটি শূন্য যুক্ত করুন ⍵
  • ×3∨/: তিনটি সংলগ্ন সংখ্যার প্রতিটি গোষ্ঠীর জিসিডির সাইনটি সন্ধান করুন (এটি যদি 0 থেকে সমস্তই শূন্য হয় এবং অন্যথায় 1 হয়)।
  • ⍵/⍨: from থেকে সমস্ত আইটেম নির্বাচন করুন যার ফলস্বরূপ 1।

1

রুবি 2.x, 63 বাইট

f=->(x){x.select.with_index{|y,i|x[i-1].to_i|y|x[i+1].to_i!=0}}

ক্রেডিট যেখানে এটি প্রাপ্য, এটি মূলত নীল এর উচ্চতর ES6 উত্তরের একটি বন্দর।

এটি আমার প্রথম পিসিজি জমা। হ্যাঁ.


1

মস্তিষ্ক-ফ্লাক 142 বাইট

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

(<()>)(()){{}([]<([]){{}({}<>)<>({}<>)<>({}<>)<>(<>({}<>)<>({}<>)<>({})<>){{}((<()>))}{}{}([][()])}{}{}<>{}([]){{}({}<>)<>([])}{}<>>[[]])}{}{}

ব্যাখ্যা

(<()>)                    #Pad the top with an extra zero
(()){{}([]<...>[[]])}{}   #Until the stack height remains the same
 ([]){{}...([][()])}{}    #Until the stack height is one
  ({}<>)<>                #Move the top three to the other stack
  ({}<>)<>
  ({}<>)<>
  (...)                   #Push the sum of the top three
   <>({}<>)               #Move the second and third back
   <>({}<>)
   <>({})<>               #Leave the top of the stack
  {{}...}{}               #If the sum is not zero
   ((<()>))               #Add a buffer to the top of the stack
  {}                      #Pop the buffer/middle value
 {}                       #Remove extra zero
 <>                       #Switch to the off stack
 {}                       #Remove extra zero
 ([]){{}({}<>)<>([])}{}<> #Move the entire off stack back

লিঙ্কটি খালি। আপনি কোড এবং ইনপুট পেস্ট করতে পারেন, "সংরক্ষণ করুন" টিপুন এবং ফলাফলটি লিঙ্কটি ব্যবহার করতে পারেন
লুইস মেন্ডো

@ লুইস মেন্ডো দুর্ভাগ্যক্রমে আমি ট্রাইটিটলাইন ব্যবহার করতে পারি না তাই আমি কেবল ইউআরএল-এর সাথে লিঙ্ক করেছি।
গম উইজার্ড

আপনি ট্রাইটাইনলাইন অ্যাক্সেস করতে পারবেন না কেন?
ডিজেএমসিএমহেম

@ ডিজেএমসিমেহেম আমার ব্রাউজারে জাভাস্ক্রিপ্ট নেই। <s> আমি এখনই এটি ঠিক করব </ </ s> আমি দেখতে পাচ্ছি যে আপনি ইতিমধ্যে এটি সম্পন্ন করেছেন ধন্যবাদ।
গম উইজার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.