Su desafío es leer una "contraseña" desde el teclado / entrada estándar.
Desafío :
- Leer una cadena de forma
sinvisible. - Para cada uno de los personajes
s, imprima un personajec. - En tiempo real.
Reglas:
- Debe imprimir
cen tiempo real. Tan pronto como el usuario ingrese un carácter, debe mostrarloc. cdebe ser constante, es decir, debe ser el mismo personaje.cpuede ser cualquier carácter visible (es decir, no puede ser una nueva línea, espacio, tabulación o no imprimible).cno puede basarses, es decir,cdebe definirse / ser constante antes desleerse.cdebe ser el mismo cada vez que se ejecuta el programa.cpuede ser uno de los personajesssi por accidente, siempre que se sigan todas las demás reglas.- Ninguno de los caracteres de
spuede aparecer en la pantalla,cexcepto (ver la regla anterior). - Puede usar cualquier método razonable de entrada y salida siempre que se sigan todas las demás reglas.
- Puede suponer que la longitud de
snunca es más larga que el ancho de la ventana terminal / gráfica. - Si usa una terminal, su programa debe finalizar después de ingresar una nueva línea o EOF.
Ejemplo :
Si sfue password01y cfue *, la salida se vería así:
Ganador :
La presentación más corta en cada idioma gana.


