Đọc mật khẩu


20

Thử thách của bạn là đọc "mật khẩu" từ bàn phím / đầu vào tiêu chuẩn.

Thử thách :

  • Đọc một chuỗi svô hình.
  • Đối với mỗi ký tự trong s, in một ký tự c.
  • Trong thời gian thực.

Quy tắc:

  • Bạn phải in ctrong thời gian thực. Ngay khi người dùng nhập một ký tự, bạn phải hiển thị c.
  • c phải là hằng số, tức là nó phải cùng một ký tự.
  • ccó thể là bất kỳ ký tự hiển thị nào (nghĩa là nó không thể là dòng mới, dấu cách, tab hoặc không thể in được).
  • ckhông thể dựa vào s, tức là cphải được xác định / hằng trước khi sđọc.
  • c phải giống nhau mỗi khi chương trình được chạy.
  • ccó thể là một trong những nhân vật snếu tình cờ, miễn là tuân theo tất cả các quy tắc khác.
  • Không có ký tự nào scó thể xuất hiện trên màn hình, cngoại trừ (xem quy tắc trước đó).
  • Bạn có thể sử dụng bất kỳ phương pháp nhập và xuất hợp lý nào miễn là tuân theo tất cả các quy tắc khác.
  • Bạn có thể cho rằng chiều dài skhông bao giờ dài hơn chiều rộng cửa sổ thiết bị đầu cuối / đồ họa.
  • Nếu sử dụng thiết bị đầu cuối, chương trình của bạn sẽ chấm dứt sau khi nhập dòng mới hoặc EOF.

Ví dụ :

Nếu sđã password01cđang *, đầu ra sẽ trông giống như:

mật khẩu

Người chiến thắng :

Trình ngắn nhất trong mỗi ngôn ngữ chiến thắng.


Có phải python tkinterđược phép cho trường nhập liệu tùy chỉnh của chúng tôi (như trường trong HTML), sao cho chương trình không chấm dứt khi nhấn enter, nhưng khi bạn đóng EntryCửa sổ (X trên Windows và cmd+ Wtrên mac)?
Ông Xcoder

@ Mr.Xcoder Vâng, điều đó hợp lệ.
MD XF

Chúng tôi có thể sử dụng Ctrl + J để thể hiện một dòng mới theo nghĩa đen trong thiết bị đầu cuối không? Ngoài ra, chúng ta có thể sử dụng Ctrl + Z thay vì nhập không?
Conor O'Brien

@ ConorO'Brien Làm rõ cách kết thúc đầu vào trong thiết bị đầu cuối.
MD XF

2
Điều gì sẽ xảy ra nếu người dùng nhấn backspace?
zdimension

Câu trả lời:


6

str , 5 byte

n=?,1

Do một lỗi, đây là 5 byte. Nó chỉ có 1 byte:

1

Thực thi <code> n =?, 1 </ code>


Chắc chắn đã thấy cmdercâu trả lời sắp tới do Ctrl+Znhận xét của bạn : P
MD XF

10/10 công cụ phù hợp cho công việc
Erik the Outgolfer

20

HTML, 20 byte

<input type=password


Thay thế: HTML + JavaScript, 51 byte

Mặc dù OP đã xác nhận rằng hợp lệ, đây là một giải pháp sử dụng JS cho những người theo chủ nghĩa thuần túy!

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


4
FGITW, có ai không? : P (đưa anh ta theo đúng nghĩa đen mười giây)
MD XF

oninput=_=>i.value=i.value.replace(/./g,"*")tiết kiệm một byte.
Arjun

ccó thể là bất cứ điều gì, bạn có thể lưu thêm hai byte vớioninput=_=>i.value=i.value.replace(/./g,1)
Arjun

Tôi sẽ lo lắng về việc nếu ai đó tuyên bố giải pháp chỉ HTML của tôi không hợp lệ, @Arjun;) Tôi chỉ nhanh chóng ném một cái JS để xoa dịu một vài người!
Xù xì

