फॉलआउट टर्मिनल हैकिंग


13

यहाँ कोई भी एक कठिन बेथेस्डा प्रशंसक है? हो सकता है कि आप ओब्सीडियन एंटरटेनमेंट को पसंद करते हैं? ठीक है, अगर आप निम्नलिखित चीजों की तुलना में उन चीजों में से एक हैं, तो आपको अपेक्षाकृत परिचित होना चाहिए।

फॉलआउट टर्मिनल।

मैंने ASCII- कला चुनौती के लिए एक अद्वितीय तैयारी करने की स्वतंत्रता ली है, इसलिए यहाँ पहला सुराग है कि मैं आपको क्या करने जा रहा हूं:

  _____________________________________________________
 /                                                     \ 
|     _____________________________________________     |
|    |                                             |    |
|    | Welcome to ROBCO Industries (TM) Termlink   |    |
|    | Password Required                           |    |
|    | Attempts Remaining:                         |    |
|    |                                             |    |
|    | 0x01                 | 0x0D                 |    |
|    | 0x02                 | 0x0E                 |    |
|    | 0x03                 | 0x0F                 |    |
|    | 0x04                 | 0x10                 |    |
|    | 0x05                 | 0x11                 |    |
|    | 0x06                 | 0x12                 |    |
|    | 0x07                 | 0x13                 |    |
|    | 0x08                 | 0x14                 |    |
|    | 0x09                 | 0x15                 |    |
|    | 0x0A                 | 0x16                 |    |
|    | 0x0B                 | 0x17                 |    |
|    | 0x0C                 | 0x18                 |    |
|    |_____________________________________________|    |
|                                                       |
\_______________________________________________________/ 
       \_______________________________________/        

यह शुद्ध ASCII में रोबो फॉलआउट टर्मिनल डिजाइन के लिए एक बहुत ही बुनियादी (रिक्त) टेम्पलेट है, आपका काम निम्न होगा:

  • सबसे पहले, इस टेम्पलेट को उत्पन्न करें।
  • फिर, तार की एक सूची lऔर 0 <= n <= 4इसे भरने के लिए एक नंबर दिया गया!

फॉलआउट हैकिंग टर्मिनल के दो गतिशील हिस्से हैं:

प्रयास की संख्या

  • आपके द्वारा बचे हुए प्रयासों की संख्या (स्थान सीमांकित बक्से द्वारा इंगित)।
    • इस चुनौती के उद्देश्य के लिए आप Xइसके बजाय उपयोग करेंगे

पासवर्ड

  • पासवर्ड, द्वारा परिभाषित किया गया है l, यादृच्छिक मुद्रण योग्य ASCII प्रतीकों के साथ मिलाया जाता है।
  • पासवर्ड, जैसा कि आप उदाहरण से बता सकते हैं, कई पंक्तियों ( NAMES) को लपेट सकता है ।
  • टर्मिनल स्क्रीन के सभी पासवर्डों को कहीं भी होने की समान संभावना होनी चाहिए।
  • सभी पासवर्ड समान लंबाई के होने की उम्मीद की जा सकती है, हालांकि यह कोई फर्क नहीं पड़ता।
  • अलग पासवर्ड के लिए प्रयोग करने योग्य प्रतीकों की सूची इस प्रकार हैं: !"#$%&'()*+/:;<=>?@[\]^_{|}
  • सभी पासवर्ड lसमान लंबाई के होने चाहिए।
  • PASSWORDS को बॉटम बॉटम को लिखने के लिए संभावित होना चाहिए।
    • यह पंक्तियों के लिए भी जाता है, लेकिन केवल एक उच्च बाइट पते (0x18-> 0x01 अमान्य है) के लिए।
  • दोनों तरफ पासवर्ड के लिए डिस्प्ले स्पेस 15 वाइड (दोनों तरफ स्पेस के साथ) है।
    • आप मान सकते हैं कि कोई शब्द इससे lअधिक लंबा नहीं होगा।
  • पासवर्ड केवल वर्णमाला हैं, जिसका अर्थ केवल अक्षर हैं।

उदाहरण:

l = ["SMART","ENACT","SWORE","PITYS","SMELL","CARTS","RACES"], n = 4

  _____________________________________________________
 /                                                     \ 
