경찰과 강도 : 수정 된 우선 순위 (Cops 'Thread)


19

이 도전은 원래 Magic Octopus Urn에 의해 샌드 박스되었습니다. 나는 그의 허락을 받아 그것을 채택했다.

이것이 경찰의 실입니다. 강도의 실이 여기 있습니다 .

도전

  • 1 단계 : 우선 순위 를 검사하는 코드 (함수 또는 전체 프로그램)를 작성하십시오 .
  • 2 단계 : 문자를 기호로 바꾸어 코드 조각을 제거하십시오 .
  • 3 단계 : 수정 된 코드를 경찰 스레드에 게시합니다.
  • 4 단계 : 코드가 해독 될 때까지 기다렸다가 다른 사람의 코드를 해독하십시오.

예를 들어, Groovy 코드 {it.isPrime()}가 될 수 {██.is█████()}있습니다. (이것은 어리석게 깨지기 쉬울 것입니다. 또한 .isPrime()Groovy 방법이 아닙니다.)


채점

제출시 프로그램 점수를 포함시켜야합니다. 점수는 수정 된 문자 대 문자의 비율로 정의됩니다. 따라서 프로그램에 20자가 있고 5가 수정 된 경우 점수는 0.25입니다. 위의 Groovy 코드는 0.5 점입니다.


규칙

  • 프로그램은 양의 정수만 처리하면 됩니다. 숫자가 소수이면 거짓 값을, 그렇지 않으면 거짓 값을 출력해야합니다. 출력 내용을 답변으로 지정하십시오.
  • 코드에 주석이나 불필요한 공백이 포함되어 있지 않을 수 있습니다.
  • 해싱 또는 암호화 난독 화가 없습니다.
  • 코드는 50 %를 넘지 않아야합니다 (적어도 1/2 자 이상이 표시되어야 함). 이 수단 있다는 가장 높은 가능한 점수는 0.5입니다.
  • 일주일 이내에 답이 깨지지 않으면 안전하다고 표시하고 의도 한 균열을 편집 할 수 있습니다.

승리

우승자는 게시 후 2 주 이내에 가장 낮은 점수를받은 정답입니다. 동점 인 경우, 가장 많은 표를 얻은 사람이 이길 것입니다. 이 스레드는 항상 더 많은 제출물에 공개되지만 2 주 후에 선택한 승자는 영구적입니다.


입력의 도메인은 무엇입니까? (즉, 모두 n >= 1또는 모든 정수입니까?)
Conor O'Brien

1
@FryAmTheEggman 상태 완료
MD XF

1
다시 말하지만 점수 매기기 방법을 쉽게 이용할 수 있으면 문제가 해결 된 것입니다.
user202729


1
스 니펫주세요?
user202729

답변:


3

펑 토이 드 , 점수 = 14/223 ≈ 0.062780 [안전]

Y(yG(BK██)(B(S(BS(C(BC(C(BB(B(v
S(CB█)(█C█B>vK  BSBB())█K(BS(S?
>(KZ)(C(C(Bv>██        >   v██<
█)Sg3I)$; @>B(BS(b(C(BBI)Iv>(█g
())I)))I)IBB(C(b(CB(C())))<v)█C
I))I))0)))(C(BC(B(BB)(C(BBv>)))
]I))))I))>    >)█   $;@   >I)(B

명령 줄 인수 및 출력으로 입력을 받아 True(프라임) 또는 False, 온라인 그것을 시도!

힌트 (게시 후 4 일 추가) :

첫 번째와 4 번째는 붉은 청어 같습니다 의도 (그리고 대부분 의 모든 ) 솔루션의 IP는 첫 번째 라인을 따르고 도달 할 ?문자를.

해결책

Y(yG(BKL2)(B(S(BS(C(BC(C(BB(B(v
S(CBO)( C B>vK  BSBB())OK(BS(S?
>(KZ)(C(C(Bv>O)        >   vY <
^)Sg3I)$; @>B(BS(b(C(BBI)Iv>(yg
())I)))I)IBB(C(b(CB(C())))<v)-C
I))I))0)))(C(BC(B(BB)(C(BBv>)))
]I))))I))>    >)2   $;@   >I)(B

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

설명

무작위성으로 인해 ?프로그램을 평평하게 할 수 없습니다. 다음은 임의의 표현식이 표시되는 물음표가있는 플랫 프로그램입니다.

Y(yG(BKL2)(B(S(BS(C(BC(C(BB(B(?(yg(KZ)(C(C(BB(BS(b(C(BBI)I))))(C(BC(b(C(BBI)I)))I))(C-))))I))I))0)))(C(BC(B(BB)(C(BBI)(B]I))))I)))2$;@

