密码主教善良


10

源于,现在删除帖子。

给定一个字符串,如果它构成一个不错的Bishop密码,则应回答(真实/虚假或两个一致的值),这是在满足以下所有条件时:

  1. 至少有10个字符

  2. 它至少有3位数字([0-9]

  3. 它不是回文(反转时与自身相同)

如果您的代码是不错的Bishop密码,则您将获得0字节的奖励。

警告:待办事项使用善良主教作为实际的密码强度的测量!

例子

好的Bishop密码

PPCG123GCPP
PPCG123PPCG
PPCG123gcpp
0123456789
Tr0ub4dor&3

不好的Bishop密码

PPCG123 (太短)
correct horse battery staple (数字不足)
PPCG121GCPP (回文)
 (太短且数字不足)
abc121cba (太短和回文)
aaaaaaaaaaaa (回文且数字不足)
abc99cba (一切都错了)


@KrystosTheOverlord此挑战本身中定义了该术语。;-P
埃里克(Erik the Outgolfer)'19

9
w,我期待一些国际象棋逻辑密码规则…
Bergi

1
我通读了所有答案,但没有人要求奖金。
维斯卡

1
@JDL如果您有资格获得此非常真实的奖金,您实际上会从您的分数中减去0个字节!你在等什么?
亚伦

1
您的标准之一实际上是Bishop(2013)提出的反向标准。他建议密码不得超过10个字符,而不能超过10个字符。
PyRulez '19

Answers:



4

05AB1E,12 个字节

gT@Iþg3@IÂÊP

在线尝试验证所有测试用例

说明:

g      # Get the length of the (implicit) input
 T@    # Check if this length >= 10
Iþ     # Get the input and only leave the digits
  g    # Then get the length (amount of digits)
   3@  # And check if the amount of digits >= 3
IÂ     # Get the input and the input reversed
  Ê    # Check if they are not equal (so not a palindrome)
P      # Check if all three above are truthy (and output implicitly)


4

R80 70 62 64 63字节

any(rev(U<-utf8ToInt(scan(,'')))<U)&sum(U>47&U<58)>2&sum(U|1)>9

在线尝试!

来自digEmAll,也有一些重新安排

sum((s<-el(strsplit(scan(,''),"")))%in%0:9)>2&!all(s==rev(s))&s[10]>''

在线尝试!

非常简单,这里没有真正的惊人技巧。用户输入字符串后:

  • 分隔并在字符串中搜索两个以上的数字。(3位或更多数字)
  • 检查不是所有的元素都等于字符串的反向版本(回文)
  • 检查长度是否大于9(10个或更多字符)

我认为您可以将其替换!all(s==rev(s))any(s!=rev(s))一个字节。我觉得像长度检查也得以降低,但不知道如何(或者nchar或某种形式的sum(x|1)黑客攻击)
JDL

1
实际上,我认为any(s>rev(s))这是可行的-如果一个字符小于其回文对应的字符,则在密码的另一端,反之亦然。这样可以节省另一个字节。
JDL


1
@digEmAll当只有一个数字时,您的示例将返回true,您将需要添加一个>2
Aaron Hayman,


3

APL + WIN,36,30 29字节

节省了7个字节,感谢Adám

索引原点= 0

提示输入字符串

(10≤⍴v)×(3≤+/v∊∊⍕¨⍳10)>v≡⌽v←⎕

在线尝试!由Dyalog Classic提供

说明:

(10≤⍴v) Length test pass 1 fail 0

(3≤+/v∊∊⍕¨⍳10) Number of digits test

>v≡⌽v Palindrome test

该代码也有资格获得奖金,因为它是一个不错的Bishop密码。


@亚当。感谢您保存6个字节。⎕IO同意。v≡⌽v如果我加〜,效果很好。至于x的使用,在将布尔测试串在一起时,我倾向于使用它。相同结果相同字节数。
格雷厄姆

你有这是~... ?而且,即使你不这样做,你可以合并×~>
亚当

@Adám不,我没有≢。我可以将×〜合并为>再增加一个字节。谢谢。恐怕我的“推杆游戏”还需要更多练习;)
Graham

3

Brachylog18岁 12字节

感谢您的提示,KroppebFatalize

¬↔?l>9&ịˢl>2

在线尝试!

说明

该程序是单个谓词,由与 &

第一:

¬       The following assertion must fail:
 ↔        The input reversed
  ?       can be unified with the input
        Also, the input's
   l    length
    >9  must be greater than 9

第二:

 ˢ     Get all outputs from applying the following to each character in the input:
ị        Convert to number
       This gives an integer for a digit character and fails for a non-digit, so
       we now have a list containing one integer for each digit in the password
  l    Its length
   >2  must be greater than 2

{∋.∈Ị∧}ᶜ可以{∋ị}ᶜ
Kroppeb '19

首先放置“ not palindrome”子句,并更改选择数字的方式,您可以节省6个字节:¬↔?l>9&ịˢl>2
Fatalize

@Kroppeb哦,有趣!我没有考虑,但是只要字符是数字,它就会成功。谢谢!
DLosc

@Fatalize Aha-重用?类似的东西很整洁。谢谢!
DLosc

2

果冻,12字节

~Tṫ3ȧL9<Ɗ>ṚƑ

