パスワードBishop Goodness


10

このから派生し、現在は削除されています。

文字列が与えられた場合、それが適切なBishopパスワードを構成する場合は(truthy / falsyまたは2つの一貫した値)に答えます。これは、次のすべての条件が満たされた場合です。

  1. 10文字以上

  2. 3桁以上([0-9]

  3. それは回文ではありません(逆転してもそれ自体と同じです)

コードがBishopの適切なパスワードである場合、0バイトのボーナスを受け取ります。

警告:実際のパスワード強度の尺度としてBishopの良さを使用しないでください!

適切なBishopパスワード

PPCG123GCPP
PPCG123PPCG
PPCG123gcpp
0123456789
Tr0ub4dor&3

不正なBishopパスワード

PPCG123 (短すぎる)
correct horse battery staple (桁が足りない)
PPCG121GCPP (パリンドローム)
 (桁が短すぎて足りない)
abc121cba (短すぎて回文)
aaaaaaaaaaaa (パリンドロームで足りない)
abc99cba (すべてが間違っている)


@KrystosTheOverlordこの用語は、このチャレンジ自体で定義されています。;-P
Erik the Outgolfer

9
ああ、私はいくつかのチェスロジックパスワードルールを期待していた…
Bergi

1
私はすべての答えを読みましたが、誰もボーナスを主張していませんでした。
Veskah

1
@JDLは、この非常にリアルなボーナスを獲得するために、スコアから0バイトを差し引くことができます。何を待ってるの?
アーロン

1
あなたの基準の1つは、実際にはBishop(2013)が提案したものの逆です。彼は、パスワードは10文字以下である必要があると提案しました。
PyRulez

回答:


5

パイソン261の 59 54 51バイト

lambda s:sum(map(str.isdigit,s))>2<s[:9]<s<>s[::-1]

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

-5バイト、Erik the Outgolferの
おかげで-3バイト、xnorのおかげで



@EriktheOutgolferありがとう:)
TFeld

あなたのように長さの確認を行うことができますs[:9]<s非回文チェックとよく組み合わせた、:s[:9]<s!=s[::-1]
XNOR

@xnorありがとう:)
TFeld

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]>''

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

非常に簡単で、本当の驚くべきトリックはありません。ユーザーが文字列を入力した後:

  • 文字列を区切り、2つ以上の数字を検索します。(3桁以上)
  • すべての要素が文字列の反転バージョンと等しいかどうかを確認します(パリンドローム)
  • 長さが9(10文字以上)より大きいことを確認します

私はあなたが交換することができると思う!all(s==rev(s))any(s!=rev(s))1つのバイトを救うであろう。長さのチェックも減らすことができるように感じますが、どのように(いずれかncharまたは何らかのsum(x|1)ハッキング)
はわかり

1
実際、私any(s>rev(s))はうまくいくと思います---文字がそのパリンドロームの対応物よりも小さい場合、パスワードの反対側では逆が真になります。これにより、別のバイトが節約されます。
JDL 2019


1
@digEmAll例では、数値が1つしかない場合にtrueを返します。aを含める必要があります>2
アーロンヘイマン


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いいえ、私はhaveを持っていません。×〜を>に1バイト追加してマージできます。ありがとう。私の「パッティングゲーム」にはまだ練習が必要だと思います;)
グラハム

3

Brachylog18 12バイト

ヒントをありがとう、KroppebFatalize

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

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

説明

プログラムは単一の述語であり、でチェーンされた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

{∋.∈Ị∧}ᶜすることができます{∋ị}ᶜ
クロペブ

最初の句を「回文ない」置く、と数字を選択する方法を変更するには、6つのバイトを保存することができます:¬↔?l>9&ịˢl>2
Fatalize

@Kroppebああ、面白い!私は考慮しませんでしたが、文字が数字であれば成功することは理にかなっています。ありがとう!
DLosc

@Fatalize Aha-その?ようなものを再利用するのは素晴らしいことです。ありがとう!
DLosc


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

APL(Dyalog Unicode)、25 バイトSBCS

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

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


1
良い。これで、それを電車にしてゴルフをすることができます。次に(9<≢)∧(3≤1⊥∊∘⎕D)∧⊢≢⌽、括弧を回避するために再配置して1バイトを節約し(9<≢)∧≢∘⌽⍨∧3≤1⊥∊∘⎕Dます。これらの手順の説明が必要かどうかを教えてください。
アダム



1

Retina 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の374の 72、64バイト

-2バイトをありがとうNeil A.!-8バイトのJo King
感謝します!

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

K(OK)31 28バイト

ngnのおかげで-3バイト!

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

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


1
+//(sum sum)の代わりに+/+/(sum
to

1
または、x^x^y2つのリスト間の共通部分を見つけるために使用することもできます#x^x^,/!10。これは#x^x^/!10^is "without"、x^/... is ^-reduction with initial value x
ngn

1
もう一つ、>(あるいは<)として「ではなく、」使用することができます:{(x~|x)<(2<#x^x^/$!10)*9<#x}
NGN

@ngnありがとうございます!交差点を見つけるための素晴らしい方法!
Galen Ivanov



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()}

(ボーナス包含は読者への演習として残されています)

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