警官と強盗:編集された素数(警官のスレッド)


19

この挑戦はもともとマジックタコのUrによってサンドボックス化されました。私は彼の許可を得てそれを採用し、掲載しました。

これは警官のスレッドです。強盗のスレッドはこちらです。

チャレンジ

  • ステップ1:primalityをチェックするコード(関数または完全なプログラム)を記述します。
  • ステップ2:文字を記号に置き換えて、コードの一部を削除します
  • ステップ3:編集したコードを警官のスレッドに投稿します。
  • ステップ4:コードがクラックされるのを待ち、他のコードをクラックしようとします。

たとえば、Groovyコード{it.isPrime()}はになり{██.is█████()}ます。(これはばかげて簡単にクラックできます。また、.isPrime()Groovyの方法ではありません。)


得点

提出にはプログラムのスコアを含める必要があります。スコアは、編集された文字と文字の比率として定義されます。したがって、プログラムに20文字が含まれ、5文字が編集された場合、スコアは0.25になります。上記のGroovyコードのスコアは0.5です。


ルール

  • プログラムは正の整数のみを処理する必要があります。数値が素数の場合は真理値を出力し、それ以外の場合は偽値を出力する必要があります。何を出力するかを回答で指定してください。
  • コードにコメントや不要な空白を含めることはできません。
  • ハッシュ化または暗号化の難読化はありません。
  • コードは50%を超えて編集することはできません(少なくとも1/2文字を表示する必要があります)。これは、可能な最高のスコアが0.5であることを意味します。
  • 回答が1週間以内にクラックされない場合は、安全とマークし、意図したクラックで編集できます。

勝ち

勝者は、投稿から2週間以内に、スコアの最も低い無回答の回答となります。同点の場合、最も票数の多い方が勝者となります。このスレッドは常により多くの提出に対して開かれていますが、2週間後に選ばれた勝者は永続的です。


入力のドメインは何ですか?(つまり、すべてn >= 1またはすべて整数ですか?)
コナーオブライエン

1
@FryAmTheEggman ステータス完了
MD XF

1
繰り返しますが、スコアリング方法が簡単に悪用可能な場合、それは壊れています。
user202729


1
スニペットをお願いします?
user202729

回答:


3

Functoid、スコア= 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日で追加):

第一及び第四は赤ニシンです:意図(とほとんどの場合、すべての)ソリューションの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(自己参照)、xおよびy(注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█を数えます。それらの1つは本物の█であり、置換されていません。ムハハハ。

10桁目のスペースは、実際にはNULバイトです。NULの記号は、古いVGAフォントのスペースと同じです。


1
アセンブリ(opcode)とマシンコードの間には約0の関係があるため、クラックするには永遠にかかります。/このコードページは437ですか?
user202729

@ user202729:正しいコードページ。特に指定のない限り、DOSはCP437です。
ジョシュア

わかりにくいDOSの癖を使用して、コマンドラインパラメータを$ 0081ではなく$ 5881から読み取りますか、それとも間違いですか?真のDOSインストールが必要ですか?
-NieDzejkob

@NieDzejkob:ちょっと待って?DS:0081からコマンドラインを読み取ることは間違いありません。家に着いたら、hexdumpを再確認しますが、何も見つからないと思います。
ジョシュア

@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、540分の37バイト(スコア:0.06851)(ひび割れ Nitrodonによって)

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

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

プライムの場合は「プライム」、コンポジットの場合は「プライムではない」を出力します。技術的には任意の整数で機能しますが、6000を超える数のTIOでタイムアウトします


2
これに数日間取り組んだ後にひびが入りました。
ニトロドン

3

Mathematica、97バイト、スコア0.2989690722(ひび割れ

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

ひも!正規表現!プライム?

正規表現をチェックする正規表現などがあります、それはここで起こっていることではありません。

これはクラックされています、私が意図した方法はまったく異なっていたため、意図した解決策をまだ明らかにしません。



3

ゼリー、スコア0.(142857)(ひび割れ

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

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

私の別の答えを再投稿します。今回は、意図しないチートを避けるためにさらに数バイトを明らかにしました。


私はあなたの2つの答えを文字単位でORすることができますいくつかのバイトを取得する...おそらく私はしません。
user202729

@ user202729ええと、奇妙な何かが起こった、私はより多くの文字をカバーするつもりはなかった...
エリックOutgolfer



3

Python 3、388バイト、.155、クラック

ぎりぎりの亀裂。はい、これはMiller-Rabinテストです。

確率論的検定が許可されていると思います。不確実性2 ^ -100

まあ、前の文の素晴らしいヒント

戻り値をコンポジットとして0、プロバブリープライムとして1にしました

* 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編集。まあ、戻り値がコメントや不要な空白だとは思わない
浅本しえる

1
それはだった技術的に有効。ただ安かった。
パベル

z = 2のときにこれが終了するとは思わない。
ニトロドン

@Nitrodonおっと、z = 3でも終了しませんでした。修正済み
朝琴シエル

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

Node JavaScript、スコア: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(142857)

25██26█9668368973649182992051██5849159233270202█837903312854349029387313█████

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

コマンドライン引数を取ります。

False = 0
True =1



@ user202729ええ、もっと明らかにすべきだったので、再投稿します。しかし、強盗スレッドに投稿するまで、ひびが入ったことは付け加えられません。:P
エリックアウトゴルファー


2

Javascript、スコア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)};};

がんばろう。:p

チェックする素数でfを呼び出します。


30分以内の意図しない亀裂。配列さえ使用しないでくださいt
user202729

ハム。私はそれについて考えなかったと思います。とにかく、これは単なる予備のウォームアップです。
moonheart08

2

> <>、スコア0.096、ジョーキングによるクラック

:1@v>~~:?1n;█$-1<█?=2:}*{█@:$@:

意図した亀裂:

:1@v>~~:?1n;
$-1<^?=2:}*{%@:$@:


> <>はよくわかりませんが、最初vは無条件の無限ループではありませんか?
-NieDzejkob

@NieDzejkobプログラムをそのまま実行すると、はい、永久にループします。
エソランジングフルーツ

ああ、私は今それを見る
...-NieDzejkob


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ます。return e?n>1:n<3;とき特殊なケースを処理しnています12


2

Mは、スコア:= 0.1818 4/22 ...、ひび割れによってデニス

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

これにより、意図しないクラックが発生する可能性があるため、確認する必要があります。やった

デニスのソリューションは

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

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

解くためにソリューションを隠しておきます。デニスの強盗の提出に関する私のヒントは、「動物園」という言葉でした。


@ 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は暗号化ではなくエンコードです。クラックする鍵はありません。
ジョシュア

TIOリンクを含めることができますか?(おそらくbash)
-user202729

クラック(3時間前)。
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の場合は機能しません。
朝琴シエル

0

JavaScript(ES7)、297バイト、103編集、0.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)██)██

私の以前のPythonの答えは単純すぎたので、ここに悪いものがあります;)

ただし、背後にあるロジックは簡単です。

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