यह निर्धारित करें कि एक ऐरे में 2 के अलावा कुछ और है या नहीं


20

एक ऐसा सरणी लें जिसमें संख्याएँ या सरणियाँ हों, आउटपुट यदि इसमें केवल 2s हैं।

आउटपुट एक सत्य या गलत मूल्य होना चाहिए (क्षमा करें यदि यह उत्तर नष्ट कर देता है)

ट्रू टेस्ट केस

[2]
[2,2]
[[2],[2,2],2]
[]
[[],[]]

झूठा टेस्ट केस

[1]
[22]
[2,2,2,1]
[[1,2],2]

स्टैंडर्ड लोफॉल्स निषिद्ध हैं।

डिफ़ॉल्ट IO नियम लागू होते हैं।

कोड-गोल्फ, सबसे कम बाइट्स जीतता है!


क्या हम एक स्ट्रिंग में सरणी का प्रतिनिधित्व कर सकते हैं?
गेहूं जादूगर

क्या सरणियों में संख्याओं और अन्य सरणियों के अलावा ऑब्जेक्ट होंगे
गेहूं जादूगर

केवल सरणियाँ और संख्याएँ होंगी, और सरणी का प्रतिनिधित्व करने वाला एक स्ट्रिंग ठीक है।
अताको

2
किस तरह की संख्या? कॉम्पेक्स इंट, कॉम्पेक्स फ्लोट, फ्लोट इंट, इंट, नेगेटिव नहीं?
रोजलूप

1
FTR और उचित गणितीय सोच के नाम पर: सरणी [[2]]है नहीं एक दो होते हैं।
बंद हो गया

जवाबों:


8

MATL , 3 बाइट्स

2=p

इसे ऑनलाइन आज़माएं!

तकनीकी रूप से, यह सिर्फ हो सकता है

2=

चूंकि किसी भी शून्य तत्व से युक्त सरणी मिथ्या है, लेकिन यह सस्ता लगता है।


0 युक्त एक सूची गलत है? ओह यार।
बजे द एग्रीगेटर

मुझे नहीं लगता कि 2-बाइट संस्करण मान्य है, क्योंकि टिप्पणियों में अताको ने कहा कि एक अद्वितीय आउटपुट जोड़ी मान्य है।
द एग्रीकल्चर से एरिक

मेरा मानना 2=है कि खाली मैट्रिस के लिए विफल रहता है, या?
स्टीवी ग्रिफिन

@stewiegriffin को संभालने के लिए एक अजीब किनारे के मामले की तरह लगता है, लेकिन आसानी से यह काम करता है: इसे ऑनलाइन आज़माएं!
DJMcMayhem

हां, 2=pठीक काम करता है। अंत में छोटा संस्करण 2=, नहीं करता है। इसके अलावा, "अजीब बढ़त के मामले" दो परीक्षण मामलों में से एक हैं। :-)
स्टीवी ग्रिफिन

15

पायथन 2 , 43 40 बाइट्स

f=lambda l:l>=[]and all(map(f,l))or l==2

इसे ऑनलाइन आज़माएं!


इस उत्तर को पोस्ट करने के समय, इसे अभी भी इस मेटा सर्वसम्मति के अनुसार आउटपुट में त्रुटि के माध्यम से / त्रुटि को फेंकने की अनुमति नहीं थी। इसलिए 26 बाइट्स पर यह जवाब मान्य था:

f=lambda l:l==2or map(f,l)

इसे ऑनलाइन आज़माएं!


1
यह जाँचने का एक अच्छा तरीका है कि क्या एक तत्व एक सूची है।
अदनान

यही कारण है कि मुझे वह आम सहमति पसंद नहीं है। यह वास्तव में अजगर गोल्फ को बर्बाद कर देता है।
गेहूं जादूगर

