एक प्रोग्राम लिखें जो शब्द "पासवर्ड" पाए जाने तक जानवर बल पत्र संयोजन करता है


16

कार्यक्रम को प्रत्येक अक्षर संयोजन (लोअरकेस या अपरकेस, यह कोई फर्क नहीं पड़ता) को अल्फाबेटिक ऑर्डर में प्रिंट करना चाहिए। इसके साथ शुरू होना चाहिए aऔर अंतिम मुद्रित संयोजन होना चाहिए password

आउटपुट होना चाहिए:

a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ... passwora passworb passworc password

2
क्या विभाजकों को रिक्त स्थान होना चाहिए, या क्या मैं नई सूचियों का उपयोग कर सकता हूं?
इल्मरी करोनें

हां आप कर सकते हैं, यह सिर्फ एक मामूली बदलाव है।
ST3

जवाबों:


32

पर्ल, 19 वर्ण

say for a..password

ऊपर के स्पष्टीकरण के अनुसार, नई लाइनों का उपयोग परिसीमनकर्ताओं के रूप में करता है। साथ चलाने के लिए perl -M5.010(या बस perl -E 'say for a..password') पर्ल 5.10+ सक्षम करने के लिए sayसुविधा। प्रति मेटा , यह अतिरिक्त वर्णों के रूप में नहीं गिना जाता है।