전체 프로그램 :

Y{trial_division}      --  fix-point of {trial_division}
                 2     --  apply 2 (begin division with 2)
                  $    --  apply argument (work with the supplied input)
                   ;   --  print result as boolean
                    @  --  terminate program

{trial_division}:

y                         -- recursive function with two arguments x,y
 G                        -- | base predicate: x >= y
  (BKL2)                  -- | base function:  BKL2 x y
                             |  ->             K(L2) x y
                             |  ->             L2 y
                             |  ->             2 <= y
        {recursive_call}  -- | recursive call

{recursive_call}, 인수 사용 f(자체 참조) xy(참고는와 0동일 False)

  B (S(BS(C(BC(C(BB(B{divides}I))I))0))) (C(BC(B(BB)(C(BBI)(B]I))))I) f x y
->       (C(BC(C(BB(B{divides}I))I))0) x y (BC(B(BB)(C(BBI)(B]I)))) f I x y)
->       (C(BC(C(BB(B{divides}I))I))0) x y (BC(B(BB)(C(BBI)(B]I)))) f I x y)
->            (C(BB(B{divides}I))I) x y 0  (BC(B(BB)(C(BBI)(B]I)))) f I x y)
->            (C(BB(B{divides}I))I) x y 0  (   B(BB)(C(BBI)(B]I))   f x I y)
->                   {divides}      x y 0  (         C(BBI)(B]I)    f x y  )
->              if x `divides` y then 0 else         C(BBI)(B]I)    f x y
->                                                    f (B]I x)  y
->                                                    f (] x) y
->                                                    f (x+1) y

{divides}다음 ?(yg(KZ)(C(C(BB(BS(b(C(BBI)I))))(C(BC(b(C(BBI)I)))I))(C-)))에서 ?무작위로 선택 되는 위치 입니다 (임의의 방향에 따라).

  • Y
  • S(CBO)(CBO)
  • S(SB(KO))(BBSBKO)

이들은 모두 서로 동일하므로 {divides}다음의 수정 점이됩니다.

y                       -- recursive function with two arguments x,y
 g                      -- | base predicate: x > y
  (KZ)                  -- | base function:  KZ x y
                        -- |  ->              0 == y
      {recursive_call}  -- | recursive call

{recursive_call} 기본적으로 그냥하는 난독 한 표현입니다 f x (y-x)


5

8086 DOS COM, 87 바이트, 점수 19/87 ~ = 0.2183

NieDzejkob에 의해

1└╣██1█╛ü ¼<█t<< u≈¼<█t█,0|/<██+ô≈ßô☺├δδâ√█|█╞█S█Y╣██9┘t█ë╪1╥≈±○╥t█Aδ∩╞█S█N┤█║S█═!├A
$

이것은 COM 프로그램입니다. 숫자를 명령 행 인수로 예상하고 Y 또는 N을 출력합니다. 한계 : 16 비트 프로세서 (sizeof (int)는 2이므로)는 65535입니다. 이 플랫폼에서 줄 바꿈은 0x0D 0x0A입니다. 그렇습니다. 19 █ 대신 20 █를 세십시오. 그들 중 하나는 실제 █이며 대체되지 않았습니다. 무 하하.

위치 10의 공간은 실제로 NUL 바이트입니다. NUL의 기호는 이전 VGA 글꼴의 공백과 동일합니다.


