ボブのパスワード


13

前書き

ボブは、使用するWebサイトごとに異なるパスワードを使用するのが好きです。彼は、覚えられるように特別な形式のパスワードを求めています。彼は自分の名前のように短くするのが好きなので、コードの長さをできるだけ短くしたパスワードジェネレーターを構築して彼を助けてください。

チャレンジ

4つのパラメーターを受け取るパスワードジェネレーターをBobにビルドします-

  • ドメインアドレス(例:stackexchange.com)
  • ファーストネーム、
  • 苗字、
  • 生年月日および年。

そして、次の変換を受けた文字列を出力します。

すべてのパスワードには、ドメイン名の長さlに基づいたテンプレートがあります。場合は、Lが素数である、テンプレートがこの形式であります-

[birth-date][domain-name][lastname][birth-year][symbol]

それ以外の場合は、この形式です-

[symbol][birth-year][firstname][domain-name][birth-date]

シンボルフィールドには、ドメインタイプに基づいた値があります。

.com-> $$$
.org-> &&&
.net-> %%%
.edu-> +++
.gov-> @@@
.mil-> >>>
デフォルト-> ~~~

今、彼はまた、実行したいシーザー暗号 -フィールド以上の[firstname][domain-name][lastname]場合【選択シフト方向が右であるlは、それが残っているそれ以外の素数です。シフト値は、生年月日と年の加算の値によって決まります。

上記のプロセスの後、テキストは簡単に思い出せないため、暗号化されたテキストを発音できるようにしたいと考えています。これを行うために、彼は3回ごとに子音をアルファベット順の母音(つまりaeiou)に置き換えたいと考えています。

最後に、彼は同じ文字の連続した出現を削除したいと考えています。

入力-stackexchange.com bob williams 0894

出力-08qraicvafyecugjigyoq94 $$$。

説明 :

[birth-date][domain-name][lastname][birth-year][symbol]ドメイン名の長さがstackexchange素数であるため、パスワードテンプレートはです。シンボルは$$$、ドメインタイプがのようになります.com

これらの値をテンプレートに入力しましょう- 08stackexchangewilliams94$$$。ここで、フィールドでcaesar暗号を実行する必要があります[firstname][domain-name][lastname](この場合は単なる姓です)。lは素数であり、シフト値はであるため、シフト方向は右です08+94 = 102

だから、に08stackexchangewilliams94$$$なり08qryaicvafylecugjjgykq94$$$ます。これで、連続する3回ごとの子音が母音に置き換えられ08qraaicvafyeecugjigyoq94$$$ 、同じ文字の連続するすべての発音が削除され08qraicvafyecugjigyoq94$$$ます。それがボブにとって発音可能であることを心配しないでください。

追加情報

  • ドメインアドレス、名、および姓には小文字のアルファベットのみが含まれます。
  • ドメインアドレスは常に、唯一のセカンドレベルおよびトップレベルドメインからなるようになるstackexchange.comとはありませんcodegolf.stackexchange.com。また、次のようなドメイン .co.ukは許可されませんが、正当.ukまたは.in有効です。
  • 母音のアルファベット順の置換は周期的です。つまりuaは、置換に使用されます。
  • Caesar暗号のASCII範囲は97〜122です。
  • ここで説明されているように入力できます
  • 出力は文字列でなければなりません。
  • 誕生日と年の形式があるddyy。だからが02許容され、2ではありません。

これはコードゴルフなので、バイト単位の最短コードが優先されます。ハッピーゴルフ!


4
ドメイン名は、常に唯一のセカンドレベルおよびトップレベルドメインなどから構成されますstackexchange.com、ではありませんかimg.stackexchange.com?国のドメインはbbc.co.ukどうですか?
briantist

呼び出し例ではを使用0894します102が、説明ではを使用し08+96=106ます。暗号化されたテキストは102値を使用するように見えます。混乱することができ、単にわずかな矛盾...
briantist

6
彼がそれを発音することができるならば、ボブは1つの狂ったmofoです。
魔法のタコUr

5
@carusocomputingボブはウェールズでしょうか?
ブリアンティスト16

1
いいえ、私はあなたのタイプのものでdefualtはないdefault
ローマグラーフ

回答:


7

PowerShellの3+、480の 476 474 453 450 448バイト

param($d,$f,$l,$b)$s,$t=$d-split'\.'
$m,$y=$b-split'(?<=..)(?=..)'
$v=+$m+$y
$p='1'*$s.Length-match'^(?!(..+)\1+$)..'
$c={-join([char[]]"$input"|%{[char](97..122)[((+$_-97)+((26-$v),$v)[$p])%26]})}
$s=$s|&$c
$f=$f|&$c
$l=$l|&$c
$a=(($a=@{com='$';org='&';net='%';edu='+';gov='@';mil='>'}.$t),'~')[!$a]*3
("`"$(("$a$y$f$s$m","$m$s$l$y$a")[$p]-replace'([^aeiou\d]{3})',"`$('`$1'-replace'[a-z]`$$',('aeiou'[`$i++%5]))")`""|iex)-replace'([a-z])\1+','$1'

オンラインでお試しください!

TimmyDのおかげで24 26バイト節約されました

うわー、これはクレイジーなものでした。これの完全な内訳は、後日または明日まで投稿できないと思います。

注:すべての行末は\n0x10)であるため、;これをすべて使用して1行に入力する必要はありません。

簡単な概要:

  1. ドメインを第2レベルとトップレベルに分割します。
  2. 生年月日を月と年に分割します。
  3. シフト値を計算します。
  4. SLDの長さが素数かどうかを判別します。セグメントは63文字RFC 1035も参照)より長くすることはできないため素数のリストをハードコーディングするだけで短くなったと思います:)提案されたregexメソッドを使用します。
  5. Caesar暗号を実行するスクリプトブロック(本質的には匿名関数)を定義します。
  6. SLD、姓、名に暗号を適用します
  7. ハッシュテーブルでシンボルを取得し、面白いビジネスにインデックスを付けます。
  8. 最後に、適切なテンプレートを適用する巨大な混乱、子音トリプレットの置換を実行し、各セクションをそのセクションを適切な値に置き換える部分式(コード)で置き換え、結果の文字列をInvoke-Expressioniex)で実行して埋め込みコードを生成し、連続した文字を最終的に単一の文字に置き換えます。

@TimmyDうわー、私は前にそれを見たことがない、それは素晴らしいです。ありがとう!
briantist

@TimmyDご存知のように、私はもともと単項-joinでそれを書き込もうとしましたが、$nullsではなくスペースと結合していると誓うことができました。奇妙な(そして再び感謝)!
briantist
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.