Anda telah direkrut untuk pengetahuan teknologi Anda sebagai sahabat Agen Rahasia untuk memastikan bahwa orang baik dapat menyelesaikan pekerjaannya dan dunia dapat diselamatkan.
Ini adalah misi terakhir Anda sebelum pensiun dengan gaji tinggi dan rasa terima kasih dari seluruh dunia. Tetapi sebelum Anda harus melucuti BOM Big Big Overly Massive the Genius Kejahatan (tampaknya si jenius jahat adalah keledai cerdas yang suka akronim rekursif). Bagaimanapun Anda dan teman Anda berada di inti dari markas rahasia Genius Jahat, siap untuk melucuti BOM yang dapat menghapus benua. Dalam misi Anda sebelumnya, Anda berhasil mendapatkan kode pelucutan yang mengejutkan Anda hanyalah "PASSWORD_01". Anda menghubungkan keyboard Anda ke BOM tetapi ketika Anda siap untuk pergi, antek Genius Jahat masuk dengan rentetan peluru. Sayangnya salah satu dari dampak peluru ini pada keyboard Anda. "Selesaikan pekerjaan itu sementara aku mengalihkan perhatian anak-anak itu!" kata temanmu dan kemudian mulai menembakkan senjatanya.
SPESIFIKASI
- Tulis program yang menampilkan dengan cara apa pun yang Anda inginkan string
PASSWORD_01
(huruf besar). Karena papan ketik Anda terkena peluru, Anda hanya dapat menggunakan tombol-tombol ini:
1 2 3 4 5
Q W E R T
A S D F G
< > Z X C
Ctrl Shift Tab Space
Menggunakan Shifttombol, keyboard Anda memungkinkan Anda untuk menggunakan karakter ini:
! " · $ %
Anda tidak memiliki perangkat keras selain keyboard dan layar (misalnya mouse), atau file dengan kata sandi yang tertulis di komputer Anda.
Anda tidak memiliki koneksi internet.
Anda dapat mengasumsikan Anda memiliki shell juru bahasa / editor sumber dibuka sebelum peluru masuk. Sayangnya Anda belum menulis apa pun di dalamnya sebelum keyboard dipukul.
Anda tidak memiliki keyboard virtual. Bahkan BOM memiliki detektor TOO_FUNNY yang akan membuatnya meledak jika Anda mencoba menggunakan celah Standar .
Karena teman Anda sedang menunggu Anda selesai segera untuk melarikan diri dari Pangkalan Rahasia, Anda harus menulis kode sekecil mungkin (jadi sumber terbatas dan kode-golf !).
Semoga sukses karena hitungan mundur sudah dimulai!
MODE BANTUAN: Juga a KEY(hanya satu Kunci yang Anda inginkan dari keyboard, tetapi bukan Tombol Shift + atau kombinasi lainnya) yang secara ajaib selamat juga. Misalnya: Anda dapat menggunakan =, atau 0atau /... Kunci tambahan ini tidak boleh berupa huruf apa pun di PASSWORD_01
(sehingga Anda tidak dapat menambahkan Patau O). Beri nama kunci itu dalam jawaban Anda. Anda memiliki penalti 10 karakter untuk menggunakan kunci ini terlepas dari berapa kali Anda menggunakan kunci ini.
sumber
stewardesses
?Jawaban:
CJam - 24 + 10 ( () = 34
Tidak ada kunci tambahan - 39
Cobalah di http://cjam.aditsu.net/
sumber
bash, vim dan dc (343)
Saya duduk di bash prompt yang telah dikonfigurasi oleh Evil Genius, dan tentu saja dia ada
VISUAL=vim
di lingkungan default. Menggunakan ikatan default bash untukedit-and-execute-command
(C-x C-e
) memanggil bash$VISUAL
dan akan menjalankan konten buffer saat keluar (ZZ
). Saya mengetikkan urutan berikut (Catatan: kbd-mode adalah perintah yang dikeluarkan dalam mode normal dan urutan kontrol):akucing <<< 45 C-c4C-aaa
Sekarang buffer vim berisi
cat<<<49a
. Melanjutkan ...45 C-c3C-aaa
55 C-c13C-aaa
Sekarang buffer vim berisi
cat<<<49a48a95a68a
. Melanjutkan ...51 C-c31C-aaa
55 C-c25C-aaa> s
Sekarang buffer vim berisi
cat<<<49a48a95a68a82a79a87a83a83a65a80a>s
Keluar dari mode penyisipan, simpan dan keluar
C-cZZ
The
s
File sekarang berisidc
script yang menghasilkan string yang diinginkan di stack, sekarang kita perlu menambahkan perintah cetak.C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
Ulangi perintah di atas 9 kali.
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-eakucing <<< f >> s
Jalankan skrip dc:
C-xC-eadc sC-cZZ
Keluaran:
Isi
s
file:sumber
vim
naskah karenaCtrl
karakter; pemikiran yang bagus untuk memasangkannyadc
! Juga, solusi luar biasa :)<Leader>k
terikat seperti inimap <Leader>k i<kbd></kbd>^[F>a
, jadi itu tidak seburuk kelihatannya :-).Ruby, 57 + 10 (
*
) = 67Jawaban ini menggunakan
*
dan%
untuk membangun nilai ASCII dari karakter yang hilang (dan 0 sebagai Fixnum) dan mendorongnya ke$*
(ARGV
). Array ini kemudian digunakan dalam kombinasi dengan string format untuk menghasilkan kata sandi yang benar, yang dicetak dengan$><<
($>
is stdout).Ruby, 62 + 10 (
.
) = 72, tanpa linebreakKira-kira prinsip yang sama dengan versi di atas, kecuali bahwa di sini array dibangun dari literal array kosong (
%w%%
). Beberapa mengutak-atik.
diperlukan untuk mendapatkan didahulukan operator yang diinginkan.sumber
Spasi (148 + 10 = 158)
Enter kunci perlu digunakan di sini.
Penjelasan notasi saya:
S
,+
,0
Adalah ruang.T
,1
adalah tab.L
adalah baris baru.//
mulai berkomentar.Setiap baris adalah perintah dalam bahasa spasi.
Demo
sumber
L
singkatan dari karakter baris baru. Periksa Demo untuk kode sebenarnya. Apa yang saya posting adalah versi yang dapat dibaca.Python (
2200395 + 10)Saya membutuhkan
+
karakter (biaya +10), yang dapat diperoleh dari numpad (atau pada tata letak kunci tertentu).Ya, BOM mungkin keluar saat saya mengetik itu.
Pendekatan dasar adalah untuk membangun set karakter yang lebih besar dengan menggunakan
exec
dan"%c"%(number)
. Ada empatexec
bersarang di dalam satu sama lain. Secara bertahap, set digit saya naik darisehingga dalam iterasi akhir dimungkinkan untuk mengekspresikan karakter apa pun (sehingga versi terdalam benar-benar dapat menjalankan program apa pun).
Sekitar 50% dari program ini hanya mengutip karakter (
"%c"%34
adalah kutipan ganda), karena sifat bersarang dariexec
pernyataan menuntut "melarikan diri" karakter kutipan agresif.sumber
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)
Insomnia
39353129Bahasa ini muncul ketika saya mencari-cari bahasa yang mengkodekan instruksinya dengan karakter ASCII tunggal. Bahasa sebenarnya beroperasi pada kode ASCII desimal karakter, sehingga masih cukup fleksibel dengan setengah dari keyboard hancur.
Jatuhkan lebih jauh ke 29 karakter, yang dimungkinkan setelah mengurangi penggunaan memori dan menambah ruang pencarian:
Saya memutuskan untuk menjalankan program tweak saya pada set lengkap karakter yang diizinkan, dan memotong solusinya menjadi 31 karakter:
Saya menggunakan program untuk mencari solusi ini. Ini adalah salah satu dari banyak solusi yang dikembalikan oleh program saya, semuanya dengan ukuran yang sama.
Versi lama dibuat dengan tangan. Saya ingat begadang sampai pagi untuk melakukan ini.
Berikut adalah juru bahasa Insomnia untuk pengujian.
sumber
Vim + PHP pada Beberapa Manajer Jendela
65 kunci dalam 44 pukulan, dengan penalti 10 poin karena menggunakan =.
Rincian:
aEACE<Alt+Tab>
: Masuk ke mode tambahkan dan masukkan "EACE". Keluar.z=5<Alt+Tab>
: Lakukan koreksi ejaan. Pilih 5, “DAMAI”. Keluar. ( Esctampaknya bekerja seperti di Entersini!)$xxxxaASSWRD<Alt+Tab>
: Pergi ke akhir baris. Hapus 4 karakter dan tambahkanASSWRD
, menghasilkanPASSWRD
. Kembali ke mode normal. (Tidak,4x
tidak akan berhasil.)z=1<Alt+Tab>
:PASSWORD
Adalah mungkin akan menjadi koreksi pertama untuk ini. Pilih itu.$a$aA<Alt+Tab>
: Pergi ke akhir baris, dan tambahkan$aA
. Kembali ke mode normal.==
: Format baris PHP ini dengan baik, ubah camelCase$aA
menjadi$a_a
. Ini juga memindahkan kursor kembali ke awal baris.wxx
: Maju satu kata; kursor sekarang sebelumnya$
. Hapus dua karakter -$
dan dana
- untuk dibuatPASSWORD_a
.$r1
: Pergi ke akhir baris dan ganti karakter saat ini (yaitua
) dengan1
, menghasilkanPASSWORD_1
.^X
: Mengurangi integer di bawah kursor, menghasilkanPASSWORD_0
.a1
: Akhirnya, tambahkan1
, untukPASSWORD_01
!sumber
==
perintah, itu hanya mengaktifkan mode lekukan besar di setup vi saya (debian 7, v7.3.547)Python 2, 75889 byte
Tidak ada karakter tambahan!
Sayangnya, kode ini sangat panjang. Jadi sebagai gantinya, inilah kode untuk menghasilkan program:
Cobalah online
(untuk menjalankan kode, ubah bagian luar
print
menjadiexec
. Atau, hasilkan program, lalu tempel dan jalankan. Atau salin dari pastebin yang ditautkan di bawah.)Penjelasan:
Tujuannya adalah untuk mengeksekusi:
Untuk menghindari penggunaan
()+
karakter, kita harus menggunakan beberapa operasi format string yang dirantai bersama. Ini berarti bahwa setiap langkah yang ditambahkan secara efektif menggandakan jumlah%
karakter yang diperlukan untuk setiap langkah sebelumnya:Ini tidak cukup, karena beberapa angka yang diperlukan tidak dapat dibuat, dan kami juga tidak dapat membuat
print
. Jadi kami menambahkan level abstraksi denganexec
forprint
ing, dan level untuk poin kode ASCII yang tidak dapat kita buat formatnya. Berikut ini pada dasarnya jawaban saya, tetapi dengan setiap string%
direduksi menjadi satu (perhatikan bahwa%s%s%s%s%s
ini bukan representasi yang akurat, gagal menjelaskan apa yang%
diperlukan literal sebelum masing-masing):Langkah Pertama: Terluar
exec
:1>>1
:0
, digunakan untuk0
masukPASSWORD_01
2531>>5
:79
, digunakan untuk eksekutif internal untuk membuatO
321>>2
:80
, digunakan untuk eksekutif internal untuk membuatP
1521>>4
:95
, digunakan untuk eksekutif internal untuk membuat_
211>>1
:105
, digunakan untuk eksekutif internal untuk membuati
221>>1
:110
, digunakan untuk eksekutif internal untuk membuatn
Langkah Kedua: Persiapkan Batin
exec
Setelah di atas, batin
exec
adalah sesuatu seperti ini:Kecuali bahwa Anda tidak akan mendapatkannya. Masih dengan penyederhanaan, Anda akan mendapatkan ini:
Kebutuhan literal
%
untuk dimasukkan. Jadi pada dasarnya saya harus menambahkan banyak dari mereka sebelum masing%s
- masing berakhir dengan literal yang%
tersisa setelah semua format.2**11
dari mereka. Kali lima.Sisa dari
exec
operasi format string luar adalah%112%34%34%34%34
. Ini112
untukp
, dan yang lainnya adalah tanda kutip. Setelah menerapkannya, hasilnya adalah seperti ini:Tetapi dalam kenyataannya memiliki banyak lagi
%
. Ini:Langkah terakhir adalah menjalankannya, setelah itu Anda mendapatkan output yang diperlukan.
Kode lengkap di sini: http://pastebin.com/rSFs6DiH
sumber
bash + vim (56)
Meminjam Ctrl-XCtrl-Etrik bash dari solusi Thor, berikut adalah bagaimana saya akan melakukannya dalam bash + vim:
C-XC-E memulai editor default (biasanya vim)
a mulai memasukkan mode
.space ASSW
C-Vx4f menyisipkan
O
RD
C-Vx5f menyisipkan
_
1
C-3setara dengan escape(bukan hanya di vim, tetapi di mana saja di terminal)
C-Xkurangi 1 dari
1
i yang baru saja diketika masukkan kembali mode
1 C-3
konten buffer sekarang
. ASSWORD_01
<< unindent line (no-op, karena baris tidak indentasi) dan pindahkan kursor ke kolom 1
a
C-X mulai kata selesai
C-V lengkap dengan perintah ex
C-V 9 kali lagi memilih entri
Print
C-3 kembali ke mode normal
XXXxx menghapus
rint
< < kembali ke kolom 1
shapus
.
, mulai masukkan modee c C-X C-VSetelah selesai perintah sekali lagi, entri
echo
sudah dipilih karenaec
saya baru saja mengetikspace C-3 konten penyangga sekarang
echo PASSWORD_01
Z Z menyimpan buffer, tutup vim, bash mengeksekusi konten file, yaitu
echo PASSWORD_01
Omong-omong: C-3memiliki banyak saudara yang berguna: C-Jis Enter, C-Iis Tab, C-His Backspace, C-2is C-@(yaitu null-byte). Dan untuk pengguna emacs senang mengetahui bahwa Escapediikuti oleh kunci lain sama dengan Alt+ kunci itu. Jadi, bahkan tanpa Escapedan AltAnda masih bisa mengetikkan Meta-x seperti ini:C-3x
sumber
Perl, (31 + 10/41 + 10/64 + 10)
( ^kunci digunakan, 3 cara)
print
bukandie
Script menggunakan operator bitor string XOR Perl
^
, yang melakukan XOR pada bit karakter dari dua string. Ini memungkinkan saya membuat ulang karakter yang hilang untuk PASSWORD_01, dan membuat karakter untuk perintah sistem.Saya membuat tiga varian tergantung pada seberapa lunak aturannya. Saya berasumsi bahwa karena varian 2 dan 3 benar-benar menampilkan kata-kata di Ideone, solusinya valid. Saya menghapus cerita kecil yang saya miliki di sini karena saya pikir tidak ada yang akan membacanya, tetapi Anda dapat membacanya dalam suntingan jika Anda penasaran!
sumber
kode oOo (300)
Mudah. (Umpan baris adalah opsional, dan hanya di sini untuk membuat kode "lebih mudah dibaca") Pembuat kode yang digunakan:
Kode yang sama dalam penyandian yang kurang konyol:
sumber
ferNANDo, 179 + 10 = 189 byte
Cobalah online!
Enterbekas. Saya akan menggunakan
0
dan1
membuat kode lebih mudah dibaca tetapi saya tidak bisa menggunakan0
.sumber
JS-Forth, 103 byte
String akan dikembalikan pada tumpukan sebagai array karakter.
Cobalah online - Versi yang dikomentari
Penjelasan:
Saya pertama kali menemukan daftar kata yang diizinkan . Pada dasarnya, satu-satunya hal yang dapat saya gunakan yang bermanfaat adalah:
12345
Konstanta numerik<<
Bergeser ke kiri>>
Bergeser ke kanans>f
Dorong satu untuk mengapung tumpukanf>d
Pop double dari float stackfsqrt
Root kuadrat di tumpukan floatJadi saya bisa menggunakan konstanta numerik, bit-shift, dan menghitung akar kuadrat menggunakan yang berikut (
>>
menggantikandrop
, menggeser dengan0
menghapus0
):Untungnya, saya menemukan kemungkinan bit-shift untuk setiap konstanta yang saya butuhkan untuk membuat yang lebih pendek daripada menggunakan akar kuadrat. Sebagian besar, saya mencari dengan hanya mencetak setiap angka kuadrat, atau kekuatan dua yang lebih besar jika salah satu dari mereka berisi angka
6-0
. Kemudian, saya menyadari saya bisa menggunakan kehilangan presisif>d
untuk menemukan lebih banyak kemungkinan. (Saya bisa menambahkan nomornya, tetapi masih mendapatkan akar kuadrat integer yang sama.) Beberapa saat kemudian, saya mulai menggunakan bit-shifting untuk menemukan beberapa, dan kemudian semua, konstanta. Semakin besar>>
bit-shift, semakin saya bisa menambahkan ke "angka ajaib" dan masih mendapatkan hasil yang sama. Jadi saya menemukan bit-shift terkecil yang bisa saya gunakan untuk mendapatkan hasil yang diperlukan. Bahkan angka kadang-kadang bisa digunakan<<
, peluang harus digunakan>>
.Kode yang dikomentari (
\
memulai komentar):gForth tidak memiliki kata-kata
<<
atau>>
. Sebaliknya ia memilikilshift
danrshift
, yang tidak dapat saya gunakan .sumber
Desimal ,
190180 + 10 = 190 byteCobalah online! Desimal adalah bahasa esoterik yang hanya menggunakan desimal dan huruf
D
. Namun, saya membutuhkan penalti +10 karena hampir setiap perintah menggunakan0
.Untungnya, semua perintah yang diperlukan untuk mencetak
PASSWORD_01
tidak memerlukan angka lebih dari6
:12...D
- Mendorong karakter2
- munculkan nilai41D
- pop dua nilai stack atas, gandakan dan push hasil301
- cetak DSI (indeks tumpukan standar)Dengan berulang kali mendorong nilai karakter yang hanya menggunakan angka 1 hingga 5, lalu menambahkannya, saya bisa membuat nilai karakter untuk setiap huruf dalam
PASSWORD_01
.Tidak dikumpulkan dan berkomentar:
sumber
Spasi , skor: 111 (101 byte + 10 untuk Enter)
Huruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Cobalah online (dengan spasi, tab, dan baris baru saja).
Penjelasan dalam pseudo-code:
Solusi ini lebih pendek daripada jawaban Whitespace yang ada ( @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ meminta saya untuk mempostingnya sebagai jawaban terpisah ketika saya menyarankannya sebagai golf) dengan menggunakan tip tambang Whitespace ini .
Konstanta
80
telah dihasilkan dengan program Java ini , yang telah saya buat dan gunakan untuk beberapa jawaban Whitespace saya sebelumnya.sumber
Stax , 91 + 10 byte
Cobalah online!
Menggunakan ]untuk membuat lajang.
Penjelasan
Mari kita lihat bagaimana
"P"
dihasilkan dan bagaimana"ASSW"
ditambahkan tanpa menggunakan yang biasa+
.Sisanya hanya mengulangi trik yang sama.
"a"EEE$"$"a$Re]R
menukar digit"a"
atau[97]
untuk membuat[79]
atau"O"
dan menambahkannya ke string."$""RD"R appends "RD"
."$""a"EEEd$"$""5"Re]R
menggunakan"a"
lagi untuk mendapatkan"9"
dan membuang"7"
, lalu menggabungkan"9"
dengan literal"5"
untuk membentuk[95]
atau"_"
, dan menambahkannya ke string."$"1 !$R
memperoleh nol secara logis bukan dari 1 dan menambahkannya ke string."$""1"R
menambahkan final"1"
dan kami selesai.Output tersirat.
sumber
brainfuck , 400 + 10 (
+
) = 410 byteCobalah online!
sumber
Kode mesin MS-DOS .COM 8086 (72 byte)
Waktu sangat berharga, jadi tidak ada waktu untuk menghabiskan waktu dengan kompiler atau juru bahasa! Cukup buka editor teks pilihan Anda dan ketikkan yang berikut (ganti
\t
dengan TAB):Sebagai hexdump:
Simpan sebagai file .COM dan jalankan untuk menyimpan hari itu.
Kode mengasumsikan nilai awal tertentu untuk register , jadi mungkin tidak bekerja untuk semua rasa DOS. Hanya berharap bahwa seseorang berisiko dipecat dengan tidak membeli IBM.
Representasi yang sedikit lebih dimengerti:
sumber
Befunge-98, 43 +10 = 53 byte
Cobalah online!
Penalti 10 byte adalah untuk penggunaan
,
kunci (tidak yakin mengapa ini tidak dapat dilakukan dengan Shift+ <, tapi itu sepertinya aturannya). Dan meskipun sumbernya secara teknis 40 karakter, tiga·
karakter berkontribusi tiga byte tambahan karena pengkodean UTF-8 mereka.sumber
05AB1E ,
8786 byteCobalah online!
Mungkin kode 05AB1E terpanjang yang pernah ada?Sayangnya bahasa ini tidak mendukung hal-hal seperti
"Q"<
untuk "pengurangan Q untuk mendapatkan P"Kunci tambahan saya adalah V.
Terima kasih kepada @Kevin Cruijssen untuk -1 byte.
Kode:
Sebagai perbandingan: Cara terpendek untuk mencetak "PASSWORD_01" adalah 6 byte
Cobalah online!
sumber
TR
alih-alih1<1
untuk01
bagian dari output.Emacs, 26 byte (mungkin + 10 = 36, atau - 2 = 24)
Kunci tambahan yang diperlukan dalam jawaban ini adalah Esc. Ini ada di setengah keyboard yang masih utuh, tetapi tidak disebutkan dalam pertanyaan karena beberapa alasan, jadi mungkin atau mungkin tidak memberikan penalti pada skor. ( EscDan Altsetara di Emacs; Altadalah juga pada setengah utuh dari keyboard namun tidak disebutkan dalam pertanyaan, tetapi harus diadakan bukan disadap jadi saya tidak bisa menggunakannya sebagai kunci tambahan saya Ini akan menghemat dua byte. Namun, karena memiliki penyandian yang lebih pendek daripada Esc.)
Program itu sendiri (koma membatasi batas antara byte dalam format on-the-wire yang digunakan Emacs untuk menerima inputnya):
Pengkodean ini sebagai byte mentah, untuk membuktikan jumlah byte:
(Catatan: beberapa perincian dapat bervariasi berdasarkan pada bagaimana Emacs dikonfigurasi; jawaban ini membutuhkan tanda kutip-char-radix diatur ke 16, dan bagi Emacs untuk menggunakan kamus periksa ejaan yang default pada sistem Inggris Inggris saya. Keduanya sepertinya seperti pengaturan konfigurasi yang masuk akal, tetapi ada kemungkinan bahwa salinan Emacs Anda dapat dikonfigurasi secara berbeda. Kamus yang berbeda mungkin masih memberikan program 26-byte, tetapi salah eja yang sedikit berbeda mungkin perlu digunakan sehingga koreksi yang kami inginkan dapat diterima oleh kunci yang tidak ditunggangi peluru.)
Penjelasan
Saya tidak yakin apakah itu harus memiliki pengaruh pada perang editor, tetapi Emacs tampaknya mengalahkan vim setidaknya dalam kasus pertanyaan ini. Emacs sangat cocok untuk editor golf yang diukur dalam byte, karena sangat bergantung pada akord yang mengambil beberapa penekanan tombol tetapi hanya satu byte (dengan demikian program Emacs seringkali lebih lambat untuk mengetik daripada program Vim yang setara, tetapi lebih pendek pada disk). Selain itu, sebagian besar perintah Emacs paling penting ada di sudut kiri bawah keyboard, untuk menjadi dekat Ctrl, sangat membantu dengan pertanyaan seperti ini.
"Anda dapat berasumsi Anda memiliki shell juru / sumber editor dibuka sebelum peluru masuk. Sayangnya Anda belum menulis apa pun di dalamnya sebelum keyboard dipukul.", Jadi saya berasumsi bahwa kami memiliki file kosong terbuka di Emacs dan perlu mengetikkan kata sandi ke dalamnya. (Kita perlu menyimpan file setelahnya, dan mungkin keluar dari Emacs, tetapi byte untuk itu tidak dihitung dalam jawaban orang lain jadi saya juga tidak menghitungnya di sini. Ini benar-benar bisa dilakukan menggunakan sisi kiri dari keyboard, meskipun, Ctrl- X, Ctrl- S, Ctrl- X, Ctrl- C.)
Mengambilnya perintah (atau blok perintah serupa) sekaligus:
WS
ke dalam dokumen.WS
bukanlah kata yang nyata, tetapi ia menemukan banyak kata dua huruf yang serupa.WS
kePS
. (Ketika pemeriksa ejaan dipanggil menggunakan Alt- $, seperti yang terjadi di sini ( Escdan Altsetara dengan Emacs), itu hanya memeriksa satu kata, sehingga dinonaktifkan setelah melakukan ini.)A
, memberiPSA
.PAS
.SRWD
, pemberianPASSRWD
.PASSRWD
dalamPASSWORD
. Perhatikan bahwa kita tidak dapat menebak kata yang kita inginkan pada percobaan pertama kita, seperti halnya dengan ituPASSWRD
, karena kunci untuk menerima kata asli terdekat adalah 0yang tidak dapat kita tekan. Akibatnya, kesalahan ejaan yang sedikit lebih ekstremPASSRWD
digunakan untuk mendorong kata yang kita inginkan ke posisi 5, di mana kita dapat menerimanya._
. Dokumen sekarang berbunyiPASSWORD_
(atau akan ketika kita mulai mengetik perintah berikutnya; sebelum itu, garis bawah tidak muncul kalau-kalau kita ketik hex digit lain).10
.PASSWORD_10
.PASSWORD_01
, seperti pertanyaan yang diajukan.Jika kita diizinkan untuk menggunakan Alt, kita mungkin dapat meng-encode perintah "invoke spellchecker" sebagai byte tunggal
a4
daripada mengeja itu sebagai1b
24
; muncul dua kali, sehingga mengarah ke penghematan dua byte. (Sebagian besar terminal modern digunakan1b
24
sebagai penyandian untuk Alt- $untuk menghindari bentrokan dengan UTF-8, tetapia4
penyandian ini juga ditemui dari waktu ke waktu, kadang-kadang tersedia sebagai opsi konfigurasi.)Kemungkinan penghematan byte mungkin melibatkan kesalahan ejaan golf untuk diperbaiki.
PSASWRD
akan menjadi byte yang lebih pendek untuk diketik, tetapi sayangnya, pemeriksa ejaan sepertinya tidak mampu memungutnyaPASSWORD
, jadiPASSRWD
adalah pendekatan terbaik yang saya temukan sejauh ini. Pendekatan berbasis register untuk mendapatkan10
juga sangat sulit, tetapi tidak ada banyak cara untuk membuat angka entah dari mana di Emacs, dan0
merupakan karakter yang menyakitkan untuk mendapatkan yang sebaliknya. (Setidaknya ada beberapa kebetulan yang sangat berguna: kursor kebetulan berakhir di posisi10
, yang berisi0
, tepat saat dibutuhkan; dan fakta bahwa Emacs menerimag
operasi register yang berlebihan untuk memasukkan konten register ke dalam dokumen. , selain lebih intuitifi
.)sumber