Mật khẩu Giám mục Goodness


10

Xuất phát từ điều này , bây giờ bị xóa, bài viết.

Đưa ra một chuỗi, trả lời (trung thực / giả hoặc hai giá trị nhất quán) nếu nó tạo thành một mật khẩu Giám mục tốt, đó là khi tất cả các điều kiện sau được đáp ứng:

  1. nó có ít nhất 10 ký tự

  2. nó có ít nhất 3 chữ số ( [0-9])

  3. nó không phải là một palindrom (giống hệt với chính nó khi đảo ngược)

Bạn nhận được 0 byte tiền thưởng nếu mã của bạn là mật khẩu Giám mục tốt.

Cảnh báo: Đỗ không sử dụng ĐGM tốt lành như một biện pháp của sức mạnh mật khẩu thực tế!

Ví dụ

Mật khẩu Giám mục tốt

PPCG123GCPP
PPCG123PPCG
PPCG123gcpp
0123456789
Tr0ub4dor&3

Mật khẩu không tốt của Giám mục

PPCG123 (quá ngắn)
correct horse battery staple (không đủ chữ số)
PPCG121GCPP (palindrom)
 (quá ngắn và không đủ chữ số)
abc121cba (quá ngắn và palindrom)
aaaaaaaaaaaa (palindrom và không đủ chữ số)
abc99cba (mọi thứ đều sai)


@KrystosTheOverlord Thuật ngữ được định nghĩa trong chính thử thách này. ;-P
Erik the Outgolfer 13/2/19

9
Aw, tôi đang mong đợi một số quy tắc mật khẩu logic cờ vua
Bergi

1
Tôi đọc qua tất cả các câu trả lời và không ai nhận được tiền thưởng.
Veskah

1
@JDL bạn thực sự nhận được 0 byte từ điểm số của mình nếu bạn đủ điều kiện nhận phần thưởng rất thực này! Bạn còn chờ gì nữa?
Aaron

1
Một trong những tiêu chí của bạn thực sự là mặt trái của những gì Đức cha (2013) đề xuất. Ông đề xuất rằng mật khẩu phải có 10 ký tự trở xuống, không nhiều hơn.
PyRulez

Câu trả lời:



4

05AB1E , 12 byte

gT@Iþg3@IÂÊP

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

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

R , 80 70 62 64 63 byte

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

Hãy thử trực tuyến!

Từ digEmAll, và một số sắp xếp lại quá

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

Hãy thử trực tuyến!

Khá đơn giản, không có thủ thuật tuyệt vời thực sự ở đây. Sau khi người dùng nhập chuỗi:

  • Tách và tìm kiếm chuỗi cho hơn 2 số. (3 chữ số trở lên)
  • Kiểm tra nếu không phải tất cả các phần tử đều bằng phiên bản đảo ngược của chuỗi (palindrom)
  • Kiểm tra độ dài lớn hơn 9 (10 ký tự trở lên)

Tôi nghĩ rằng bạn có thể thay thế !all(s==rev(s))bằng any(s!=rev(s))sẽ tiết kiệm một byte. Tôi cảm thấy việc kiểm tra độ dài cũng có thể được giảm, nhưng không chắc bằng cách nào ( ncharhoặc một loại sum(x|1)hack nào đó)
JDL

1
thực ra, tôi nghĩ any(s>rev(s))sẽ hoạt động --- nếu một ký tự nhỏ hơn đối tác palindromic của nó, thì ở đầu kia của mật khẩu, điều ngược lại sẽ là đúng. Điều đó tiết kiệm một byte khác.
JDL


1
@digEmAll ví dụ của bạn trả về đúng khi chỉ có một số, bạn sẽ cần bao gồm một>2
Aaron Hayman


3

APL + THẮNG, 36, 30 29 byte

7 byte được lưu cảm ơn Adám

Chỉ số gốc = 0

Lời nhắc cho chuỗi đầu vào

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

Hãy thử trực tuyến! Lịch sự của Dyalog Classic

Giải trình:

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

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

>v≡⌽v Palindrome test

Mã này cũng đủ điều kiện nhận thưởng vì đây là mật khẩu của Giám mục tốt.


@ Adám. Cảm ơn vì đã lưu 6 byte. Trên ⎕IO đồng ý. v≡⌽v hoạt động tốt nếu tôi trả trước ~. Khi sử dụng x tôi có xu hướng sử dụng nó khi xâu chuỗi các bài kiểm tra boolean lại với nhau. Cùng một kết quả cùng số byte.
Graham

Bạn có đó là ~... ? Và ngay cả khi bạn không, bạn có thể hợp nhất ×~vào>
Adám

