Tantangan Anda adalah membaca "kata sandi" dari keyboard / input standar.
Tantangan :
- Baca string tanpa
s
terlihat. - Untuk setiap karakter yang masuk
s
, cetak satu karakterc
. - Dalam waktu nyata.
Aturan:
- Anda harus mencetak
c
dalam waktu nyata. Segera setelah pengguna memasukkan karakter yang harus Anda tampilkanc
. c
harus konstan, yaitu harus karakter yang sama.c
dapat berupa karakter apa pun yang terlihat (yaitu tidak boleh berupa baris, spasi, tab, atau yang tidak dicetak baru).c
tidak dapat didasarkan padas
, yaituc
harus didefinisikan / konstan sebelums
dibaca.c
harus sama setiap kali program dijalankan.c
dapat menjadi salah satu karakter dis
jika tidak sengaja, selama semua aturan lain diikuti.- Tak satu pun dari karakter
s
dapat muncul di layar,c
kecuali (lihat aturan sebelumnya). - Anda dapat menggunakan metode input dan output yang masuk akal selama semua aturan lain diikuti.
- Anda dapat mengasumsikan bahwa panjangnya
s
tidak pernah lebih panjang dari lebar jendela terminal / grafik. - Jika menggunakan terminal, program Anda harus berakhir setelah baris baru atau EOF dimasukkan.
Contoh :
Jika s
itu password01
dan c
itu *
, output akan terlihat seperti:
Pemenang :
Pengajuan terpendek di setiap bahasa akan menang.
tkinter
diizinkan untuk bidang input khusus kami (seperti yang ada di HTML), sedemikian rupa sehingga program tidak berhenti ketika masuk ditekan, tetapi ketika Anda menutupEntry
Jendela (X pada Windows dancmd
+W
pada mac)?Jawaban:
str , 5 byte
Karena bug, ini adalah 5 byte. Seharusnya hanya 1 byte:
sumber
cmder
jawaban datang karenaCtrl+Z
komentar Anda : PHTML, 20 byte
Alternatif: HTML + JavaScript, 51 byte
Meskipun OP telah mengkonfirmasi bahwa itu valid, berikut adalah solusi menggunakan JS untuk para puritan!
sumber
oninput=_=>i.value=i.value.replace(/./g,"*")
menghemat satu byte.c
bisa apa saja, Anda dapat menyimpan dua byte lagi denganoninput=_=>i.value=i.value.replace(/./g,1)
Vim, 36 byte:
Ini menggunakan notasi vim-key , begitu
<C-v>
juga control-v ,<CR>
is enter,<esc>
adalah escape key, dan<tab>
merupakan kunci tab.c adalah
'0'
.Berikut ini adalah hexdump untuk membuktikan jumlah byte akurat:
Ini bekerja dengan menjalankan dua perintah ex berikut:
Yang pertama berarti
Dan yang kedua berarti
sumber
Ruby with Shoes, 29 karakter
Output sampel:
sumber
Aceto ,
876 bytePenjelasan:
Baca karakter (
,
), negasikan (!
) dan keluar dengan syarat. Cetak nol di atas tumpukan (p
) dan kembali ke awal.Jalankan dengan
-F
untuk melihat efeknya segera (karena pembilasan)Solusi pertama saya didasarkan pada posting sandbox, dengan spasi diizinkan sebagai karakter pengganti dan tidak perlu keluar saat masuk (4 byte):
sumber
C pada POSIX,
12811711396 byte-11 Terima kasih kepada Quentin yang mencari melalui
termios.h
-4 terima kasih kepada Quentin menunjukkan kesalahan bodohku
-17 karena Quentin adalah penyihir yang aneh.
Ini menempatkan STDIN ke mode mentah / tidak terlihat sehingga dapat menekan tombol secara realtime. Ini membutuhkan 77 byte dan saya yakin saya bisa golf sedikit. Perhatikan bahwa ini tidak mengatur ulang STDIN saat keluar sehingga akan mengacaukan terminal Anda jika Anda tidak melakukannya secara manual.
Berikut ini cara mengatur ulang STDIN:
Output seperti yang ditunjukkan dalam GIF :-)
sumber
termios.h
,ECHO
adalah0000010
danICANON
sekarang0000002
. Ini berarti itu~(ECHO|ICANON)
hanya~10
:)!=
- masing dapat diganti dengan^
, dan'\n'
dengan10
( dengan asumsi UTF-8);)t
penyimpanan dengan array bilangan bulat. Kemudianc_lcflags
berakhir padat[3]
, dan kita tidak membutuhkan nama atau jenis atau#include
, total 94 byte:c,t[15];f(){for(tcgetattr(1,t),t[3]&=~10,tcsetattr(1,0,t);(c=getchar())^10&&c^4;)printf(".");}
- Tapi mungkin Anda sebaiknya saya mempostingnya sebagai jawaban daripada bersenang-senang dengan Anda :)kode mesin x86 pada MS-DOS - 14 byte
Seperti biasa, ini adalah file COM lengkap, yang dapat dijalankan di DosBox, plus sebagian besar varian DOS.
Majelis yang dikomentari:
sumber
xor
adalah 3 byte woppin, dan akan sama besar jika saya membuatnya bekerja secara keseluruhanax
; Saya mencobaxor ax,0a0dh
/test al,al
, tetapi sama besarnya karena bodohtest
adalah dua byte, grrr ...Python 2 , 50 byte
Hanya berfungsi di windows
sumber
AHK , 17 byte
Built-in tidak menarik.
sumber
Java 5-8,
125122131124 byteTidak Terkumpul:
Hasil:
Kredit:
-3 @MD XF (Menunjukkan kesalahan bodoh saya dengan
String[]args
)-7 @KritixiLithos (Ditunjukkan
public class
bisa sajaclass
)sumber
String[]args
perlu?String[]a
.1>0
dievaluasi1
?Java (< 8)
-1>0
mengevaluasi ketrue
, yang berbeda. Saya akan memposting jawaban yang sama di Groovy.Mathematica 34 byte
Tanda bintang tunggal muncul, setelah setiap karakter dimasukkan. Tanda kutip kosong adalah untuk judul yang muncul di jendela input pop-up.
The
;
mencegah password dari yang dicetak.sumber
Vim,
58505250 byteDitambahkan untuk memastikan itu menangani ruang dengan benar.
Terima kasih kepada @DJMcMayhem untuk banyak bantuan dan ide
Dalam sintaks kunci tombol Vim di bawah ini. Karakter ditandai seperti dengan
^
yangCtrl+<char>
, begitu^Q
=Ctrl+q
Tidak ada tautan TIO, karena Anda harus langsung memasukkan ke Vim (sebagai ganti dari pra-input seperti biasa). Untuk menjalankan kode Anda perlu mengetikkannya ke Vim, dan kemudian Anda bisa mengetikkan kata sandi Anda dan tekan enter. Tidak akan melakukan apa pun dengan kata sandi. Bahkan tidak akan tahu apa itu. Segera setelah Anda menekan enter, jendela Vim akan
:q!
Ini bekerja dengan memetakan semua ASCII yang dapat dicetak ke
*
dalam mode penyisipan, dan pemetaan<CR>
ke<ESC>:q!<CR>
sumber
<C-v>, <esc> and <C-a>
tetapi sulit untuk mengatakannya.FLTK, 47 karakter
Contoh dijalankan:
Output sampel:
sumber
Memproses, 53 byte
Ini mengambil input melalui penekanan tombol dari jendela grafis. Karakter yang dipilihnya untuk mewakili kata sandi adalah
0
. Perhatikan bahwa karena framerate tinggi, setiap penekanan tombol akan muncul sebagai multiple0
s (dan juga karena fakta bahwa ini adalahkeyPressed
dan bukankeyTyped
(bukan boolean) ataukeyrelease
).sumber
Bash , 54 byte
Untuk tujuan penilaian,
$'\r'
dapat diganti dengan carriage return literal.Cobalah online! (tidak banyak yang bisa dilihat)
sumber
ZX81 BASIC, 54 byte
Dalam set karakter ZX81 karakter yang dapat dicetak berada dalam ruang jangkauan
Z
, meskipun Anda tidak dapat memasukkan spasi dengan cara ini karena karakter break.ZX Spectrum BASIC, 24 byte
Perhatikan bahwa
>=
dihitung sebagai kata kunci byte tunggal dalam Sinclair BASIC (codepoint 140 dalam hal ini).sumber
PRINT
untuk?
, saya tahu bahwa karya dalam banyak dialek BASIC tuaPRINT
adalah token 1-byte, hanya diwakili di layar sebagai 7 karakter (kecuali setelahTHEN
, ketika ruang terdepan ditekan).R, 29 byte
Built-in yang menangani entri kata sandi. Buka jendela baru dan ganti input dengan titik.
invisible
digunakan untuk menekan pencetakan kata sandi ke STDOUT.sumber
Tcl / Tk, 18
Harus dijalankan di dalam shell interaktif (atau singkatan diaktifkan):
sumber
grid [entry .e -sh *]
dan-sh
merupakan singkatan opsi untuk-show
. 23 byte adalah apa yang saya anggap minimum untuk program ungolfed terpelihara melakukan ini.Vim, 15 penekanan tombol
<S-tab>
cara shift + tab .Rupanya, ada builtin untuk ini yang saya tidak sadari. Karena saya sangat suka jawaban manual saya , dan pendekatan ini sangat berbeda, saya pikir saya harus memposting jawaban baru daripada mengedit.
Ini berfungsi dengan memanggil
inputsecret
fungsi, lalu segera berhenti setelah keluar.sumber
6502 kode mesin (C64),
2221 bytePenggunaan :
SYS 2062
Daftar pembongkaran yang dikomentari (ACME) yang dikomentari, Anda dapat menghapus komentar dari tiga baris komentar pertama yang akan diluncurkan dengan
RUN
sekali dimuat:Komentar:
sumber
Keempat (gforth) , 54 byte
Penjelasan
sumber
Python 3 +
tkinter
-6361 byteMenampilkan a
1
untuk setiap karakter, berakhir saat menutup jendela (OP mengatakan diizinkan).sumber
from tkinter import*
(baris baru) akanEntry(show=1).pack();Tk().mainloop()
berfungsi?tkinter
jendela berbeda . Satu dengan bidang teks, satu kosong. Rasanya tidak benar bagi saya.show=
?show=
Groovy,
7773 byteIni adalah penutupan anonim, dengan 0 input yang diperlukan.
Tidak Terkumpul:
Sunting 1 (-4 byte): Komponen # terlihat dapat langsung diakses, baca lebih lanjut di sini .
sumber
Mikro , 35 byte
penjelajahan:
sumber
BF, 24 byte
Bekerja dengan bf.doleczek.pl . Anda dapat mengirim karakter nol ke program dengan Ctrl + Z.
Solusi alternatif:
BF, 1 byte
Ini adalah solusi yang sangat menjemukan. Terminal saya memiliki lebar 0 karakter , jadi tolong jangan masukkan kata sandi lebih lama dari itu.
sumber
\b
adalah suatu hal. : P\b
bagaimanapun juga tidak dapat dicetak.\b
untuk mengganti input, benar?PowerShell, 12 byte
Ini membaca input dari host dan, dengan tanda -a memperlakukannya sebagai keamanan / kata sandi. Di ISE itu muncul kotak pesan yang memiliki perilaku yang sama karena ISE tidak memungkinkan penangkapan penekanan tombol.
sumber
QBasic, 48 byte
INPUT$(1)
membaca karakter selanjutnya dari input keyboard. (Ini dapat mencakup hal-hal seperti tab, backspace, dan melarikan diri, tetapi karena OP tidak mengatakan apa-apa tentang itu saya akan menganggap kita tidak perlu khawatir tentang mereka.) Jika karakternya adalah\r
(ASCII 13), hentikan program; jika tidak, cetak*
tanpa baris baru. Ulangi tak terhingga iklan.sumber
Perl + Bash, 30 byte
c
adalah*
, menggunakanread
dari bash, jadi bukan solusi Perl murni.sumber
brainfuck, 21 byte
Yang terakhir, aku janji. Tanpa input = -1, akhir input = 0
Bagaimana itu bekerja
sumber
,[>-.,]
QBIC , 44 byte
Penjelasan
sumber