Lepaskan BOM!


214

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

  1. Tulis program yang menampilkan dengan cara apa pun yang Anda inginkan string PASSWORD_01(huruf besar).
  2. 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:

    ! " · $ %

  3. Anda tidak memiliki perangkat keras selain keyboard dan layar (misalnya mouse), atau file dengan kata sandi yang tertulis di komputer Anda.

  4. Anda tidak memiliki koneksi internet.

  5. 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.

  6. Anda tidak memiliki keyboard virtual. Bahkan BOM memiliki detektor TOO_FUNNY yang akan membuatnya meledak jika Anda mencoba menggunakan celah Standar .

  7. Karena teman Anda sedang menunggu Anda selesai segera untuk melarikan diri dari Pangkalan Rahasia, Anda harus menulis kode sekecil mungkin (jadi dan !).

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.


67
Bisakah saya mengubah tata letak keyboard ke DVORAK?
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

42
Apakah setidaknya kita mendapatkan kunci enter?
Kamis

72
Ruang putih, inilah peluang besar Anda!
german_guy

43
Mengapa kata sandi tidak bisa stewardesses?
codebreaker

24
Lelucon menjawab: Saya seorang mata-mata, saya beralih ke keyboard cadangan yang tersembunyi di arloji saya.
Nzall

Jawaban:



136

bash, vim dan dc (343)

Saya duduk di bash prompt yang telah dikonfigurasi oleh Evil Genius, dan tentu saja dia ada VISUAL=vimdi lingkungan default. Menggunakan ikatan default bash untuk edit-and-execute-command( C-x C-e) memanggil bash $VISUALdan akan menjalankan konten buffer saat keluar ( ZZ). Saya mengetikkan urutan berikut (Catatan: kbd-mode adalah perintah yang dikeluarkan dalam mode normal dan urutan kontrol):

  1. C-xC-e
  2. akucing <<< 45 C-c4C-aaa

    Sekarang buffer vim berisi cat<<<49a. Melanjutkan ...

  3. 45 C-c3C-aaa

  4. 54 C-c41C-aaa
  5. 55 C-c13C-aaa

    Sekarang buffer vim berisi cat<<<49a48a95a68a. Melanjutkan ...

  6. 51 C-c31C-aaa

  7. 55 C-c24C-aaa
  8. 44 C-c43C-aaa
  9. 42 C-c41C-aaa
  10. 42 C-c41C-aaa
  11. 54 C-c11C-aaa
  12. 55 C-c25C-aaa> s

    Sekarang buffer vim berisi cat<<<49a48a95a68a82a79a87a83a83a65a80a>s

    Keluar dari mode penyisipan, simpan dan keluar

  13. C-cZZ

    The sFile sekarang berisi dcscript yang menghasilkan string yang diinginkan di stack, sekarang kita perlu menambahkan perintah cetak.

  14. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

    Ulangi perintah di atas 9 kali.

  15. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  16. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  17. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  18. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  19. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  20. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  21. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  22. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  23. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  24. C-xC-eakucing <<< f >> s

    Jalankan skrip dc:

  25. C-xC-eadc sC-cZZ

Keluaran:

PASSWORD_01

Isi sfile:

49a48a95a68a82a79a87a83a83a65a80a
P
P
P
P
P
P
P
P
P
P
f

4
Saya berpikir untuk membuat vimnaskah karena Ctrlkarakter; pemikiran yang bagus untuk memasangkannya dc! Juga, solusi luar biasa :)
nneonneo

2
Berapa lama Anda menulis tag <kbd> </kbd> itu?
justhalf

15
@justhalf: Saya menulisnya dalam vim dengan <Leader>kterikat seperti ini map <Leader>k i<kbd></kbd>^[F>a, jadi itu tidak seburuk kelihatannya :-).
Thor

18
Sekarang jelas bahwa Agen Thor tahu alatnya secara menyeluruh. Anda layak pensiun, tuan!
justhalf

67

Ruby, 57 + 10 ( *) = 67

$*<<4*4*5<<214%135<<44%25*5<<1%1
$><<"%cASSW%cRD%c%d1"%$*

Jawaban 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 linebreak

$>.<< "%cASSW%cRD%c%d1".% %w%%<<311%231<<214%135<<321%113<<1%1

Kira-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.