6
Lời giải thích ở đâu, tôi không hiểu.
Bạch tuộc ma thuật Urn

11

Vim, 36 byte:

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

Sử dụng này vim-key ký hiệu , do đó <C-v>kiểm soát-v , <CR>là nhập, <esc>là chìa khóa thoát, và <tab>là chìa khóa tab.

c'0'.

Đây là một hexdump để chứng minh số byte là chính xác:

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

Điều này hoạt động bằng cách chạy hai lệnh ex sau:

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

Cái đầu tiên có nghĩa là

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

Và cái thứ hai có nghĩa là

: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

Tôi nghĩ rằng không có cách nào để tôi có thể sử dụng phương pháp hiện tại của mình mà không bỏ qua khoảng trống ít nhất .. Câu trả lời hay!
nmjcman101

o_O Thật gọn gàng ...
Ông Xcoder


6

Aceto , 8 7 6 byte

,!`XpO

Giải trình:

Đọc một nhân vật (, ), phủ định nó ( !) và thoát một cách có điều kiện. In số 0 trên đầu ngăn xếp ( p) và quay lại từ đầu.

Chạy với -Fđể thấy hiệu quả ngay lập tức (vì xả nước)

Giải pháp đầu tiên của tôi dựa trên bài đăng hộp cát, với khoảng trắng được phép là ký tự thay thế và không cần thoát khi nhập (4 byte):

,'p>

5

C trên POSIX, 128 117 113 96 byte

-11 nhờ Quentin tìm kiếm trong suốt termios.h
-4 nhờ Quentin chỉ ra những sai lầm ngu ngốc của tôi
-17 vì Quentin là một phù thủy kỳ dị.

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

Điều này đặt STDIN vào chế độ thô / vô hình để nó có thể nhận được nhấn phím trong thời gian thực. Điều này cần 77 byte và tôi chắc chắn rằng tôi có thể đánh gôn nó một chút. Lưu ý rằng điều này không thiết lập lại STDIN khi thoát vì vậy nó sẽ làm rối thiết bị đầu cuối của bạn nếu bạn không làm như vậy bằng tay.

Đây là cách bạn có thể đặt lại STDIN:

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

Đầu ra như được hiển thị trong GIF :-)


1
Đào sâu vào của tôi termios.h, ECHO0000010ICANON0000002. Điều này có nghĩa ~(ECHO|ICANON)là chỉ ~10:)
Quentin

@Quentin Đã chỉnh sửa! Chúc mừng: D
MD XF

1
Ngoài ra, mỗi cái !=có thể được thay thế bằng ^'\n'bằng 10(giả sử UTF-8);)
Quentin

2
Nếu chúng tôi đi đầy đủ UB, chúng tôi có thể thay thế tbộ lưu trữ của mình bằng một loạt các số nguyên. Sau đó c_lcflagskết thúc tại t[3], và chúng tôi không cần tên hoặc loại cũng như #include, tổng cộng 94 byte: c,t[15];f(){for(tcgetattr(1,t),t[3]&=~10,tcsetattr(1,0,t);(c=getchar())^10&&c^4;)printf(".");}- Nhưng có lẽ tốt hơn là tôi nên đăng nó dưới dạng câu trả lời thay vì vui vẻ với bạn :)
Quentin

1
@Quentin ơi ... của tôi. Bạn là một phù thủy. Và tôi nghĩ rằng tôi rất giỏi về C ... nếu bạn muốn đăng nó vì câu trả lời của riêng bạn cảm thấy thoải mái và tôi sẽ quay lại các chỉnh sửa của mình, nếu không tôi sẽ để nó được chỉnh sửa thành của tôi.
MD XF

4

Mã máy x86 trên MS-DOS - 14 byte

Như thường lệ, đây là tệp COM đầy đủ, có thể chạy trên DosBox, cộng với hầu hết các biến thể DOS.

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

Nhận xét lắp ráp:

    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
...Không đời nào. Thật đáng kinh ngạc.
MD XF

Cảm ơn, nhưng tôi cảm thấy rằng vẫn còn một cái gì đó khác để cắt; đó xorlà 3 byte của woppin và sẽ chính xác như nó nếu tôi làm cho nó hoạt động trên toàn bộ ax; Tôi đã thử xor ax,0a0dh/ test al,al, nhưng nó cũng lớn như vậy bởi vì ngu ngốc testlà hai byte, grrr ...
Matteo Italia

3

Python 2 , 50 byte

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

Chỉ hoạt động trên windows


1
Đáng buồn thay, nó chỉ hoạt động trên Windows: ((
Ông Xcoder


3

Java 5-8, 125 122 131 124 byte

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

Ung dung:

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

Kết quả:

nhập mô tả hình ảnh ở đây

Tín dụng:

-3 @MD XF (Chỉ ra sai lầm ngu ngốc của tôi với String[]args)

-7 @KritixiLithos (Chỉ ra public classlà có thể class)


1
String[]argscần thiết?
MD XF

@MDXF nếu tôi muốn đưa ra câu trả lời cho Java 8 thì CÓ NHIỀU thứ tôi có thể làm. Tuy nhiên, tôi đang làm cho đây là một câu trả lời chung chung về Java. Tuy nhiên, tuy nhiên, vâng tôi có thể làm điều đó String[]a.
Bạch tuộc ma thuật Urn

Bạn quên cập nhật câu trả lời golf. Ngoài ra, không 1>0đánh giá để 1?
MD XF

@MDXF trong Java (< 8)- 1>0đánh giá true, khác nhau. Tôi sẽ đăng câu trả lời tương tự này trong Groovy.
Bạch tuộc ma thuật Urn

@StephenS đây là câu trả lời Java chung chung, không phải câu trả lời Java 8.
Bạch tuộc ma thuật Urn

3

Toán học 34 byte

 InputString["",FieldMasked->True];

Một dấu hoa thị xuất hiện, sau khi mỗi ký tự được nhập. Dấu ngoặc kép trống dành cho tiêu đề xuất hiện trong cửa sổ nhập liệu bật lên.

Việc ;ngăn chặn mật khẩu được in.

nhập mô tả hình ảnh ở đây


Không gian cố ý hàng đầu?
MD XF

2

Vim, 58 50 52 50 byte

Đã thêm để đảm bảo nó xử lý không gian đúng cách.

Cảm ơn @DJMcMayhem vì một loạt các trợ giúp và ý tưởng

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

Trong cú pháp khóa Vim điển hình dưới đây. Các ký tự được đánh dấu như với a ^Ctrl+<char>, vì vậy ^Q=Ctrl+q

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

Không có liên kết TIO, vì bạn cần nhập trực tiếp vào Vim (trái ngược với nhập trước như bình thường). Để chạy mã, bạn cần nhập mã vào Vim, sau đó bạn có thể nhập mật khẩu của mình và nhấn enter. Nó sẽ không làm bất cứ điều gì với mật khẩu. Nó thậm chí sẽ không biết nó là gì. Ngay khi bạn nhấn vào cửa sổ Vim sẽ:q!

Điều này hoạt động bằng cách ánh xạ tất cả ASCII có thể in sang *chế độ chèn và ánh xạ <CR>tới<ESC>:q!<CR>


Có thể làm rõ những biểu tượng là gì? Tôi nghĩ họ đáng ra phải thế <C-v>, <esc> and <C-a>nhưng thật khó để nói.
DJMcMayhem

@DJMcMayhem Sẽ làm được. Ngẫu nhiên tôi nghĩ rằng bạn có thể dán chúng vào Vim và chúng sẽ hiển thị một cách thích hợp.
nmjcman101


2

FLTK, 47 ký tự

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

Chạy mẫu:

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 

Đầu ra mẫu:

nhập mật khẩu trong FLTK


2

Đang xử lý, 53 byte

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

Điều này nhận đầu vào thông qua nhấn phím từ một cửa sổ đồ họa. Ký tự mà nó chọn để thể hiện mật khẩu là 0. Lưu ý rằng do tốc độ khung hình cao, mỗi phím nhấn sẽ xuất hiện dưới dạng nhiều 0s (và cũng do thực tế rằng đây là keyPressedvà không keyTyped(không phải là boolean) hoặc keyrelease).

gif


2

Bash , 54 byte

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

Đối với mục đích ghi bàn, $'\r'có thể được thay thế bằng một sự trở lại vận chuyển theo nghĩa đen.

Hãy thử trực tuyến! (không nhìn nhiều)


2

ZX81 BASIC, 54 byte

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

Trong ký tự ZX81, các ký tự có thể in được nằm trong không gian phạm vi Z, mặc dù thực tế bạn không thể nhập một khoảng trắng theo cách này là ký tự ngắt.

ZX Spectrum BASIC, 24 byte

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

Lưu ý rằng >=được tính là một từ khóa một byte trong Sinclair BASIC (codepoint 140 trong trường hợp này).


Là khoảng trắng giữa các số dòng và chức năng cần thiết?
MD XF

Bạn có thể rút ngắn PRINTlại ?, tôi biết rằng nó hoạt động trong rất nhiều phương ngữ BASIC cũ
MD XF

@MDXF PRINTlà mã thông báo 1 byte, nó chỉ được biểu thị trên màn hình dưới dạng 7 ký tự (ngoại trừ sau đó THEN, khi không gian hàng đầu bị chặn).
Neil

2

R, 29 byte

invisible(openssl::askpass())

Tích hợp sẵn xử lý các mục nhập mật khẩu. Mở một cửa sổ mới và thay thế đầu vào bằng dấu chấm. invisibleđược sử dụng để ngăn chặn việc in mật khẩu sang STDOUT.


2

Tcl / Tk, 18

gri [ent .e -sh *]

Phải được chạy trên vỏ tương tác (hoặc bật chữ viết tắt):

nhập mô tả hình ảnh ở đây


21 byte mà không cần viết tắt lệnh khó khăn: grid [entry .e -sh *]-shlà viết tắt tùy chọn cho -show. 23 byte là những gì tôi cho là tối thiểu đối với chương trình không được bảo trì có thể thực hiện được.
Donal Fellows

2

Vim, 15 tổ hợp phím

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

<S-tab>có nghĩa là shift + tab.

Rõ ràng, có một nội dung cho điều này mà tôi không biết. Vì tôi thực sự thích câu trả lời thủ công của mình và cách tiếp cận này hoàn toàn khác biệt, tôi nghĩ rằng tôi nên đăng một câu trả lời mới thay vì chỉnh sửa.

Điều này hoạt động bằng cách gọi inputsecrethàm, sau đó thoát ngay lập tức sau khi thoát.


2

Mã máy 6502 (C64), 22 21 byte

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

Cách sử dụng :SYS 2062

Danh sách tháo gỡ được nhận xét (ACME), bạn có thể bỏ ghi chú ba dòng nhận xét đầu tiên để khởi chạy RUNkhi đã tải:

!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

Bình luận:

  • Tôi chưa tìm thấy bất cứ điều gì trong các tài liệu, nhưng dường như, sau cuộc gọi GETIN, các nhánh beq chỉ ở nơi không có phím bấm mới nào được ghi lại;
  • Sử dụng # $ 60 làm char đầu ra, byte đó có thể được sử dụng lại làm hướng dẫn "rts" khi nhấn RETURN.

2

Forth (gforth) , 54 byte

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

Giải trình

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 byte

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

Hiển thị một 1ký tự cho mọi ký tự, kết thúc khi đóng cửa sổ (OP cho biết là được phép).

Gif


Would from tkinter import*(newline) Entry(show=1).pack();Tk().mainloop()làm việc?
Conor O'Brien

Thử nghiệm @ ConorO'Brien
Ông

@ ConorO'Brien không. Nó tạo ra hai tkintercửa sổ khác nhau . Một với trường văn bản, một trống. Nó dường như không đúng với tôi.
Ông Xcoder

Bạn có cần show=?
Trái cây Esolanging

@ Challenger5 Vâng, chúng tôi cầnshow=
Ông Xcoder

1

Groovy, 77 73 byte

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

Đây là một đóng cửa ẩn danh, với 0 đầu vào cần thiết.

Ung dung:

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

Chỉnh sửa 1 (-4 byte): Thành phần # hiển thị có thể được truy cập trực tiếp, đọc thêm tại đây .


1

Micro , 35 byte

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

giải thích:

"": tôi tạo chuỗi trống mới 'i'
    {bắt đầu vòng lặp đầu vào
     L nhập một ký tự
      46c: \ display ascii char # 46 (.) (Nó được bật lên, để lại char đầu vào từ 'L'
           i ~ +: tôi đẩy tôi, lật tôi và char xung quanh, kết hợp chúng và lưu trữ nó với tôi
                i10c = if (, a)} a OK, rất nhiều điều xảy ra ở đây, nếu một NL nằm trong i, vòng lặp chấm dứt và i: \ cuối cùng sẽ hiển thị đầu vào


1
Đó là một nỗ lực đầu tiên khá tốt về ngôn ngữ! +1
MD XF

1

BF, 24 byte

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

Hoạt động với bf.doleczek.pl . Bạn có thể gửi char không cho chương trình bằng Ctrl + Z.

Giải pháp thay thế:

BF, 1 byte

,

Đây là một giải pháp rất hay nói. Thiết bị đầu cuối của tôi rộng 0 ký tự , vì vậy vui lòng không nhập bất kỳ mật khẩu nào dài hơn thế.


Whoa ... không tệ!
MD XF

@MDXF Bạn đang đề cập đến 24 byte một hay 1 byte?
Trái cây Esolanging

Rõ ràng là một byte 24. Tôi hoàn toàn quên rằng in ấn \blà một điều. : P
MD XF

@MDXF Ý của bạn là gì? \blà dù sao không thể in được.
Trái cây Esolanging

Không, ý tôi là giải pháp của bạn dùng \bđể ghi đè đầu vào, đúng không?
MD XF

1

PowerShell, 12 byte

Read-Host -a

Điều này đọc đầu vào từ máy chủ lưu trữ và, với cờ -a coi nó là mật khẩu / mật khẩu. Trong ISE, nó hiện lên một hộp thông báo có hành vi tương tự vì ISE không cho phép chụp phím.

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

1

QBasic, 48 byte

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

INPUT$(1)đọc ký tự tiếp theo từ đầu vào bàn phím. (Điều này có thể bao gồm những thứ như tab, backspace và thoát, nhưng vì OP không nói gì về những điều mà tôi cho rằng chúng ta không phải lo lắng về chúng.) Nếu ký tự là \r(ASCII 13), hãy chấm dứt chương trình; mặt khác, in *mà không có một dòng mới. Lặp lại quảng cáo vô hạn.


1

Perl + Bash, 30 byte

print"*"while$|=1+`read -sn 1`

c*, sử dụng readtừ bash, vì vậy không phải là một giải pháp Perl thuần túy.


1

Brainfuck, 21 byte

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

Cuối cùng, tôi hứa. Không có đầu vào = -1, kết thúc đầu vào = 0

Làm thế nào nó hoạt động

-[  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

Mã của bạn đang thiếu một khung đóng cửa. Và tại sao bạn làm cho nó phức tạp? Một "in ''" đơn giản cho mọi ký tự đầu vào "có thể được thực hiện đơn giản,[>-.,]
Dorian

@Dorian Giá đỡ là một sai lầm, nhưng sự phức tạp nảy sinh từ việc phải xử lý cả không có đầu vào đầu vào
Jo King

0

QBIC , 44 byte

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

Giải trình

{            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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.