हालाँकि जब से आप एक्जिट कोड से जा रहे हैं all, तो आपको इसकी आवश्यकता नहीं है , एक त्रुटि के अलावा और कुछ भी सत्य नहीं है।
गेहूं जादूगर

11

प्रोलोग (एसडब्ल्यूआई) , 43 33 बाइट्स

मुझे बदबू आ रही है ... पुनरावृत्ति

10 बाइट्स बचाने के लिए Emigna और Leaky Nun को धन्यवाद !

कोड

a([]).
a([X|T]):-(X=2;a(X)),a(T).

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें!

स्पष्टीकरण:

गैर-प्रोलॉग उपयोगकर्ताओं के लिए, एक सूची निम्न तरीके से स्वरूपित की जाती है [Head | Tail]:।

Headसूची के पहले तत्व है, और पूंछ शेष सूची है। इसे यहाँ टेस्ट करें! । यहां एक महत्वपूर्ण मामला यह है कि 1 तत्व के साथ एक सूची की पूंछ बराबर है []। आप यहाँ परीक्षण कर सकते हैं

% State that an empty array is truthy.
a([]).

% If the list is not empty (covered by the previous line), we need to check
% whether the Head is equal to 2 or whether the head is truthy.
% After that, we only need to check if the remaining list is truthy.
a([Head | Tail]) :- (Head = 2; a(Head)), a(Tail).


9

ऑक्टेव, 13 बाइट्स

@(x)~any(x-2)

सभी परीक्षण मामलों की जाँच करें।

यह एक गुमनाम एक इनपुट तर्क लेने समारोह है x। यह 2सभी तत्वों से घटता है, अगर कोई गैर-शून्य तत्व हैं तो जांच करता है। यह उन trueमामलों के लिए आउटपुट को उपेक्षित करता है जहां सभी मान शून्य हैं।

इसका कारण यह है काम करता है x-2खाली मैट्रिक्स सहित सभी आकार, की मैट्रिक्स के लिए काम करता है, []

x-2 यदि इनपुट में खाली मैट्रिस नहीं हो सकते हैं तो यह पर्याप्त होगा।




6

05AB1E , 4 बाइट्स

˜YQP

इसे ऑनलाइन आज़माएं!

व्याख्या

˜      # flatten list
 YQ    # check each element for equality to 2
   P   # product of list

2इसके बजाय काम क्यों नहीं करेगा Y?
एग्रीकल्चर आउटरीक

@EriktheOutgolfer: भी 2काम करता है। मुझे सिर्फ यह पसंद है कि इसमें कोई संख्या नहीं है :)
एमिगा

6

जावास्क्रिप्ट (ईएस 6), 22 19 23 22 बाइट्स

a=>!/[^2,]|22/.test(a)

झसे आज़माओ

f=
a=>!/[^2,]|22/.test(a)
console.log(" "+f([2])+": "+JSON.stringify([2]))
console.log(" "+f([2,2])+": "+JSON.stringify([2,2]))
console.log(" "+f([[2],[2,2],2])+": "+JSON.stringify([[2],[2,2],2]))
console.log(" "+f([])+": "+JSON.stringify([]))
console.log(" "+f([[],[]])+": "+JSON.stringify([[],[]]))
console.log(f([1])+": "+JSON.stringify([1]))
console.log(f([22])+": "+JSON.stringify([22]))
console.log(f([2,2,2,1])+": "+JSON.stringify([2,2,2,1]))
console.log(f([[1,2],2])+": "+JSON.stringify([[1,2],2]))


अच्छा है! मुझे आश्चर्य है कि अगर इसे कुछ और छोटा किया जा सकता है, लेकिन मुझे इसमें संदेह है।
अरनौलद

धन्यवाद, @ अरण्युलड; अभी भी उस पर सुधार करने का एक तरीका नहीं निकला है।
झबरा



4

गणितज्ञ, 24 बाइट्स

