जावास्क्रिप्ट: 1s का 10x10 सरणी बनाएं


18

जाहिर है कि यह चुनौती अलग-अलग कार्यों और पुस्तकालयों के साथ तुच्छ होगी, इसलिए उन्हें अनुमति नहीं है।

आपका कोड ECMAscript विनिर्देशन (कोई भी युक्ति क्या होगा) के अनुरूप होना चाहिए, इसलिए कोई ब्राउज़र-विशिष्ट उत्तर नहीं।

इसके तुरंत बाद सरणी को पहुंच योग्य होना चाहिए।

मेरे पास एक जवाब है कि मैं अभी के लिए वापस लूँगा।

नोट: यह चुनौती जावास्क्रिप्ट के लिए विशिष्ट है क्योंकि यह जावास्क्रिप्ट में बहुआयामी सरणियों को बनाने के लिए बेहद असुविधाजनक है।


मैं 57 अक्षरों में हूं। क्या यह अच्छा स्कोर है?
जॉन ड्वोरक

ठीक है, निश्चित रूप से नहीं :-)
जॉन ड्वोरक

15
क्या आप वाकई 10s का यह अच्छा 1x1 सरणी नहीं चाहते हैं? [10]
कोजिरो

8
क्या ऐसा होगा [[10]]?
yingted

जवाबों:


10

जावास्क्रिप्ट ईएस 6, 30

(x=i=>Array(10).fill(i))(x(1))

ES6 कार्रवाई में :)


2
नमस्ते, यह सवाल 2 साल पुराना है। ); यह और अधिक हाल के सवालों के जवाब देने के लिए अपने जे एस कोड गोल्फ कौशल का बेहतर उपयोग शायद है
जॉर्ज

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

2
@ मार्टिनबटनर यह जवाब इस चुनौती के मुकाबले ES6 छोटा है (यह 2015 में आया था) के रूप में स्वीकार किए जाने के लिए योग्य नहीं है, और Array.fill () ES6 ही है :)
Katenkyo

मैंने सिर्फ इसलिए उत्तर दिया क्योंकि मैंने अन्य ES6 उत्तर भी देखे थे। मुझे नहीं लगता कि इसमें कुछ गलत है। लेखक अपने प्रश्न को अपडेट कर सकता है और अन्य लोग उपरोक्त समस्या को हल करने के कई तरीकों का लाभ उठा सकते हैं।
अफोंसो माटोस

ES6 को इसके मसौदे के वास्तव में जमे होने से बहुत पहले स्वीकार कर लिया गया है (जो कुछ दिन पहले 2015 में था)। मुझे यकीन नहीं है कि यह सही है या गलत है।
ऑप्टिमाइज़र

27

जावास्क्रिप्ट, 34 बाइट्स

for(r=[b=[i=10]];i--;r[i]=b)b[i]=1

चूंकि यह पंक्तियों को संदर्भ के बराबर बनाने के लिए स्पष्ट रूप से ठीक है, मुझे लगता है कि यह स्पष्ट रूप से उस तथ्य पर भरोसा करने के लिए ठीक है। यह हमें पंक्तियों के रूप में एक ही समय में टेबल का निर्माण करके एक फॉर-लूप से दाढ़ी बनाने में मदद करता है। तो, यहाँ मेरा नया प्रतियोगी है।

चूंकि r[0]और b[0]लूप के दौरान ओवरराइट किए जाते हैं, उनमें कचरा हो सकता है। यह हमें कुछ कॉमा से हटने के लिए एक और मुफ्त निष्पादन स्लॉट देता है। अफसोस की बात है, r=b=[]नहीं करेंगे, तब से वे बराबर रेफरी हैं।

इसके अलावा, यह अच्छी तरह से तराजू (99x99 अभी भी 34 बाइट्स है), ईएस 5 की आवश्यकता नहीं है (नए कार्यों में बहुत लंबे नाम हैं, वैसे भी), और एक बोनस के रूप में, यह अपठनीय है :-)


3
सुंदर। बेहद सुंदर।
Briguy37