tkinterpermitido para nuestro campo de entrada personalizado (como el que está en HTML), de modo que el programa no finalice cuando se presiona enter, sino cuando cierra laEntryventana de s (X en Windows ycmd+Wen mac)?Respuestas:
str , 5 bytes
Debido a un error, esto es de 5 bytes. Debe ser solo 1 byte:
fuente
cmdervenir la respuesta debido a tuCtrl+Zcomentario: PHTML, 20 bytes
Alternativa: HTML + JavaScript, 51 bytes
Aunque el OP ha confirmado que es válido, ¡aquí hay una solución con JS para los puristas!
fuente
oninput=_=>i.value=i.value.replace(/./g,"*")Guarda un byte.cpuede ser cualquier cosa, puede guardar dos bytes más cononinput=_=>i.value=i.value.replace(/./g,1)Vim, 36 bytes:
Utiliza la notación vim-key , por lo que
<C-v>es control-v ,<CR>enter,<esc>es la tecla escape y<tab>es la tecla tab.c es
'0'.Aquí hay un hexdump para demostrar que el recuento de bytes es preciso:
Esto funciona ejecutando los siguientes dos comandos ex:
El primero significa
Y el segundo significa
fuente
Rubí con zapatos, 29 personajes
Salida de muestra:
fuente
Aceto ,
876 bytesExplicación:
Leer un carácter (
,), negarlo (!) y salir condicionalmente. Imprima el cero en la parte superior de la pila (p) y vuelva al principio.Corre con
-Fpara ver el efecto de inmediato (porque enjuague)Mi primera solución se basó en la publicación de sandbox, con espacios permitidos como caracteres de reemplazo y sin necesidad de salir al ingresar (4 bytes):
fuente
C en POSIX,
12811711396 bytes-11 gracias a Quentin buscando a través de
termios.h-4 gracias a Quentin señalando mis estúpidos errores
-17 porque Quentin es un maldito mago.
Esto pone a STDIN en modo sin procesar / invisible para que pueda presionar las teclas en tiempo real. Esto toma 77 bytes y estoy seguro de que puedo jugarlo un poco. Tenga en cuenta que esto no restablece STDIN al salir, por lo que dañará su terminal si no lo hace manualmente.
Así es como puede restablecer STDIN:
Salida como se muestra en el GIF :-)
fuente
termios.h,ECHOes0000010yICANONes0000002. Esto significa que~(ECHO|ICANON)es solo~10:)!=se puede reemplazar con^y'\n'con10(suponiendo UTF-8);)tel almacenamiento con una matriz de enteros. Luegoc_lcflagstermina ent[3], y no necesitamos ni el nombre ni el tipo ni el#include, totalizando 94 bytes:c,t[15];f(){for(tcgetattr(1,t),t[3]&=~10,tcsetattr(1,0,t);(c=getchar())^10&&c^4;)printf(".");}- Pero tal vez sea mejor que lo publique como respuesta en lugar de divertirme con el suyo :)Código de máquina x86 en MS-DOS: 14 bytes
Como de costumbre, este es un archivo COM completo, que se puede ejecutar en DosBox, más la mayoría de las variantes de DOS.
Asamblea comentada:
fuente
xores un woppin '3 bytes, y sería exactamente tan grande si lo hiciera funcionar en generalax; Intentéxor ax,0a0dh/test al,al, pero es igual de grande porque estúpidotestes de dos bytes, grrr ...Python 2 , 50 bytes
Solo funciona en windows
fuente
AHK , 17 bytes
Los empotrados no son interesantes.
fuente
Java 5-8,
125122131124 bytesSin golf:
Resultado:
Crédito:
-3 @MD XF (señaló mi estúpido error con
String[]args)-7 @KritixiLithos (señalado
public classpuede ser simplementeclass)fuente
String[]argsnecesario?String[]a.1>0evalúa a1?Java (< 8)-1>0evalúa atrue, que es diferente. Publicaré esta misma respuesta en Groovy.Mathematica 34 bytes
Aparece un solo asterisco, después de ingresar cada carácter. Las comillas vacías corresponden al título que aparece en la ventana emergente de entrada.
Esto
;evita que se imprima la contraseña.fuente
Vim,
58505250 bytesAgregado para asegurarse de que maneja los espacios correctamente.
Gracias a @DJMcMayhem por un montón de ayuda e ideas
En la sintaxis típica de la clave Vim a continuación. Los caracteres marcados como con a
^sonCtrl+<char>, entonces^Q=Ctrl+qNo hay un enlace TIO, ya que necesitaría ingresar directamente a Vim (en lugar de ingresar previamente como de costumbre). Para ejecutar el código, debe escribirlo en Vim, y luego puede escribir su contraseña y presionar enter. No hará nada con la contraseña. Ni siquiera sabrá lo que era. Tan pronto como pulses, entra en la ventana de Vim
:q!Esto funciona asignando todos los ASCII imprimibles
*en modo de inserción y asignando<CR>a<ESC>:q!<CR>fuente
<C-v>, <esc> and <C-a>pero es difícil saberlo.FLTK, 47 caracteres
Ejecución de muestra:
Salida de muestra:
fuente
Procesamiento, 53 bytes
Esto toma la entrada mediante pulsaciones de teclas desde una ventana gráfica. El carácter con el que elige representar las contraseñas es
0. Tenga en cuenta que debido a la alta velocidad de fotogramas, cada pulsación de tecla aparecerá como múltiples0s (y también debido al hecho de que esto eskeyPressedy nokeyTyped(no es un valor booleano) okeyrelease).fuente
Bash , 54 bytes
Para fines de puntuación,
$'\r'se puede reemplazar con un retorno de carro literal.Pruébalo en línea! (no hay mucho que ver)
fuente
ZX81 BASIC, 54 bytes
En el conjunto de caracteres ZX81, los caracteres imprimibles están en el espacio de rango
Z, aunque en realidad no puede ingresar un espacio de esta manera, ya que es el carácter de corte.ZX Spectrum BASIC, 24 bytes
Tenga en
>=cuenta que cuenta como una palabra clave de un solo byte en Sinclair BASIC (punto de código 140 en este caso).fuente
PRINTa?, sé que las obras en un montón de viejos dialectos de BASICPRINTes un token de 1 byte, solo se representa en la pantalla como los 7 caracteres (excepto despuésTHEN, cuando se suprime el espacio inicial).R, 29 bytes
Incorporado que maneja las entradas de contraseña. Abre una nueva ventana y reemplaza la entrada con puntos.
invisiblese usa para suprimir la impresión de la contraseña en STDOUT.fuente
Tcl / Tk, 18
Debe ejecutarse en el shell interactivo (o tener abreviaturas habilitadas):
fuente
grid [entry .e -sh *]y-shes una abreviatura de opción para-show. 23 bytes es lo que consideraría un mínimo para que un programa sin mantenimiento pueda hacer esto.Vim, 15 pulsaciones de teclas
<S-tab>significa shift + tab.Aparentemente, hay una construcción para esto de la que no estaba al tanto. Como realmente me gusta mi respuesta manual , y este enfoque es radicalmente diferente, pensé que debería publicar una nueva respuesta en lugar de editarla.
Esto funciona llamando a la
inputsecretfunción, luego se cierra inmediatamente después de que sale.fuente
Código de máquina 6502 (C64),
2221 bytesUso :
SYS 2062Lista de desmontaje comentada (ACME), puede descomentar las tres primeras líneas comentadas para iniciar
RUNuna vez cargadas:Comentarios:
fuente
Adelante (gforth) , 54 bytes
Explicación
fuente
Python 3 +
tkinter-6361 bytesMuestra un
1para cada personaje, finaliza al cerrar la ventana (OP dijo que está permitido).fuente
from tkinter import*Funcionaría (nueva línea)Entry(show=1).pack();Tk().mainloop()?tkinterventanas diferentes . Uno con el campo de texto, uno vacío. No me parece bien.show=?show=Groovy,
7773 bytesEste es un cierre anónimo, con 0 entradas requeridas.
Sin golf:
Editar 1 (-4 bytes): se puede acceder directamente al componente # visible, lea más aquí .
fuente
Micro , 35 bytes
expiración:
"": creo una nueva cadena en blanco 'i' {comenzar bucle de entrada L ingresa un caracter 46c: \ display ascii char # 46 (.) (Aparece, dejando el carácter de entrada de 'L' i ~ +: presiono i, volteo yo y el char alrededor, los concateno y los guardo en i i10c = if (, a)} a OK, aquí sucede mucho, si un NL está en i, el ciclo termina y el i: \ final mostrará la entradafuente
BF, 24 bytes
Funciona con bf.doleczek.pl . Puede enviar un carácter cero al programa con Ctrl + Z.
Solución alternativa:
BF, 1 byte
Esta es una solución muy irónica. Mi terminal tiene 0 caracteres de ancho, así que no ingrese ninguna contraseña más larga que eso.
fuente
\bes una cosa. : P\bno se puede imprimir de todos modos.\bpara anular la entrada, ¿correcto?PowerShell, 12 bytes
Esto lee la entrada del host y, con el indicador -a, la trata como una cadena de seguridad / contraseña. En el ISE, aparece un cuadro de mensaje que tiene un comportamiento similar ya que el ISE no permite la captura de pulsaciones de teclas.
fuente
QBasic, 48 bytes
INPUT$(1)lee el siguiente caracter desde la entrada del teclado. (Esto puede incluir elementos como tabulación, retroceso y escape, pero dado que el OP no dijo nada sobre ellos, supongo que no tenemos que preocuparnos por ellos). Si el personaje es\r(ASCII 13), finalice el programa; de lo contrario, imprima*sin una nueva línea. Repetir hasta el infinito.fuente
Perl + Bash, 30 bytes
ces decir*, utilizareadbash, por lo que no es una solución pura de Perl.fuente
brainfuck, 21 bytes
El último, lo prometo. Sin entrada = -1, final de entrada = 0
Cómo funciona
fuente
,[>-.,]QBIC , 44 bytes
Explicación
fuente