在线尝试!

[]如果没有足够的数字(空列表,虚假),0否则为坏数字(零,虚假),1如果好的数字(非零,真)。


2

Java 8,92字节

s->s.length()>9&s.replaceAll("\\D","").length()>2&!s.contains(new StringBuffer(s).reverse())

在线尝试。

说明:

s->                        // Method with String parameter and boolean return-type
  s.length()>9             //  Check if the length of the input-String is more than 9
  &s.replaceAll("\\D","")  //  AND: remove all non-digits from the input-String
    .length()>2            //       and check if the amount of digits is more than 2
  &!s.contains(new StringBuffer(s).reverse())
                           //  AND: check if the input-String does NOT have the reversed
                           //       input-String as substring (and thus is not a palindrome)

2

JavaScript,60 56 46字节

将输入作为字符数组。输出1为真和0为假。

s=>/(\d.*){3}/.test(s[9]&&s)&s+``!=s.reverse()

在线试用!

由于Arnauld节省了10个字节(!)。



2

APL(Dyalog Unicode),25 字节SBCS

{∧/(9<≢⍵)(3≤+/⍵∊⎕D),⍵≢⌽⍵}

在线尝试!


1
好。现在,您可以将其变成一列火车来打高尔夫球:(9<≢)∧(3≤1⊥∊∘⎕D)∧⊢≢⌽然后通过重新排列以避免重复来节省一个字节:(9<≢)∧≢∘⌽⍨∧3≤1⊥∊∘⎕D让em知道您是否需要这些步骤的说明。
阿达姆


1

干净,66字节

import StdEnv
$s=s<>reverse s&&s%(0,8)<s&&sum[1\\c<-s|isDigit c]>2

在线尝试!

  • s<>reverse ss不是回文
  • s%%(0,8)<s:的前9个字符 s少于所有s
  • sum[1\\c<-s|isDigit c]>2s具有两位以上的数字

1

视网膜0.8.2,40字节

G`.{10}
G`(\d.*){3}
+`^(.)(.*)\1$
$2
^..

在线尝试!链接包括测试用例。说明:

G`.{10}

检查至少10个字符。

G`(\d.*){3}

检查至少3位数字。

+`^(.)(.*)\1$
$2

如果它们匹配,请删除第一个和最后一个字符。

^..

如果至少有2个字符,则不是回文。

.NET的平衡组意味着可以在单个正则表达式中完成此操作,但这需要47个字节:

^(?!(.)*.?(?<-1>\1)*$(?(1).))(?=.{10})(.*\d){3}

在线尝试!链接包括测试用例。



1

Python 3中74 72 64字节

感谢Neil A.提供了-2个字节!
感谢Jo King -8个字节!

lambda s:s[9:]and re.findall('\d',s)[2:]and s[::-1]!=s
import re

说明:

lambda s: # Create lambda                                          
           s[9:] # Check if the string is at least 10 characters long                                 
                     and re.findall('\d',s)[2:] #Check for at least 3 matches of the regex \d (which matches all digits)
                     and s[::-1] != s # Check if the string reversed is equal to the string (palindrome test)
import re  # Import regex module

在线尝试!



1

Perl 6,32个字节

{$_ ne.flip&&m:g/\d/>2&&.comb>9}

在线尝试!

匿名代码块,仅强制执行所有规则。

说明:

{          &&         &&       }  # Anonymous code block
 $_ ne.flip                       # Input is not equal to its reverse
             m:g/\d/>2            # There are more than two digits
                        .comb>9   # There are more than 9 characters

1

K(oK)31 28字节

-3个字节,感谢ngn!

{(x~|x)<(2<#x^x^/$!10)*9<#x}

在线尝试!


1
您可以使用+//(总和直到收敛)而不是+/+/(总和)
ngn

1
或者,您可以x^x^y用来查找两个列表之间的交集:#x^x^,/!10。这可以缩短为#x^x^/!10^是“无”,x^/...是^具有初始值的-reduction x
ngn

1
还有一件事,>(或<)可以用作“而不是”:{(x~|x)<(2<#x^x^/$!10)*9<#x}
ngn

@ngn谢谢!找到路口的好方法!
加伦·伊万诺夫



0

,19字节

#a>9&XD Na>2&aNERVa

在线尝试!(所有测试用例)

说明

a为第一命令行参数:

#a > 9      Length of a is greater than 9
&           and
XD N a > 2  Number of matches of regex [0-9] iN a is greater than 2
&           and
a NE RV a   a is not (string-)equal to reverse of a


0

Pyth,17个字节

&&<2l@`MTQ<9lQ!_I

在此处在线尝试,或在此处一次验证所有测试用例。

&&<2l@`MTQ<9lQ!_IQ   Implicit: Q=eval(input()), T=10
                     Trailing Q inferred
      `MT            [0-10), as strings
     @   Q           Take characters from input which are in the above
    l                Length
  <2                 Is the above greater than 2?
            lQ       Length of Q
          <9         Is the above greater than 9?
               _IQ   Is Q unchanged after reversal?
              !      Logical NOT
&&                   Logical AND the three results together

0

Groovy,(47个字节)

{p->p=~/.{10}/&&p=~/(\d.*){3}/&&p!=p.reverse()}

(赠予留给读者练习)

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.