Su desafío es leer una "contraseña" desde el teclado / entrada estándar.
Desafío :
- Leer una cadena de forma
s
invisible. - Para cada uno de los personajes
s
, imprima un personajec
. - En tiempo real.
Reglas:
- Debe imprimir
c
en tiempo real. Tan pronto como el usuario ingrese un carácter, debe mostrarloc
. c
debe ser constante, es decir, debe ser el mismo personaje.c
puede ser cualquier carácter visible (es decir, no puede ser una nueva línea, espacio, tabulación o no imprimible).c
no puede basarses
, es decir,c
debe definirse / ser constante antes des
leerse.c
debe ser el mismo cada vez que se ejecuta el programa.c
puede ser uno de los personajess
si por accidente, siempre que se sigan todas las demás reglas.- Ninguno de los caracteres de
s
puede aparecer en la pantalla,c
excepto (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
s
nunca 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 s
fue password01
y c
fue *
, la salida se vería así:
Ganador :
La presentación más corta en cada idioma gana.
tkinter
permitido 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 laEntry
ventana de s (X en Windows ycmd
+W
en mac)?Respuestas:
str , 5 bytes
Debido a un error, esto es de 5 bytes. Debe ser solo 1 byte:
fuente
cmder
venir la respuesta debido a tuCtrl+Z
comentario: 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.c
puede 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
-F
para 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
,ECHO
es0000010
yICANON
es0000002
. Esto significa que~(ECHO|ICANON)
es solo~10
:)!=
se puede reemplazar con^
y'\n'
con10
(suponiendo UTF-8);)t
el almacenamiento con una matriz de enteros. Luegoc_lcflags
termina 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
xor
es 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úpidotest
es 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 class
puede ser simplementeclass
)fuente
String[]args
necesario?String[]a
.1>0
evalúa a1
?Java (< 8)
-1>0
evalú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+q
No 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últiples0
s (y también debido al hecho de que esto eskeyPressed
y 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
PRINT
a?
, sé que las obras en un montón de viejos dialectos de BASICPRINT
es 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.
invisible
se 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-sh
es 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
inputsecret
función, luego se cierra inmediatamente después de que sale.fuente
Código de máquina 6502 (C64),
2221 bytesUso :
SYS 2062
Lista de desmontaje comentada (ACME), puede descomentar las tres primeras líneas comentadas para iniciar
RUN
una vez cargadas:Comentarios:
fuente
Adelante (gforth) , 54 bytes
Explicación
fuente
Python 3 +
tkinter
-6361 bytesMuestra un
1
para 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()
?tkinter
ventanas 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:
fuente
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
\b
es una cosa. : P\b
no se puede imprimir de todos modos.\b
para 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
c
es decir*
, utilizaread
bash, 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