13
"Ini misi terakhirmu sebelum pensiun dengan gaji besar dan rasa terima kasih dari seluruh dunia." Selamat, kami semua berterima kasih :)
Timtech

4
Bukti utama bahwa Perl adalah salah satu inspirasi terbesar Ruby.
Pierre Arlaud

11
Bagaimana Anda melakukan linebreak?
Cephalopod

4
@Arian Cara yang sama nneonneo menjalankan kode Python setelah mengetiknya ke dalam REPL ... Saya akan menambahkan versi tanpa linebreak.
Ventero

Apakah jenius jahat telah menginstal ruby?
Mhmd

36

Spasi (148 + 10 = 158)

Enter kunci perlu digunakan di sini.

SS+1010000L // Push code of P
TLSS        // Output character
SS+1000001L // Push code of A
TLSS        // Output character
SS+1010011L // Push code of S
SLS         // Duplicate top stack
TLSS
TLSS
SS+1010111L // Push code of W
TLSS
SS+1001111L // Push code of O
TLSS
SS+1010010L // Push code of R
TLSS
SS+1000100L // Push code of D
TLSS
SS+1011111L // Push code of _
TLSS
SS+0L       // Push 0
TLST        // Output number
SS+1L       // Push 1
TLST        // Output number
LLL         // End program

Penjelasan notasi saya:

  • S, +, 0Adalah ruang.
  • T, 1adalah tab.
  • L adalah baris baru.
  • // mulai berkomentar.

Setiap baris adalah perintah dalam bahasa spasi.

Demo


1
Ah man ... Saya baru saja mengerjakan itu :(
Teun Pronk

1
Saya juga, tetapi saya menyerah karena mengetahui seseorang ini akan lebih cepat
german_guy

Saya pikir 'L' tidak tersedia?
500 - Kesalahan Server Internal

@ 500-InternalServerError: Sebenarnya Lsingkatan dari karakter baris baru. Periksa Demo untuk kode sebenarnya. Apa yang saya posting adalah versi yang dapat dibaca.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

Ah, saya mengerti sekarang.
500 - Kesalahan Server Internal

25

Python ( 2200 395 + 10)

exec"""exec"exec"+"%ca"%34+"%c52+53"""+"%c55+55"%44+"%c34"%44+"%c45+35"%44+"%c"%44+"""34%%cexec"%"""+"%c"%54+"""1+"%c"%34+"%%5%c+"%5"""+"%c"%55+"""+"%c"%34+"%c"""+"%c"%112+"""r%%c%%ct%%c%%cASSW"+"%c%%34+"%34+"%c%%cRD"%34+"%c%%"""+"%c"%55+""""%34+"%c+"%5"""+"%c"%55+"""+"%c%%c"%34+"%c%%"%34+"%c5+"%5"""+"%c"%55+"""+"%c"%34+"%c1%%c"+"%c%%4"%34+"%c+"%5"""+"%c"%54+"""+"%c"%34+"%c%%a"+"%c%%34"%34"""

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 execdan "%c"%(number). Ada empat execbersarang di dalam satu sama lain. Secara bertahap, set digit saya naik dari

  1. 12345
  2. 1234567 (6 = ASCII 54, 7 = ASCII 55)
  3. 123456789 (8 = ASCII 56, 9 = ASCII 57)
  4. 0x0123456789abcdef

sehingga 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"%34adalah kutipan ganda), karena sifat bersarang dari execpernyataan menuntut "melarikan diri" karakter kutipan agresif.


Jika Anda menggunakan "+" dari keypad angka, Anda tidak tergantung pada bahasa keyboard.
celtschk

@celtschk: Poin bagus! Saya akan mengeditnya.
nneonneo

1
Daripada membangun set digit dengan eksekutif bersarang, tidak bisakah Anda mendapatkan angka menggunakan aritmatika? Ex. 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)
Kevin

2
Karena Anda tidak bisa mendapatkan kedua parens. (Saya memang mempertimbangkan ini!)
nneonneo

Selain itu, Python tidak memiliki banyak operator yang mengikat lebih kuat dari%. ** adalah satu, tetapi cenderung tidak berguna untuk membangun sebagian besar istilah.
nneonneo

25

Insomnia 39 35 31 29

Bahasa 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:

FdFzt%dF<rGdt>tt Gtreeet t%4s

Saya memutuskan untuk menjalankan program tweak saya pada set lengkap karakter yang diizinkan, dan memotong solusinya menjadi 31 karakter:

FdFGt dtreeC>tt FFdx<Fdtr ztq4s

Saya menggunakan program untuk mencari solusi ini. Ini adalah salah satu dari banyak solusi yang dikembalikan oleh program saya, semuanya dengan ukuran yang sama.

Fddx>"eCeezdC>CefCdddzCzzfCqred>r4s

Versi lama dibuat dengan tangan. Saya ingat begadang sampai pagi untuk melakukan ini.

Fddx>"eCeezdC>Cef>dx"dCezeeedeCrqeeC%4s

Berikut adalah juru bahasa Insomnia untuk pengujian.


3
+1 untuk "begadang sampai pagi" cocok dengan pilihan bahasa pemrograman Anda.
justhalf

20

Vim + PHP pada Beberapa Manajer Jendela

65 kunci dalam 44 pukulan, dengan penalti 10 poin karena menggunakan =.

aEACE<Alt+Tab>z=5<Alt+Tab>$xxxxaASSWRD<Alt+Tab>z=1<Alt+Tab>
$a$aA<Alt+Tab>==wxx$r1<^X>a1

Rincian:

  • Alt+Tabtampaknya berfungsi seperti Escdengan Vim, atau mungkin dengan emulator terminal ini. Terima kasih telah mengajari saya sesuatu yang baru!
  • 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 tambahkan ASSWRD, menghasilkan PASSWRD. Kembali ke mode normal. (Tidak, 4xtidak akan berhasil.)
  • z=1<Alt+Tab>: PASSWORDAdalah 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 $aAmenjadi $a_a. Ini juga memindahkan kursor kembali ke awal baris.
  • wxx: Maju satu kata; kursor sekarang sebelumnya $. Hapus dua karakter - $dan dan a- untuk dibuat PASSWORD_a.
  • $r1: Pergi ke akhir baris dan ganti karakter saat ini (yaitu a) dengan 1, menghasilkan PASSWORD_1.
  • ^X: Mengurangi integer di bawah kursor, menghasilkan PASSWORD_0.
  • a1: Akhirnya, tambahkan 1, untuk PASSWORD_01!

Saya tidak bisa meniru ==perintah, itu hanya mengaktifkan mode lekukan besar di setup vi saya (debian 7, v7.3.547)
Cengiz Can

11

Python 2, 75889 byte

Tidak ada karakter tambahan!

Sayangnya, kode ini sangat panjang. Jadi sebagai gantinya, inilah kode untuk menghasilkan program:

x=[2**n for n in xrange(16)]
y=-5
print('exec"""exec'+x[7]*'%'+'c""'+x[6]*'%'+'cr'+x[-2]*'%'+'c'+x[-1]*'%'+'ct'+x[8]*'%'+'c'+x[-4]*'%'+'cASSW'+x[-5]*'%'+'cRD'+x[-3]*'%'+'c'+x[0]*'%'+'s1'+x[10]*'%'+'c '+x[9]*'%'+'c""'+x[y]*'%'+x[1]*'%'+'s'+x[y]*'%'+x[2]*'%'+'s'+x[y]*'%'+x[3]*'%'+'s'+x[y]*'%'+x[4]*'%'+'s'+x[y]*'%'+x[5]*'%'+'s"""'+'%`1>>1`%`2531>>5`%`321>>2`%`1521>>4`%`211>>1`%`221>>1`%112%34%34%34%34')

Cobalah online

(untuk menjalankan kode, ubah bagian luar printmenjadi exec. Atau, hasilkan program, lalu tempel dan jalankan. Atau salin dari pastebin yang ditautkan di bawah.)

Penjelasan:

Tujuannya adalah untuk mengeksekusi:

print"PASSWORD_01"

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:

print"%cASSW%%cRD%%%%c%%%%%%%%c1"%80%79%95%48

Ini tidak cukup, karena beberapa angka yang diperlukan tidak dapat dibuat, dan kami juga tidak dapat membuat print. Jadi kami menambahkan level abstraksi dengan execfor printing, 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%sini bukan representasi yang akurat, gagal menjelaskan apa yang %diperlukan literal sebelum masing-masing):

exec"""exec%c""%cr%c%ct%c%cASSW%cRD%c%s1%c %c""%s%s%s%s%s""" % `1>>1`%`2531>>5`%`321>>2`%`1521>>4`%`211>>1`%`221>>1`%112%34%34%34%34

