保存我的秘密!


14

我有很多秘密,无处可保留!

目标很简单:编写一个程序,让您保存字符串并用密码保护它。

该程序将使用别名,密码和(可选)机密作为参数。

如果这是第一次使用给定的别名调用程序,则它将存储/记住机密,并输出所需的内容。

如果使用以前使用过的别名调用该程序,则当密码与使用该别名第一次运行该程序的密码相同时,它将输出该别名的秘密。

其他情况

  • 如果它是第一次使用某个别名被调用而没有给出任何秘密,则不存储任何内容。

  • 如果使用已使用的别名调用程序,并且密码不正确-请返回任何错误或完全不返回任何错误。

  • 如果使用已使用的别名调用该程序,则密码正确并提供了一个新机密-输出旧机密并将其替换为新机密,以便下次仅输出新机密。

  • 如果使用已使用的别名调用该程序,则密码正确且不提供新的密码-输出旧密码并确保不会被替换。

注意:这些机密/密码不需要安全存储

另请注意:别名,密码和机密的任何字母数字输入都应被接受

适用标准规则,祝您好运!


1
是的,使用任何东西来存储它-至于别名,我认为它应该接受任何字母数字输入
奎因

1
我们可以使用功能而不是完整程序吗?
阿诺尔德

1
@Arnauld我会允许的
Quinn,

1
我们可以假设密码和机密不是空字符串吗?
xnor19年

1
在不输出密码的任何情况下,我们都可以输出空答案(如0或无)吗?
xnor19年

Answers:


10

JavaScript(ES6), 60  50字节

@JonasWilms节省了10个字节!

将输入作为(alias,password,secret)(alias,password)。第一次存储密码时返回undefined,如果密码不正确,则返回false

f=(a,p,s,[P,v]=f[a]||[p])=>p==P&&(f[a]=[P,s||v],v)

在线尝试第一个测试用例!

在线尝试第二个测试用例!

怎么样?

F

已评论

f = (             // f = named function whose underlying object is used for storage
  a,              // a = alias
  p,              // p = password
  s,              // s = optional secret
  [P, v] = f[a]   // if f[a] is defined, retrieve the password P and the secret v
           || [p] // otherwise, copy p in P
) =>              //
  p == P && (     // if p is not equal to P, yield false; else:
    f[a] = [      //   update f[a]:
      P,          //     save the new password (or leave it unchanged)
      s || v      //     save the new secret if it's defined, or keep the previous one
    ],            //
    v             //   return the previous secret
  )               //

花了我一点时间来发现您的存储方式!
毛茸茸的

嗯,是正确的吗?
ngn

1
@ngn最有可能确实是错误的。感谢您举报。现在应该修复。
阿诺尔德

通过在对象内部存储[password,value]数组来获得-7个字节
乔纳斯·威尔姆斯

@JonasWilms做得好!我想不出任何p&&需要的情况。因此,这是另一个-3字节。
阿诺尔德

6

Python 2中94 93个字节

def f(a,p,s=0,d={}):
 q,t=d.get(a,(0,0))
 if q==p:d[a]=p,s or t;return t
 elif q<1<s:d[a]=p,s

在线尝试!

一次,Python的怪异默认dict参数对我有利。


等等,使用默认参数使它仅是一个对象,而不是函数调用时的新对象?嗯...这解释了我以前不得不做的很多调试。
HyperNeutrino




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.