|     _____________________________________________     |
|    |                                             |    |
|    | Welcome to ROBCO Industries (TM) Termlink   |    |
|    | Password Required                           |    |
|    | Attempts Remaining: X X X X                 |    | # N = 4 drives these X's.
|    |                                             |    |
|    | 0x01 $?_/%$ENACT||"} | 0x0D TYS"_'$\#|^%&{} |    |
|    | 0x02 }:!*@{/_<"[]#>; | 0x0E #{!"^&\]'|}_[$% |    |
|    | 0x03 $%&'()*+/:;<\_' | 0x0F }|[(%SMELL/_$@( |    |
|    | 0x04 ^SMART(!@$*'^_@ | 0x10 []_#!"{|}'%$\&^ |    |
|    | 0x05 (*@#%}*(!%)^(_! | 0x11 %$}[!\#'^&_]{|" |    |
|    | 0x06 $%&'()*+/:;<_@) | 0x12 \SWORE|%'_!}\^" |    |
|    | 0x07 "/')=*%!&>#<:$+ | 0x13 ^{['&$|!_]%\"#} |    |
|    | 0x08 ;'*$&"(<%!#)RAC | 0x14 ']!|^#[$"_\}&{% |    |
|    | 0x09 ES:($&';%#+"<*/ | 0x15 @)($!CARTS*!@$_ |    |
|    | 0x0A ;'*$&"(<%!#)/+: | 0x16 !#%${"'}&[]^|_\ |    |
|    | 0x0B |'_!}$\%["#^{&] | 0x17 ]"_#$&}^%[{|\'! |    |
|    | 0x0C #{!"^&\]'|}_[PI | 0x18 _![&#{$%\^'|}"] |    | # Notice how PITYS wrapped.
|    |_____________________________________________|    |
|                                                       |
\_______________________________________________________/ 
       \_______________________________________/        

यदि n = 2एक ही उदाहरण पर:

  _____________________________________________________
 /                                                     \ 
|     _____________________________________________     |
|    |                                             |    |
|    | Welcome to ROBCO Industries (TM) Termlink   |    |
|    | Password Required                           |    |
|    | Attempts Remaining: X X                     |    | # N = 2 drives these X's.
|    |                                             |    |
|    | 0x01 $?_/%$ENACT||"} | 0x0D TYS"_'$\#|^%&{} |    |
|    | 0x02 }:!*@{/_<"[]#>; | 0x0E #{!"^&\]'|}_[$% |    |
|    | 0x03 $%&'()*+/:;<\_' | 0x0F }|[(%SMELL/_$@( |    |
|    | 0x04 ^SMART(!@$*'^_@ | 0x10 []_#!"{|}'%$\&^ |    |
|    | 0x05 (*@#%}*(!%)^(_! | 0x11 %$}[!\#'^&_]{|" |    |
|    | 0x06 $%&'()*+/:;<_@) | 0x12 \SWORE|%'_!}\^" |    |
|    | 0x07 "/')=*%!&>#<:$+ | 0x13 ^{['&$|!_]%\"#} |    |
|    | 0x08 ;'*$&"(<%!#)RAC | 0x14 ']!|^#[$"_\}&{% |    |
|    | 0x09 ES:($&';%#+"<*/ | 0x15 @)($!CARTS*!@$_ |    |
|    | 0x0A ;'*$&"(<%!#)/+: | 0x16 !#%${"'}&[]^|_\ |    |
|    | 0x0B |'_!}$\%["#^{&] | 0x17 ]"_#$&}^%[{|\'! |    |
|    | 0x0C #{!"^&\]'|}_[PI | 0x18 _![&#{$%\^'|}"] |    | # Notice how PITYS wrapped.
|    |_____________________________________________|    |
|                                                       |
\_______________________________________________________/ 
       \_______________________________________/        

इन उदाहरणों को मैन्युअल रूप से तैयार किया गया था, इसलिए वितरण यादृच्छिक रूप से खेदजनक नहीं है।


यह , सबसे कम बाइट-काउंट स्वीकृत विजेता होगा। मैं 3 दिनों के बाद इसका सामना करूंगा यदि कुल 250 आरईपी के लिए कोई जवाब नहीं दिया गया है।


शीघ्र! 3 दिन तक कोई जवाब नहीं! (मजाक)। यह मेरी नई पसंदीदा एससीआई-कला चुनौती है।
nmjcman101

2
@ nmjcman101 आपका अंतिम पसंदीदा क्या था?
मैजिक ऑक्टोपस Urn

क्या करता है NAMES2 बुलेट बिंदु में क्या मतलब है? " सभी पासवर्ड समान लंबाई के होने की उम्मीद की जा सकती है, हालांकि यह कोई फर्क नहीं पड़ता। " या " एल में सभी पासवर्ड समान लंबाई के होने चाहिए ?" यह सिर्फ मुझे अंधा हो सकता है (फिर से!), लेकिन मैं RACESया तो आउटपुट में नहीं देखता हूं - क्या हमें इसका मतलब यह लेना चाहिए कि पासवर्ड का उपयोग नहीं होने की संभावना होनी चाहिए? क्या Math.random(और समकक्ष) इस चुनौती के प्रयोजनों के लिए पर्याप्त रूप से यादृच्छिक है?
झबरा

2
क्या दो पासवर्डों के बीच गैर-अल्फ़ान्यूमेरिक स्पेसर होना चाहिए या यह ठीक है अगर वे एक दूसरे के बगल में उत्पन्न होते हैं (गैर-अतिव्यापी)?
हाइपरन्यूट्रिनो 22

5
क्या पासवर्ड को 0x18 से 0x01 तक दाईं ओर लपेटने की संभावना है?
जोनाथन एलन

जवाबों:


6

जावास्क्रिप्ट (ईएस 8), 575 568 564 बाइट्स

@ बस्ती के लिए 3 बाइट्स को सहेजा गया

वाक्य रचना currying में इनपुट लेता है (r)(a), जहां आर शेष प्रयासों की संख्या है और एक पासवर्ड के सरणी है।

r=>a=>[...C=`!"#[]^$%&'*+;<{}=`].reduce((s,c)=>(x=s.split(c)).join(x.pop()),`  "%%__
 /;;# \\ 
[ "} $Welcome to ROBCO Industries (TM) Termlink'!Password Required#}'!Attempts Remaining:${" X".repeat(r).padEnd(9)};[$^1=^D<2=^E<3=^F<4*0<5*1<6*2<7*3<8*4<9*5<A*6<B*7<C*8='+"[|
|;;#'|
\\"{_/ 
}'\\&%/= ]]]]] | }' {%%%<='+ ^#}}}+|
[|*=0x1'   "{{{%___$+;#}} !^0x0]ZZZ[|}#;}"&{![+ `).replace(/Z/g,(c,i)=>a.join``[(i%58>>5?y++:x++)%L],x=(R=n=>Math.random()*n|0)(L=360),y=x+180,[...Array(L-(n=a.sort(_=>R(3)-1).length)*a[0].length)].map(_=>a[R(n)]+=(C+`>?@()/:\\_|`)[R(27)]))

सिंटेक्स हाइलाइटर उद्देश्य पर अक्षम है। इसका कोई सुराग नहीं है कि इसके साथ क्या करना है।

डेमो


आप ES8 का उपयोग करके कुछ भी बचा सकते हैं ताकि इस तरह के प्रयासों को आबाद किया जा सके Attempts Remaining:${" X".repeat(r).padEnd(8)}:?
झबरा

1
@ शैगी जो 3 बाइट्स बचाती है। धन्यवाद!
अरनौलड

Welcome to ROBCO Industries (TM) Termlink'!Password Required#}'!Attempts Remaining:उफ ... मुझे गैर-गोल्फिंग लंग्स बाइट्स को बचाने के लिए विरोधाभास करना चाहिए।
मैजिक ऑक्टोपस Urn

4

SOGL V0.12 , 225 बाइट्स

R“EC"+w╗─║Z⁰2BΥø‘▓"▲╔⁸‘'²∙+"⅟Δλ≤LK⅟ΗΠ.JN║«⁸⅟‘▓+╬⁷"№D↓tι▲‛Q─Ρδν∙υ4Ρψ▲¦‽↑√Ε┐Ζ5↔‛⅟≤š▼¦⁾○ΔΡ%³‘ū91 tž85ž.ΖX Ο'⁹7žø]Xe@*c{leκψI1ž}_:@øŗ⁄c∑⁄≠}l{"T-)⅞↑°Χpjζ⅓īa0ε+Μ‛⁶ρ\=↔⅟¹‘ψ}¹K@Gŗ'¹nο²²Z+8«m«ο+I{@∑"0x0”Κ}¹6«n_'⁷1ž'⁵16«┐∙ž'⁸4 19∙ž89╬5

यह कोशिश करो!
स्टैक पर सरणी इनपुट और एक इनपुट इनपुट संख्या की अपेक्षा करता है, इसलिए →"आसानी से उपयोग के लिए ऑनलाइन प्रोग्राम में जोड़ा जाता है।


4

पर्ल 5 , 588 560 + 1 (-ए) = 589 561 बाइट्स

डोम द्वारा बताए गए सुझावों के साथ 28 बाइट्स काटें

$,=$/;$_=" X"x pop@F;say"  "."_"x53," /".$"x53 ."\\",$q="|     ".'_'x45 ."     |",$e=($b="|    |").$"x45 .$b,"$b Welcome to ROBCO Industries (TM) Termlink   $b
$b Password Required".$"x27 .$b,"$b Attempts Remaining:$_".$"x(25-length).$b,$e;map{$s.=(grep/[^\w,.`-]|_/,map{chr}33..125)[rand 27]}1..360;($t=substr$s,$r=rand 360-($l=length),$l,$_)=~/[a-z]/i&&(substr$s,$r,$l,$t)&&push@F,$_ while$_=pop@F;@o=$s=~/.{15}/g;printf"$b 0x0%X %s | 0x%02X %s $b\n",$_,$o[$_-1],$_+12,$o[$_+11]for 1..12;say$b.'_'x45 .$b,$q=~y/_/ /r,$q=" \\"."_"x54 ."/",$"x6 .$q=~s/_{15}//r

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

पहले:

$,=$/;$_=" X"x pop@F;say"  "."_"x53," /".($"x53)."\\",$q="|     ".('_'x45)."     |",$e=($b="|    |").($"x45).$b,"$b Welcome to ROBCO Industries (TM) Termlink   $b
$b Password Required".($"x27).$b,"$b Attempts Remaining:$_".($"x(25-length)).$b,$e;$s=join'',map{(split//,'!"#$%&\'()*+/:;<=>?@[]^_{|}\\')[int rand 27]}1..360;while($_=pop@F){if(($t=substr$s,$r=rand 360-($l=length),$l,$_)=~/[a-z]/i){substr$s,$r,$l,$t;push@F,$_}}@o=$s=~/.{15}/g;printf"$b 0x0%X %s | 0x%02X %s $b\n",$_,$o[$_-1],$_+12,$o[$_+11]for 1..12;say$b.('_'x45).$b,$q=~y/_/ /r,$q=" \\".("_"x54)."/",($"x6).$q=~s/_{15}//r

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

इनपुट एक लाइन पर है, स्पेस अलग: पहले स्ट्रिंग्स, फिर नंबर

कैसे?

$,=$/;          # delimiter between fields is newline
$_=" X"x pop@F; # set number of attempts left
say             # output the header
"  "."_"x53,
" /".($"x53)."\\",
$q="|     ".('_'x45)."     |",
$e=($b="|    |").($"x45).$b,
"$b Welcome to ROBCO Industries (TM) Termlink   $b
$b Password Required".($"x27).$b,
"$b Attempts Remaining:$_".($"x(25-length)).$b,
$e;
$s=join'',map{(split//,'!"#$%&\'()*+/:;<=>?@[]^_{|}\\')[int rand 27]}1..360; # create random string long enough for entire screen
while($_=pop@F){  # for each given string
if(($t=substr$s,$r=rand 360-($l=length),$l,$_) # attempt to insert it
=~/[a-z]/i)                                    # but check if it overlaps another string
{substr$s,$r,$l,$t;                            # if it does, take it out
push@F,$_}}                                    # and put it back in line
@o=$s=~/.{15}/g;                               # split "memory dump" into chunks
printf"$b 0x0%X %s | 0x%02X %s $b\n",$_,$o[$_-1],$_+12,$o[$_+11]for 1..12; #output the grid
say                                            # output the footer
$b.('_'x45).$b,$q=~y/_/ /r,
$q=" \\".("_"x54)."/",
($"x6).$q=~s/_{15}//r

एक जटिल समस्या का अच्छा जवाब! आपको पुनरावृत्ति ऑपरेटर के चारों ओर कोष्ठक को हटाकर लगभग 30 बाइट्स को बचाने में सक्षम होना चाहिए, आप एक स्थान जोड़ सकते हैं ताकि .दशमलव बिंदु के रूप में उपयोग न किया जाए । इसके अलावा विराम चिह्न प्राप्त करने के लिए आप कुछ का उपयोग कर सकते हैं (grep/[^\w,.`-]|_/,map{chr}33..125)और आपको intकिसी सरणी इंडेक्स पर कॉल करने की आवश्यकता नहीं है ! whileलूप को पोस्टफ़िक्स में बदलना और &&इसके बजाय उपयोग ifकरना चाहिए ताकि कुछ बचत हो सके। जब आप निर्माण कर रहे हों $s, अगर आपके पास कुछ और बूंदों $s.=का उपयोग करने के बजाय नक्शे के अंदर है join। उम्मीद है की वो मदद करदे!
डोम हेस्टिंग्स

4

पायथन 3 , 585 बाइट्स

from random import*
def f(l,n,r=range):
	u,c='_ ';a=[choice('!"#$%&\'()*+/:;<=>?@[\\]^_{|}')for i in c*360];L=len(l[0]);i={*r(360-len(l[0]))};p=lambda x:'0x%02X'%x+c+''.join(a[15*x:][:15])
	for q in l:s=choice([*i]);a[s:s+L]=q;i-={*r(s+~L,s+-~-~L)}
	return'''  %s
 /%s\\
|# %s #|
?%s?
? Welcome to ROBCO Industries (TM) Termlink   ?
? Password Required   ######?
? Attempts Remaining:%-25s?
?%s?
%%s?%s?
|%s|
\%s/
#   \%s/'''.replace('?','|#|').replace('#',c*4)%(u*53,c*53,u*45,c*45,' X'*n,c*45,u*45,c*55,u*55,u*39)%('|    | %s | %s |    |\n'*12)%sum([(p(x),p(x+12))for x in r(12)],())

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

-70 बाइट्स की बदौलत जोनाथन एलन
-9 बाइट्स के लिए खुद को धन्यवाद (आखिरकार!)
-72 बाइट्स




16 और निकाले गए! (टिप्पणियों के एक समूह की तुलना में ऐसा करने के लिए बेहतर तरीका है)
नॉटजागन

एक और 6 बाइट्स मेरे अन्य परिवर्तनों में से एक को आधे से बदलकर (मुझे वास्तव में टिप्पणी करना बंद कर देना चाहिए)।
5

@notjagan मुझे कोई टिप्पणी नहीं मिली :) धन्यवाद!
हाइपरएन्यूट्रीनो

2

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

(w,n,r=i=>Math.random()*i|0,s=b=>{for(i=b[k];i;i--)[b[i-1],b[j]]=[b[j=r(i)],b[i-1]]},a=Array(360-w[k="length"]*--w[0][k]),m=[...a].map((j,i)=>~(j=d.slice(0,w[k]).indexOf(i))?w[j]:`!"#$%&'()*+/:;<=>?@[\\]^_{|}`[r(27)],s(w),s(d=[...a.keys()])).join``.match(/.{15}/g).map((v,i)=>"0x"+(i+1).toString(16).padStart(2,0)+" "+v))=>`  _53
 / 53\\
| 5_45 5|
${["","Welcome to ROBCO Industries (TM) Termlink","Password Required","Attempts Remaining:"+" X".repeat(n),"",...m.slice(0,12).map((x,i)=>x+" | "+m[i+12])].map(x=>"| 4| "+x.padEnd(43)+" | 4|").join`
`}
| 4|_45| 4|
| 55|
\\_55/
 7\\_39/`.replace(/[_ ]([1-9]+)/g,(m,n)=>m[0].repeat(n))

हेक्स लेबल लोअरकेस में हैं; यदि अपरकेस की आवश्यकता होती है, तो इसके लिए एक अतिरिक्त 14 बाइट होगी .toUpperCase()

टेस्ट स्निपेट

बेहतर CodePen पर देखा गया


आप 2 मापदंडों को कम करके और पहले में अपने चर को स्थानांतरित करके एक बाइट बचा सकते हैं repeat
झबरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.