Cases[t=Flatten@#,2]==t&

शुद्ध कार्य वापस Trueया False। बाद Flattenनेस्टेड सरणी ing और यह बुला t, Cases[t,2]कि "पैटर्न" से मेल तत्वों की सूची देता है 2, और==t जाँच करता है कि कि पूरी सूची है।

गणितज्ञ, 29 बाइट्स

(#//.{2->{},{{}..}->{}})=={}&

उतना छोटा नहीं, लेकिन ज्यादा मजेदार। इनपुट से शुरू #, दो प्रतिस्थापन नियम लागू होते हैं जब तक कि परिणाम बदलना बंद नहीं हो जाता ( //.): पहला, सभी 2एस को प्रतिस्थापित किया जाता है {}; और फिर कोई भी सूची जिसकी प्रविष्टियां सभी खाली सेट हैं ( {{}..}) को खाली सेटों द्वारा प्रतिस्थापित किया जाता है (बार-बार)। यदि बाकी एक खाली सेट ( =={}) है, तो हम जीतते हैं।


आउटगोल्फ्ड , लेकिन मैं अभी भी वास्तव में जानना चाहता हूं कि यहां क्या किया जा रहा है।
पावेल

4

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

एक अनाम फ़ंक्शन, एक लेता है Stringऔर एक रिटर्न देता है Bool

इस रूप में उपयोग करें (all((==2).fst).(reads=<<).scanr(:)[]) "[2,2,2,1]"

all((==2).fst).(reads=<<).scanr(:)[]

इसे ऑनलाइन आज़माएं!

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

  • हास्केल में मिश्रित प्रकार की सूची नहीं है, इसलिए हम तर्क के रूप में एक स्ट्रिंग लेते हैं।
  • scanr(:)[] स्ट्रिंग के सभी प्रत्ययों की एक सूची तैयार करता है।
  • (reads=<<)प्रत्येक प्रत्यय की शुरुआत में एक संख्या को पार्स करने की कोशिश करता है, सफलताओं को ट्यूपल्स की सूची में मिलाता है (n,restOfString)
  • all((==2).fst)जांच की जाती है कि सभी पार्स किए गए नंबर हैं या नहीं 2

कैसे बस के बारे में not.all(`elem`"2,[]")?
शाम

@zbw जैसे नंबरों की वजह से फेल हो जाता है 22
अर्जन जोहान्स

4

अजगर २ , 38 बाइट्स

lambda l:l.strip('[],2')==l*('22'in l)

इसे ऑनलाइन आज़माएं!

रिक्त स्थान के बिना एक स्ट्रिंग में ले जाता है, एक बूल आउटपुट करता है।

चेकों सभी पात्रों को दूर करता है, तो '[],2'के lरिक्त स्ट्रिंग देता है। यह भी जांचता है कि 22एक विकल्प नहीं है - यदि यह है, तो lहटाने के परिणाम की तुलना करने के लिए खाली स्ट्रिंग के स्थान पर इनपुट का उपयोग किया जाता है, और यह हमेशा विफल रहता है।


4

रूबी, 28 23 22 बाइट्स - 5 बाइट्स जीबी द्वारा बचाए गए

->x{x.flatten-[2]==[]}

"फ्लैटन" वास्तव में लंबा होने के बावजूद, यह अभी भी रेगेक्स आधारित समाधानों या पुनरावर्ती सामानों से कम है, जिन्हें आधार मामले में त्रुटियों से बचाव करना है। रूबी का सेट और सरणियों का अंतर्विरोध, हालांकि, कभी-कभी आश्चर्यजनक रूप से उपयोगी होता है।


1
x.flatten.uniq == [2]
निक एम

1
@NickM - जैसे []या परीक्षण मामलों पर काम नहीं करेगा [[],[]][2,*x].flatten.uniq==[2]थोड़ा लंबा है
ymbirtt 14:04

1
x.flatten | [2] == [2] छोटा होगा।
जीबी

@GB और x.flatten-[2]==[]अभी भी छोटा है। पारितोषिक के लिए धन्यवाद!
यम्बर्ट

1
और फिर भी रेगेक्स जीतता है: codegolf.stackexchange.com/a/120781/18535 :-)
जीबी

3

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

f=a=>a.map?a.every(f):a==2

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


आपको इसे गिनने की आवश्यकता है f=क्योंकि आपने इसे संदर्भित किया है।
लीक नन

@LeakyNun वास्तव में। फिक्स्ड।
अरनौलड

3

MATL , 4 बाइट्स

2-a~

इसे ऑनलाइन आज़माएं!

टूट - फूट:

           % Implicit input
2-         % Push 2 to the stack, and subtract from input
  a        % Any non-zero elements?
    ~      % Negate to get true for cases where all elements are zero.

अच्छी तरह से, outgolfed । लेकिन मैं इसे बनाए रख रहा हूं, क्योंकि मैं काफी खुश हूं, मैंने यह सब अपने दम पर प्रबंधित किया (भले ही कार्य सुपर सरल है)।


3

आर, 28 बाइट्स

function(x)!any(unlist(x)-2)

unlist(x)वेक्टर में एक (नेस्टेड) ​​सूची को बदल देता है। फिर 2उस वेक्टर से घटाया जाता है। anyतार्किक और चेकों के लिए संख्यात्मक (एक चेतावनी के साथ) में कनवर्ट करता है और यदि कोई है तो जाँच करता है TRUE। इसके साथ उलटा है! आउटपुट और आउटपुट के ।

यह नेस्टेड सूचियों के साथ काम करता है क्योंकि unlistडिफ़ॉल्ट रूप से प्रारंभिक सूची के सभी सूची प्रविष्टियों को एकजुट करने के लिए पुनरावर्ती कार्य करता है।

यह खाली सूचियों के साथ भी काम करता है, क्योंकि unlist(list())बन जाता है numeric(), एक खाली संख्यात्मक वेक्टर। anyइसके द्वारा जोर-जबरदस्ती की जाती है logical(), जिसकी व्याख्या इसके FALSEद्वारा की जाती है any, और फिर इससे उलट हो TRUEजाती है !


1
pryr::f(!any(unlist(x)-2))बाइट्स के एक जोड़े को बचाता है।
बीएलटी

यह लंबाई all(unlist(x)==2)भी है।
ग्यूसेप

या आप यह भी कह सकते हैं कि any(unlist(x)-2)एक सुसंगत रिटर्न देता है TRUEयदि चपटा सरणी में एक गैर-2 मान है और एक सुसंगत है FALSEयदि सभी मान हैं 2...
Giuseppe

1
@Giuseppe सुनिश्चित नहीं है कि यदि यह TRUEगलत है, लेकिन /
JAD

1
खैर, अभी भी मेटा पर एक आम सहमति नहीं है, लेकिन codegolf.meta.stackexchange.com/a/2192/67312
Giuseppe



2

\Wऐसा अच्छा मानदंड नहीं लगता: 2.2एक संख्या है जो नहीं है 2, फिर भी मुझे लगता है कि यह मेल खाएगा
हारून

@ ऐरन मैंने ओपी से केवल यह पूछा है कि क्या सरणी में दशमलव संख्या हो सकती है। यदि वे कहते हैं कि फ्लोटिंग-पॉइंट नंबर सरणी में मौजूद होंगे, तो मैं अपना सबमिशन बदल दूंगा।
क्रिति लिथोस

हाँ, मैं देख रहा हूँ कि RosLup ने कल ही प्रश्न पूछा और मुझे अभी तक उत्तर नहीं मिला है। मुझे उम्मीद है कि ओपी जल्द ही स्पष्ट करने के लिए आएगा!
हारून


2

जावास्क्रिप्ट (ईएस 6), 53 50 48 बाइट्स

_=>(_+"").split`,`.map(c=>!c?2:c).every(c=>c==2)

5 बाइट्स बचाए, @ शिवाय को धन्यवाद!

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

let f =

_=>(_+"").split`,`.map(c=>!c?2:c).every(c=>c==2)

console.log(f([2]))
console.log(f([2,2]))
console.log(f([[2],[2,2],2]))
console.log(f([]))
console.log(f([[],[]]))

console.log(f([1]))
console.log(f([22]))
console.log(f([2,2,2,1]))
console.log(f([[1,2],2]))


f([])और f([[],[]])सत्य होना चाहिए
अरनौल

@ अरण्युलड क्या यह सही है?
अर्जुन

मुझे ऐसा लगता है। :-)
अरनौल