1
어셈블리 (opcode)와 기계 코드 사이에 약 0의 관계가 있기 때문에 영원히 균열이 발생합니다. 이 코드 페이지가 437 입니까?
user202729

@ user202729 : 올바른 코드 페이지. 달리 명시되지 않는 한 DOS는 CP437입니다.
Joshua

모호한 DOS 쿼크를 사용하여 $ 0081 대신 $ 5881에서 명령 줄 매개 변수를 읽거나 실수입니까? 실제 DOS 설치가 필요합니까?
NieDzejkob

@NieDzejkob : 잠깐만 요? DS : 0081에서 명령 줄을 읽습니다. 집에 도착하면 hexdump를 다시 확인하지만 아무것도 찾을 것으로 기대하지 않습니다.
Joshua

@Joshua 음, ╛üX맨 처음에입니다 mov si, 0x5881.
NieDzejkob

5

스위프트 4 , 점수 26/170 ≈ 0.153, 안전

func p(n:Int)->Bool{func(_:Int,_:Int)->Int{var h=(1...l).map{$0██m██
while(m=h.count,m██).1{h=[Int](h[...])};return m}
return>██&(.███).index█j█n██0)>=0}=██l}

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

의도 된 균열

func p(n:Int)->Bool{func j(_ l:Int,_ k:Int)->Int{var h=(1...l).map{$0},m=l
while(m=h.count,m>k).1{h=[Int](h[k...])};return m}
return n>1&&(2..<n).index{j(n,$0)>=$0}==nil}

언 골프

func p(n:Int)->Bool{
  func j(_ l:Int,_ k:Int)->Int{    // Modulus function (l mod k)
    var h=(1...l).map{$0},m=l      //  Create an array h of size l
    while(m=h.count,m>k).1{        //  While h has more than k elements:
      h=[Int](h[k...])             //   Remove k elements from h
    }
    return m                       //  Return the length of h (equal to k if l divides k)
  }
  return n>1&&                     // Test if n > 1
  (2..<n).index{j(n, $0)>=$0}==nil //  and no number from 2 to n-1 divides n
}

4

brainfuck , 37/540 바이트 (점수 : 0.06851) ( Nitrodon에 의해 이)

