Пароль Єпископ Доброта


10

Отриманий з цього , тепер видаленого, допису.

Давши рядок, дайте відповідь (truthy / falesy або два послідовних значення), якщо це хороший пароль Bishop, який є, коли всі наступні умови виконуються:

  1. вона містить щонайменше 10 символів

  2. він має принаймні 3 цифри ( [0-9])

  3. це не паліндром (ідентичний самому собі при переверненні)

Ви отримуєте 0 байт бонус, якщо ваш код хороший пароль Bishop.

Попередження: Do НЕ використовувати Bishop Досконалості як міра фактичної сили пароля!

Приклади

Гарні паролі Bishop

PPCG123GCPP
PPCG123PPCG
PPCG123gcpp
0123456789
Tr0ub4dor&3

Не хороші паролі Bishop

PPCG123 (занадто короткий)
correct horse battery staple (недостатньо цифр)
PPCG121GCPP (паліндром)
 (занадто короткий і недостатньо цифр)
abc121cba (занадто короткий і паліндром)
aaaaaaaaaaaa (паліндром і недостатньо цифр)
abc99cba (все неправильно)


@KrystosTheOverlord Термін визначений в цьому самому виклику. ;-P
Ерік Аутгольфер

9
Оу, я очікував , що деякі правила шахової логіки пароля ...
Берги

1
Я прочитав усі відповіді, і жодна не вимагала премії.
Веська

1
@JDL ви дійсно отримаєте 0 байтів, якщо ви отримаєте цей справжній бонус! Чого ти чекаєш?
Аарон

1
Один із ваших критеріїв насправді є зворотним до того, що запропонував Бішоп (2013). Він запропонував, щоб паролі мали бути не більше 10 символів, а не більше.
PyRulez

Відповіді:


5

Python 2 , 61 59 54 51 байт

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

Спробуйте в Інтернеті!

-5 байт, завдяки Еріку Аутгольферу
-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

R , 80 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))який збережете один байт. Я відчуваю, що перевірку довжини теж можна зменшити, але не впевнений, як (будь-який ncharабо якийсь sum(x|1)злом)
JDL

1
насправді, я думаю, any(s>rev(s))буде працювати --- якщо символ менше, ніж його паліндромний аналог, то на іншому кінці пароля зворотне буде істинним. Це економить ще один байт.
JDL


1
@digEmВсі ваш приклад повертає істину, коли є лише одне число, вам потрібно буде включити:>2
Аарон Хейман


3

APL + WIN, 36, 30 29 байт

7 байт зберегли подяку Адаму

Походження індексу = 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.


@ Adám. Дякуємо за збереження 6 байт. Про ⎕IO погодився. v≡⌽v працює чудово, якщо я дотримуюся ~. Що стосується використання x, я, як правило, використовую його під час з'єднання булевих тестів. Один і той же результат однакова кількість байтів.
Грем

У вас є, що є ~? І навіть якщо ви цього не зробите, ви можете об'єднати ×~в>
адам

@ Adám Ні, у мене немає ≢. Я можу об'єднати × ~> у ще один байт. Дякую. Я боюсь, що моя «гра в гру» все ще потребує більшої практики;)
Грехем,

3

Брахілог , 18 12 байт

Дякуємо за поради, Kroppeb та Fatalize !

¬↔?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

Поставивши спочатку пункт "не паліндром" та змінивши спосіб вибору цифр, ви можете зберегти 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)∧⊢≢⌽а потім збережіть ще один байт, переставляючи, щоб уникнути паронів: (9<≢)∧≢∘⌽⍨∧3≤1⊥∊∘⎕DПовідомте їх, якщо вам потрібно пояснення цих кроків.
Адам



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 байт

Дякую Нілу А. за -2 байти!
Дякую Джо Кінгу за -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
ви можете використовувати +//(сума до конвергенції) замість +/+/(сума)
пн.

1
в якості альтернативи, ви можете використовувати , x^x^yщоб знайти перетин між двома списками: #x^x^,/!10. це можна скоротити до #x^x^/!10( ^є "без", x^/... - ^зменшення з початковим значенням x)
пн.

1
ще одна річ, >(або <) можуть бути використані в якості «а не":{(x~|x)<(2<#x^x^/$!10)*9<#x}
СПП

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

(Бонусне включення залишається читачем як вправа)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.