लगता है कि आप बाइट्स के !cबजाय के साथ कुछ बचा सकते हैं c==""
झबरा

@Arnauld कि बाहर इशारा करने के लिए धन्यवाद। यह चुनौती वास्तव में उन्नीसवीं बाइट में CMC के रूप में पोस्ट की गई थी। उस सीएमसी के पास [[], []] प्रकार के परीक्षण मामलों के बारे में कहने के लिए कुछ भी नहीं था। जब चुनौती मुख्य साइट पर पोस्ट की गई, तो मैंने जल्दी से अपना समाधान जोड़ दिया (यह भी मुझसे पूछा था! नियमों को देखे बिना!) एक बार फिर से धन्यवाद! :)
अर्जुन


2

जावा 8, 126 55 27 बाइट्स

s->s.matches("(\\W|2\\b)+")

पोर्ट ऑफ @KritiiLithos का अद्भुत रेटिना उत्तर , को छोड़कर ^...$, चूंकि String#matchesहमेशा पूरे स्ट्रिंग से मेल खाता है और ^...$अंतर्निहित रूप से जोड़ता है ।

-2 बाइट्स @Jakob के लिए धन्यवाद मुझे याद दिलाने के ^...$लिए आवश्यक नहीं है String#matches

इसे यहाँ आज़माएँ।