>>>>>+>,[>++++++[-<-------->]<+>,]<[-[█<█<]++++++++++<]>[-]>>██[>█>>█>]+[<]<<[<]>█<<+>>[>]█>[>]█+[<]<<[<]>-█>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<█]>]>[>]<[[█]<]<<<<<[<]<<██>>[>]<█[->+<]<█>>[>]<[-[[<]<]++++++++++<]>███>[<<]>[[[>]>████[<]<[-[[<]<]++++++++++<]>[-]>[█<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>███████>[[█]>]<]<[[<]<]<[█]>]>>>[[>]<->>]]>[[>]>]<<[[[█]<]<]<<<[█]<<█>>>[>]█[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.

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

소수 인 경우 "프라임"을 인쇄하고 복합 인 경우 "프라임하지 않음"을 인쇄합니다. 기술적으로 임의의 정수에 대해서는 작동하지만 6000 이상의 숫자에 대해서는 TIO에서 시간 초과


2
이 작업을 며칠 동안 수행 한 후 금이 간 것입니다.
Nitrodon

3

Mathematica, 97 바이트, 점수 0.2989690722 ( Cracked )

f[x_]:=(██ToString███████████████;StringMatchQ[████Infinity,RegularExpression@"█\█\█{█\█+, ███"])

현! 정규식! 프라임?

있다 정규식을 검사하는 소수성과 같은 일이, 그러나 여기에서 일어나는 무슨 문제가 아닙니다.

이것은 금이 갔지만 의도 한 방식은 상당히 다르므로 의도 한 해결책을 아직 밝히지 않을 것입니다.



3

젤리 , 0 점. (142857) ( 크랙 )

25██26█966836897364918299█0█1█65849159233270█02█837903312854349029387313█ị██v

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

내 다른 답변을 다시 게시하면 이번에는 의도하지 않은 치트를 피하기 위해 몇 바이트 더 표시되었습니다.


나는 문자별로 또는 두 바이트를 얻기 위해 두 가지 대답을 할 수 있습니다 ... 아마도 그렇지 않을 것입니다.
user202729

@ user202729 어, 이상한 일이 생겨서 더 많은 문자를 다루려고하지 않았습니다 ...
Outgolfer Erik



3

Python 3, 388 바이트, .155, 크랙

막판 균열. 예, 이것은 Miller-Rabin 테스트입니다.

확률 테스트가 허용된다고 가정하고, 불확실성 2 ^ -100

그래도 이전 문장의 좋은 힌트

리턴 값 0을 COMPOSITE로, 1을 PROBABLY PRIME으로 작성

* 368> 388 : z <4 일 때의 문제가 해결되었습니다.

import ██████
def f(z):
 if z<4:return z>>1
 d,s,n,e,c=██z,0,z,0,50
 while not ██1:d//=2;s+=1
 while n>0:n//=2;e+=1
 ███████████()
 while c>0:
  a=0
  while a<2or a>z-█:
   a,b=0,e
   while b>0:a=a*2+██████████████(0,1);b-=█
  x,r=███(█,█,z),██s
  if ██x and x!=██z:
   while r>0:
    x,r=███(█,█,z),██r
    if not ██x:return 0
    elif x==██z:break
   else:return 0
  c-=█
 else:return 1

해결책:

import random
def f(z):
 if z<4:return z>>1
 d,s,n,e,c=~-z,0,z,0,50
 while not d&1:d//=2;s+=1
 while n>0:n//=2;e+=1
 random.seed()
 while c>0:
  a=0
  while a<2or a>z-1:
   a,b=0,e
   while b>0:a=a*2+random.randint(0,1);b-=1
  x,r=pow(a,d,z),~-s
  if ~-x and x!=~-z:
   while r>0:
    x,r=pow(x,2,z),~-r
    if not ~-x:return 0
    elif x==~-z:break
   else:return 0
  c-=1
 else:return 1

1
긴 문자열을 갖는 것이 규칙 "COMPOSITE"정신 을 위반한다고 생각 합니다. "코드에 주석이나 불필요한 공백이 포함되어 있지 않을 수 있습니다."
Pavel

@Pavel이 편집되었습니다. 글쎄, 반환 값이 주석이거나 불필요한 공백이라고 생각하지 않습니다.
Shieru Asakoto

1
그것은이었다 기술적으로 유효합니다. 그냥 싸다.
Pavel

z = 2 일 때 이것이 끝나지 않는다고 생각합니다.
Nitrodon

@Nitrodon 죄송합니다. z = 3 일 때도 종료되지 않았습니다. 고정
Shieru Asakoto

3

095 , 점수 0.20512820512 [안전]

1id#█#=(DD#█#█{d_█%(█D0█]D}██s]D1.=[1s]

소수이면 1을 인쇄하고 복합이면 0을 인쇄합니다

해결책:

1id#2#=(DD#2#-{d_.%(rD0R]D}drs]D1.=[1s]

2

노드 자바 스크립트, 점수 : 0.4

그것이 작동하는 곳입니다. 첫 번째 명령 행 인수에서 입력을 가져오고 stdout으로 출력하는 전체 프로그램.

바라건대, 어려운 시작이 아닌 해결책입니다.

이 스 니펫 을 사용하여 점수를 계산하십시오.

require███████████2<<2██>n█████rin█(b████████x)█████(92116830)██(a,c)=>a[c[0]██████████(c)]███████);d=███+n;q=████27775██9564,[50259,█6])[█]);a=██q>0████r(n=qa█&█-q-██)a██n%q?██0██(1371528270,22288)(a)



2

자바 스크립트, 점수 0.1894093686354379

