비숍 감독


10

에서 파생 , 지금, 게시물을 삭제.

문자열이 주어지면 다음과 같은 조건이 모두 충족 될 때 좋은 주교 암호를 구성하는 경우 (거짓 / 거짓 또는 두 개의 일관된 값)에 대답하십시오.

  1. 10 자 이상이어야합니다

  2. 3 자리 이상이어야합니다 ( [0-9])

  3. 회문이 아닙니다 (반전 될 때 자체와 동일)

코드가 좋은 주교 암호라면 0 바이트 보너스를받습니다.

경고 : 음주 하지 실제 암호 강도의 척도로 주교의 선 (善)을 사용!

좋은 주교 암호

PPCG123GCPP
PPCG123PPCG
PPCG123gcpp
0123456789
Tr0ub4dor&3

좋지 않은 주교 암호

PPCG123 (너무 짧음)
correct horse battery staple (충분하지 않은 숫자)
PPCG121GCPP (회문)
 (너무 짧고 부족한 숫자)
abc121cba (너무 짧고 회문)
aaaaaaaaaaaa (회문 및 숫자가 충분하지 않음
abc99cba )


@KrystosTheOverlord 용어는이 도전 자체에서 정의됩니다. ;-P
Erik the Outgolfer

9
아, 나는 체스 논리 암호 규칙을 기대했다…
Bergi

1
나는 모든 답변을 읽었으며 보너스는 주장하지 않았습니다.
Veskah

1
@JDL이 실제 보너스를 받으려면 점수에서 0 바이트를 빼야합니다! 당신은 무엇을 기다리고 있습니까?
Aaron

1
귀하의 기준 중 하나는 실제로 Bishop (2013)이 제안한 것과 반대입니다. 그는 암호는 10 자 이하 여야한다고 제안했습니다.
PyRulez

답변:



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

온라인으로 사용해보십시오!

매우 간단하고 놀라운 속임수는 없습니다. 사용자가 문자열을 입력 한 후 :

  • 문자열을 구분하고 두 개 이상의 숫자를 검색합니다. (3 자리 이상)
  • 모든 요소가 문자열의 역 버전과 같은지 확인합니다 (palindrome)
  • 길이가 9보다 큰지 확인합니다 (10 자 이상)

나는 당신이 대체 할 수있는 생각 !all(s==rev(s))any(s!=rev(s))한 바이트를 절약 할 수있다. 길이 검사도 줄일 수 있다고 생각하지만 어떻게 ( nchar어떤 종류의 sum(x|1)해킹 이든) 확실하지 않습니다.
JDL

1
실제로, 나는 효과가 있다고 생각 any(s>rev(s))합니다 .- 문자가 회문보다 작 으면 암호의 다른 쪽 끝에서 대화가 참입니다. 다른 바이트를 절약합니다.
JDL


1
단 하나의 수있을 때 진정한 당신의 예를 반환 @digEmAll, 당신은 포함해야합니다>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

이 코드는 또한 좋은 주교 암호이므로 보너스를받을 자격이 있습니다.


@아담. 6 바이트를 절약 해 주셔서 감사합니다. ⎕IO에 동의했다. ~를 앞에 추가하면 v≡⌽v가 제대로 작동합니다. x의 사용에 관해서는 부울 테스트를 함께 묶을 때 사용하는 경향이 있습니다. 동일한 결과 수의 바이트.
Graham

당신은 어느 것이 있습니까 ~... ? 당신이하지 않더라도, 당신은 병합 할 수 있습니다 ×~으로>
아담

@ Adám 아니요 ≢이 없습니다. 1 바이트 이상 ×를 ~로 병합 할 수 있습니다. 감사. 내 "퍼팅 게임"에 더 많은 연습이 필요합니다.)
Graham

3

Brachylog , 18 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

"palindrome이 아님"절을 먼저 입력하고 숫자를 선택하는 방법을 변경하면 6 바이트를 절약 할 수 있습니다.¬↔?l>9&ịˢl>2
Fatalize

@Kroppeb 아, 흥미 롭습니다! 나는 고려하지 않았지만 문자가 숫자라면 성공할 것입니다. 감사!
DLosc 2019

@Fatalize Aha-- 그처럼 ?깔끔하게 재사용합니다 . 감사!
DLosc 2019


2

자바 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할 수 있습니다.이 단계에 대한 설명이 필요하면 알려주십시오.
Adám



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

파이썬 3 , 74 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

펄 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 바이트

ngn 덕분에 -3 바이트!

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

온라인으로 사용해보십시오!


1
당신은 +//(합계) 대신 +/+/( 수렴까지의 합)을 사용할 수 있습니다
ngn

1
또는 x^x^y두 목록 사이의 교차점을 찾는 데 사용할 수 있습니다 #x^x^,/!10. 이것은 단축 될 수있다 #x^x^/!10( ^"없이" x^/...이다 ^초기치 - 환원 x)
NGN

1
한 가지 더, >또는 (또는 <)는 "and not"으로 사용될 수 있습니다 :{(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

그루비 (47 바이트)

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

(보너스 포함은 독자에게 연습으로 남습니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.