मैं सूची समाधान पर आपके सभी काम को कम करने के लिए नफरत करता हूं, लेकिन क्या आप एक स्ट्रिंग के लिए मजबूर नहीं कर सकते हैं और स्ट्रिंग समाधान का उपयोग कर सकते हैं?
जकॉब

@ जकोब आप स्पष्टीकरण में मतलब है? मैं इस समय एक रेगेक्स स्ट्रिंग समाधान का उपयोग कर रहा हूं। मैंने अभी अपना मूल सूची उत्तर रखा है और यह स्पष्टीकरण है, क्योंकि स्ट्रिंग समाधान एक बंदरगाह है। क्या आप सूची समाधान निकालने के लिए कह रहे हैं? या स्ट्रिंग समाधान के लिए एक स्पष्टीकरण जोड़ें?
केविन क्रूज़सेन

मेरा मतलब है कि जब तक आपके पास एक सूची समाधान है तब तक आप उसमें स्ट्रिंग समाधान का उपयोग करके इसे छोटा कर सकते हैं। boolean c(java.util.List l){return(l+"").matches("^(\\W|2\\b)+$");}काम करना पसंद करेंगे, है ना? बस यह इंगित करना चाहता था कि यदि आप सूची समाधान को आगे बढ़ाने की योजना बना रहे थे।
जकॉब

1
ओह और आप हटाकर ^और $regex में 2 बाइट्स खो सकते हैं , String.matchesकेवल पूरे स्ट्रिंग के खिलाफ परीक्षण के बाद ।
जकॉब

@ जाकोब ने सूची उत्तर को पूरी तरह से हटा दिया, जावा 8 में बदल दिया, और हटा दिया ^...$। उस के बारे में भूल गए, भले ही मैंने इसे अतीत में बहुत बार इस्तेमाल किया है ..
केविन क्रूज़सेन

1

पायथन 2 , 44 43 42 बाइट्स

