Votre défi est de lire un "mot de passe" à partir du clavier / entrée standard.
Défi :
- Lisez une chaîne de manière
s
invisible. - Pour chacun des caractères de
s
, imprimez un caractèrec
. - En temps réel.
Règles:
- Vous devez imprimer
c
en temps réel. Dès que l'utilisateur entre un caractère, vous devez afficherc
. c
doit être constant, c'est-à-dire qu'il doit être du même caractère.c
peut être n'importe quel caractère visible (c'est-à-dire qu'il ne peut pas s'agir d'une nouvelle ligne, d'un espace, d'une tabulation ou non imprimable).c
ne peut pas être basé surs
, c'est-à-direc
doit être défini / constant avant d's
être lu.c
doit être le même à chaque exécution du programme.c
peut être l'un des personnagess
si par accident, tant que toutes les autres règles sont respectées.- Aucun des caractères de ne
s
peut apparaître à l'écran,c
sauf (voir règle précédente). - Vous pouvez utiliser toute méthode raisonnable d'entrée et de sortie tant que toutes les autres règles sont respectées.
- Vous pouvez supposer que la longueur de
s
n'est jamais plus longue que la largeur du terminal / de la fenêtre graphique. - Si vous utilisez un terminal, votre programme doit se terminer après la saisie d'une nouvelle ligne ou EOF.
Exemple :
Si s
était password01
et c
était *
, la sortie ressemblerait à quelque chose comme:
Gagnant :
La soumission la plus courte dans chaque langue l'emporte.
tkinter
autorisé pour notre champ de saisie personnalisé (comme celui en HTML), de sorte que le programme ne se termine pas lorsque vous appuyez sur Entrée, mais lorsque vous fermez laEntry
fenêtre de (X sous Windows etcmd
+W
sous mac)?Réponses:
str , 5 octets
En raison d'un bug, cela fait 5 octets. Il ne doit contenir qu'un octet:
la source
cmder
réponse venir en raison de votreCtrl+Z
commentaire: PHTML, 20 octets
Alternative: HTML + JavaScript, 51 octets
Bien que l'OP l'ait confirmé pour être valide, voici une solution utilisant JS pour les puristes!
la source
oninput=_=>i.value=i.value.replace(/./g,"*")
enregistre un octet.c
peut être n'importe quoi, vous pouvez enregistrer deux octets supplémentaires aveconinput=_=>i.value=i.value.replace(/./g,1)
Vim, 36 octets:
Cela utilise la notation vim-key , tout
<C-v>
comme control-v ,<CR>
est enter,<esc>
est la touche d'échappement et<tab>
est la touche de tabulation.c est
'0'
.Voici un hexdump pour prouver que le nombre d'octets est précis:
Cela fonctionne en exécutant les deux commandes ex suivantes:
Le premier signifie
Et le second signifie
la source
Rubis avec des chaussures, 29 caractères
Exemple de sortie:
la source
Aceto ,
876 octetsExplication:
Lisez un caractère (
,
), annulez-le (!
) et quittez conditionnellement. Imprimez le zéro en haut de la pile (p
) et revenez au début.Courez avec
-F
pour voir l'effet immédiatement (car rinçage)Ma première solution était basée sur la publication sandbox, avec des espaces autorisés comme caractères de remplacement et pas besoin de quitter en entrant (4 octets):
la source
C sur POSIX,
12811711396 octets-11 grâce à Quentin en cherchant
termios.h
-4 grâce à Quentin soulignant mes erreurs stupides
-17 parce que Quentin est un sorcier flippant.
Cela met STDIN en mode brut / invisible afin qu'il puisse obtenir des pressions de touches en temps réel. Cela prend 77 octets et je suis sûr que je peux y jouer un peu. Notez que cela ne réinitialise pas STDIN à la sortie, donc cela gâchera votre terminal si vous ne le faites pas manuellement.
Voici comment réinitialiser STDIN:
Sortie comme indiqué dans le GIF :-)
la source
termios.h
,ECHO
c'est0000010
etICANON
c'est0000002
. Cela signifie que~(ECHO|ICANON)
c'est juste~10
:)!=
peut être remplacé par^
, et'\n'
par10
(en supposant UTF-8);)t
le stockage de par un tableau d'entiers. Puisc_lcflags
finit àt[3]
, et nous n'avons besoin ni du nom, ni du type, ni des#include
94 octets:c,t[15];f(){for(tcgetattr(1,t),t[3]&=~10,tcsetattr(1,0,t);(c=getchar())^10&&c^4;)printf(".");}
- Mais peut-être que vous feriez mieux de me l'envoyer comme réponse plutôt que de vous amuser avec la vôtre :)code machine x86 sur MS-DOS - 14 octets
Comme d'habitude, il s'agit d'un fichier COM complet, qui peut être exécuté sur DosBox, ainsi que la plupart des variantes DOS.
Montage commenté:
la source
xor
un woppin '3 octets, et serait exactement aussi gros si je le faisais fonctionner dans l'ensembleax
; J'ai essayéxor ax,0a0dh
/test al,al
, mais c'est tout aussi gros car stupidetest
fait deux octets, grrr ...Python 2 , 50 octets
Fonctionne uniquement sur les fenêtres
la source
AHK , 17 octets
Les intégrés ne sont pas intéressants.
la source
Java 5-8,
125122131 131124 octetsNon golfé:
Résultat:
Crédit:
-3 @MD XF (A souligné ma stupide erreur avec
String[]args
)-7 @KritixiLithos (souligné
public class
peut être justeclass
)la source
String[]args
nécessaire?String[]a
.1>0
évaluer à1
?Java (< 8)
-1>0
évalue àtrue
, ce qui est différent. Je posterai cette même réponse dans Groovy.Mathematica 34 octets
Un seul astérisque apparaît, après la saisie de chaque caractère. Les guillemets vides correspondent au titre qui apparaît dans la fenêtre de saisie contextuelle.
Le
;
empêche le mot de passe d'être imprimé.la source
Vim,
58505250 octetsAjouté pour s'assurer qu'il gère correctement les espaces.
Merci à @DJMcMayhem pour un tas d'aide et d'idées
Dans la syntaxe de clé Vim typique ci-dessous. Les caractères marqués comme avec un
^
sontCtrl+<char>
, donc^Q
=Ctrl+q
Il n'y a pas de lien TIO, car vous auriez besoin d'entrer directement dans Vim (par opposition à la pré-entrée comme d'habitude). Pour exécuter le code, vous devez le saisir dans Vim, puis vous pouvez taper votre mot de passe et appuyer sur Entrée. Il ne fera rien avec le mot de passe. Il ne saura même pas ce que c'était. Dès que vous appuyez sur Entrée, la fenêtre Vim
:q!
Cela fonctionne en connectant tous ASCII imprimables pour
*
en mode d'insertion et la cartographie<CR>
à<ESC>:q!<CR>
la source
<C-v>, <esc> and <C-a>
mais c'est difficile à dire.FLTK, 47 caractères
Exemple d'exécution:
Exemple de sortie:
la source
Traitement, 53 octets
Cela prend l'entrée via des touches à partir d'une fenêtre graphique. Le caractère avec lequel il choisit de représenter les mots de passe est
0
. Notez qu'en raison de la fréquence d'images élevée, chaque pression sur une touche apparaîtra comme plusieurs0
s (et également en raison du fait que c'estkeyPressed
et nonkeyTyped
(pas un booléen) oukeyrelease
).la source
Bash , 54 octets
À des fins de notation,
$'\r'
peut être remplacé par un retour chariot littéral.Essayez-le en ligne! (pas grand chose à regarder)
la source
ZX81 BASIC, 54 octets
Dans le jeu de caractères ZX81, les caractères imprimables se trouvent dans l'espace de plage
Z
, bien que vous ne puissiez pas réellement saisir un espace de cette façon car c'est le caractère de rupture.ZX Spectrum BASIC, 24 octets
Notez que cela
>=
compte comme un mot clé à un octet dans Sinclair BASIC (point de code 140 dans ce cas).la source
PRINT
à?
, je sais que cela fonctionne dans beaucoup de vieux dialectes BASICPRINT
est un jeton de 1 octet, il est simplement représenté à l'écran sous la forme des 7 caractères (sauf aprèsTHEN
, lorsque l'espace de tête est supprimé).R, 29 octets
Intégré qui gère les entrées de mot de passe. Ouvre une nouvelle fenêtre et remplace l'entrée par des points.
invisible
est utilisé pour supprimer l'impression du mot de passe sur STDOUT.la source
Tcl / Tk, 18 ans
Doit être exécuté sur dans le shell interactif (ou avoir des abréviations activées):
la source
grid [entry .e -sh *]
et-sh
est une abréviation d'option pour-show
. 23 octets est ce que je considérerais comme un minimum pour un programme non golfé maintenable faisant cela.Vim, 15 frappes
<S-tab>
signifie shift + tab.Apparemment, il y a une fonction intégrée pour cela que je n'étais pas au courant. Comme j'aime vraiment ma réponse manuelle et que cette approche est radicalement différente, j'ai pensé que je devrais poster une nouvelle réponse au lieu de la modifier.
Cela fonctionne en appelant la
inputsecret
fonction, puis en quittant immédiatement après sa fermeture.la source
6502 code machine (C64),
2221 octetsUtilisation :
SYS 2062
Liste de désassemblage commentée (ACME), vous pouvez décommenter les trois premières lignes commentées à lancer avec
RUN
une fois chargées:Commentaires:
la source
Forth (gforth) , 54 octets
Explication
la source
Python 3 +
tkinter
-6361 octetsAffiche un
1
pour chaque caractère, se termine à la fermeture de la fenêtre (OP a dit que c'était autorisé).la source
from tkinter import*
(nouvelle ligne)Entry(show=1).pack();Tk().mainloop()
fonctionnerait?tkinter
fenêtres différentes . Un avec le champ de texte, un vide. Cela ne me semble pas juste.show=
?show=
Groovy,
7773 octetsIl s'agit d'une fermeture anonyme, avec 0 entrées requises.
Non golfé:
Édition 1 (-4 octets): le composant # visible est directement accessible, en savoir plus ici .
la source
Micro , 35 octets
explication:
la source
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.
la source
\b
is a thing. :P\b
is unprintable anyways.\b
to override the input, correct?PowerShell, 12 bytes
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.
la source
QBasic, 48 bytes
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.la source
Perl + Bash, 30 bytes
c
is*
, usesread
from bash, so isn't a pure Perl solution.la source
brainfuck, 21 bytes
Last one, I promise. No input = -1, end of input = 0
How it Works
la source
,[>-.,]
QBIC, 44 bytes
Explanation
la source