1
अरे, मैं के साथ समाप्त हो गया c=[b=[i=10]];while(i--)b[i]=c,c[i]=1:। पता होना चाहिए!!!
मोवल्कलर

19

ECMAScript 6 - 33 वर्ण

x=(y=[..."1111111111"]).map(x=>y)

आउटपुट "1" के 10x10 सरणी।

यह इस तथ्य का दुरुपयोग करता है कि स्ट्रिंग "1111111111" में सभी आवश्यक गुणों को माना जाता है जैसे कि यह एक सरणी है इसलिए आप इसे फैलाने के ...लिए वर्णों के एक सरणी में बदलने के लिए प्रसार ऑपरेटर का उपयोग कर सकते हैं और फिर इसे सरणी की एक प्रति के साथ मैप कर सकते हैं। प्रत्येक तत्व "मूल" को संदर्भित करता है।

या केवल एक चर नाम (35 वर्णों के लिए):

x=(x=x=>[..."1111111111"])().map(x)

या अतिरिक्त भ्रम के लिए (लेकिन 45 वर्णों पर)

x=[];x[9]=x;x=[...x].map(y=>[...x].map(x=>1))

या (43 अक्षर)

y=y=>[...x].map(x=>y);x=[];x[9]=x;x=y(y(1))

...संचालक की अच्छी गाली !
'19

13

44 बाइट्स

for(a=[i=10];i;)a[--i]=[1,1,1,1,1,1,1,1,1,1]

पुराना वर्जन:

for(a=i=[];i^10;)a[i++]=[1,1,1,1,1,1,1,1,1,1]

बहुत चतुर अद्यतन!
श्मिट

के लिए (एक = [i = 9]; मैं;) एक [i -] = [1,1,1,1,1,1,1,1,1,1]
AmericanUmlaut

1
@AmericanUmlaut जो काम नहीं करता है
कॉपी

1
मुझे पसंद ^है!=
जॉन ड्वोरक

13

45 अक्षर

x=[a=[1,1,1,1,1,1,1,1,1,1],a,a,a,a,a,a,a,a,a]

प्रत्येक तत्व एक ही सरणी को इंगित करता है, लेकिन कल्पना उस के खिलाफ कुछ भी उल्लेख नहीं करती है!


4
युक्ति कहती है कि "सरणी को त्वरित होने के बाद पहुंच योग्य होना चाहिए।" । मुझे लगता है कि इसका मतलब है कि आपके पास x=शुरुआत में एक अतिरिक्त होना चाहिए
क्रिस्टियन लुपस्कु

फिर भी एक बहुत अच्छा समाधान (+1)
क्रिश्चियन लुपस्कु

यह बहुत व्यावहारिक नहीं है, हालांकि मूल्य में बदलाव सभी सरणियों पर प्रतिबिंबित होगा।
गैब्रियल पेट्रीओली

7

जावास्क्रिप्ट, 51

a=[];for(i=10;i;i--,a.push([1,1,1,1,1,1,1,1,1,1]));

या यदि सभी सूचकांकों को एक ही सरणी की ओर इशारा किया जाए:

जावास्क्रिप्ट, ४१

a=[1,1,1,1,1,1,1,1,1,1];a=a.map(a.sort,a)

सभी सूचकांक अब उसी स्तंभ की ओर संकेत करते हैं, जो संभवतः अवांछित है। (कोशिश a[0][1] = 5; console.log(a[1][1]))।
कॉपी करें

हाँ, मैंने वह नहीं देखा। मैंने अपना उत्तर अपडेट कर दिया है।
grc

6

जावास्क्रिप्ट, 45 44 बाइट्स

बेस्ट मैं अब तक है। (अब भी कोशिश कर रहा हूं)।

x=[];while(x.push([1,1,1,1,1,1,1,1,1,1])-10);

छोटा (धन्यवाद मेलमोकब!)

for(x=[];x.push([1,1,1,1,1,1,1,1,1,1])-10;);

ध्यान दें कि जब गोल्फिंग forलगभग हमेशा बेहतर होती है while। मूल कथन एक ही लंबाई ( while()बनाम for(;;)) है, लेकिन forआपको अधिक लचीलापन देता है। इस मामले में, आप x=[]इनिशियलाइज़र में रख सकते हैं forऔर एक वर्ण को बचा सकते हैं।
मेलमोकब