xसूची के स्ट्रिंग प्रतिनिधित्व के रूप में लेता है । यह भी मानता है कि उदाहरण में अभ्यावेदन का कोई स्थान नहीं है।

lambda x:set(x)<=set("[],2"*0**("22"in x))

इसे ऑनलाइन आज़माएं!


व्याख्या

ये दोनों ही वर्णों को इनपुट के स्ट्रिंग प्रतिनिधित्व में लेते हैं और निर्धारित करते हैं कि इसके अलावा कोई वर्ण है या नहीं [], 2 हैं कि इसके है या नहीं। वे एक सेट पर कास्टिंग करते हैं और सिर्फ उन पात्रों के सेट की तुलना करते हैं। हालांकि यह विफल हो जाता है, तो हम एक नंबर 2 के अलावा अन्य है जो 2 (22 जैसे या 222) का केवल अंक, ताकि इस मामले में हम गुणा स्ट्रिंग या नहीं, का निषेध द्वारा सेट बनाने के लिए इस्तेमाल किया पैच करने के लिए में है xशामिल हैं "22"। यदि इसमें यह है तो यह खाली सेट होगा, अन्यथा यह पहले जैसा ही होगा।



फेल के लिए[22]
लीक नून

@LeakyNun फिक्स्ड
गेहूं जादूगर

@LeakyNun आपका सुझाव विफल रहता है []
गेहूं जादूगर

lambda x:set(x)<=set("[],2"*-~-("22"in x))-1 के लिए
अंडा

1

ओम, 6 बाइट्स

∙e]Å2N

CP-437एन्कोडिंग का उपयोग करता है ।

स्पष्टीकरण:

∙e]Å2E
∙e           ■Evaluate the input to form an array
   Å         ■any(              ,             )
  ]          ■    flatten(input)
    2N       ■                   lambda x:x!=2
             ■implict end of any and print

1

PHP, 46 बाइट्स

<?=!preg_match('/:"(?!2")/',serialize($_GET));

@ JörgHülsermann क्या आप एक उदाहरण दे सकते हैं? सभी परीक्षण मामले काम करने लगते हैं। यदि आप इसका परीक्षण ब्राउज़र के माध्यम से नहीं करते हैं, तो क्या आप स्केलिंग मानों $_GETको स्ट्रिंग के रूप में पास करते हैं ?
user63956

<?=!preg_match('/:"(?!2")/',$argn);और इनपुट क्रमबद्ध सरणी का एक स्ट्रिंग प्रतिनिधित्व है - 11 बाइट्स
जौग Hülsermann

1

PHP <7.0, 29 बाइट्स

इनपुट के रूप में स्ट्रिंग सरणी JSON एन्कोडेड

<?=!ereg("22|[013-9]",$argn);

PHP <7.0, 42 बाइट्स

पदावनत समारोह ereg का उपयोग करें

<?=!ereg("22|[013-9]",json_encode($_GET));

PHP, 50 बाइट्स

सच्चे के लिए 1 प्रिंट और झूठ के लिए कुछ भी नहीं

-1 अन्य बुद्धिमान हटाने के लिए बाइट !

या + 1 सच 1 के लिए बाइट, गलत 0 +पहले जोड़ें!

<?=!preg_match('#22|[013-9]#',json_encode($_GET));

इसे ऑनलाइन आज़माएं!


2
आप की जरूरत नहीं है $rचर: <?array_walk_recursive($_GET,function($i){$i-2&&die;})?>1
user63956

1

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

!-.nQ2

मेरे सीजेएम उत्तर के समान। मैं पाइथ के लिए अभी भी नया हूं, इसलिए कृपया मुझे बताएं कि क्या कुछ है जो मैं बंद कर सकता हूं।

स्पष्टीकरण:

    Q   Input:     [[[], [2]], [1]]
  .n    Flatten:   [2, 1]
 -   2  Remove 2s: [1]
!       Not:       False
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.