Hack thiết bị đầu cuối Fallout


13

Bất cứ ai ở đây một fan hâm mộ Bethesda chết cứng? Có lẽ bạn thích Obsidian Entertainment? Chà, nếu bạn là một trong những điều đó hơn hình ảnh sau đây thì tương đối quen thuộc với bạn.

Các thiết bị đầu cuối bụi.

Tôi đã tự do chuẩn bị một thử thách Nghệ thuật ASCII khá độc đáo, vì vậy đây là manh mối đầu tiên về những gì tôi sẽ làm cho bạn:

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

Đây là một mẫu rất cơ bản (trống) cho thiết kế đầu cuối RobCo Fallout trong ASCII thuần túy, công việc của bạn sẽ là:

  • Đầu tiên, tạo mẫu này.
  • Sau đó, đưa ra một danh sách các chuỗi lvà một số 0 <= n <= 4để điền vào nó!

Hai phần động của thiết bị đầu cuối hack là:

Số lần thử

  • Số lần thử bạn còn lại (được biểu thị bằng các hộp được phân cách bằng dấu cách.
    • Với mục đích của thử thách này, bạn sẽ sử dụng Xthay vì .

Mật khẩu

  • Các mật khẩu, được xác định bởi l, được xen kẽ với các ký hiệu ASCII có thể in ngẫu nhiên.
  • Các mật khẩu, như bạn có thể nói bằng ví dụ, có thể bao bọc nhiều hàng ( NAMES).
  • Tất cả mật khẩu trong màn hình thiết bị đầu cuối sẽ có cơ hội như nhau ở bất cứ đâu.
  • Tất cả mật khẩu có thể được dự kiến ​​có độ dài bằng nhau, mặc dù điều này không thành vấn đề.
  • Danh sách các ký hiệu có thể sử dụng để tách mật khẩu là : !"#$%&'()*+/:;<=>?@[\]^_{|}.
  • Tất cả mật khẩu trong lphải có độ dài bằng nhau.
  • MẬT KHẨU PHẢI CÓ TIỀM NĂNG ĐỂ VIẾT GIỮA CẢ HAI MÀU SẮC.
    • Điều này cũng áp dụng cho các hàng, nhưng chỉ đến một địa chỉ byte cao hơn (0x18-> 0x01 không hợp lệ).
  • Không gian hiển thị mật khẩu ở hai bên rộng 15 (với một không gian ở hai bên).
    • Bạn có thể cho rằng không có từ nào lsẽ dài hơn thế này.
  • Mật khẩu chỉ theo thứ tự chữ cái, chỉ có nghĩa là chữ cái.

Thí dụ:

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ếu n = 2trên cùng một ví dụ:

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

Các ví dụ này được tạo thủ công, vì vậy phân phối không ngẫu nhiên, xin lỗi.


Đây là , số byte thấp nhất sẽ là người chiến thắng được chấp nhận. Tôi sẽ trả lại tiền này sau 3 ngày nếu không có câu trả lời nào được gửi cho tổng số 250 REP.


Nhanh chóng! Không ai trả lời trong 3 ngày! (đùa). Đây là thử thách nghệ thuật ascii yêu thích mới của tôi.
nmjcman101

2
@ nmjcman101 yêu thích cuối cùng của bạn là gì?
Bạch tuộc ma thuật Urn

Điểm NAMESđạn thứ 2 có nghĩa là gì? " Tất cả mật khẩu có thể được dự kiến ​​có độ dài bằng nhau, mặc dù điều này không thành vấn đề. " Hoặc " Tất cả mật khẩu trong l phải có độ dài bằng nhau. "? Có thể tôi bị mù (một lần nữa!) Nhưng tôi không thấy RACEStrong cả hai đầu ra - chúng ta có nên lấy điều này để có nghĩa là có khả năng mật khẩu không được sử dụng không? Là Math.random(và tương đương) đủ ngẫu nhiên cho các mục đích của thách thức này?
Xù xì

2
Có phải có các khoảng cách không chữ và số giữa hai mật khẩu hay không nếu chúng tạo ngay cạnh nhau (không chồng chéo)?
HyperNeutrino

5
Các mật khẩu có cần phải có khả năng bao bọc ngay từ 0x18 đến 0x01 không?
Jonathan Allan

Câu trả lời:


6

JavaScript (ES8), 575 568 564 byte

Đã lưu 3 byte nhờ @Shaggy

Lấy đầu vào theo cú pháp currying (r)(a), trong đó r là số lần thử còn lại và a là mảng mật khẩu.

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)]))