let t=[2,3,3,3,3,3,3,5,7,5,7,5,7,7,11,12,13,11,13,13,1,2,17,13,2,3,17,19,23,29,19,19,41,23,23,29,23,"","",29,7,31,31,524,31,37,33,34,41]; function r(a, b) {█████████████████████████████████████████████████████████████};function l(t){let a=0;let b=[];while(true){b.push(t[a]);█████████████;if(!t[a]){return█████};function p(v) {let i=0;let a=r(2,v██);for (i in a){if(v%(█████████a█i██)==0){return false;}};return true;};function f(v){if(l(t).indexOf(v)!=-1){return true;}else{return p(v)};};

행운을 빕니다. :피

확인할 프라임으로 f를 호출하십시오.


30 분 이내에 의도하지 않은 균열 . 배열도 사용하지 않습니다 t.
user202729

흠. 나는 그것에 대해 생각하지 않았다고 생각합니다. 이것은 어쨌든 예비 예비 워밍업입니다 : p Nice job.
moonheart08


2

Brain-Flak, 점수 : 35/134 = 0.2612 ( 크랙! )

(({████){██[████)█>(({}))<>}<>{}███{}((██({}))█████{}]██)({}(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{})██[██()██(()█[()]██{}██}{}<>{})

소수의 경우 1을, 복합의 경우 0을 반환합니다.

서식이 너무 제한되어있어 누락 된 문자가 무엇인지 명확하게 나타내지 않기 때문에이 도전을 시도하기에는 매우 어려운 언어입니다.

읽기 어려우므로이 과제를 해결하기에는 매우 어려운 언어입니다.




2

Japt, 19 바이트, 0.315789 ... 점수, 안전

내가 필요로하는 것보다 더 많은 정보를가 렸는지 모르겠으며, 더 나은 점수를 냈다.

█h8575¥█
█UâÊ█Ê█ █2

View solution (설명이 곧 다가옵니다)


2

C, 34/76 = 0.447368, 안전

int p(int n){int r███████2;██r███r++)███+███n;████&███r));return███████n██;}

이 공백이 많으면 의도 한 것보다 의도하지 않은 균열이 발생할 가능성이 훨씬 높습니다.

해결책:

int p(int n){int r=1,e=n%2;for(;(r++)*(r++)<n;e=e&&(n%r));return e?n>1:n<3;}

설명:

e소수가 소수가 아닌지 여부에 대한 부울 값을 보유합니다 (특별한 경우는 예외). r의 제곱근 이하의 홀수를 반복합니다 n. is 또는 일 return e?n>1:n<3;때 특별한 경우를 처리합니다 .n12


2

M , 점수 : 4/22 = .1818 ..., Dennis에 의해 금이

███“;;█»VOḣ2S⁵++3Ọ;”Pv

이로 인해 의도하지 않은 균열이 발생할 수 있습니다. 그게했다.

데니스의 솔루션은

ÆPø“;;“»VOḣ2S⁵++3Ọ;”Pv

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

누군가가 깨지도록 내 솔루션을 숨겨 두겠습니다. 그의 강도 제출에 관한 Dennis에게 나의 힌트는 "동물원"이라는 단어였습니다.


@ user202729 난 당신이 균열 할 수 있습니다 생각
dylnan


1

C, 66 바이트, 29 개 개정, 0.439 점

i;p(n){█████2███████ 0███████2;███;███)if(████)return 0;return 1;}

간단한 C 제출; 정말 사악한 글을 게시하기까지 시간이 얼마나 걸리는지 보겠습니다.


마지막 블록의 길이는 4 자 여야합니까?
NieDzejkob

@NieDzejkob 예.
MD XF


1

sh + coreutils, 점수 19/143 ~ = 0.1328

깨진

e█ec█s█ █c "██████WyAkKHNoIC1jICJg█WNobyBabUZqZEc5eWZIUnlJQ2█2SnlBblhHNG5m██JoYVd3Z0t6SjhkMk1nTFhjSyB8YmFzZTY0IC1kYCIpIC1lcSAxIF0K█b█se6███d`"

TIO


1
@MDXF : Base64는 암호화가 아니라 인코딩입니다. 갈라질 열쇠가 없습니다.
Joshua

TIO 링크를 포함시킬 수 있습니까? (아마 bash)
user202729


1

Brain-Flak , 점수 29/140 = 0.207

