パスワードを読む:モバイルで!


13

MD XFの最近の挑戦のおかげで、今では多くの異なる言語でパスワードを読むことができます!問題は、アプリケーションをモバイルデバイスに移植する必要があり、パスワードの入力方法が少し異なることです。

チャレンジ

  • キーボードから文字列を読み取ります。
  • 文字kが入力されるたびに、短い時間間隔で表示します。
  • 時間間隔が経過した後、またはユーザーが別の文字を入力した後、k一部の文字に置き換えcます。

ルール

  • c定数でなければなりません。同じ文字でなければなりません。
  • c 任意の可視文字を使用できます(つまり、改行、スペース、タブ、または印刷不可にすることはできません)。
  • c入力されたものに基づくことはできませんkc最初のものkが読み込まれる前に定義/定数されなければなりません。
  • c プログラムを実行するたびに同じでなければなりません。
  • ck他のすべての規則が守られている限り、偶然のように指定された値のいずれかです。

  • kリアルタイムで印刷する必要があります。ユーザーがnew kを入力したらすぐに表示する必要があります。
  • kに変更される前に、エンドユーザーに表示される必要がありますc。時間間隔は0.5秒以上でなければなりません。
  • kc妥当な時間内に交換する必要があります。時間間隔は5秒を超えてはなりません。
  • 新しい文字が入力されるとすぐに、時間間隔が終了したかどうかに関係なく、入力したキーを置き換えkckすぐに新しいキーとして使用する必要があります。

  • キャラクターを変更する必要があるたびに、画面をクリアして再描画することは許容されます。
  • 他のすべての規則に従っている限り、入力および出力の合理的な方法を使用できます。
  • 入力された文字数が端末/グラフィカルウィンドウの幅より長くなることはないと想定できます。
  • 端末を使用している場合、プログラムは改行が入力されるかEOFに達した後に終了するはずです。
  • プログラムは、モバイル環境と他の環境の両方で、ここで説明されているように機能する必要があります。

  • プログラムは、入力に印刷可能な文字(文字、数字、記号)のみが含まれ、場合によっては改行(バックスペース、矢印キー、削除など)が含まれないと想定する場合があります。
  • Ctrl + Cを押すと、プログラムが終了する場合があります。
  • プログラムが起動した場合、ウィンドウを閉じることでプログラムを終了できます。

得点

これはなので、各言語で最短の答えが勝ちます!

これは、どのように見えるかの例です。これはモバイルプラットフォームで記録されますが、デスクトッププラットフォームでも機能するはずです。

パスワード


削除された投稿を見ることができる人のために、Sandboxの投稿
musicman523

ビデオではどのキーボードを使用していますか?
ベータ崩壊

1
最後に@BetaDecay通知がzenuiキーボードを述べている
OVS

@BetaDecayそれは実際にはZenUIキーボードです。好奇心だけですか、それとも重要ですか?
musicman523

@ musicman523ちょうど好奇心が強い:)
ベータ崩壊

回答:


4

HTML + JavaScript、20 + 105 = 125バイト

<input id=I oninput=v=I.value;s='*'.repeat(l=v.length-1);I.value=s+v[l];clearTimeout(I.t);I.t=setTimeout(`I.value=s+'*'`,1e3)

の入力からk手紙の作成までの遅延*は1秒です。

JavaScript oninput、フォーマット済み

v=I.value;
s='*'.repeat(l=v.length-1);
I.value=s+v[l];
clearTimeout(I.t);
I.t=setTimeout(`I.value=s+'*'`,1e3)

テストスニペット

>互換性を高めるために、終了ブラケット()が追加されました。

<input id=I oninput=v=I.value;s='*'.repeat(l=v.length-1);I.value=s+v[l];clearTimeout(I.t);I.t=setTimeout(`I.value=s+'*'`,1e3)>


しかし、終了しないようです!
officialaimm

1
@officialaimm課題は、端末アプリケーションのみがそれらを終了する方法を持っている必要があると述べています。
ジャスティンマリナー

ああ、愚かな私。ごめんなさい。
officialaimm

3

Pythonの3186の 224バイト

Windowsでのみ動作します。

import os,time,msvcrt as m
i=s=x=0;t=time.clock
def v():os.system("cls")
v()
while 1:
 if m.kbhit():
  k=str(m.getch())
  if"\\r"in k:break 
  i+=1;x=1;v();print("*"*(i-1)+k[2]);s=t()
 if (t()-s>.6and x):x=0;v();print("*"*i)

以前のバージョン(186バイト):キーが押された速度に関係なく、スリープは必須でした。

import os,time,msvcrt
a=k=[];i=0;o=os.system
while 1:
 o("cls")
 if i:print("*"*(i-1)+a[i-1]);time.sleep(.6);o("cls");print("*"*i)
 k=str(msvcrt.getch())
 if"\\r"in k:break
 a+=k[2];i+=1

1
これがすべての基準を完全に満たしているとは思いません。具体的As soon as a new character is entered, whether or not the time interval has expired, you should replace k with c and use the entered key as the new k immediately.には、言われているように、Windowsを実行していないのでテストできません。この関連の課題は参考として役立つ場合があります
-musicman523

私は、kからcへの置換はグラフィカルのみであると仮定しました(これはコードで満たされています)。また、格納されているkの値をcで変更するつもりですか?
officialaimm

1
いや、それで全部です。あなたの遅延時間は.6秒です-.1秒以内に2文字を入力するとどうなりますか?まだ1.2秒間寝ますか?繰り返しになりますが、申し訳ありませんが、自分でこれをテストすることはできません。コードを実行している動画を投稿する価値があるかもしれません。
musicman523

変更されました。新しいバージョンでは、前のキャラクターの時間がなくなる前でも新しいキャラクターを投げることができます。
officialaimm

3

Python 2、133バイト

@officialaimm answerに基づきます

import time,msvcrt as m
k=T=0
s=p='\r'
while'\r'!=k:
 t=time.time();print s,
 if m.kbhit():k=m.getch();s=p+k;T=t;p+='*'
 if t-T>1:s=p

うわー、90バイト少ない!!! 投票しますが、私の1日の制限に達しました。それを確認する方法はありますか(私のPCにはpython 3しかありません)?ところで私は明確な画面が表示されない、それはどのように管理されていますか?
officialaimm

@officialaimm by the \rprint
フェリペナルディバティスタ

1
教室に着いたらpy3バリアントを投稿します
フェリペナルディバティスタ

1
@officialaimm これは動作するはずです、私はlinux atmにいるので、テストできません
フェリペナルディバティスタ

私はそれをチェックしました、それは働いています。(y)
officialaimm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.