@ Adám Không tôi không có. Tôi có thể hợp nhất × ~ vào> để có thêm một byte. Cảm ơn. Tôi e rằng "trò chơi đặt" của tôi vẫn cần luyện tập nhiều hơn;)
Graham

3

Brachylog , 18 12 byte

Cảm ơn những lời khuyên, KroppebFatalize !

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

Hãy thử trực tuyến!

Giải trình

Chương trình là một vị ngữ duy nhất, bao gồm hai phần được kết nối với &.

Đầu tiên:

¬       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

Thứ hai:

 ˢ     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

{∋.∈Ị∧}ᶜcó thể{∋ị}ᶜ
Kroppeb

Đặt mệnh đề "không palindrom" trước và thay đổi cách chọn chữ số, bạn có thể lưu 6 byte:¬↔?l>9&ịˢl>2
Fatalize 14/2/19

@Kroppeb ơi, thú vị quá! Tôi đã không cân nhắc , nhưng nó có ý nghĩa rằng nó sẽ thành công nếu nhân vật là một chữ số. Cảm ơn!
DLosc

@Firthize Aha - tái sử dụng ?như thế là gọn gàng. Cảm ơn!
DLosc


2

Java 8, 92 byte

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

Hãy thử trực tuyến.

Giải trình:

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 byte

Đưa đầu vào như một mảng các ký tự. Đầu ra 1cho sự thật và0 cho falsey.

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

Dùng thử trực tuyến!

Đã lưu 10 byte (!) Nhờ Arnauld .



2

APL (Dyalog Unicode) , 25 byte SBCS

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

Hãy thử trực tuyến!


1
Tốt Bây giờ bạn có thể đánh gôn bằng cách biến nó thành một đoàn tàu: (9<≢)∧(3≤1⊥∊∘⎕D)∧⊢≢⌽và sau đó tiết kiệm thêm một byte bằng cách sắp xếp lại để tránh parens: (9<≢)∧≢∘⌽⍨∧3≤1⊥∊∘⎕DHãy cho em biết nếu bạn cần giải thích về các bước này.
Adám


1

Sạch , 66 byte

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

Hãy thử trực tuyến!

  • s<>reverse s: skhông phải là một bảng màu
  • s%%(0,8)<s: 9 ký tự đầu tiên sít hơn tất cảs
  • sum[1\\c<-s|isDigit c]>2: scó nhiều hơn hai chữ số

1

Võng mạc 0.8.2 , 40 byte

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

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải trình:

G`.{10}

Kiểm tra ít nhất 10 ký tự.

G`(\d.*){3}

Kiểm tra ít nhất 3 chữ số.

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

Xóa ký tự đầu tiên và cuối cùng nếu chúng khớp.

^..

Nếu có ít nhất 2 ký tự thì đó không phải là một bảng màu.

Các nhóm cân bằng của .NET có nghĩa là điều này có thể được thực hiện trong một biểu thức chính quy duy nhất, nhưng phải mất 47 byte:

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

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm.



1

Python 3 , 74 72 64 byte

Cảm ơn Neil A. cho -2 byte!
Cảm ơn Jo King vì -8 byte!

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

Giải trình:

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

Hãy thử trực tuyến!



1

Perl 6 , 32 byte

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

Hãy thử trực tuyến!

Khối mã ẩn danh đơn giản thực thi rằng tất cả các quy tắc được tuân thủ.

Giải trình:

{          &&         &&       }  # 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 byte

-3 byte nhờ ngn!

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

Hãy thử trực tuyến!


1
bạn có thể sử dụng +//(tổng cho đến khi hội tụ) thay vì +/+/(tổng cộng)
ngn

1
cách khác, bạn có thể sử dụng x^x^yđể tìm giao điểm giữa hai danh sách : #x^x^,/!10. điều này có thể được rút ngắn thành #x^x^/!10( ^là "không", x^/... là - ^giảm giá trị ban đầu x)
ngn

1
một điều nữa, >(hoặc <) có thể được sử dụng là "và không":{(x~|x)<(2<#x^x^/$!10)*9<#x}
ngn

@ngn Cảm ơn bạn! Cách tốt đẹp để tìm ngã tư!
Galen Ivanov



0

Pip , 19 byte

#a>9&XD Na>2&aNERVa

Hãy thử trực tuyến! (tất cả các trường hợp thử nghiệm)

Giải trình

Với aviệc là đối số dòng lệnh đầu tiên:

#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

Bình thường, 17 byte

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

Dùng thử trực tuyến tại đây hoặc xác minh tất cả các trường hợp thử nghiệm cùng một lúc tại đây .

&&<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 byte)

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

(Bao gồm tiền thưởng được để lại như một bài tập cho người đọc)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.