Langkah Pertama: Terluar exec:

exec""" ... ASSW%cRD ... %s%s%s%s%s""" % `1>>1` % `2531>>5` % `321>>2` % `1521>>4` % `211>>1` % `221>>1`
  1. 1>>1: 0, digunakan untuk 0masukPASSWORD_01
  2. 2531>>5: 79, digunakan untuk eksekutif internal untuk membuatO
  3. 321>>2: 80, digunakan untuk eksekutif internal untuk membuatP
  4. 1521>>4: 95, digunakan untuk eksekutif internal untuk membuat_
  5. 211>>1: 105, digunakan untuk eksekutif internal untuk membuati
  6. 221>>1: 110, digunakan untuk eksekutif internal untuk membuatn

Langkah Kedua: Persiapkan Batin exec

Setelah di atas, batin execadalah sesuatu seperti ini:

exec%c""%cr%c%ct%c%cASSWORD%c01%c %c""%79%80%95%105%110

Kecuali bahwa Anda tidak akan mendapatkannya. Masih dengan penyederhanaan, Anda akan mendapatkan ini:

exec%c""%cr%c%ct%c%cASSWORD%c01%c %c""798095105110

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**11dari mereka. Kali lima.

Sisa dari execoperasi format string luar adalah %112%34%34%34%34. Ini 112untuk p, dan yang lainnya adalah tanda kutip. Setelah menerapkannya, hasilnya adalah seperti ini:

exec"""pr%c%ct"%cASSW%cRD%c01" """%79%80%95%105%110

Tetapi dalam kenyataannya memiliki banyak lagi %. Ini:

exec"""pr%%%%%%%%c%%%%%%%%%%%%%%%%ct"%%cASSW%cRD%%%%c01" """%79%80%95%105%110

Langkah terakhir adalah menjalankannya, setelah itu Anda mendapatkan output yang diperlukan.


Kode lengkap di sini: http://pastebin.com/rSFs6DiH


7
Impresif! Anda mengetik semua itu dengan tangan sebelum BOM meledak? Tanpa membuat kesalahan (tidak ada tombol backspace)? Anda, Tuan atau Nyonya, berhak atas pensiun Anda. ; D
DLosc

10

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 1i yang baru saja diketik

a 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 mode

e c C-X C-VSetelah selesai perintah sekali lagi, entri echosudah dipilih karena ecsaya baru saja mengetik

space 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


9

Perl, (31 + 10/41 + 10/64 + 10)

( ^kunci digunakan, 3 cara)

exec"easswsrdcqw"^"5    <  <AF"                   # exec "PASSWORD_01"

  • Berlaku jika berjalan sebagai perintah sistem memenuhi syarat sebagai "output."

exec"QQZSqeasswsrdcqw"^"422<Q5    <  <AF"         # exec "echo PASSWORD_01"

exec"EQAXqwQqQZQxqeasswsrdcqwxqq"^q!5434QZ4S534$S5    <  <AF$SS! 
                  # exec "perl -e\"die\\\"PASSWORD_01\\\"\""
  • Berlaku jika saya bisa menjalankan Perl melalui sistem. (Jalankan di sini) <- ini menggunakan printbukandie

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!


4

kode oOo (300)

QwerTaSdfGzxCqwertAsDfgZxCQwerTasDfgZxcQweRtaSDfgZxCqwertAsDFgZXcQWeRtaSdFGzxcQwERTasdfGzxc
QwErtAsdFgzxcqWeRtaSdFGzxcQweRtaSDfGZxCqWErTAsDFgZXCqWerTasDfgZxcQweRtaSdfGzxCQwErTAsDFgZXC
qWertAsDfgzxcQwERtASdFGzXcqWeRTasdFGzXcQWeRtAsDfgzxcQwERtASdFGzXCqWerTaSDfgzXcQWErTaSdFgZxc
QwertaSdFgzXcQWertASdFgZXCq

Mudah. (Umpan baris adalah opsional, dan hanya di sini untuk membuat kode "lebih mudah dibaca") Pembuat kode yang digunakan:

o=lambda b,c:"".join(i.upper()if j else i for i,j in zip(__import__('itertools').cycle(c),map(int,"".join((3-len(i))*'0'+i for i in(bin('><[]-+.,'.index(i))[2:]for i in b)))))

