Ваша задача - прочитать «пароль» с клавиатуры / стандартного ввода.
Вызов :
- Читайте строку
s
невидимо. - Для каждого из символов в
s
напечатайте символc
. - В реальном времени.
Правила:
- Вы должны печатать
c
в режиме реального времени. Как только пользователь вводит символ, который вы должны отобразитьc
. c
должен быть постоянным, то есть должен быть одинаковым символом.c
может быть любым видимым символом (т. е. он не может быть символом новой строки, пробела, табуляции или непечатного текста).c
не может быть основаноs
, т.е.c
должно быть определено / константно передs
чтением.c
должен быть одинаковым при каждом запуске программы.c
может быть одним из символов,s
если случайно, если все другие правила соблюдаются.- Ни один из символов не
s
может появиться на экране, заc
исключением (см. Предыдущее правило). - Вы можете использовать любые разумные методы ввода и вывода при условии соблюдения всех других правил.
- Вы можете предположить, что длина
s
никогда не превышает ширину терминала / графического окна. - Если вы используете терминал, ваша программа должна завершиться после ввода новой строки или EOF.
Пример :
Если бы s
было password01
и c
было *
, результат будет выглядеть примерно так:
Победитель :
Самое короткое представление на каждом языке выигрывает.
tkinter
Разрешено ли использование python with в нашем настраиваемом поле ввода (например, в HTML), чтобы программа не завершала работу при нажатии клавиши ввода, а при закрытииEntry
окна (X в Windows иcmd
+W
в Mac)?Ответы:
ул 5 байтов
Из-за ошибки это 5 байтов. Должно быть только 1 байт:
источник
cmder
ответ, приходящий из-за вашегоCtrl+Z
комментария: PHTML, 20 байт
Альтернатива: HTML + JavaScript, 51 байт
Хотя ОП подтвердила, что это действительно, вот решение, использующее JS для пуристов!
источник
oninput=_=>i.value=i.value.replace(/./g,"*")
сохраняет байт.c
может быть что угодно, вы можете сохранить еще два байта с помощьюoninput=_=>i.value=i.value.replace(/./g,1)
Vim, 36 байт:
Используются нотации с помощью ключа vim , также
<C-v>
как и control-v ,<CR>
это ввод,<esc>
клавиша escape и клавиша<tab>
табуляции.с это
'0'
.Вот hexdump, чтобы доказать, что количество байтов является точным:
Это работает путем запуска следующих двух команд ex:
Первый означает
А второй значит
источник
Рубин с Обуви, 29 символов
Образец вывода:
источник
Ацето ,
876 байтОбъяснение:
Прочитайте символ (
,
), отмените его (!
) и условно выйдите. Выведите ноль на вершине стека (p
) и вернитесь к началу.Запустите с,
-F
чтобы увидеть эффект немедленно (потому что промывка)Мое первое решение было основано на посте песочницы, с пробелами, разрешенными в качестве символов замены, и не нужно было выходить при вводе (4 байта)
источник
C на POSIX,
12811711396 байт-11 благодаря Квентину, который искал через
termios.h
-4 благодаря Квентину, указавшему на мои глупые ошибки
-17, потому что Квентин - чокнутый волшебник.
Это переводит STDIN в необработанный / невидимый режим, чтобы он мог получать нажатия клавиш в реальном времени. Это занимает 77 байтов, и я уверен, что смогу немного поиграть в гольф. Обратите внимание, что это не сбрасывает STDIN при выходе, поэтому он будет портить ваш терминал, если вы не сделаете это вручную.
Вот как вы можете сбросить STDIN:
Вывод, как показано в GIF :-)
источник
termios.h
,ECHO
есть0000010
иICANON
есть0000002
. Это означает, что~(ECHO|ICANON)
это просто~10
:)!=
может быть заменен^
, и'\n'
с10
(при условии UTF-8);)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(".");}
- Но, может быть, вам лучше, чтобы я опубликовал его как ответ, а не повеселился с вашим :)машинный код x86 в MS-DOS - 14 байт
Как обычно, это полный COM-файл, который может быть запущен в DosBox, а также большинство вариантов DOS.
Комментируемая сборка:
источник
xor
является woppin' 3 байта, и будет точно так , как большой , если бы я сделал его работу в целомax
; Я пыталсяxor ax,0a0dh
/test al,al
, но он такой же большой, потому что глупыйtest
- два байта, гррр ...Python 2 , 50 байт
Работает только на окнах
источник
AHK , 17 байт
Встроенные модули не интересны.
источник
Java 5-8,
125122131124 байтаUngolfed:
Результат:
Кредит:
-3 @MD XF (указал на мою глупую ошибку с
String[]args
)-7 @KritixiLithos (указывать
public class
можно простоclass
)источник
String[]args
необходимо?String[]a
.1>0
оценивает1
?Java (< 8)
-1>0
оцениваетtrue
, что отличается. Я отправлю этот же ответ в Groovy.Mathematica 34 байта
После ввода каждого символа появляется одна звездочка. Пустые кавычки относятся к заголовку, который появляется во всплывающем окне ввода.
В
;
предотвращает пароль от печати.источник
Vim,
58505250 байтДобавлено, чтобы убедиться, что он обрабатывает пробелы правильно.
Спасибо @DJMcMayhem за кучу помощи и идей
В типичном синтаксисе ключа Vim ниже. Символы, помеченные как,
^
являютсяCtrl+<char>
, так^Q
=Ctrl+q
Там нет ссылки TIO, потому что вам нужно было бы напрямую вводить в Vim (в отличие от предварительного ввода, как обычно). Для запуска кода вам нужно ввести его в Vim, а затем вы можете ввести свой пароль и нажать Enter. Это ничего не сделает с паролем. Он даже не знает, что это было. Как только вы нажмете, войдите в окно Vim.
:q!
Это работает путем сопоставления всех печатаемых ASCII
*
в режиме вставки и сопоставления<CR>
с<ESC>:q!<CR>
источник
<C-v>, <esc> and <C-a>
но это трудно сказать.FLTK, 47 символов
Образец прогона:
Образец вывода:
источник
Обработка, 53 байта
Это берет ввод через нажатия клавиш из графического окна. Символ, который он выбирает для представления паролей, - это
0
. Обратите внимание, что из-за высокой частоты кадров каждое нажатие клавиши будет отображаться как несколько0
s (а также из-за того, что этоkeyPressed
и неkeyTyped
(не булево) илиkeyrelease
).источник
Баш , 54 байта
Для целей скоринга
$'\r'
может быть заменено буквальным возвратом каретки.Попробуйте онлайн! (не на что смотреть)
источник
ZX81 BASIC, 54 байта
В наборе символов ZX81 печатаемые символы находятся в интервале
Z
, но вы не можете ввести пробел таким образом, поскольку это символ прерывания.ZX Spectrum BASIC, 24 байта
Обратите внимание, что
>=
в Sinclair BASIC считается однобайтовым ключевым словом (кодовая точка 140 в данном случае).источник
PRINT
до?
, я знаю , что работает в много старых BASIC диалектовPRINT
- это 1-байтовый токен, он просто представлен на экране как 7 символов (за исключением случаевTHEN
, когда начальный пробел подавляется).R, 29 байт
Встроенный, который обрабатывает ввод пароля. Открывает новое окно и заменяет ввод точками.
invisible
используется для подавления печати пароля к STDOUT.источник
Tcl / Tk, 18
Должен запускаться в интерактивной оболочке (или иметь включенные сокращения):
источник
grid [entry .e -sh *]
и-sh
является сокращением параметра для-show
. 23 байта, что я считал бы , как минимум для обслуживаемой ungolfed программы делает это.Vim, 15 нажатий клавиш
<S-tab>
значит shift + tab.По-видимому, для этого есть встроенная функция, о которой я не знал. Так как мне очень нравится мой ручной ответ , и этот подход радикально отличается, я решил опубликовать новый ответ вместо редактирования.
Это работает, вызывая
inputsecret
функцию, а затем немедленно завершая работу после ее выхода.источник
Машинный код 6502 (C64),
2221 байтиспользование :
SYS 2062
Закомментированный лист разборки (ACME), вы можете раскомментировать первые три закомментированные строки для запуска
RUN
после загрузки:Комментарии:
источник
Forth (gforth) , 54 байта
объяснение
источник
Python 3 +
tkinter
-6361 байтОтображает
1
для каждого символа, заканчивается при закрытии окна (OP сказал, что это разрешено).источник
from tkinter import*
(новая строка)Entry(show=1).pack();Tk().mainloop()
работать?tkinter
окна. Один с текстовым полем, один пустой. Это не кажется мне правильным.show=
?show=
Groovy,
7773 байтаЭто анонимное закрытие с 0 обязательными входами.
Ungolfed:
Редактировать 1 (-4 байта): прямой доступ к видимому компоненту, подробнее читайте здесь .
источник
Микро , 35 байт
explination:
источник
BF, 24 байта
Работает с bf.doleczek.pl . Вы можете отправить нулевой символ в программу с помощью Ctrl + Z.
Альтернативное решение:
BF, 1 байт
Это очень насмешливое решение. Мой терминал имеет ширину 0 символов , поэтому, пожалуйста, не вводите больше паролей, чем это.
источник
\b
это вещь. : P\b
в любом случае непечатно.\b
для отмены ввода, правильно?PowerShell, 12 байт
Он считывает ввод с хоста и с флагом -a рассматривает его как строку безопасности / пароль. В ISE это выскакивает окно сообщения, которое имеет подобное поведение, так как ISE не позволяет захват нажатия клавиш.
источник
QBasic, 48 байтов
INPUT$(1)
читает следующий символ с клавиатуры (Это может включать такие вещи, как tab, backspace и escape, но, поскольку OP ничего о них не сказал, я предполагаю, что нам не нужно о них беспокоиться.) Если персонаж\r
(ASCII 13), завершите программа; в противном случае печатайте*
без новой строки. Повторите до бесконечности.источник
Perl + Bash, 30 байт
c
это*
, используетread
от Баша, поэтому не является чистым решением Perl.источник
мозговой трах, 21 байт
Последний, я обещаю. Нет ввода = -1, конец ввода = 0
Как это устроено
источник
,[>-.,]
QBIC , 44 байта
объяснение
источник