Czy ktoś jest zagorzałym fanem Bethesdy? Może wolisz Obsidian Entertainment? Cóż, jeśli jesteś jedną z tych rzeczy, poniższe zdjęcie powinno być ci względnie znajome.
Pozwoliłem sobie przygotować dość wyjątkowe wyzwanie ASCII-Art, więc oto pierwsza wskazówka, co mam zrobić:
_____________________________________________________
/ \
| _____________________________________________ |
| | | |
| | 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 | |
| |_____________________________________________| |
| |
\_______________________________________________________/
\_______________________________________/
Jest to bardzo prosty (pusty) szablon dla projektu terminalu RobCo Fallout w czystym ASCII, Twoim zadaniem będzie:
- Najpierw wygeneruj ten szablon.
- Następnie podano listę ciągów znaków
l
i liczbę0 <= n <= 4
do jej wypełnienia!
Dwie dynamiczne części Fallout Hacking Terminal to:
Liczba prób
- Liczba pozostałych prób (wskazanych przez pola rozdzielane spacjami).
- Do celów tego wyzwania będziesz używać
X
zamiast■
.
- Do celów tego wyzwania będziesz używać
Hasła
- Hasła zdefiniowane przez
l
są przeplatane losowymi symbolami drukowalnymi ASCII. - Hasła, jak widać na przykładzie, mogą owijać wiele wierszy (
NAMES
). - Wszystkie hasła na ekranie terminala powinny mieć równe szanse na znalezienie się w dowolnym miejscu.
- Wszystkie hasła mogą mieć jednakową długość, ale to nie ma znaczenia.
- Lista symboli użytecznych do oddzielnych haseł to:
!"#$%&'()*+/:;<=>?@[\]^_{|}
. - Wszystkie hasła
l
muszą mieć jednakową długość. - HASŁA MUSZĄ MIEĆ POTENCJAŁ, ABY OWIJAĆ SIĘ MIĘDZY KOLUMNAMI.
- Dotyczy to również wierszy, ale tylko do adresu wyższego bajtu (0x18-> 0x01 jest nieprawidłowy).
- Obszar wyświetlania haseł po obu stronach ma 15 szerokości (ze spacją po obu stronach).
- Możesz założyć, że żadne słowa nie
l
będą dłuższe niż to.
- Możesz założyć, że żadne słowa nie
- Hasła są wyłącznie alfabetyczne, co oznacza tylko litery.
Przykład:
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.
| |_____________________________________________| |
| |
\_______________________________________________________/
\_______________________________________/
Jeśli n = 2
na tym samym przykładzie:
_____________________________________________________
/ \
| _____________________________________________ |
| | | |
| | 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.
| |_____________________________________________| |
| |
\_______________________________________________________/
\_______________________________________/
Te przykłady zostały spreparowane ręcznie, więc przepraszam, dystrybucja nie jest losowa.
To jest golf golfowy , najniższa liczba bajtów zostanie zaakceptowanym zwycięzcą. Odbiorę to po 3 dniach, jeśli nie zostaną przesłane żadne odpowiedzi w sumie 250 REP.
źródło
NAMES
drugi punkt? „ Można oczekiwać, że wszystkie hasła będą miały taką samą długość, ale to nie ma znaczenia. ” Lub „ Wszystkie hasła w l muszą mieć taką samą długość. ”? Może po prostu jestem ślepy (znowu!), Ale nie widzęRACES
w żadnym wyjściu - czy powinniśmy to rozumieć, że powinna istnieć możliwość, że hasło nie zostanie użyte? CzyMath.random
(i odpowiedniki) są wystarczająco losowe do celów tego wyzwania?Odpowiedzi:
JavaScript (ES8),
575568564 bajtówZaoszczędź 3 bajty dzięki @Shaggy
Pobiera dane wejściowe w składni curry
(r)(a)
, gdzie r to liczba pozostałych prób, a a to tablica haseł.Zakreślacz składni celowo wyłączony. Nie ma pojęcia, co z tym zrobić.
Próbny
Pokaż fragment kodu
źródło
Attempts Remaining:${" X".repeat(r).padEnd(8)}
?Welcome to ROBCO Industries (TM) Termlink'!Password Required#}'!Attempts Remaining:
oof ... Powinienem sparafrazować, żeby ocalić bajty z golfem.SOGL V0.12 , 225 bajtów
Wypróbuj tutaj!
Oczekuje, że dane wejściowe z tablicy zostaną wprowadzone na stosie, a liczba z danych wejściowych, dlatego
→"
jest dodawana do programu online w celu ułatwienia użytkowania.źródło
Perl 5 ,
588560 + 1 (-a) =589561 bajtówWytnij 28 bajtów sugestiami wskazanymi przez Dom
Wypróbuj online!
Poprzednio:
Wypróbuj online!
Dane wejściowe są w jednym wierszu, oddzielone spacjami: najpierw ciągi, a następnie liczba
W jaki sposób?
źródło
.
nie była używana jako przecinek dziesiętny. Również, aby uzyskać interpunkcję, możesz użyć czegoś takiego(grep/[^\w,.`-]|_/,map{chr}33..125)
i nie musisz wywoływaćint
indeksu tablicy! Zmianawhile
pętli na postfiks i używanie&&
zamiast zamiastif
powinno również zaoszczędzić kilka. Kiedy budujesz$s
, jeśli masz$s.=
wewnątrz mapy, zamiast użyćjoin
kilku kropli. Mam nadzieję, że to pomaga!Python 3 , 585 bajtów
Wypróbuj online!
-70 bajtów dzięki Jonathanowi Allanowi
-9 bajtów dzięki sobie (wreszcie!)
-72 bajtów dzięki notjagan
źródło
JavaScript (ES8), 639 bajtów
Etykiety szesnastkowe są pisane małymi literami; jeśli wymagane byłyby wielkie litery, byłoby to dodatkowe 14 bajtów dla
.toUpperCase()
.Test Snippet
Lepiej oglądany na CodePen .
źródło
repeat
.