Cú pháp highlighter bị vô hiệu hóa trên mục đích. Nó không biết phải làm gì với điều đó.

Bản giới thiệu


Bạn có thể lưu bất cứ điều gì bằng ES8 để đưa ra các nỗ lực như vậy Attempts Remaining:${" X".repeat(r).padEnd(8)}không?
Xù xì

1
@Shaggy Điều đó tiết kiệm 3 byte. Cảm ơn!
Arnauld

Welcome to ROBCO Industries (TM) Termlink'!Password Required#}'!Attempts Remaining:oof ... Tôi nên diễn giải để lưu các byte không chơi gôn.
Bạch tuộc ma thuật Urn

4

SOGL V0.12 , 225 byte

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

Hãy thử nó ở đây!
Yêu cầu đầu vào mảng trên ngăn xếp và số đầu vào một đầu vào, do đó, →"được thêm vào trong chương trình trực tuyến để dễ sử dụng.


4

Perl 5 , 588 560 + 1 (-a) = 589 561 byte

Cắt 28 byte với các gợi ý mà Dom chỉ ra

$,=$/;$_=" 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

Hãy thử trực tuyến!

Trước đây:

$,=$/;$_=" 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

Hãy thử trực tuyến!

Đầu vào nằm trên một dòng, khoảng cách được phân tách: đầu tiên là chuỗi, sau đó là số

Làm sao?

$,=$/;          # 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

Câu trả lời tốt đẹp cho một vấn đề phức tạp! Bạn sẽ có thể lưu gần 30 byte bằng cách xóa dấu ngoặc quanh toán tử lặp lại, bạn có thể thêm khoảng trắng để .không được sử dụng làm dấu thập phân. Ngoài ra, để có được dấu câu, bạn có thể sử dụng một cái gì đó như (grep/[^\w,.`-]|_/,map{chr}33..125)và bạn không cần phải gọi intvào một chỉ mục mảng! Thay đổi whilevòng lặp thành postfix và sử dụng &&thay vì ifnên tiết kiệm một vài quá. Khi bạn đang xây dựng $s, nếu bạn có $s.=bên trong bản đồ thay vì sử dụng joinmột vài giọt nữa. Mong rằng sẽ giúp!
Dom Hastings

4

Python 3 , 585 byte

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)],())

Hãy thử trực tuyến!

-70 byte nhờ Jonathan Allan
-9 byte nhờ vào bản thân tôi (cuối cùng!)
-72 byte nhờ notjagan




Thêm 16 bỏ! (phải có cách tốt hơn để làm điều này hơn là một loạt các bình luận)
notjagan

Thêm 6 byte nữa bằng cách hoàn nguyên một nửa các thay đổi khác của tôi (tôi thực sự nên dừng bình luận).
notjagan

@notjagan Tôi không ngại bình luận :) Cảm ơn!
HyperNeutrino

2

JavaScript (ES8), 639 byte

(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))

Các nhãn hex được viết thường; nếu chữ hoa được yêu cầu, đó sẽ là thêm 14 byte cho.toUpperCase() .

Kiểm tra đoạn trích

Xem tốt hơn trên CodePen .


Bạn có thể lưu một byte bằng cách cuộn 2 tham số và di chuyển các biến của bạn vào đầu tiên repeat.
Xù xì
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.