Kode yang sama dalam penyandian yang kurang konyol:

EeeeEeEeeEeeEeeeeeEeEeeEeEEeeeEeeEeeEeeEeeEeeEEeeEeEeeeeeEeEEeEEeEEeEeeEeEEeeeEeEEEeeeeEeee
EeEeeEeeEeeeeeEeEeeEeEEeeeEeeEeeEEeEEeEeEEeEEeEEeEEEeEeeEeeEeeEeeEeeEeeEeeEeeEEeEeEEeEEeEEE
eEeeeEeEeeeeeEeEEeEEeEEeEeeEeEEeeeEEeEeEEeEeEeEeeeeeEeEEeEEeEEeEEeEeeEeEEeeeEeEEEeEeEeEeEee
EeeeeeEeEeeEeEEeeeEEeEeEEEe


3

ferNANDo, 179 + 10 = 189 byte

2 1
1 2 1 2 1 1 1 1
1 2 1 1 1 1 1 2
1 2 1 2 1 1 2 2
1 2 1 2 1 1 2 2
1 2 1 2 1 2 2 2
1 2 1 1 2 2 2 2
1 2 1 2 1 1 2 1
1 2 1 1 1 2 1 1
1 2 1 2 2 2 2 2
1 1 2 2 1 1 1 1
1 1 2 2 1 1 1 2

Cobalah online!

Enterbekas. Saya akan menggunakan 0dan 1membuat kode lebih mudah dibaca tetapi saya tidak bisa menggunakan 0.


Saya pikir masuk diizinkan.
Conor O'Brien

2
OP tidak mengatakan Enter diizinkan.
acrolith

3

JS-Forth, 103 byte

String akan dikembalikan pada tumpukan sebagai array karakter.

12544 1 3 << >> 24 1 << 1521 4 >> 34 1 << 41 1 << 2531 5 >> 351 2 >> 332 2 >> 32 2 >> 131 1 >> 321 2 >>

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 kanan
  • s>f Dorong satu untuk mengapung tumpukan
  • f>d Pop double dari float stack
  • fsqrt Root kuadrat di tumpukan float

Jadi saya bisa menggunakan konstanta numerik, bit-shift, dan menghitung akar kuadrat menggunakan yang berikut ( >>menggantikan drop, menggeser dengan 0menghapus 0):

s>f fsqrt f>d >>

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 presisi f>duntuk 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):

\ 49
12544 1 3 << >>

\ 48
24 1 <<

\ 95
1521 4 >>

\ 68
34 1 <<

\ 82
41 1 <<

\ 79
2531 5 >>

\ 87
351 2 >>

\ 83 (x2)
332 2 >> 332 2 >>

\ 65
131 1 >>

\ 80
321 2 >>

gForth tidak memiliki kata-kata <<atau >>. Sebaliknya ia memiliki lshiftdan rshift, yang tidak dapat saya gunakan .


3

Desimal , 190 180 + 10 = 190 byte

12055D12025D41D301212055D12010D41D301212055D12025D41D12003D41D30130112004D41D301212055D12024D41D30112003D41D301212055D12013D41D301212055D12040D41D301212045D12003D41D30112001D41D301

Cobalah online! Desimal adalah bahasa esoterik yang hanya menggunakan desimal dan huruf D. Namun, saya membutuhkan penalti +10 karena hampir setiap perintah menggunakan 0.

Untungnya, semua perintah yang diperlukan untuk mencetak PASSWORD_01tidak memerlukan angka lebih dari 6:

  • 12...D - Mendorong karakter
  • 2 - munculkan nilai
  • 41D - pop dua nilai stack atas, gandakan dan push hasil
  • 301 - 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:

12055D     ; push char 55 to stack
12025D     ; push char 25 to stack
41D        ; pop [DSI] and [DSI-1], add and push result
3012       ; print from stack to output, pop
12055D     ; push char 55 to stack
12010D     ; push char 10 to stack
41D        ; pop top two stack values, add and push result
3012       ; print from stack to output, pop
12055D     ; push char 55 to stack
12025D     ; push char 25 to stack
41D        ; pop x2, add, push
12003D     ; push char 3 to stack
41D        ; pop x2, add, push
301301     ; print, print
12004D     ; push char 4 to stack
41D        ; pop x2, add, push
3012       ; print, pop
12055D     ; push char 55 to stack
12024D     ; push char 24 to stack
41D        ; pop x2, add, push
301        ; print
12003D     ; push char 4 to stack
41D        ; pop x2, add, push
3012       ; print, pop
12055D     ; push char 55 to stack
12013D     ; push char 13 to stack
41D        ; pop x2, add, push
3012       ; print, pop
12055D     ; push char 55 to stack
12040D     ; push char 40 to stack
41D        ; pop x2, add, push
3012       ; print, pop
12045D     ; push char 45 to stack
12003D     ; push char 3 to stack
41D        ; pop x2, add, push
301        ; print
12001D     ; push char 1 to stack
41D        ; pop x2, add, push
301        ; print

3

Spasi , skor: 111 (101 byte + 10 untuk Enter)

[S S T  T   T   T   T   T   N
_Push_-31_1][S S T  T   S S S S S N
_Push_-32_0][S S S T    T   T   T   N
_Push_15__][S S T   T   T   S S N
_Push_-12_D][S S S T    S N
_Push_2_R][S S T    T   N
_Push_-1_O][S S S T T   T   N
_Push_7_W][S S S T  T   N
_Push_3_S][S N
S _Duplicate_3_S][S S T T   T   T   T   N
_Push_-15_A][S S S N
_Push_0_P][N
S S N
_Create_Label_LOOP][S S S T S T S S S S N
_Push_80][T S S S _Add][T   N
S S _Output_as_character][N
S N
N
_Jump_to_Label_LOOP]

Huruf S(spasi), T(tab), dan N(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 .

Push the code-points for the characters of "10_DROWSSAP" minus constant 80 to the stack
Start LOOP:
  Add 80 to the current code-point
  Pop and output it as character
  Go to the next iteration of LOOP

Konstanta 80telah dihasilkan dengan program Java ini , yang telah saya buat dan gunakan untuk beberapa jawaban Whitespace saya sebelumnya.


2

Stax , 91 + 10 byte

"W"EEEd$"$"1 !$Re]"$""ASSW"R"$""a"EEE$"$"a$Re]R"$""RD"R"$""a"EEEd$"$""5"Re]R"$"1 !$R"$""1"R

Cobalah online!

Menggunakan ]untuk membuat lajang.

Penjelasan

Mari kita lihat bagaimana "P"dihasilkan dan bagaimana "ASSW"ditambahkan tanpa menggunakan yang biasa +.

"W"                             Push "W", or [87]
   E                            Convert to a scalar, 87
    E                           Convert to an array of digits, [8,7]
     E                          Push 8 on the stack, then push 7.
      d                         Pop the 7 and discard it.

                                Start making components of regex substitution
       $                        Pop 8, push "8"
        "$"                     Push "$"
           1 !                  Push 0. The space is necessary because normally one doesn't do 1! to obtain 0
              $                 Pop 0, push "0"
               R                Do regex substitution 's/$/0/g' on the string "8"

                                Basically doing "8"+"0" without using +
                e               Pop "80", push 80
                 ]              Singleton. Pop 80, push [80], or "P"
                  "$""ASSW"R    Use the same trick again to append "ASSW" to "P"

Sisanya hanya mengulangi trik yang sama.

"a"EEE$"$"a$Re]Rmenukar digit "a"atau [97]untuk membuat [79]atau "O"dan menambahkannya ke string.

"$""RD"R appends "RD".

"$""a"EEEd$"$""5"Re]Rmenggunakan "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"Rmenambahkan final "1"dan kami selesai.

Output tersirat.


1
O_O ... ini pintar.
rekursif

Terima kasih atas penghargaannya. Saya percaya itu bisa dibuat lebih pendek (mungkin dengan memilih kunci yang berbeda?)
Weijun Zhou

2

brainfuck , 400 + 10 ( +) = 410 byte

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<.>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..++++.<<++++++++++++++.+++.>>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<++++++++.>>>>++++++++++++++++++++++++++++++++++++++++++++++++.+.<

Cobalah online!


2

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 \tdengan TAB):

451D<1DAQX1D11D3AQX4c1DDQX4<SZ!Gq\tGq3WqEEEEESX5\t\t2!<<<<<<<<<eASSWzRD<11$

Sebagai hexdump:

00000000 : 34 35 31 44 3C 31 44 41 51 58 31 44 31 31 44 33 : 451D<1DAQX1D11D3
00000010 : 41 51 58 34 63 31 44 44 51 58 34 3C 53 5A 21 47 : AQX4c1DDQX4<SZ!G
00000020 : 71 09 47 71 33 57 71 45 45 45 45 45 53 58 35 09 : q.Gq3WqEEEEESX5.
00000030 : 09 32 21 3C 3C 3C 3C 3C 3C 3C 3C 3C 65 41 53 53 : .2!<<<<<<<<<eASS
00000040 : 57 7A 52 44 3C 31 31 24                         : WzRD<11$

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:

org 0x100
bits 16
cpu 8086

; Assumes the following start values for registers (as per http://www.fysnet.net/yourhelp.htm):
;
;   AX = 0
;   BX = 0
;   CX = 0x00ff
;   SI = 0x100

; Change e => P and z => O
    xor al, 0x35
    xor [si+0x3c], ax
    xor [si+0x41], ax

; Fix int 0x21 and ret
    push cx
    pop ax              ; AX = 0xFF
    xor [si+0x31], ax
    xor [si+0x33], ax

; Change <1 => _0
    inc cx              ; CX = 0x100
    push cx
    pop ax              ; AX = 0x100
    xor al, 0x63        ; AX = 0x163
    xor [si+0x44], ax

; We're using DOS interrupt 0x21, function 0x09 to output the final string.

; AH must equal 0x09 to select the function.
; DS:DX must point to the $-terminated string we want to output.

; Get DX to the correct value (0x13c)
    push cx
    pop ax              ; AX = 0x100
    xor al, 0x3c        ; AX = 0x13c
    push bx
    pop dx              ; DX = 0

; We use part of the Program Segment Prefix to temporarily store the value,
; since MOVing or PUSHing AX is impossible.
; The part in question is the second File Control Block, which we will not use anyway.
    and [bx+0x71], ax
    or [bx+0x71], ax
    xor dx, [bx+0x71]   ; DX = 0x13c

; NOPs to get int 0x21 and ret on high enough addresses
    inc bp
    inc bp
    inc bp
    inc bp
    inc bp

; Set AH to the correct value. AL is set too, but is ignored by the DOS interrupt.
    push bx
    pop ax              ; AX = 0
    xor ax, 0x0909      ; AX = 0x0909

; What will become instructions int 0x21 and ret
    db 0x32, 0x21
    db 0x3c

; Padding to have the password at an address we can refer to.
    times 60-($-$$) db '<'

; Password
    pw  db  "eASSWzRD<11$"

1

Befunge-98, 43 +10 = 53 byte

"1qA·DR·WSSA·g"%,$,,,,$"s"%,,,$"c"%,%,,q

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.


1

05AB1E , 87 86 byte

"."A1.$R24.$AT<.$R15>.$A21<.$R5.$.V.VD21s.V.V15>X.V"ASSW"15X.V"RD"122D<s2X.V.VTRTX.V.V

Cobalah 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:

Build the string ".b". This is the code to turn integers to upper case letters:
"."             push "."
A               push the lower case alphabet
1.$             drop the first letter of that
R               reverse the remaining string 
24.$            drop the first 24 letters of that, so only "b" remains
AT<.$R15>.$     do the same trick for "j"
A21<.$R5.$      and for "u" 
.V              run "u" as code to turn "j" to "J"
.V              run "J" as code, to join ".", "b" to ".b"

Save that string for later use:
D               duplicate
21              push 21
s               switch the top two elements [".b", 21, ".b"]
.V              run ".b" as code, to get "U"
.V              run "U" as code, to save ".b" in X

Build password string:
15>X.V          push the 16th letter of the alphabet ("P")
"ASSW"          push "ASSW"
15X.V           push "O"
"RD"            push "RD"
122D<s2X.V      push 121, 122, "B"
.V              run that as code to push "_"
TR              push 01
TX.V            push "J"
.V              run that as code, to join everything to the desired string 

Sebagai perbandingan: Cara terpendek untuk mencetak "PASSWORD_01" adalah 6 byte

Cobalah online!


Mungkin kode 05AB1E terpanjang yang pernah ada? ” Nah, ini milik saya yang hampir 6 kali lebih besar . ; p Jawaban yang bagus bagaimanapun juga. Sulit untuk hanya menggunakan sejumlah karakter ASCII yang diizinkan. Begitu banyak builtin nyaman tidak diizinkan untuk tantangan ini. :(
Kevin Cruijssen

1
-1 byte dengan menggunakan TRalih-alih 1<1untuk 01bagian dari output.
Kevin Cruijssen

1

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

W, S, Esc, $, D, A, Ctrl- T, S, R, W, D, Esc, $, 5, Ctrl- Q, 5, f, Ctrl- X, r, Ctrl- Space, 1, Ctrl- X, r, g, 1, Ctrl-T

Pengkodean ini sebagai byte mentah, untuk membuktikan jumlah byte:

00000000: 5753 1b24 4441 1453 5257 441b 2435 1135  WS.$DA.SRWD.$5.5
00000010: 6618 7200 3118 7267 3114                 f.r.1.rg1.

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

  • W, S: Masukkan WSke dalam dokumen.
  • Esc, $: Aktifkan pemeriksa ejaan. WSbukanlah kata yang nyata, tetapi ia menemukan banyak kata dua huruf yang serupa.
  • D: Menggunakan pemeriksa ejaan, koreksi WSke PS. (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: masukkan A, memberi PSA.
  • Ctrl- T: Tukar dua karakter sebelumnya, memberi PAS.
  • S, R, W, D: Type SRWD, pemberian PASSRWD.
  • Esc, $, 5: Kami memohon pemeriksa ejaan lagi, karena kami ingin memperbaiki kami salah eja PASSRWDdalam PASSWORD. Perhatikan bahwa kita tidak dapat menebak kata yang kita inginkan pada percobaan pertama kita, seperti halnya dengan itu PASSWRD, karena kunci untuk menerima kata asli terdekat adalah 0yang tidak dapat kita tekan. Akibatnya, kesalahan ejaan yang sedikit lebih ekstrem PASSRWDdigunakan untuk mendorong kata yang kita inginkan ke posisi 5, di mana kita dapat menerimanya.
  • Ctrl- Q, 5, f: Masukkan karakter dengan kode karakter U + 5f, yaitu _. Dokumen sekarang berbunyi PASSWORD_(atau akan ketika kita mulai mengetik perintah berikutnya; sebelum itu, garis bawah tidak muncul kalau-kalau kita ketik hex digit lain).
  • Ctrl- X, r, Ctrl- Space, 1: Simpan posisi kursor saat ini (relatif terhadap awal file) dalam register 1. Untuk beberapa alasan aneh, ini adalah 1-diindeks, sehingga (setelah menulis 9 karakter sejauh) kursor berada pada posisi 10.
  • Ctrl- X, r, g, 1: Salin isi register 1 ke dalam dokumen. Sekarang berbunyi PASSWORD_10.
  • Ctrl- T: Tukar kedua karakter sebelum kursor. Kami sekarang memiliki PASSWORD_01, seperti pertanyaan yang diajukan.

Jika kita diizinkan untuk menggunakan Alt, kita mungkin dapat meng-encode perintah "invoke spellchecker" sebagai byte tunggal a4daripada mengeja itu sebagai 1b 24; muncul dua kali, sehingga mengarah ke penghematan dua byte. (Sebagian besar terminal modern digunakan 1b 24sebagai penyandian untuk Alt- $untuk menghindari bentrokan dengan UTF-8, tetapi a4penyandian ini juga ditemui dari waktu ke waktu, kadang-kadang tersedia sebagai opsi konfigurasi.)

Kemungkinan penghematan byte mungkin melibatkan kesalahan ejaan golf untuk diperbaiki. PSASWRDakan menjadi byte yang lebih pendek untuk diketik, tetapi sayangnya, pemeriksa ejaan sepertinya tidak mampu memungutnya PASSWORD, jadi PASSRWDadalah pendekatan terbaik yang saya temukan sejauh ini. Pendekatan berbasis register untuk mendapatkan 10juga sangat sulit, tetapi tidak ada banyak cara untuk membuat angka entah dari mana di Emacs, dan 0merupakan karakter yang menyakitkan untuk mendapatkan yang sebaliknya. (Setidaknya ada beberapa kebetulan yang sangat berguna: kursor kebetulan berakhir di posisi 10, yang berisi 0, tepat saat dibutuhkan; dan fakta bahwa Emacs menerima goperasi register yang berlebihan untuk memasukkan konten register ke dalam dokumen. , selain lebih intuitifi.)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.