(यदि आप रिक्त स्थान पर सीमांकक के रूप में जोर देते हैं, तो $,=$";say a..passwordयह केवल दो वर्णों से अधिक लंबा है। हालांकि, यह व्यवहार में अनुपयोगी होने के बिंदु तक स्मृति की बहुत धीमी और बेकार है, क्योंकि यह मुद्रण से पहले पूरी सूची को स्मृति में बनाने की कोशिश करता है।)


18

रूबी, 33 वर्ण (इष्टतम लेकिन लंबा संस्करण)

?a.upto('password'){|c|$><<c+' '}

मुझे पसंद है 'a'.upto('password'); यह आपको बताता है कि यह क्या कर रहा है। रूबी महान और व्यक्त की तरह है।:D

बेशक, print c,' 'यह भी बहुत स्पष्ट होगा, लेकिन $>दो वर्णों का उपयोग करना कम है।

रूबी, 29 25 वर्ण (धीमा संस्करण)

$><<[*?a..'password']*' '

यह छोटा है, लेकिन यह एक बार में सभी टोकन प्रिंट करता है, इसलिए इसे चलाने में लंबा, लंबा समय लगता है!


1
अच्छा लगा, खासकर पहला।
कैरी स्वेवेलैंड

धीमे संस्करण में, (?a..'password').to_aको छोटा किया जा सकता है[*?a..'password']
पॉल प्रेस्टिज

6

पर्ल, ३३ ३२ २४ अक्षर

32 वर्णों में एक समाधान:

$_=a;print$_++,$"until/passwore/

इस बारे में ज्यादा नहीं कहना। अगर मैं प्रविष्टियों को अलग करने के लिए रिक्त स्थान के बजाय नईलाइन्स का उपयोग कर सकता हूं तो मैं इसे 27 वर्णों तक कम कर सकता हूं।

इल्मरी करोनन बताते हैं कि ..आंतरिक रूप से कॉल करता है ++, इसलिए एक बेहतर समाधान (25 अक्षर) होगा:

print$_,$"for a..password

पर्ल के कमांड-लाइन विकल्पों का लाभ उठाते हुए, यहां एक समान 24-वर्ण समाधान है:

perl -l40e 'print for a..password'

जो लोग उनसे परिचित नहीं हैं, उनके लिए पर्ल झंडे गिनने के नियम यहां दिए गए हैं।

बेशक, इल्मरी का 21-चरित्र समाधान अभी भी कम है, लेकिन इसके लिए एक मशीन की आवश्यकता होती है जो 129,052,722,140 तार की एक सरणी आवंटित कर सकती है।


एक चरित्र .$"को ," "बचाने के बजाय नहीं होगा ?
श्री लामा

हां, मेरी ओर से कुल निरीक्षण। धन्यवाद।
ब्रेडबॉक्स

6

पर्ल 6, 20 चार्ट

say "a".../password/

आपको अन्य चीजों की आवश्यकता नहीं है


5

अजगर 2, 91

b=lambda n:n*' 'and b(n/26-(n%26<1))+chr(~-n%26+97)
i=0
exec"i+=1;print b(i);"*129052722140

4

पीएचपी 38 37 36 वर्ण

<?for($w=a;$w<passwore;)echo$w++,~ß;

आपको एन्कोडिंग को आईएसओ 8859-1 पर सेट करना होगा और चेतावनी को अक्षम करना होगा।


मैंने वह परीक्षण नहीं किया, लेकिन क्या यह वास्तव में ऐसा करता है ???
ST3

@ ST3 यह एक साधारण लूप है। चर $wको शुरू में 'a' पर सेट किया जाता है और तब तक बढ़ा दिया जाता है जब तक कि वह 'पासवर्ड' के बाद पहले मूल्य तक नहीं पहुंच जाता (अंतिम स्ट्रिंग मुद्रित नहीं होती है)।
lortabac

3
@ ST3 यह एक नियमित forलूप है। इस कोड में कुछ भी अजीब नहीं है, सिवाय अंतिम 2 पात्रों के, जो एक बिटवाइज़-इनवर्टेड व्हाट्सएप हैं। वैसे भी, हाँ, मैंने इसे एक छोटे शब्द तक परखा।
lortabac

1
@ ST3 यहाँ है एक परीक्षण से passwoqsकरने के लिए password। क्योंकि कोडपैड की एन्कोडिंग आईएसओ 8859-1 नहीं है, मुझे एक व्हाट्सएप से बदलना पड़ा ।
lortabac

1
आप लगातार के साथ एक चार को बचा सकते $w<passworeहैं $w!=passwore
डिसेंट डब्बल

2

रूबी (40 अक्षर)

Az अक्षरों की एक स्ट्रिंग को आधार संख्या 26 में एक = 1, b = 2, ..., z = 26 के साथ व्याख्या करें।

इसलिए "पासवर्ड" को संख्या N = माना जा सकता है

16*(26**7) + 
1*(26**6) + 
19*(26**5) + 
19*(26**4) + 
23*(26**3) + 
15*(26**2) + 
18*(26**1) + 
4*(26**0)

यदि हम s = "a"(वह है: 1) और हम (N-1) कॉल करते हैं s.succ!, तो s "password"(N) होगा। दूसरे शब्दों में, एन = 1 + (एन -1)।

एक उदाहरण के लिए जो एन की गणना को सही साबित करने के लिए अधिक तेज़ी से चलेगा, "pass"लक्ष्य के रूप में विचार करें, जहां एन है

16*(26**3) + 
1*(26**2) + 
19*(26**1) + 
19*(26**0)

तथा

s = "a"
(N-1).times { s.succ! }
puts s #== "pass"

चूंकि हम "a"भी मुद्रित करना चाहते हैं, हमें आवश्यकता है

s = "`"
N.times { print(s.succ! + " ") }

तो पूर्ण "पासवर्ड" पर वापस जाएं। N = 129052722140, जा रहा है:

s=?`;0x1e0c2443dc.times{$><<s.succ!+" "}

मैंने अधिक कॉम्पैक्ट रूप में शिकार किया, 129052722140 == 0x1e0c2443dbलेकिन एक नहीं मिला।

(मुद्रण की कमी को ठीक करने के लिए अद्यतन किया गया "a", Cary का धन्यवाद।)


1
एडम, कि तुम मेरे दिमाग में रहा होगा। क्या आप 'a' से पहले एक शुरू नहीं करना चाहते हैं?
कैरी स्वेवेलैंड

मुझे लगता है कि आप जो प्राप्त कर रहे हैं वह यह है कि मैंने अपने पुनरावृत्तियों के Nबजाय इसका उपयोग किया है N-1! धन्यवाद, मैं ठीक करने के लिए संपादित करूँगा। (हालांकि 129052722140 Google :) के लिए एक दिलचस्प संख्या है ।)
एडम प्रेस्कॉट

1
0x1e0c2443db 129052722139 के रूप में बस के रूप में कई आकर्षण है
स्टीवंसग

मेरा मतलब था कि अगर s=?a, s.succ!'बी' पर शुरू होता है।
Cary Swoveland

1
के साथ s=?aऔर N-1आपको 'b c ... पासवर्ड' मिलता है; साथ s =<बैकटिक> और Nआप प्राप्त 'एक ख ... पासवर्ड'। एसओ ने आउटपुट को शुरू करने का अनुरोध किया 'a'। बस इतना ही।
Cary Swoveland

2

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

यहां @Briguys 'कोड का 73 कैरेक्टर वर्जन है, जो केवल लेटर कॉम्बिनेशन प्रिंट करता है

for(i=s=0;1982613533018>i++;s=i.toString(36))/\d/.test(s)||console.log(s)


2

एपीएल (डायलॉग), ४६ ३४

{∇{'PASSWORD '≡⍞←⍵:→⋄⍵}¨⎕A∘.,⍵}' '

सैद्धांतिक रूप से, यह PASSWORD तक प्रिंट होगा, लेकिन मुझे ZZZZ के बाद एक कार्य स्थान पूर्ण त्रुटि का सामना करना पड़ा: 5-आयामी सरणी अभी भी बहुत बढ़िया है।

संपादित करें: जब से मैं एपीएल के साथ अंतिम विदाई हुई हूं, तब तक बहुत लंबा हो चुका हूं। कैसे मैं पहचान तुलना ( ) याद किया हिम्मत !!!

व्याख्या

{...}: एक फ़ंक्शन की घोषणा करता है जो ...
⎕A∘.,⍵: 26 अपरकेस अल्फा ( ⎕A) और तर्क ( ) के बीच बाहरी उत्पाद को संघनन पर छोड़ देता है (बाएं ऑपरेंड के तत्व के प्रत्येक संयोजन को सही ऑपरेंड के एक तत्व के साथ, कार्टेशियन उत्पाद की तरह )। )

{...}¨: और परिणामी सेट के प्रत्येक तत्व के लिए, उस फ़ंक्शन में प्लग करें जो ...
⍞←⍵: इसे प्रिंट करता है
'PASSWORD '≡और इसके साथ तुलना करता है 'PASSWORD '
: यदि तुलना सही है ( 1), तो प्रोग्राम को निरस्त करें।
: एल्स बस मुद्रित स्ट्रिंग वापस करें।

: अंत में, बाहरी फ़ंक्शन स्वयं को पुन: उत्पन्न करता है।

(तब आप 26 अल्फा और 26 अल्फा के बीच के कॉन्ट्रास्ट पर बाहरी उत्पाद ले रहे हैं, जो सभी 2-अक्षर संयोजन देता है, और फिर 2-अक्षर संयोजन और 26 अल्फा, आदि के बीच समतल पर बाहरी उत्पाद ... जब तक आप PASSWORD तक पहुँचें जो गर्भपात को ट्रिगर करता है)

' ': चिंगारी!! अंतरिक्ष चरित्र के साथ पुनरावर्ती कार्य को किक-स्टार्ट करें।


2

पायथन 2 - 153 152 151 149 बाइट्स

from itertools import*;R=range
for l in iter(chain(*[product(*((map(chr,R(65,91)),)*n))for n in R(1,9)]).next,tuple("passwore")):print ''.join(l)

एक बाइट को UPPERCASE का उपयोग करके और एक को रिक्त स्थान के बजाय newlines का उपयोग करके सहेजा गया।


1

गोल्फस्क्रिप्ट 41

'z'+1 == 'aa'तर्क की कमी के लिए गोल्फस्क्रिप्ट इसे नहीं जीत सकता।

168036262484,(;{27base{96+}%' '+.96?0<*}%
  • 168036262484, 0 से 168036262483 पर सरणी बनाएं
  • (; छोड़ना ०
  • {.. }%सरणी पर पुनरावृति
  • 27base तत्व को आधार से 27 सरणी में बदलें
  • {96+}% प्रत्येक अंक में 96 जोड़ें
  • ' '+ स्ट्रिंग में कनवर्ट करें और अंत में एक स्थान जोड़ें
  • .96?0<* यदि यह चार चरण में हो तो ट्रंकलेट को शून्य में बदल सकता है

1

रूबी में, 39 40।

a=&`
0x1e0c2443dc.times{$><<a.succ!+' '}

.. या 129052722140। (संपादित करें: पूर्व में मेरे पास था 129052722। मैंने कुछ अंकों को काटने और चिपकाने में खो दिया था। पिछला हेक्स ( 0x7B13032) गलत संख्या के लिए था।) a=?`एक चरित्र को बचाने के लिए @Doorknob से उधार लिया गया।


मैं ठीक करने के लिए करने की कोशिश की a=?` बात है, यह थोड़े अजीब लग रहा है और अंत में एक अतिरिक्त स्थान हो लेकिन कम से कम यह काम करता है: पी
दरवाज़े

तो संख्या 129052722 कहां से आती है? मेरी गणना से, यह आपको "क" से "क्वोकॉक" की सीमा देने वाला प्रतीत होगा ... थोड़ा छोटा।
ब्रेडबॉक्स

@Breadbox मैंने निम्न विधि के साथ उस संख्या की गणना की (स्वरूपण के लिए खेद है, लेकिन टिप्पणियों की सीमाएं हैं, एह?): ORD_BASE_ASCII = 'a'.ord-1; def nbr(word); len = word.size; word.split('').inject(0) {|t,c| offset = c.ord - ORD_BASE_ASCII; t + offset*(26**(len -= 1))}; end यह पुष्टि करना आसान है कि केवल कुछ अनुक्रमों को प्रिंट करके यह सही है।
Cary Swoveland

@breadbox आप सही थे। संपादित देखें। विधि मैंने टिप्पणी में दी है ठीक है।
Cary Swoveland

फ़ेंसपोस्ट की त्रुटियां। आपकी स्क्रिप्ट एक = 1..z = 26 का उपयोग करके गणना कर रही है। आपको सही गणना करने के लिए एक = 0..z = 25 की गणना करने की आवश्यकता है। -1 को पहली पंक्ति से हटाकर, आपको 120699639557 मिलेंगे, जो (शून्य प्रविष्टि के लिए एक जोड़कर) आपकी गणना से मेल खाते हैं।
ब्रेडबॉक्स

1

जावास्क्रिप्ट: 57 56 अक्षर (धन्यवाद C5H8NNO4)

यहां एक समाधान है जिसमें संभावित वर्णों के रूप में संख्याएं शामिल हैं ("0", "1", "2", .., "पासवोर 9", "पासवोरा", "पासवर्ब", "पासवर्च", "पासवर्ड")

for(i=-1;i++<1982613533017;console.log(i.toString(36)));

यहाँ परीक्षण के लिए एक बेला है (केवल अंतिम 100 पुनरावृत्तियों के साथ ताकि यह आपके ब्राउज़र को लॉक न करे)।


3
यह समाधान गलत है, यह विनिर्देशन का पालन नहीं करता है।
दरवाज़े

@Doorknob - हां, मैंने अपने उत्तर में इसका उल्लेख किया है। यह अभी भी सभी मामलों को मूल आवश्यकताओं से प्रिंट करता है, लेकिन सभी अल्फा-न्यूमेरिक मामलों को भी प्रिंट करता है।
Briguy37

इसके अलावा, प्रश्न को फिर से पढ़ने के बाद, अगर मैं अपने कोड में 9 को सेट करता हूं, तो यह अपने उदाहरण के आउटपुट को छोड़कर सभी प्रश्न की आवश्यकताओं को पूरा करेगा, जिसे उसने पहले ही एक अपवाद दे दिया है (और यह कोड को 56 अक्षरों में लाएगा। )।
ब्रिगयू 37

@ Briguy37 कल्पना print every **letter** combinationवैसे भी, एक चरित्र को {} -> ;
बचाती है

@ C5H8NNaO4: कौन सा अक्षर संयोजन मेरे समाधान को नहीं प्रिंट करता है? पारितोषिक के लिए धन्यवाद!
Briguy37

1

हास्केल, 101

main=putStrLn.concat.takeWhile(/="passwore ").tail.concat.iterate(\k->[x:y|x<-['a'..'z'],y<-k])$[" "]

0

बेगुंजे (72)

<_v#:/*2+67\+++88*99%*2+76:
^ >$>:#,_84*+,1+:0\:" Lr$W~"67++**1+***6+`#@_

प्रिंट्स 'a' से 'पासवर्ड' को रिक्त स्थान से अलग करता है, फिर बाहर निकलता है।

नीचे एक संस्करण है जो तुलना के लिए केवल पहले 9 * 9 = 81 शब्द ('ए' से 'डीडी') को प्रिंट करता है। 99*पुनरावृत्तियों प्रदर्शन करने के लिए की संख्या है।

<_v#:/*2+67\+++88*99%*2+76:
^ >$>:#,_84*+,1+:0\:99*`#@_

0

जावास्क्रिप्ट 80 76

for(i=s=0;s!="password";i++){s=i.toString(36).replace(/[0-9]/,'');console.log(s)}

बेला - "पा" पर रुक जाता है।

हालाँकि यह चीजों को दोहराता है।


आप i=s=0तीन और पात्रों को बचाने के लिए लूप को इनिशियलाइज़ कर सकते हैं ।
Ry-

@ मिनिटेक किया।
मैथ चिलर

1
क्यों रखते हैं var? iपहले एक वैश्विक था; अब sएक वैश्विक है। आप आमतौर पर कोड गोल्फ में दोनों ग्लोबल्स रख सकते हैं।
Ry-
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.