อ่านรหัสผ่าน


20

ความท้าทายของคุณคือการอ่าน "รหัสผ่าน" จากแป้นพิมพ์ / อินพุตมาตรฐาน

ถาม :

  • อ่านสตริงอย่างsล่องหน
  • สำหรับแต่ละตัวละครในพิมพ์ตัวอักษรsc
  • ในแบบเรียลไทม์

กฎ:

  • คุณต้องพิมพ์cแบบเรียลไทม์ cทันทีที่ผู้ใช้ป้อนตัวอักษรที่คุณจะต้องแสดง
  • c จะต้องคงที่นั่นคือมันจะต้องเป็นตัวละครเดียวกัน
  • cสามารถเป็นอักขระที่มองเห็นได้ (เช่นไม่สามารถขึ้นบรรทัดใหม่เว้นวรรคแท็บหรือไม่สามารถพิมพ์ได้)
  • cไม่สามารถอ้างอิงได้sเช่นcต้องกำหนด / ค่าคงที่ก่อนsอ่าน
  • c ต้องเหมือนกันทุกครั้งที่รันโปรแกรม
  • cสามารถเป็นหนึ่งในตัวละครในsถ้าโดยบังเอิญตราบใดที่มีการปฏิบัติตามกฎอื่น ๆ
  • ไม่มีตัวอักษรของที่sอาจปรากฏบนหน้าจอcยกเว้น (ดูกฎก่อนหน้า)
  • คุณสามารถใช้วิธีการอินพุตและเอาท์พุตที่สมเหตุสมผลได้หากมีการปฏิบัติตามกฎอื่น ๆ ทั้งหมด
  • คุณอาจคิดว่าความยาวsไม่เกินความกว้างหน้าต่างเทอร์มินัล / กราฟิก
  • หากใช้เทอร์มินัลโปรแกรมของคุณควรยกเลิกหลังจากมีการขึ้นบรรทัดใหม่หรือ EOF

ตัวอย่าง :

ถ้าsเป็นpassword01และcเป็น*ผลลัพธ์จะมีลักษณะดังนี้:

password

ผู้ชนะ :

การส่งที่สั้นที่สุดในแต่ละภาษาชนะ


หลามพร้อมกับtkinterอนุญาตให้ป้อนข้อมูลในฟิลด์กำหนดเองของเรา (เช่นอันที่อยู่ใน HTML), ดังนั้นโปรแกรมจะไม่ยุติเมื่อกด enter แต่เมื่อคุณปิดEntryหน้าต่าง 's (X บน Windows และcmd+ Wบน mac)?
นาย Xcoder

@ Mr.Xcoder ใช่ถูกต้องแล้ว
MD XF

เราสามารถใช้ Ctrl + J เพื่อแสดงบรรทัดใหม่ตามตัวอักษรในเทอร์มินัลได้หรือไม่? หรือมิฉะนั้นเราสามารถใช้ Ctrl + Z แทนการป้อนได้หรือไม่
Conor O'Brien

@ ConorO'Brien ชี้แจงว่าอินพุตควรสิ้นสุดอย่างไรในเทอร์มินัล
MD XF

2
จะเกิดอะไรขึ้นหากผู้ใช้กด backspace
zdimension

คำตอบ:


6

str , 5 ไบต์

n=?,1

เนื่องจากข้อผิดพลาดนี่คือ 5 ไบต์ ควรมี 1 ไบต์เท่านั้น:

1

Execution of <code>n=?,1</code>


เห็นcmderคำตอบอย่างแน่นอนเนื่องจากCtrl+Zความคิดเห็นของคุณ: P
MD XF

10/10 เครื่องมือที่เหมาะสมสำหรับงาน
Erik the Outgolfer

20

HTML, 20 ไบต์

<input type=password


ทางเลือก: HTML + JavaScript, 51 ไบต์

แม้ว่า OP ได้ยืนยันแล้วว่าถูกต้อง แต่นี่เป็นวิธีแก้ปัญหาโดยใช้ JS สำหรับผู้สอน!