({}██()██<>){██({}[()])██{}{}███({<({}[()])><>({})<>}{}██████{}██){(({})){({}[()])<>}{}}<>([{}()]{}<>{})<>}(<>██{}({}████)((){[()]██{}██}{})

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

프라임의 경우 1을 출력하고 프라임이 아닌 경우 0을 출력합니다.


1

탐 피오 ( 제국 ), 점수 : 24/51 = 0.5

Luku on alkuluku,jos ████████████e███████ on █████.

이것은 명백한 해결책입니다. 나는 여기서 아무도 핀란드를 이해하지 않기를 바랍니다.


1

탐 피오 ( 제국 ), 점수 : 26/223 = 0.11659 ...

Luvun kokonaislukuarvot ovat riippuen siitä,onko se yksi,joko listan,jonka alkioita ovat yksi █████████████████████,alkiot tai █████ liitettynä sen alkutekijöihin.Luku on alkuluku,jos sen kokonaislukuarvojen summa on nolla.

1

PYT는 , 점수 : 0.288288 ... [안전]

Đ2⇹█ŘĐĐŁ███⇹ʀĐ↔Đ5Ș↔⇹██=█ŕĐ↔Đ5Ș↔Đř█⇹█████↔Đ4Ș5Ș⇹██⇹3Ș°04Ș↔█3ȘĐŁ█3Ș05Ș↔█⇹04Ș0↔⇹██=█ŕ↔ŕĐĐŁ██↔██↔ŕŕŕŕ█↔████↔ŕŕŕ██¬¬


소수이면 "True", 그렇지 않으면 "False"를 출력합니다.

그것이 확률 테스트라는 것을 언급하는 것을 잊었습니다.

해결책:

Đ2⇹⁻ŘĐĐŁ₂`⁻⇹ʀĐ↔Đ5Ș↔⇹Ǥ1=?ŕĐ↔Đ5Ș↔Đř²⇹%∈2*⁻↔Đ4Ș5Ș⇹⁻₂⇹3Ș°04Ș↔+3ȘĐŁ⁺3Ș05Ș↔+⇹04Ș0↔⇹%+=?ŕ↔ŕĐĐŁ⁺⁺↔ł:↔ŕŕŕŕ;↔⁺⁻±?↔ŕŕŕ:;¬¬

이것은 Solovay-Strassen 원시성 테스트를 구현합니다.

온라인으로 해보십시오!


1

루비, 27/73 = 0.369863

def p n;███████(██n.times████a[2..-1].map{|s|█.██n████s}██.█*█|██})█);end

재미 있어야합니다.


1

Python 3 , 점수 : 0.386363, 갈라짐

p=lambda x,i=2:█████or(x%i and ████████)████

처음 에는 정말 낮은 교수형 과일을 찾으십시오. 곧 건방진 답변을 드리겠습니다.

user71546이 "작동"하게

p=lambda x,i=2:i>=x or(x%i and p(x,i+1))or 0

...하지만 의도하지 않았습니다. 원래 코드는

p=lambda x,i=2:i>x/2or(x%i and p(x,i+1))or 0

x <2에서도 작동하지 않습니다. 죄송합니다.


1
깨진? x <2 일 때 작동하지 않습니다.
Shieru Asakoto

0

자바 스크립트 (ES7), 297 바이트, 103 개 수정, .347

M=(N,X=N,F=(n,a=█████)=>a>1e-20?█████+F(n,█████████):1,G=(n,a=█████)=>a>1e-20?█████+G(n,███████):n==2?0:G(n-1),H=(n,a=█████)=>a>1e-20?█████-H(n,███████):0,I=n=>████████I(████),J=n=>I(n)*████+H(█████████-1),K=(n,l=n|0)=>(n-l>=.5)+l,L=(a,b)=>██████████(a)+█(b)████,Z=L(--N,N)██)=>L(Z,████M(N,X)██)██

내 이전 파이썬 답변이 너무 간단했기 때문에 여기에 악한 것이 있습니다.)

논리는 간단합니다.

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