@mellamokb, :-) टिप के लिए धन्यवाद
बटमार

5

जावास्क्रिप्ट, ४ 47

चूंकि मेरे मूल समाधान को पीटा गया है, इसलिए मैं अब इसे पोस्ट करूंगा।

for(a=[],i=10;i--;a[i]='1111111111'.split(''));

दुर्भाग्य से, 0x3FF.toString(2)यह केवल स्ट्रिंग को सूचीबद्ध करने के रूप में काफी कुशल नहीं है, जो कि केवल स्टेटिक रूप से सरणी घोषित करने के रूप में काफी कुशल नहीं है।

आप इस तरह से एक चरित्र को शेव कर सकते हैं ( 46 ):

for(a=[],i=10;i--;a[i]=[1,1,1,1,1,1,1,1,1,1]);

आप इस तरह से 2 और पात्रों को बचा सकते हैं: ( 44 )

for(a=[i=10];i--;)a[i]=[1,1,1,1,1,1,1,1,1,1]

JS 1.8 फ़ंक्शन एक्सप्रेशन क्लोजर (FF केवल atm) का उपयोग कर एक और 44 बाइट समाधान:

x=(x=[1,1,1,1,1,1,1,1,1,1]).map(function()x)

1
आप आरंभ करने के बाद एक चार को बचा सकता है iमें aइस तरह:a=[i=10]
codeporn

4

जावास्क्रिप्ट, 57 बाइट्स

r=eval("["+(A=Array(11)).join("["+A.join("1,")+"],")+"]")

गोल्फ से पहले:

a=Array(11).join("1,");
b=Array(11).join("["+a+"],")
c=eval("["+b+"]")

नोट: यह ES5 की जरूरत है, इसलिए IE से बहुत उम्मीद नहीं है।


वाह! मैंने लिखा है eval('a=['+(b=Array(11)).join('['+b.join("1,")+'],')+']')। अलग-अलग कोट्स और मेरे होने के अलावा eval के अंदर वैरिएबल, ये बिल्कुल एक जैसे हैं
mowwwalker

2
a=eval("["+Array(11).join("[1,1,1,1,1,1,1,1,1,1],")+"]")है 56
21

3

54

यह पहले से ही हरा दिया गया है, लेकिन यहां मेरा समाधान है:

function x(){return[1,1,1,1,1,1,1,1,1,1]}x=x().map(x)

एरो फ़ंक्शंस जावास्क्रिप्ट गोल्फिंग के लिए दिलचस्प चीजें करेंगे। अब अगर केवल मैं समझ सकता हूँ कि कैसे तुच्छ करीने का निर्माण किया जाता है।
कोजीरो

आपको इसे सुलभ बनाने के लिए (या , आदि) से x=पहले डालने की आवश्यकता होगी , है ना? x().mapy=
श्मिट्टी

@Schmiddty हां, इसलिए अपडेट किया गया।
कोजीरो

3

39 बाइट्स

ECMAScript 7 में सरणी समझ का उपयोग करना:

x=[x for(y in x=[1,1,1,1,1,1,1,1,1,1])]

ES6 में कोई सरणी समझ नहीं है, यह ES7 प्रस्ताव है।
अफोंसो माटोस

@afonsomatos जिस समय मैंने यह उत्तर दिया, यह अभी भी ES6 ड्राफ्ट का हिस्सा था। यह अब अद्यतन किया गया है :)
अंडर

4 वर्णों के [1,1,1,1,1,1,1,1,1,1]साथ प्रतिस्थापित करना Array(10).fill(1)
श्मिट

2

56 वर्ण

बल्कि लंबे उत्तर, लेकिन 100x100 आदि के लिए बेहतर होगा।

for(a=[[i=k=0]];++i<100;m?0:a[k=i/10]=[1])a[k][m=i%10]=1

2

जावास्क्रिप्ट, 36 वर्ण (ईसीएमए 6)

(a=[b=[]]).fill(b.fill(a[9]=b[9]=1))

