Zostałeś zatrudniony za swoją wiedzę techniczną jako pomocnik Tajnego Agenta, aby zapewnić, że dobry facet może wykonać swoją pracę i uratować świat.
To twoja ostatnia misja przed przejściem na emeryturę z wysoką wypłatą i wdzięcznością całego świata. Ale zanim będziesz musiał rozbroić BOMB Big Overly Massive Złego Geniusza (wydaje się, że zły geniusz jest mądrym dupkiem, który lubi rekurencyjne akronimy). W każdym razie ty i twój kumpel jesteście w samym centrum tajnej bazy Geniusza Zła, gotowi rozbroić BOMBę, która może zniszczyć kontynent. W poprzedniej misji udało ci się zdobyć kod rozbrojenia, który ku twojemu zdziwieniu to po prostu „PASSWORD_01”. Podłączasz klawiaturę do BOMB, ale kiedy jesteś gotowy do drogi, poplecznicy Złego Geniusza wchodzą z salwą pocisków. Niestety jeden z tych pocisków wpływa na klawiaturę. „Skończ pracę, a ja odwrócę uwagę tych cholernych głów!” mówi twój kumpel, a potem zaczyna strzelać.
OKULAR
- Napisz program, który wypisuje w dowolny sposób ciąg znaków
PASSWORD_01
(wielkie litery). Ponieważ kula trafiła w klawiaturę, możesz używać tylko tych klawiszy:
1 2 3 4 5
Q W E R T
A S D F G
< > Z X C
Ctrl Shift Tab Space
Za pomocą Shiftklawisza klawiatura umożliwia używanie następujących znaków:
! " · $ %
Nie masz innego sprzętu niż klawiatura i ekran (na przykład mysz), ani pliku z hasłem zapisanym na komputerze.
Nie masz połączenia z Internetem.
Możesz założyć, że edytor powłoki / edytora kodu źródłowego został otwarty przed pojawieniem się pocisków. Niestety, nie napisałeś w nim nic przed uderzeniem klawiatury.
Nie masz wirtualnej klawiatury. W rzeczywistości BOMB ma detektor TOO_FUNNY, który spowoduje eksplozję, jeśli spróbujesz użyć standardowych luk .
Ponieważ twój kumpel czeka, aż niedługo skończysz ucieczkę z Tajnej Bazy, będziesz musiał napisać jak najmniejszy kod (więc jest to ograniczony kod źródłowy i golfowy kod !).
Powodzenia, bo zaczęło się odliczanie!
TRYB POMOCY:KEY Cudownie przetrwał także (tylko jeden klawisz, którego potrzebujesz z klawiatury, ale nie Shift + klawisz lub jakakolwiek inna kombinacja). Np: Można użyć =albo 0albo /... Ten dodatkowy klucz nie może być każdy z literami PASSWORD_01
(więc nie można dodać Plub O). Nazwij ten klucz w swojej odpowiedzi. Kara za używanie tego klucza wynosi 10 znaków, niezależnie od tego, ile razy używasz klucza.
źródło
stewardesses
?Odpowiedzi:
CJam - 24 + 10 ( () = 34
Bez dodatkowego klucza - 39
Wypróbuj na http://cjam.aditsu.net/
źródło
bash, vim i dc (343)
Siedzę po zachęcie, która została skonfigurowana przez Geniusza Zła, i oczywiście ma to miejsce
VISUAL=vim
w domyślnym środowisku. Użycie domyślnego wiązania bash dlaedit-and-execute-command
(C-x C-e
) bash wywołuje$VISUAL
i wykona zawartość bufora przy exit (ZZ
). Piszę w następującej kolejności (uwaga: kbd-mode to polecenia wydawane w trybie normalnym i sekwencje kontrolne):akot <<< 45 C-c4C-aaa
Teraz zawiera bufor vim
cat<<<49a
. Kontynuacja ...45 C-c3C-aaa
55 C-c13C-aaa
Teraz zawiera bufor vim
cat<<<49a48a95a68a
. Kontynuacja ...51 C-c31C-aaa
55 C-c25C-aaa> s
Teraz zawiera bufor vim
cat<<<49a48a95a68a82a79a87a83a83a65a80a>s
Wyjdź z trybu wstawiania, zapisz i wyjdź
C-cZZ
s
Plik zawiera terazdc
skrypt, który generuje żądany ciąg na stosie, teraz musimy dodać polecenia drukowania.C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
Powtórz powyższe polecenie 9 razy.
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eakot <<< f >> s
Uruchom skrypt dc:
C-xC-eadc sC-cZZ
Wynik:
Zawartość
s
pliku:źródło
vim
scenariusza z powoduCtrl
postaci; warto pomyśleć o połączeniu godc
! Również doskonałe rozwiązanie :)<Leader>k
takimi ograniczeniamimap <Leader>k i<kbd></kbd>^[F>a
, więc nie było tak źle, jak wygląda :-).Rubin, 57 + 10 (
*
) = 67Ta odpowiedź używa
*
i%
do budowania wartości ASCII brakujących znaków (i 0 jako Fixnum) i wypycha je do$*
(ARGV
). Tablica ta jest następnie używana w połączeniu z łańcuchem formatu w celu wygenerowania poprawnego hasła, które jest drukowane za pomocą$><<
($>
jest standardowe).Ruby, 62 + 10 (
.
) = 72, bez podziału liniiZ grubsza ta sama zasada, co w powyższej wersji, z tą różnicą, że tutaj tablica jest zbudowana z pustej literału (
%w%%
)..
Konieczne jest trochę manipulowania , aby uzyskać pożądany priorytet operatora.źródło
Biała spacja (148 + 10 = 158)
Enter należy użyć klucza tutaj.
Wyjaśnienie mojej notacji:
S
,+
,0
Są przestrzenie.T
,1
są zakładkami.L
to nowa linia.//
zaczyna komentować.Każda linia to polecenie w języku białych znaków.
Próbny
źródło
L
oznacza nowy znak wiersza. Sprawdź wersję demonstracyjną, aby uzyskać prawdziwy kod. To, co opublikowałem, jest wersją czytelną.Python (
2200395 + 10)Potrzebowałem
+
postaci (kosztuje +10), którą można uzyskać z klawiatury numerycznej (lub w niektórych układach klawiszy).Tak, BOMB prawdopodobnie wybuchł, kiedy to pisałem.
Podstawowym podejściem jest konstruowanie coraz większych zestawów znaków przy użyciu
exec
i"%c"%(number)
. Cztery sąexec
zagnieżdżone w sobie. Stopniowo mój zestaw cyfr rośnie odaby w końcowej iteracji można było wyrazić dowolny znak (tak, aby najbardziej wewnętrzna wersja mogła w ogóle uruchomić dowolny program).
Około 50% programu to tylko znaki cudzysłowu (
"%c"%34
jest to podwójny cudzysłów), ponieważ zagnieżdżona naturaexec
instrukcji wymaga agresywnego „ucieczki” znaków cudzysłowu.źródło
exec '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c'%(112,114,51+54,55+55,1+115,32,4+35,25+55,11+54,31+52,31+52,32+55,24+55,31+51,13+55,41+54,3+45,4+45,4+35)
Bezsenność
39353129Ten język pojawia się, kiedy rozglądałem się za językiem, który koduje instrukcje za pomocą pojedynczego znaku ASCII. Język faktycznie działa na dziesiętnym kodzie ASCII znaku, więc nadal jest dość elastyczny, gdy połowa klawiatury jest zniszczona.
Upuść go dalej do 29 znaków, co jest możliwe po zmniejszeniu zużycia pamięci i zwiększeniu przestrzeni wyszukiwania:
Postanowiłem uruchomić mój ulepszony program na pełnym zestawie dozwolonych znaków i zredukowałem rozwiązanie do 31 znaków:
Użyłem programu do wyszukiwania tego rozwiązania. Jest to jedno z wielu rozwiązań zwróconych przez mój program, wszystkie o tym samym rozmiarze.
Stara wersja wykonana ręcznie. Pamiętam, że zostałem do rana, żeby to zrobić.
Oto interpreter Insomnia do testowania.
źródło
Vim + PHP na niektórych menedżerach okien
65 klawiszy w 44 uderzeniach, z 10 punktową karą za użycie =.
Załamanie:
aEACE<Alt+Tab>
: Wejdź w tryb dołączania i wstaw „EACE”. Wyjście.z=5<Alt+Tab>
: Wykonaj korektę pisowni. Wybierz 5, „POKÓJ”. Wyjście. ( Escwydaje się działać jak Entertutaj!)$xxxxaASSWRD<Alt+Tab>
: Idź do końca linii. Usuń 4 znaki i dodajASSWRD
, co spowodujePASSWRD
. Powrót do trybu normalnego. (Nie,4x
nie zadziała.)z=1<Alt+Tab>
:PASSWORD
Jest prawdopodobnie będzie pierwsza korekta do tego. Wybierz to.$a$aA<Alt+Tab>
: Przejdź do końca linii i dodaj$aA
. Powrót do trybu normalnego.==
: Ładnie sformatuj ten wiersz PHP, zmieniając camelCase$aA
na$a_a
. Spowoduje to również przesunięcie kursora z powrotem na początek linii.wxx
: Idź naprzód słowo; kursor jest teraz wcześniej$
. Usuń dwa znaki - the$
i thea
- to makePASSWORD_a
.$r1
: Przejdź na koniec wiersza i zamień bieżący znak (tj.a
) Na1
, w wynikuPASSWORD_1
.^X
: Zmniejsz liczbę całkowitą pod kursorem, w wyniku czegoPASSWORD_0
.a1
: Na koniec dołącz1
doPASSWORD_01
!źródło
==
polecenia, po prostu przełącza tryb dużego wcięcia w mojej konfiguracji vi (debian 7, v7.3.547)Python 2, 75889 bajtów
Bez dodatkowej postaci!
Niestety kod jest bardzo długi. Zamiast tego oto kod do wygenerowania programu:
Wypróbuj online
(aby uruchomić kod, zmień zewnętrzną
print
naexec
. Lub, wygeneruj program, a następnie wklej i uruchom. Lub skopiuj z pastebin, do którego link znajduje się poniżej.)Wyjaśnienie:
Celem jest wykonanie:
Aby uniknąć używania
()+
znaków, musimy użyć wielu operacji formatu łańcucha połączonych razem. Oznacza to, że każdy dodany krok skutecznie podwaja liczbę%
znaków potrzebnych do każdego poprzedniego kroku:To jednak nie wystarczy, ponieważ niektórych wymaganych liczb nie można utworzyć i nie możemy tego zrobić
print
. Dlatego dodajemy poziom abstrakcjiexec
dlaprint
ing i poziom dla punktów kodu ASCII, których nie możemy utworzyć do sformatowania. Poniższa odpowiedź jest w zasadzie moją odpowiedzią, ale z każdym ciągiem%
zredukowanym do jednego (zauważ, że%s%s%s%s%s
nie jest to dokładna reprezentacja, ponieważ nie uwzględnia%
wymaganego literału przed każdym):Pierwszy krok: najbardziej na zewnątrz
exec
:1>>1
:0
, używane0
wPASSWORD_01
2531>>5
:79
, używane dla wewnętrznego exec do utworzeniaO
321>>2
:80
, używane dla wewnętrznego exec do utworzeniaP
1521>>4
:95
, używane dla wewnętrznego exec do utworzenia_
211>>1
:105
, używane dla wewnętrznego exec do utworzeniai
221>>1
:110
, używane dla wewnętrznego exec do utworzenian
Drugi krok: przygotowanie wewnętrzne
exec
Po powyższym wewnętrzna
exec
jest coś takiego:Tyle że nie do końca byś to zrozumiał. Wciąż dzięki uproszczeniom otrzymasz:
Dosłowność
%
należy uwzględnić. Zasadniczo więc musiałem dodać kilka z nich przed każdym,%s
aby po dosłownym zakończeniu pozostały dosłowne%
litery.2**11
z nich. Razy pięć.Pozostałe
exec
operacje na zewnętrznym formacie ciągu są%112%34%34%34%34
. To112
jestp
, a pozostałe są znakami cudzysłowu. Po zastosowaniu tych wyników jest mniej więcej taki:Ale w rzeczywistości ma o wiele więcej
%
. To jest to:Ostatnim krokiem jest po prostu uruchomienie tego, po czym otrzymasz niezbędne dane wyjściowe.
Pełny kod tutaj: http://pastebin.com/rSFs6DiH
źródło
bash + vim (56)
Pożyczając Ctrl-XCtrl-Esztuczkę bashową z rozwiązania Thora, oto jak bym to zrobił w bash + vim:
C-XC-E uruchamia domyślny edytor (zwykle vim)
a uruchamia tryb wstawiania
.space ASSW
C-Vx4f wkładki
O
RD
C-Vx5f wkładki
_
1
C-3jest równoważne escape(nie tylko w vimie, ale gdziekolwiek w terminalu)
C-Xodejmuje 1 od
1
właśnie wpisanegoa tryb wstawiania ponownie
1 C-3
zawartość bufora jest teraz
. ASSWORD_01
<< unindent line (no-op, ponieważ linia nie jest wcięta) i przenieś kursor do 1. kolumny
a
C-X rozpocznij uzupełnianie słów
C-V w komplecie z komendą ex
C-V Jeszcze 9 razy wybiera wpis
Print
C-3 powrót do normalnego trybu
XXXxx usuwa
rint
< < powrót do kolumny 1
susuń
.
, uruchom tryb wstawianiae c C-X C-Vex wykonanie polecenia jeszcze raz, wpis został
echo
już wybrany z powoduec
właśnie wpisanegospace C-3 buforuj teraz zawartość
echo PASSWORD_01
Z Z zapisz bufor, zamknij vim, bash wykonuje zawartość pliku, tj
echo PASSWORD_01
Nawiasem mówiąc: C-3ma wielu przydatnych braci: C-Jjest Enter, C-Ijest Tab, C-Hjest Backspace, C-2jest C-@(tj. Bajt zerowy). A dla użytkowników emacsa dobrze jest wiedzieć, że Escapepo którym następuje kolejny klucz jest równoważny Alt+ temu kluczowi. Więc nawet bez Escapei Altnadal możesz wpisać Meta-x w ten sposób:C-3x
źródło
Perl, (31 + 10/41 + 10/64 + 10)
( ^użyty klucz, 3 sposoby)
print
zamiastdie
Skrypty używają bitowego ciągu XOR operatora Perla
^
, który wykonuje XOR na bitach znaków dwóch łańcuchów. To pozwala mi odtworzyć brakujące znaki dla PASSWORD_01 i utworzyć znaki dla polecenia systemowego.Zrobiłem trzy warianty w zależności od łagodności reguł. Zakładam, że ponieważ warianty 2 i 3 faktycznie wypisują słowa na Ideone, rozwiązania są prawidłowe. Usunąłem małą historię, którą tu miałem, ponieważ doszedłem do wniosku, że nikt jej nie przeczyta, ale możesz przeczytać ją w edycji, jeśli jesteś ciekawy!
źródło
oOo kod (300)
Łatwo. (Podawanie liniowe jest opcjonalne i tylko tutaj, aby kod był „bardziej czytelny”) Zastosowany generator kodu:
Ten sam kod w mniej głupim kodowaniu:
źródło
ferNANDo, 179 + 10 = 189 bajtów
Wypróbuj online!
Enterużywany. Użyłbym
0
i1
aby kod był bardziej czytelny, ale nie mogę go użyć0
.źródło
JS-Forth, 103 bajty
Ciąg zostanie zwrócony na stosie jako tablica znaków.
Wypróbuj online - skomentowana wersja
Wyjaśnienie:
Najpierw znalazłem listę dozwolonych słów . Zasadniczo jedyne rzeczy, które mogłyby być przydatne, to:
12345
Stałe numeryczne<<
Przesuń w lewo>>
Przesuń w prawos>f
Wciśnij stos pojedynczy do pływakaf>d
Pop podwójne ze stosu pływakafsqrt
Pierwiastek kwadratowy na stosie zmiennoprzecinkowymWięc mógłbym użyć stałych numerycznych, przesunięcia bitów i obliczyć pierwiastek kwadratowy, używając następującego (
>>
zamieniadrop
, przesuwa się o,0
aby usunąć0
):Na szczęście znalazłem możliwe przesunięcia bitów dla każdej stałej, którą potrzebowałem stworzyć, które były krótsze niż użycie pierwiastków kwadratowych. Przeważnie szukałem, drukując po prostu każdą liczbę do kwadratu lub większą potęgę dwóch, jeśli którakolwiek z nich zawierała cyfrę
6-0
. Potem zdałem sobie sprawę, że mogę użyć utraty precyzji,f>d
aby znaleźć więcej możliwości. (Mógłbym dodać do liczby, ale nadal uzyskać ten sam pierwiastek kwadratowy z liczby całkowitej). Nieco później zacząłem używać przesuwania bitów, aby znaleźć niektóre, a potem wszystkie stałe. Im większe>>
przesunięcie bitów, tym więcej mogę dodać do „magicznej liczby” i nadal uzyskać ten sam wynik. Znalazłem więc najmniejsze przesunięcia bitowe, których mogłem użyć, aby uzyskać niezbędne wyniki. Czasem nawet liczby mogły się przydać<<
, trzeba było użyć kursów>>
.Skomentowany kod (
\
rozpoczyna komentarz):gForth nie ma słów
<<
lub>>
. Zamiast tego malshift
irshift
czego nie mogłem użyć .źródło
Dziesiętny ,
190180 + 10 = 190 bajtówWypróbuj online! Dziesiętny jest językiem ezoterycznym, który używa wyłącznie miejsc po przecinku i litery
D
. Potrzebowałem jednak kary +10, ponieważ prawie każde polecenie używa0
.Na szczęście wszystkie polecenia potrzebne do drukowania
PASSWORD_01
nie wymagają żadnych liczb powyżej6
:12...D
- pchnij postać2
- pop wartość41D
- pop najwyższe dwie wartości stosu, pomnóż i wypchnij wynik301
- wydrukuj DSI (domyślny indeks stosu)Naciskając wielokrotnie wartości znaków, które używają tylko cyfr od 1 do 5, a następnie dodając je, mogę wprowadzić wartości znaków dla każdej litery w
PASSWORD_01
.Nie golfił i skomentował:
źródło
Biała spacja , wynik: 111 (101 bajtów + 10 za Enter)
Litery
S
(spacja),T
(tab) iN
(nowa linia) dodane tylko jako wyróżnienia.[..._some_action]
dodano tylko jako wyjaśnienie.Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Objaśnienie w pseudo-kodzie:
To rozwiązanie jest krótsze niż istniejąca odpowiedź na Whitespace ( @ n̴̖̋h̷͉̃a̷̭̿h̷̰̀ĥ̷̳d̷̰̀ĥ̷̳ poprosiła mnie o opublikowanie jej jako oddzielnej odpowiedzi, gdy zasugerowałem ją jako golfa), wykorzystując moją moją wskazówkę Whitespace .
Stała
80
została wygenerowana za pomocą tego programu Java , który stworzyłem i użyłem dla niektórych moich wcześniejszych odpowiedzi w Whitespace.źródło
Stax , 91 + 10 bajtów
Wypróbuj online!
Używa ] singletonów.
Wyjaśnienie
Zobaczmy, jak
"P"
jest generowany i jak"ASSW"
jest dołączany bez użycia zwykłego+
.Reszta po prostu powtarza tę samą sztuczkę.
"a"EEE$"$"a$Re]R
zamienia cyfry"a"
lub[97]
na[79]
lub,"O"
i dołącza go do ciągu."$""RD"R appends "RD"
."$""a"EEEd$"$""5"Re]R
używa"a"
ponownie, aby uzyskać"9"
i odrzuca"7"
, a następnie łączy"9"
literał"5"
z literałem, aby utworzyć[95]
lub"_"
, i dołącza go do łańcucha."$"1 !$R
otrzymuje zero przez logiczne nie 1 i dołącza je do ciągu."$""1"R
dołącza finał"1"
i gotowe.Wyjściowy wynik.
źródło
pieprzenie mózgu , 400 + 10 (
+
) = 410 bajtówWypróbuj online!
źródło
Kod maszynowy MS-DOS .COM 8086 (72 bajty)
Czas jest cenny, więc nie ma czasu na szczegółowe rozmowy z kompilatorami lub tłumaczami! Po prostu otwórz wybrany edytor tekstu i wpisz następujące polecenie (zamień na
\t
TAB):Jako zrzut heksowy:
Zapisz jako plik .COM i uruchom go, aby zapisać dzień.
Kod zakłada pewne wartości początkowe dla rejestrów , więc może nie działać dla wszystkich odmian DOS. Mam tylko nadzieję, że ktoś ryzykował wyrzuceniu przez nie kupując IBM.
Nieco bardziej zrozumiała reprezentacja:
źródło
Befunge-98, 43 +10 = 53 bajty
Wypróbuj online!
Kara 10 bajtów dotyczy użycia
,
klucza (nie jestem pewien, dlaczego nie można tego osiągnąć za pomocą Shift+ <, ale wydaje się, że to reguła). I chociaż technicznie źródło ma 40 znaków, trzy·
znaki mają dodatkowe trzy bajty z powodu kodowania UTF-8.źródło
05AB1E ,
8786 bajtówWypróbuj online!
Być może najdłuższy kod 05AB1E w historii?Niestety język nie obsługuje takich rzeczy
"Q"<
„zmniejszenie Q, aby uzyskać P”Moim dodatkowym kluczem jest V.
Dzięki @Kevin Cruijssen za -1 bajt.
Kod:
Dla porównania: Najkrótszy sposób wydrukowania „PASSWORD_01” ma długość 6 bajtów
Wypróbuj online!
źródło
TR
zamiast1<1
dla01
części wyniku.Emacs, 26 bajtów (ewentualnie + 10 = 36 lub - 2 = 24)
Dodatkowy klucz potrzebny w tej odpowiedzi to Esc. Jest to połowa klawiatury, która jest nadal nienaruszona, ale z jakiegoś powodu nie została wymieniona w pytaniu, więc może, ale nie musi, ukarać wynik. ( Esci Altsą równoważne w Emacsie; Altznajduje się również na nienaruszonej połowie klawiatury, ale nie jest wymieniony w pytaniu, ale musi być przytrzymany zamiast stukania, więc nie mogę użyć go jako mojego dodatkowego klucza. Pozwoliłoby to zaoszczędzić dwa bajty , ponieważ ma krótsze kodowanie niżEsc ).
Sam program (przecinki ograniczają granice między bajtami w formacie sieciowym używanym przez Emacsa do akceptacji jego danych wejściowych):
Kodowanie tego jako surowych bajtów, aby udowodnić liczbę bajtów:
(Uwaga: niektóre szczegóły mogą się różnić w zależności od konfiguracji Emacsa; ta odpowiedź wymaga quot-char-radix na 16, a Emacs może korzystać ze słownika sprawdzania pisowni, który jest domyślny w moim systemie brytyjsko-angielskim. Oba wydają się być jak rozsądne ustawienia konfiguracji, ale możliwe jest, że twoja kopia Emacsa może być skonfigurowana inaczej. Inny słownik prawdopodobnie nadal dawałby program 26-bajtowy, ale może być konieczne użycie nieco innych błędów pisowni, aby poprawki, które chcieliśmy, mogły zostać zaakceptowane przez klucze bez kul).
Wyjaśnienie
Nie jestem pewien, czy powinno to mieć jakikolwiek wpływ na wojny redaktorów, ale Emacs wydaje się bić vima przynajmniej w przypadku tego pytania. Emacs jest całkiem odpowiedni dla edytora golfa mierzonego w bajtach, ponieważ opiera się w dużej mierze na akordach, które wymagają wielu naciśnięć klawiszy, ale tylko jednego bajtu (dlatego program Emacsa jest często wolniejszy w pisaniu niż równoważny program Vima, ale krótszy na dysku). Ponadto większość najważniejszych poleceń Emacsa znajduje się w lewym dolnym rogu klawiatury, aby być blisko Ctrl, bardzo pomocna przy takim pytaniu.
„Możesz założyć, że edytor powłoki / edytora kodu źródłowego został otwarty przed pojawieniem się pocisków. Niestety nie napisałeś w nim niczego przed uderzeniem klawiatury.”, Więc zakładam, że mamy otwarty plik w Emacsie i musisz wpisać w nim hasło. (Musielibyśmy później zapisać plik i prawdopodobnie wyjść z Emacsa, ale bajty na to nie są liczone w odpowiedziach innych osób, więc też ich tutaj nie liczę. Jest to całkowicie wykonalne przy użyciu lewej strony klawiatura jednak Ctrl- X, Ctrl- S, Ctrl- X, Ctrl- C.)
Jednoczesne przyjmowanie polecenia (lub bloku podobnych poleceń):
WS
do dokumentu.WS
nie jest prawdziwym słowem, ale zawiera wiele podobnych dwuliterowych słów.WS
doPS
. (Gdy sprawdzanie pisowni jest wywoływane przy użyciu Alt- $, jak to się stało tutaj ( Esci Altsą równoważne Emacsowi), sprawdza tylko jedno słowo, więc wyłącza się po tym.)A
, dającPSA
.PAS
.SRWD
, dawaniePASSRWD
.PASSRWD
sięPASSWORD
. Zauważ, że nie możemy zgadnąć słowa, które chcemy za pierwszym razem, tak jak by to zrobiłoPASSWRD
, ponieważ kluczem do zaakceptowania najbliższego prawdziwego słowa jest to, 0którego nie możemy nacisnąć. W rezultacie nieco bardziej ekstremalne błędy ortograficznePASSRWD
są używane do popychania słowa, które chcemy, do pozycji 5, gdzie możemy je zaakceptować._
. Dokument czyta terazPASSWORD_
(lub będzie, gdy zaczniemy wpisywać następne polecenie; wcześniej znak podkreślenia nie pojawia się w przypadku wpisania innej cyfry szesnastkowej).10
.PASSWORD_10
.PASSWORD_01
, podobnie jak pytanie.Jeśli wolno nam użyć Alt, prawdopodobnie możemy zakodować polecenie „invoke spellchecker” jako pojedynczy bajt
a4
zamiast przeliterować go jako1b
24
; pojawia się dwa razy, co prowadzi do dwóch bajtów oszczędności. (Większość współczesnych terminali używa1b
24
jako kodowania Alt- $aby uniknąć kolizji z UTF-8, alea4
kodowanie jest również spotykane od czasu do czasu, czasami dostępne jako opcja konfiguracji).Możliwe oszczędności bajtów prawdopodobnie wymagają poprawek pisowni golfisty.
PSASWRD
byłby bajt krótszy do wpisania, ale niestety, moduł sprawdzania pisowni nie wydaje się być w staniePASSWORD
wyciągnąć z tego, więcPASSRWD
jest to najlepsze podejście, jakie do tej pory znalazłem. Podejście oparte na rejestrach do zdobywania10
jest również absurdalnie niewygodne, ale Emacs nie ma wielu sposobów tworzenia liczb z nikąd i0
jest bolesną postacią, aby zdobyć inaczej. (Przynajmniej zdarzyło się kilka niezwykle przydatnych zbiegów okoliczności: kursor właśnie kończy się w pozycji10
, która zawiera0
, w razie potrzeby, dokładnie; oraz fakt, że Emacs akceptuje zbędne .)g
operację rejestru, aby wstawić zawartość rejestru do dokumentu , oprócz bardziej intuicyjnychi
źródło