<input id=i oninput=i.value=i.value.replace(/./g,8)


4
FGITW ทุกคน? : P (ใช้เวลาสิบวินาทีจริง ๆ )
MD XF

oninput=_=>i.value=i.value.replace(/./g,"*")บันทึกเป็นไบต์
Arjun

เนื่องจากcสามารถเป็นอะไรก็ได้คุณสามารถบันทึกอีกสองไบต์ด้วยoninput=_=>i.value=i.value.replace(/./g,1)
Arjun

ฉันจะกังวลเกี่ยวกับว่าถ้า (เมื่อ) บางคนประกาศวิธีแก้ปัญหา HTML เท่านั้นของฉันไม่ถูกต้อง @Arjun;) ฉันโยน JS หนึ่งเข้าด้วยกันอย่างรวดเร็วเพื่อปลอบคนไม่กี่คน!
Shaggy

6
คำอธิบายอยู่ที่ไหนฉันไม่เข้าใจ
Magic Octopus Urn

11

เป็นกลุ่ม 36 ไบต์:

:im <C-v><CR> <C-v><esc>ZQ<CR>:au I<tab><tab> * let v:char=0<CR>i

การใช้งานนี้เป็นกลุ่มที่สำคัญสัญกรณ์เพื่อ<C-v>เป็นการควบคุม-V , <CR>คือป้อน<esc>เป็นกุญแจสำคัญในการหลบหนีและ<tab>เป็นกุญแจสำคัญในแท็บ

'0'คือ

นี่คือ hexdump เพื่อพิสูจน์จำนวนไบต์ที่ถูกต้อง:

00000000: 3a69 6d20 160a 2016 1b5a 510a 3a61 7520  :im .. ..ZQ.:au 
00000010: 4909 0920 2a20 6c65 7420 763a 6368 6172  I.. * let v:char
00000020: 3d30 0a69                                =0.i

สิ่งนี้ใช้ได้โดยรันคำสั่ง ex สองคำสั่งต่อไปนี้:

:imap <CR> <esc>ZQ
:autocmd InsertCharPre * let v:char=0

คนแรกหมายถึง

:imap               " Anytime the following is pressed in insert mode:
      <CR>          "   (the 'enter' key)
           <esc>ZQ  " Then act as if the user instead pressed '<esc>ZQ' (close the buffer)

และอันที่สองหมายถึง

:autocmd                                " Automatically as vim runs:
         InsertCharPre                  "   Any time the user is about to insert a char
                       *                "   In any type of file
                         let v:char=0   "     Then instead insert a '0' character

ฉันคิดว่ามันไม่มีทางที่ฉันจะได้รับสิ่งนี้โดยใช้วิธีการปัจจุบันของฉันโดยไม่ละเลยช่องว่างอย่างน้อยที่สุด .. คำตอบที่ดี!
nmjcman101

o_O มันเรียบร้อย ...
นาย Xcoder


6

Aceto , 8 7 6 ไบต์