मेरे ब्राउज़र (Ubuntu पर फ़ायरफ़ॉक्स) और कोडेक अकादमी जावास्क्रिप्ट दुभाषिया में परीक्षण किया गया


2

ईएस 6, 54

यह सबसे छोटा नहीं है, लेकिन मुझे लगा कि मैं यहां पहले से ही एक अलग दृष्टिकोण के लिए जाऊंगा।

a=(''+{}).split('').slice(0,10).map(_=>a.map(_=>1))

एक स्ट्रिंग के लिए एक वस्तु कास्ट "[object Object]"
करें स्ट्रिंग को चार्ट में विभाजित करें ["[", "ओ", "बी", ... "]"]
सिर्फ 10 का एक टुकड़ा पकड़ो
मानचित्र 1 प्रारंभिक स्लाइस पर 1 मैपिंग का परिणाम


मैं इसका परीक्षण कहां कर सकता हूं? यह मेरे FF में सही काम नहीं करता है।
क्वर्टी

हालाँकि, मैं aपहले से मौजूद है , क्योंकि कुछ संस्करण को काम करने के लिए लग रहा था कि बाहर निकल गया । अपडेट किए गए संस्करण को - धर्म के झंडे के साथ एफएफ और नोड में काम करना चाहिए।
डैन प्रिंस

अब यह सही सरणी देता है, लेकिन यह किसी भी चर को नहीं सौंपा गया है।
क्वर्टी


0

जावास्क्रिप्ट - 64 63 59 वर्ण

for(var a=b=[],i=100;i-->0;b[i%10]=1)if(i%10==0){a[i/10]=b;b=[]}

for(var a=b=[i=100];i-->0;b[i%10]=1)if(i%10==0){a[i/10]=b;b=[]}

एक चार सरणी में पुनरावृत्त छिपाने से बचाया।

for(a=b=[1],i=100;i--;b[i%10]=1)if(i%10==0){a[i/10]=b;b=[]}

जांस सुझावों के साथ कुछ चार्ट सहेजे गए।

पठनीय संस्करण:

for(var a = b = [i = 100]; i-- > 0; b[i % 10] = 1) {
  if(i % 10 == 0) {
    a[i / 10] = b;
    b = [];
  }
}

हां, यह सबसे छोटा समाधान नहीं है, लेकिन रेडीमेड [1,1,1,1,1,1,1,1,1,1]सरणियों का उपयोग किए बिना एक और दृष्टिकोण है ।


1
बदलें i-->0करने के लिए i--। जबकि "डाउन्टो" ऑपरेटर अच्छा है, यह वास्तव में नहीं है। ==0दो बिट्स द्वारा भी मुंडा जा सकता है। इसके अलावा, बाहर छोड़ दें var। जबकि आम तौर पर उपयोगी, चार बेकार बाइट्स यहां अस्वीकार्य हैं।
जॉन ड्वोरक


0

जावास्क्रिप्ट 73

function h(){s="1111111111",r=[10],i=-1;while(++i<10){r[i]=s.split("");}}

1
r=[10],कुछ भी नहीं जैसा कि आप तुरंत अधिलेखित कर देते हैं r[0]। आपको घोषणा करने की आवश्यकता नहीं है sऔर बस कर सकते हैं "1111111111".split("")लेकिन वह 22 वर्ण है जबकि [1,1,1,1,1,1,1,1,1,1]केवल 21 वर्ण हैं।
MT0

0

जावास्क्रिप्ट ईएस 6, 53

x="1".repeat(100).match(/.{10}/g).map(s=>s.split(""))

लेकिन सरणी में लोग तार हैं :)


0

जावास्क्रिप्ट ES6, 53

x=eval("["+("["+"1,".repeat(10)+"],").repeat(10)+"]")

0

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

A=Array(10).fill(Array(10).fill(1))

1
चर सेट करना आउटपुट का स्वीकृत तरीका नहीं है। हालांकि, आप f=>Array(10).fill(Array(10).fill(1))36 बाइट्स के लिए (एक अनाम फ़ंक्शन को परिभाषित करना ) कर सकते हैं ।
R
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.