밥의 암호


13

소개

Bob은 자신이 사용하는 웹 사이트마다 다른 비밀번호를 사용하는 것을 좋아합니다. 그는 기억하기 위해 특별한 형식의 암호를 원합니다. 코드 길이가 가능한 짧은 암호 생성기를 작성하여 그를 도와주세요. 왜냐하면 그의 이름처럼 물건을 짧게 유지하는 것을 좋아하기 때문입니다.

도전

Bob에게 네 가지 매개 변수를 사용하는 비밀번호 생성기를 빌드하십시오.

  • 도메인 주소 (예 : stackexchange.com)
  • 이름,
  • 성,
  • 생년월일.

다음 변환을 거친 문자열을 출력합니다.

모든 비밀번호에는 도메인 이름 의 길이 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 이 소수 이면 시프트 방향이 맞습니다 . 이동 값은 생년월일과 연도의 추가 값에 의해 결정됩니다.

위의 과정이 끝나면 텍스트를 쉽게 기억할 수 없으므로 암호화 된 텍스트를 발음하기를 원합니다. 이를 위해 그는 세 번째 연속 자음을 알파벳 순서 (예 :)로 모음으로 바꾸려고합니다 aeiou.

마지막으로, 그는 동일한 문자가 연속적으로 나타나는 것을 삭제하려고합니다.

입력-stackexchange.com bob williams 0894

출력-08qraicvafyecugjigyoq94 $$$.

설명 :

[birth-date][domain-name][lastname][birth-year][symbol]도메인 이름의 길이 stackexchange가 소수 이므로 비밀번호 템플리트는 입니다. 기호가 될 것입니다 $$$도메인 유형이기 때문에 .com.

템플릿에서 해당 값을 채우십시오- 08stackexchangewilliams94$$$. 이제 시저 암호는 필드에서 실행해야합니다 [firstname][domain-name][lastname](이 경우 성입니다). l 이 소수이고 시프트 값이 이므로 시프트 방향이 옳습니다 08+94 = 102.

그래서로 08stackexchangewilliams94$$$변합니다 08qryaicvafylecugjjgykq94$$$. 이제 세 번째 연속 자음이 모음으로 바뀝니다 . 08qraaicvafyeecugjigyoq94$$$ 같은 문자의 모든 연속 된 소리가 삭제됩니다 08qraicvafyecugjigyoq94$$$. 그것이 Bob에게 발음하기 쉽다는 것을 걱정하지 마십시오.

추가 정보

  • 도메인 주소, 이름 및 성은 소문자 알파벳 만 포함합니다.
  • 도메인 주소는 항상 stackexchange.com그렇지 않은 두 번째 및 최상위 도메인으로 만 구성됩니다 codegolf.stackexchange.com. 또한 같은 도메인 .co.uk은 허용되지 않지만 정당 .uk하거나 .in유효합니다.
  • 알파벳 순서로 모음을 교체하는 것은 주기적입니다. 이후 내 말은 u, a대체하는 데 사용됩니다.
  • 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
그가 발음 할 수 있다면 밥은 미친 모포입니다.
매직 문어 Urn

5
@carusocomputing 아마 밥은 웨일스 어?
briantist

1
아니 난 당신이 타입을 의미 defualt하지 않았다default
Roman Gräf

답변:


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'

온라인으로 사용해보십시오!

저장 (24) (26)는 덕분에 바이트 TimmyD !

와, 이건 미친 짓이야 나중에 또는 내일까지이 전체 내용을 게시 할 수 없다고 생각합니다.

참고 : 모든 줄 끝은 \n( 0x10) 이므로이 줄을 모두 사용 ;하고 한 줄에 넣을 필요가 없습니다 .

빠른 개요:

  1. 도메인을 두 번째 수준과 최상위 수준으로 나눕니다.
  2. 생년월일을 월과 년으로 나눕니다.
  3. 시프트 값을 계산하십시오.
  4. SLD의 길이가 소수인지 판별하십시오. 이후 세그먼트가 더 이상 63자를 초과 할 수 없습니다 ( 또한 RFC 1035 참조 ), 나는 단지 소수의 목록 : 하드 코드 짧은 생각 제안 정규식 방법을 사용합니다.
  5. Caesar 암호를 수행 할 스크립트 블록 (기본적으로 익명 함수)을 정의하십시오.
  6. 암호를 SLD, 이름 및성에 적용
  7. 해시 테이블 및 인덱싱 재미있는 비즈니스로 상징을 얻으십시오.
  8. 마지막으로 적절한 템플릿을 적용하고 자음 삼중 항을 대체하고 각 섹션을 해당 부분을 적절한 값으로 대체하는 하위 식 (코드)으로 바꾸고 결과 문자열 을 실행하여 Invoke-Expression( iex)로 실행 하는 거대한 혼란 emebedded 코드를 생성 한 다음 연속 문자를 단일 문자로 최종 대체합니다.

@TimmyD 와우 나는 그것을 전에 본 적이 없으며 훌륭합니다. 감사!
briantist

@TimmyD 아시다시피, 원래는 단항으로 쓰려고했지만 -join공백이 아닌 $nulls 와 결합하여 맹세 할 수는 없었 습니다. 이상하다 (다시 감사합니다)!
briantist
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.