การแฮ็กสถานีออกมาเสีย


13

มีใครที่นี่ที่เป็นแฟนของ Bethesda หรือ? บางทีคุณอาจชอบ Obsidian Entertainment? ถ้าคุณเป็นอย่างใดอย่างหนึ่งของสิ่งเหล่านั้นกว่าภาพต่อไปนี้ควรจะค่อนข้างคุ้นเคยกับคุณ

สถานีออกมาเสีย

ฉันได้รับอิสรภาพในการเตรียมการท้าทาย ASCII-Art ที่ไม่เหมือนใครดังนั้นนี่เป็นเงื่อนงำแรกเกี่ยวกับสิ่งที่ฉันจะให้คุณทำ:

  _____________________________________________________
 /                                                     \ 
|     _____________________________________________     |
|    |                                             |    |
|    | 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                 |    |
|    |_____________________________________________|    |
|                                                       |
\_______________________________________________________/ 
       \_______________________________________/        

นี่คือเทมเพลต (ว่าง) พื้นฐานสำหรับการออกแบบเทอร์มินัล RobCo Fallout ใน ASCII บริสุทธิ์งานของคุณจะเป็น:

  • ก่อนอื่นให้สร้างเทมเพลตนี้
  • จากนั้นให้รายการของสตริงlและตัวเลข0 <= n <= 4เพื่อเติมให้เต็ม!

ส่วนที่มีการเปลี่ยนแปลงสองส่วนของเทอร์มินัลการแฮ็กออกมาเสีย

จำนวนครั้งที่พยายาม

  • จำนวนครั้งที่คุณเหลือ (ระบุโดยกล่องที่คั่นด้วยช่องว่าง
    • สำหรับวัตถุประสงค์ของการท้าทายนี้ที่คุณจะใช้แทนX

รหัสผ่าน

  • รหัสผ่านที่กำหนดโดยlถูกกระจายด้วยสัญลักษณ์ ASCII แบบสุ่มที่พิมพ์ได้
  • รหัสผ่านตามตัวอย่างที่คุณสามารถบอกได้สามารถห่อหลายแถว ( NAMES)
  • รหัสผ่านทั้งหมดในหน้าจอเทอร์มินัลควรมีโอกาสเท่ากันทุกที่
  • รหัสผ่านทั้งหมดสามารถถูกคาดหวังว่ามีความยาวเท่ากันแม้ว่าจะไม่สำคัญ
  • !"#$%&'()*+/:;<=>?@[\]^_{|}รายการของสัญลักษณ์ที่ใช้งานรหัสผ่านแยกต่างหากคือ:
  • รหัสผ่านทั้งหมดlจะต้องมีความยาวเท่ากัน
  • รหัสผ่านจะต้องมีศักยภาพในการตัดระหว่างทั้งสองคอลัมน์
    • สิ่งนี้ไปสำหรับแถว แต่เฉพาะกับที่อยู่ไบต์ที่สูงกว่า (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 สิ่งที่คุณโปรดปรานครั้งสุดท้าย?
Magic Octopus Urn

อะไรNAMESในสัญลักษณ์ที่ 2 หมายถึงอะไร? " รหัสผ่านทั้งหมดสามารถคาดหวังว่ามีความยาวเท่ากันแม้ว่าจะไม่สำคัญก็ตาม " หรือ " รหัสผ่านทั้งหมดใน l ต้องมีความยาวเท่ากัน "? อาจเป็นเพราะฉันตาบอด (อีกครั้ง!) แต่ฉันไม่เห็นRACESผลลัพธ์ทั้งสอง - เราควรใช้สิ่งนี้เพื่อหมายความว่าควรมีความเป็นไปได้ที่รหัสผ่านจะไม่ถูกใช้หรือไม่ คือMath.random(และรายการเทียบเท่า) พอสุ่มสำหรับวัตถุประสงค์ของการท้าทายนี้หรือไม่?
ขนดก

2
จะต้องมี spacers ที่ไม่ใช่ตัวอักษรและตัวเลขระหว่างสองรหัสผ่านหรือไม่ก็เป็นเรื่องดีหากพวกเขาสร้างขึ้นติดกัน (ไม่ทับซ้อนกัน)?
HyperNeutrino

5
รหัสผ่านจำเป็นต้องมีความเป็นไปได้ในการห่อขวาตั้งแต่ 0x18 ถึง 0x01 หรือไม่?
Jonathan Allan

คำตอบ:


6

JavaScript (ES8), 575 568 564 ไบต์

บันทึกแล้ว 3 ไบต์ขอบคุณ@Shaggy

รับอินพุตในรูปแบบ currying (r)(a)โดยที่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
@Shaggy นั่นประหยัด 3 ไบต์ ขอบคุณ!
Arnauld

Welcome to ROBCO Industries (TM) Termlink'!Password Required#}'!Attempts Remaining:oof ... ฉันควรจะถอดความเพื่อบันทึกไบต์ที่ไม่ใช่การเล่นกอล์ฟ
Magic Octopus 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

Perl 5 , 588 560 + 1 (-a) = 589 561 ไบต์

ลดขนาด 28 ไบต์ด้วยคำแนะนำที่ Dom ชี้ให้เห็น

$,=$/;$_=" 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ลูปเป็น postfix และการใช้&&แทนifควรบันทึกด้วย เมื่อคุณสร้าง$sหากคุณมี$s.=ในแผนที่แทนที่จะใช้joinลดลงอีกสองสาม หวังว่าจะช่วย!
Dom Hastings

4

Python 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 ไบต์ขอบคุณ Jonathan Allan
-9 ไบต์ขอบคุณตัวเอง (ในที่สุด!)
-72 ไบต์ขอบคุณ notjagan




ลบอีก 16 รายการ! (ต้องมีวิธีที่ดีกว่าในการทำสิ่งนี้มากกว่าการแสดงความคิดเห็นจำนวนมาก)
notjagan

อีก6 ไบต์ปิดโดยการคืนค่าการเปลี่ยนแปลงอื่นของฉันครึ่งหนึ่ง (ฉันควรหยุดแสดงความคิดเห็น)
notjagan

@notjagan ฉันไม่รังเกียจความคิดเห็น :) ขอบคุณ!
HyperNeutrino

2

JavaScript (ES8), 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


คุณสามารถบันทึกไบต์โดย currying 2 repeatพารามิเตอร์และการเคลื่อนย้ายตัวแปรของคุณให้เป็นคนแรก
Shaggy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.