,!`XpO

คำอธิบาย:

อ่านอักขระ ( ,), ปฏิเสธมัน ( !) และออกจากเงื่อนไข พิมพ์ศูนย์ที่ด้านบนของสแต็ก ( p) และกลับไปที่จุดเริ่มต้น

ทำงานด้วย-Fเพื่อดูผลทันที (เพราะล้างออก)

วิธีแก้ปัญหาแรกของฉันขึ้นอยู่กับการโพสต์ sandbox โดยอนุญาตให้มีช่องว่างเป็นอักขระการแทนที่และไม่จำเป็นต้องออกจากการป้อน (4 ไบต์):

,'p>

5

C บน POSIX, 128 117 113 96 ไบต์

-11 ขอบคุณ Quentin ที่ค้นหาผ่านtermios.h
-4 ขอบคุณ Quentin ที่ชี้ให้เห็นข้อผิดพลาดที่โง่ของฉัน
-17 เพราะเคว็นตินเป็นพ่อมดที่น่ากลัว

c,t[15];f(){for(tcgetattr(1,t),t[3]&=~10,tcsetattr(1,0,t);(c=getchar())^10&&c^4;)printf(".");}

สิ่งนี้ทำให้ STDIN เข้าสู่โหมด raw / ล่องหนเพื่อให้สามารถกดปุ่มในเวลาจริง สิ่งนี้ใช้เวลา 77 ไบต์และฉันแน่ใจว่าฉันสามารถตีกอล์ฟได้เล็กน้อย โปรดทราบว่านี่จะไม่รีเซ็ต STDIN เมื่อออกจากการทำงานซึ่งจะทำให้เทอร์มินัลของคุณยุ่งเหยิงหากคุณไม่ทำด้วยตนเอง

นี่คือวิธีที่คุณสามารถรีเซ็ต STDIN:

void stdin_reset(void)
{
    struct termios t;
    get_stdin(&t);
    t.c_lflag |= ECHO;
    t.c_lflag |= ICANON;
    set_stdin(&t);
}

ผลลัพธ์ตามที่แสดงใน GIF :-)


1
ขุดเป็นของฉันtermios.h, ECHOเป็น0000010และมีICANON 0000002ซึ่งหมายความว่า~(ECHO|ICANON)เป็นเพียง~10:)
เคว็นติ

@Quentin แก้ไขแล้ว! ไชโย: D
MD XF

1
นอกจากนี้แต่ละคน!=สามารถถูกแทนที่ด้วย^และ'\n'ด้วย10(สมมติว่า UTF-8);)
Quentin

2
ถ้าเราไปเต็ม UB เราสามารถแทนที่tที่เก็บข้อมูลด้วยอาร์เรย์จำนวนเต็ม จากนั้นก็c_lcflagsสิ้นสุดลงที่t[3]และเราไม่จำเป็นต้องมีชื่อหรือประเภทหรือ#includeรวมเป็น 94 ไบต์: c,t[15];f(){for(tcgetattr(1,t),t[3]&=~10,tcsetattr(1,0,t);(c=getchar())^10&&c^4;)printf(".");}- แต่บางทีคุณควรที่จะให้ฉันโพสต์มันเป็นคำตอบมากกว่าที่จะสนุกกับคุณ :)
Quentin

1
@Quentin โอ้ ... ของฉัน คุณเป็นพ่อมด และฉันคิดว่าฉันเก่งใน C ... หากคุณต้องการโพสต์เป็นคำตอบของคุณเองและฉันจะย้อนกลับการแก้ไขของฉันมิฉะนั้นฉันจะทิ้งมันไว้ในเหมือง
MD XF

4

รหัสเครื่อง x86 บน MS-DOS - 14 ไบต์

ตามปกตินี่เป็นไฟล์ COM แบบเต็มซึ่งสามารถเรียกใช้บน DosBox รวมถึงตัวแปร DOS ส่วนใหญ่

00000000  b4 08 b2 2a cd 21 80 f4  0a 3c 0d 75 f7 c3        |...*.!...<.u..|
0000000e

ประกอบความเห็น:

    org 100h

section .text

start:
    mov ah,8h       ; ah starts at 08h (read console, no echo)
    mov dl,'*'      ; write asterisks (we could have left whatever
                    ; startup value we have here, but given that dx=cs,
                    ; we have no guarantee to get a non-zero non-space
                    ; value)
lop:
    ; this loop runs twice per character read: the first time with
    ; ah = 08h (read console, no echo syscall), the second time with
    ; ah = 02h (write console); a xor is used to switch from one
    ; mode to the other
    int 21h         ; perform syscall
    xor ah,0ah      ; switch syscall 08h <=> 02h
    cmp al,0dh      ; check if we read a newline (if we wrote stuff
                    ; we are just checking the last value read, so
                    ; no harm done; at the first iteration al starts
                    ; at 0, so no risk here)
    jne lop         ; loop if it wasn't a newline
quit:
    ret             ; quit

2
...ไม่มีทาง. ที่น่าตื่นตาตื่นใจ.
MD XF

ขอบคุณ แต่ฉันรู้สึกว่ายังมีสิ่งอื่นที่จะตัดแต่ง ที่xorเป็น woppin' 3 ไบต์และจะตรงตามที่ใหญ่ถ้าฉันทำมันทำงานบนทั้งax; ฉันพยายามxor ax,0a0dh/ test al,al, แต่มันใหญ่พอ ๆ กับที่โง่เพราะโง่testคือสองไบต์, grrr ...
Matteo Italia

3

Python 2 , 50 ไบต์

from msvcrt import*
while'\r'!=getch():print'\b*',

ใช้งานได้เฉพาะบน windows


1
น่าเศร้าที่ใช้งานได้กับ Windows เท่านั้น: ((
Mr. Xcoder


3

Java 5-8, 125 122 131 124 ไบต์

class X{public static void main(String[]a){new java.awt.Frame(){{add(new javax.swing.JPasswordField());setVisible(1>0);}};}}

Ungolfed:

class X{
    public static void main(String[]a){
        new java.awt.Frame(){
            {
                add(new javax.swing.JPasswordField());
                setVisible(1>0);
            }
        };
    }
}

ผลลัพธ์:

enter image description here

เครดิต:

-3 @MD XF (ชี้ให้เห็นข้อผิดพลาดที่โง่ของฉันด้วยString[]args)

-7 @KritixiLithos ( public classสามารถระบุได้class)


1
คือString[]argsจำเป็น?
MD XF

@MDXF ถ้าฉันต้องการให้คำตอบสำหรับ Java 8 มีมากมายของสิ่งที่ฉันสามารถทำได้ อย่างไรก็ตามฉันจะทำให้นี่เป็นคำตอบทั่วไปของ Java อย่างไรก็ตามอย่างไรก็ตามฉันสามารถทำมันString[]aได้
Magic Octopus Urn

คุณลืมที่จะอัพเดทคำตอบกอล์ฟ ยังไม่ได้1>0ประเมิน1หรือไม่
MD XF

@MDXF ในJava (< 8)- 1>0ประเมินผลtrueซึ่งแตกต่างกัน ฉันจะโพสต์คำตอบเดียวกันนี้ใน Groovy
Magic Octopus Urn

@StephenS นี่เป็นคำตอบทั่วไปของ Java ไม่ใช่คำตอบของ Java 8
Magic Octopus Urn

3

Mathematica 34 ไบต์

 InputString["",FieldMasked->True];

เครื่องหมายดอกจันเดียวปรากฏขึ้นหลังจากป้อนอักขระแต่ละตัวเครื่องหมายคำพูดว่างสำหรับชื่อที่ปรากฏในหน้าต่างป้อนข้อมูลแบบผุดขึ้น

;ป้องกันไม่ให้รหัสผ่านจากการพิมพ์

enter image description here


พื้นที่ชั้นนำโดยเจตนา?
MD XF

2

เป็นกลุ่ม, 58 50 52 50 ไบต์

เพิ่มเพื่อให้แน่ใจว่ามีการจัดการช่องว่างอย่างเหมาะสม

ขอบคุณ @DJMcMayhem สำหรับความช่วยเหลือและแนวคิดมากมาย

i:im 32 *Y94pVGg
kWcW<Space>
:im 
 ZQ
dG@"qi

ในไวยากรณ์คีย์ทั่วไปเป็นกลุ่มด้านล่าง ตัวละครที่มีเครื่องหมายเช่นเดียวกับ^ที่มีCtrl+<char>ดังนั้น^Q=Ctrl+q

i:im ^V^V32 *^[Y94pVGg^A
kWcW<Space>^[
:im ^V
 ZQ
dG@"qi

ไม่มีลิงก์ TIO เนื่องจากคุณต้องป้อนข้อมูลโดยตรงไปยัง Vim (ไม่ใช่การป้อนข้อมูลล่วงหน้าเหมือนปกติ) ในการเรียกใช้รหัสคุณต้องพิมพ์ลงใน Vim จากนั้นคุณสามารถพิมพ์รหัสผ่านและกด Enter มันจะไม่ทำอะไรกับรหัสผ่าน มันจะไม่รู้ด้วยซ้ำว่ามันคืออะไร ทันทีที่คุณกดเข้าไปที่หน้าต่างกลุ่มจะ:q!

สิ่งนี้ทำงานโดยการแมป ASCII ที่พิมพ์ได้ทั้งหมดไปยัง*ในโหมดแทรกและการจับคู่<CR>กับ<ESC>:q!<CR>


อาจอธิบายให้ชัดเจนว่าสัญลักษณ์คืออะไร? ฉันคิดว่าพวกเขาควรจะเป็น<C-v>, <esc> and <C-a>แต่มันยากที่จะบอก
DJMcMayhem

@DJMcMayhem จะทำอย่างไร ฉันคิดว่าคุณสามารถวางลงในกลุ่มและพวกเขาจะปรากฏขึ้นอย่างเหมาะสม
nmjcman101


2

FLTK, 47 ตัวอักษร

Function{}{}{Fl_Window{}{}{Fl_Input{}{type 5}}}

วิ่งตัวอย่าง:

bash-4.4$ fluid -c password.fl

bash-4.4$ fltk-config --compile password.cxx 
g++ -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -fvisibility-inlines-hidden -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -o 'password' 'password.cxx' -Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -lfltk -lX11

bash-4.4$ ./password 

ตัวอย่างผลลัพธ์:

password input in FLTK


2

กำลังประมวลผล 53 ไบต์

String a="";void draw(){text(keyPressed?a+=0:a,9,9);}

สิ่งนี้จะรับอินพุตผ่านการกดปุ่มจากหน้าต่างกราฟิก 0ตัวละครมันเลือกที่จะเป็นตัวแทนที่มีรหัสผ่านที่มี โปรดทราบว่าเนื่องจากอัตราเฟรมสูงแต่ละปุ่มกดจะปรากฏเป็นหลาย ๆ0s (และเนื่องจากความจริงที่ว่านี่คือkeyPressedและไม่ใช่keyTyped(ไม่ใช่บูลีน) หรือkeyrelease)

gif


2

Bash , 54 ไบต์

while read -eN1 c 2>&-;[[ ${c/$'\r'/} ]];do printf X;done

เพื่อวัตถุประสงค์ในการให้คะแนน$'\r'สามารถถูกแทนที่ด้วยผลตอบแทนการขนส่งตามตัวอักษร

ลองออนไลน์! (ไม่มากไปดู)


2

ZX81 พื้นฐาน 54 ไบต์

10 IF LEN INKEY$ THEN GOTO PI
30 IF NOT LEN INKEY$ THEN GOTO EXP PI
50 IF INKEY$>"Z" THEN STOP
70 PRINT "*";
90 GOTO PI

ในชุดอักขระ ZX81 อักขระที่พิมพ์ได้นั้นอยู่ในระยะห่างถึงZแม้ว่าคุณจะไม่สามารถป้อนช่องว่างด้วยวิธีนี้เนื่องจากเป็นตัวแบ่ง

ZX Spectrum BASIC, 24 ไบต์

10 PAUSE NOT PI: IF INKEY$>=" " THEN PRINT "*";:GOTO PI

โปรดทราบว่า>=นับเป็นคำหลักไบต์เดียวใน Sinclair BASIC (codepoint 140 ในกรณีนี้)


ช่องว่างระหว่างหมายเลขบรรทัดและฟังก์ชันจำเป็นหรือไม่
MD XF

คุณช่วยย่อPRINTให้สั้นลงได้?ไหมฉันรู้ว่ามันใช้งานได้กับภาษาเบสิกภาษาเก่าแก่มากมาย
MD XF

@MDXF PRINTเป็นโทเค็นขนาด 1 ไบต์เพียงแสดงบนหน้าจอเป็นอักขระ 7 ตัว (ยกเว้นหลังจากTHENเมื่อมีการหยุดพื้นที่นำหน้า)
Neil

2

R, 29 ไบต์

invisible(openssl::askpass())

ในตัวที่จัดการรายการรหัสผ่าน เปิดหน้าต่างใหม่และแทนที่อินพุตด้วยจุด invisibleใช้เพื่อไม่ให้พิมพ์รหัสผ่านไปยัง STDOUT


2

Tcl / Tk, 18

gri [ent .e -sh *]

ต้องทำงานบนในเชลล์การโต้ตอบ (หรือเปิดใช้งานตัวย่อ):

enter image description here


21 bytes without the tricky command abbreviations: grid [entry .e -sh *] and -sh is an option abbreviation for -show. 23 bytes is what I'd consider a minimum for a maintainable ungolfed program doing this.
Donal Fellows

2

Vim, 15 keystrokes

:cal inp<S-tab>'')|q<cr>

<S-tab> means shift + tab.

Apparently, there is a builtin for this that I wasn't aware of. Since I really like my manual answer, and this approach is radically different, I figured I should post a new answer instead of editing.

วิธีนี้ใช้งานได้โดยการเรียกใช้inputsecretฟังก์ชั่นแล้วออกจากทันทีหลังจากออก


2

รหัสเครื่อง 6502 (C64) 22 21 ไบต์

0e 08 20 9f ff 20 e4 ff f0 f8 c9 0d f0 01 a9 60 20 d2 ff 50 ed

การใช้งาน :SYS 2062

รายการแยกชิ้นส่วนความคิดเห็น (ACME) คุณสามารถยกเลิกการคอมเม้นต์สามบรรทัดแรกที่แสดงความคิดเห็นเพื่อเปิดใช้งานRUNเมื่อโหลดครั้งเดียว:

!cpu 6502
!to "password2.prg",cbm
;* = $0801                               ; BASIC starts at #2049
;!byte $0d,$08,$dc,$07,$9e,$20,$32,$30   ; BASIC to load $c000
;!byte $36,$32,$00,$00,$00               ; inserts BASIC line: 2012 SYS 2062

    GETIN  =  $FFE4
    SCNKEY =  $FF9F
    CHROUT =  $FFD2

* = $080e
keyScan:
    jsr SCNKEY  ; get key
    jsr GETIN   ; put key in A

    beq keyScan ; if no key pressed loop    

    cmp #13     ; check if RETURN was pressed
    beq $081b   ; if true go to operand of next instruction (#$60 = rts)

    lda #$60    ; load char $60 into accumulator
    jsr CHROUT  ; print it

    bvc keyScan ; loop

ความคิดเห็นที่:

  • ฉันไม่พบอะไรเลยในเอกสาร แต่ดูเหมือนว่าหลังจากการเรียก GETIN สาขาจะได้รับเฉพาะที่ที่ไม่มีการกดปุ่มใหม่เท่านั้น
  • การใช้ # $ 60 เป็นถ่านเอาท์พุทไบต์นั้นสามารถนำกลับมาใช้ใหม่เป็นคำสั่ง "rts" เมื่อกด RETURN

2

Forth (gforth) , 54 ไบต์

: f begin key dup 4 - swap 13 - * while ." *" repeat ;

คำอธิบาย

begin      \ enters the loop
    key    \ waits for a single character as input, places ascii code of character on stack
    dup    \ duplicates the key value on the stack
    4 -    \ subtracts 4 from the key value (shorter way of checking for not equals)
    swap   \ swaps the top two stack values
    13 -   \ subtract 13 from the key value
    *      \ multiply top two stack values (shorter version of "and")
while      \ if top of stack is true, enter loop body, else exit loop
    ." *"  \ output *
repeat     \ go back to beginning of loop

1

Python 3 + tkinter - 63 61 bytes

from tkinter import*
t=Tk();Entry(show=1).pack();t.mainloop()

Displays a 1 for every character, ends when closing window (OP said it's allowed).

Gif


Would from tkinter import* (newline) Entry(show=1).pack();Tk().mainloop() work?
Conor O'Brien

@ConorO'Brien testing
Mr. Xcoder

@ConorO'Brien no. It produces two different tkinter windows. One with the text field, one empty. It doesn't seem right to me.
Mr. Xcoder

Do you need the show=?
Esolanging Fruit

@Challenger5 Yes, we do need the show=
Mr. Xcoder

1

Groovy, 77 73 bytes

{new java.awt.Frame(){{add(new javax.swing.JPasswordField());visible=1}}}

This is an anonymous closure, with 0 required inputs.

Ungolfed:

{
    new java.awt.Frame() {
        {
            add(new javax.swing.JPasswordField())
            visible=1
        }
    }
}

Edit 1 (-4 bytes): Component#visible can be directly accessed, read more here.


1

Micro, 35 bytes

"":i{L46c:\
i~+:i
i10c=if(,a)}a
i:\

explination:

"":i                      create new blank string 'i'
    {                          begin input loop
     L                         input a character
      46c:\                    display ascii char #46 (.) (it is popped, leaving the input char from 'L'
           i~+:i               push i, flip i and the char around, concatinate them, and store that to i
                i10c=if(,a)}a  OK, a lot happens here, if a NL is in i, the loop terminates, and the final i:\ will display the input


1
That's a pretty good first attempt at a language! +1
MD XF

1

BF, 24 bytes

++++++[->++++++<],[>.<,]

Works with bf.doleczek.pl. You can send a zero char to the program with Ctrl+Z.

Alternative solution:

BF, 1 byte

,

This is a very tongue-in-cheek solution. My terminal is 0 characters wide, so please don't enter any passwords longer than that.


Whoa... not bad!
MD XF

@MDXF Are you referring to the 24 byte one or the 1 byte one?
Esolanging Fruit

Clearly the 24-byte one. I completely forgot that printing \b is a thing. :P
MD XF

@MDXF What do you mean by that? \b is unprintable anyways.
Esolanging Fruit

No I mean your solution uses \b to override the input, correct?
MD XF

1

PowerShell, 12 bytes

Read-Host -a

This reads input from host and, with the -a flag treats it as a securestring/password. In the ISE it pops up a message box which has a similar behavior since the ISE doesn't allow keypress capture.

PS C:\Windows\system32> Read-Host -a
************

1

QBasic, 48 bytes

DO
a$=INPUT$(1)
IF ASC(a$)=13THEN END
?"*";
LOOP

INPUT$(1) reads the next character from keyboard input. (This can include things like tab, backspace, and escape, but since the OP didn't say anything about those I'll assume we don't have to worry about them.) If the character is \r (ASCII 13), terminate the program; otherwise, print * without a newline. Repeat ad infinitum.



1

brainfuck, 21 bytes

-[+>,[<->+[<.>[-]]]<]

Last one, I promise. No input = -1, end of input = 0

How it Works

-[  Enters the loop
  +>, Get input
     [<->+ If not end of input it create the ÿ character and check if the input is not -1
          [<.>[-]]] If there was input, print the ÿ character. 
                    <] Exit the loop if end of input

Your code is missing a closing bracket. And why do you make it that complicated? A simple "print a 'ÿ' for every input character" could be accomplished with a simple ,[>-.,]
Dorian

@Dorian The bracket was a mistake, but the complexity arises from having to handle both no input and end of input
Jo King

0

QBIC, 44 bytes

{X=inkey$~X<>@`|~X=chr$(13)|_X\Y=Y+@*`_C?Y

Explanation

{            DO
X=inkey$     Read a char, set it to X$
             Note that INKEY$ doesn't wait for keypress, but simply sends out "" if no key was pressed.
~X<>@`|      IF X$ has a value THEN
~X=chr$(13)| IF that value is ENTER
_X           THEN END
\            ELSE
Y=Y+@*`      append a literal * to Y$
_C           Clear the screen
?Y           Display Y$ (having 1 * for each char entered)
             The IF's and the DO-loop are auto-closed at EOF{            DO
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.