Cops and Robbers: Redacted Primality (Thread Polisi)


19

Tantangan ini awalnya dikosongkan oleh Magic Octopus Urn; Saya mengadopsi dan mempostingnya dengan izinnya.

Ini adalah utas polisi. Utas perampok ada di sini .

Tantangan

  • Langkah Satu: Tulis bagian kode (fungsi atau program lengkap) yang memeriksa keaslian .
  • Langkah Dua: Hapus potongan kode Anda dengan mengganti karakter dengan simbol .
  • Langkah Tiga: Posting kode yang dihapus pada utas polisi.
  • Langkah Empat: Tunggu kode Anda untuk di-crack dan cobalah untuk memecahkan kode yang lain.

Misalnya, kode Groovy {it.isPrime()}bisa menjadi {██.is█████()}. (Yang ini akan sangat mudah retak; juga, saya tahu, .isPrime()ini bukan metode Groovy.)


Mencetak gol

Anda harus memasukkan skor program Anda dalam pengajuannya. Skor didefinisikan sebagai rasio karakter yang dihapus ke karakter. Jadi jika program Anda memiliki 20 karakter dan 5 dihapus, skor Anda adalah 0,25. Kode Groovy di atas akan memiliki skor 0,5.


Aturan

  • Program Anda hanya perlu menangani bilangan bulat positif. Seharusnya menghasilkan nilai yang benar jika nomornya prima dan nilai palsu sebaliknya. Silakan tentukan dalam jawaban Anda apa yang dihasilkannya.
  • Kode Anda mungkin tidak mengandung komentar atau spasi kosong yang tidak perlu.
  • Tidak ada kebingungan hashing atau kriptografis.
  • Kode Anda mungkin tidak lebih dari 50% dihapus (setidaknya 1/2 karakter harus ditampilkan). Ini berarti bahwa skor tertinggi yang mungkin adalah 0,5.
  • Jika jawaban Anda tidak di-crack dalam waktu satu minggu, Anda dapat menandainya dengan aman dan mengeditnya di crack yang dimaksud.

Kemenangan

Pemenang akan menjadi jawaban tidak terpecah dengan skor terendah dalam dua minggu setelah pengeposan. Dalam kasus seri, siapa pun yang memiliki suara terbanyak akan menang. Utas ini selalu terbuka untuk pengiriman lebih banyak, tetapi pemenang yang dipilih setelah dua minggu akan menjadi permanen.


Apa domain dari input? (Yaitu semua n >= 1atau semua bilangan bulat?)
Conor O'Brien

1
@FryAmTheEggman status selesai
MD XF

1
Sekali lagi, jika metode penilaian mudah dieksploitasi, itu rusak.
user202729


1
Cuplikan tolong?
user202729

Jawaban:


3

Functoid , skor = 14/223 ≈ 0,062780 [aman]

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

Mengambil input sebagai argumen baris perintah dan keluaran True(utama) atau False, coba online!

Petunjuk (ditambahkan 4 hari setelah posting):

Yang pertama dan keempat adalah herring merah: IP solusi yang dimaksud (dan kemungkinan besar setiap ) akan mengikuti baris pertama dan mencapai ?karakter.

Larutan

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

Cobalah online!

Penjelasan

Karena keacakan yang berasal dari ?itu tidak mungkin untuk meratakan program. Berikut program datar dengan tanda tanya di mana ekspresi acak akan berada:

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$;@

Program lengkap:

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

The {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}, mengambil argumen f(referensi diri), xdan y(catatan 0sama dengan 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}adalah di ?(yg(KZ)(C(C(BB(BS(b(C(BBI)I))))(C(BC(b(C(BBI)I)))I))(C-)))mana ?dipilih secara acak (tergantung pada arah acak) dari:

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

Ini semua setara satu sama lain, sehingga {divides}menjadi titik perbaikan:

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} adalah ekspresi yang cukup dikaburkan yang pada dasarnya hanya melakukannya f x (y-x)


5

8086 DOS COM, 87 byte, skor 19/87 ~ = 0,2183

Retak oleh NieDzejkob

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

Ini adalah program COM; mengharapkan angka sebagai argumen baris perintah, output Y atau N. Batas: 65535 karena prosesor 16 bit (sizeof (int) akan menjadi 2). Baris baru adalah 0x0D 0x0A pada platform ini. Ya, Anda menghitung 20 █ bukannya 19 █. Salah satunya nyata real dan belum diganti. Muhahaha.

Ruang di posisi 10 sebenarnya adalah byte NUL. Simbol untuk NUL adalah sama dengan ruang di font VGA lama.


1
Akan membutuhkan waktu lama untuk memecahkan karena ada sekitar 0 hubungan antara rakitan (opcode) dan kode mesin. / Apakah Kode ini halaman 437 ?
user202729

@ user202729: Halaman kode yang benar. DOS adalah CP437 kecuali dinyatakan sebaliknya.
Joshua

Apakah Anda menggunakan quirk DOS yang tidak jelas untuk membaca parameter commandline dari $ 5881, bukan $ 0081, atau apakah itu kesalahan? Apakah saya memerlukan instalasi DOS yang benar?
NieDzejkob

@NieDzejkob: Tunggu apa? Saya cukup yakin itu membaca baris perintahnya dari DS: 0081. Saya akan memeriksa ulang hexdump ketika saya pulang, tetapi saya tidak berharap menemukan apa pun.
Yosua

@ Yosua yah, yang ╛üXpaling awal adalah mov si, 0x5881.
NieDzejkob

5

Swift 4 , skor 26/170 ≈ 0,153, aman

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}

Cobalah online!

Retak yang Dimaksudkan

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}

Tidak disatukan

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 byte (skor: 0,06851) ( Retak oleh Nitrodon)

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

Cobalah online!

Mencetak "prima" jika prima, "tidak prima" jika komposit. Secara teknis bekerja untuk bilangan bulat sewenang-wenang tetapi waktu keluar pada TIO untuk angka di atas 6000


2
Retak setelah mengerjakan ini selama beberapa hari.
Nitrodon

3

Mathematica, 97 byte, skor 0,2989690722 ( Retak )

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

String! Regex! Bilangan prima?

Ada adalah hal seperti primality memeriksa regex, tapi itu tidak whats terjadi di sini.

Ini sudah retak , tapi cara yang saya maksudkan sangat berbeda, jadi saya belum akan mengungkapkan solusi yang dimaksud.



3

Jelly , skor 0. (142857) ( retak )

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

Cobalah online!

Repost dari jawaban saya yang lain, kali ini dengan beberapa byte terungkap untuk menghindari cheat yang tidak diinginkan.


Saya dapat karakter-karakter ATAU dua jawaban Anda untuk mendapatkan beberapa byte ... mungkin saya tidak akan.
user202729

@ user202729 Eh, sesuatu yang aneh terjadi, saya tidak bermaksud untuk menutupi lebih banyak karakter ...
Erik the Outgolfer


3

Oktaf , Skor: 0,15 (86 byte)

Saya mengungkapkan beberapa karakter lagi. Saya pikir kriteria kemenangan adalah skor tertinggi , bukan terendah .

@(x)eval([(str2num(cell2mat([cellstr(reshape('0█1███1█0█0█00',████))])')'█')','(x)'])

Cobalah online!

Semoga berhasil =)


1
Retak! Ini menyenangkan.
Giuseppe

3

Python 3, 388 byte, .155, Retak

Retakan menit terakhir. Ya, ini adalah tes Miller-Rabin.

Saya kira tes probabilistik diperbolehkan, ketidakpastian 2 ^ -100

Yah, sedikit petunjuk dalam kalimat sebelumnya

Membuat nilai pengembalian 0 sebagai KOMPOSIT dan 1 sebagai PRIMABEL PRIME

* 368> 388: Memperbaiki masalah saat 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

Larutan:

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
Saya pikir memiliki string panjang seperti "COMPOSITE"melanggar semangat aturan "Kode Anda mungkin tidak mengandung komentar atau spasi kosong yang tidak perlu."
Pavel

@Pavel Diedit. Yah saya tidak berpikir nilai kembali adalah komentar atau spasi yang tidak perlu sekalipun
Shieru Asakoto

1
Secara teknis valid. Itu hanya murah.
Pavel

Saya tidak berpikir ini berakhir ketika z = 2.
Nitrodon

@Nitrodon Ups, itu tidak berakhir ketika z = 3 juga. Diperbaiki
Shieru Asakoto

3

095 , skor 0,20512820512 [Aman]

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

Mencetak 1 jika prima, 0 jika komposit

Larutan:

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

2

Node JavaScript, skor: 0,4

Di sinilah kerjanya. Program penuh yang mengambil input dari argumen baris perintah pertama, dan output ke stdout.

Semoga solusi yang tidak terlalu sulit untuk memulai ini.

Menggunakan cuplikan ini untuk menghitung skor.

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

Javascript, skor 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)};};

Semoga berhasil. : p

panggil f dengan prime yang ingin Anda periksa.



Bersenandung. Saya kira saya tidak memikirkan yang itu. Ini hanyalah pemanasan awal: p. Kerja bagus.
moonheart08


2

Brain-Flak, Nilai: 35/134 = 0,2612 ( retak! )

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

Mengembalikan 1 untuk prima, 0 untuk komposit.

Ini adalah bahasa yang sangat sulit untuk mencoba tantangan ini, karena formatnya sangat terbatas sehingga perlu upaya untuk tidak memperjelas apa karakter yang hilang.

Ini adalah bahasa yang sangat sulit untuk menyelesaikan tantangan ini, karena sangat sulit untuk dibaca.



2

Java 1.4+, 24/145 (0.16551724137)

class X{public static void main(String[]args){System.out.println(new String(████████[Integer.parseInt(args[0])]).matches("█████████████")?███);}}

Cobalah online!


Cara teraneh yang pernah saya lihat sebagai pemeriksaan perdana di Jawa sejauh ini.



2

Japt, 19 byte, 0,315789 ... skor, Aman

Saya tidak tahu apakah saya mengaburkan lebih dari ini daripada yang saya butuhkan, menilai diri saya skor yang lebih baik.

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

View solution (Penjelasan segera hadir)


2

C, 34/76 = 0,447368, Aman

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

Memiliki banyak kekosongan ini berarti bahwa saya akan jauh lebih mungkin untuk mendapatkan celah yang tidak diinginkan daripada yang dimaksudkan.

Larutan:

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

penjelasan:

ememegang nilai boolean apakah nomor tersebut tidak prima (dengan beberapa pengecualian kasus khusus). riterasi melalui angka ganjil kurang dari atau sama dengan akar kuadrat dari n. return e?n>1:n<3;menangani kasus-kasus khusus ketika nadalah 1atau 2.


2

M , skor: 4/22 = .1818 ..., dipecahkan oleh Dennis

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

Ini mungkin berakhir dengan celah yang tidak diinginkan, kita harus melihatnya. Itu benar.

Solusi Dennis adalah

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

Cobalah online!

Saya akan membiarkan solusi saya disembunyikan agar seseorang dapat memecahkannya. Petunjuk saya kepada Dennis tentang pengiriman perampoknya adalah kata "kebun binatang".


@ user202729 Saya pikir Anda mungkin dapat memecahkan ini
dylnan


1

C, 66 byte, 29 disunting, skor 0,439

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

Hanya pengiriman C sederhana; Saya akan melihat berapa lama ini diperlukan sebelum saya memposting yang benar-benar jahat.


Apakah Anda yakin bahwa blok terakhir seharusnya sepanjang 4 karakter?
NieDzejkob

@NieDzejkob Ya.
MD XF


1

sh + coreutils, skor 19/143 ~ = 0,1328

retak

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

TIO


1
@MDXF: Base64 adalah penyandian, bukan enkripsi. Tidak ada kunci untuk retak.
Joshua

Bisakah Anda memasukkan tautan TIO? (mungkin bash)
user202729

Retak (3 jam yang lalu).
user202729

1

Brain-Flak , skor 29/140 = 0,207

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

Cobalah online!

Output 1 untuk prime dan 0 untuk non-prime.


1

Tampio (imperatif), skor: 24/51 = 0,5

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

Ini adalah solusi yang jelas, saya harap tidak ada yang mengerti bahasa Finlandia.


1

Tampio (imperatif), skor: 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 , skor: 0,288288 ... [Aman]

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


Output "Benar" jika prima, "Salah" jika tidak

Lupa menyebutkan bahwa ini adalah tes probabilistik.

Larutan:

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

Ini mengimplementasikan uji primality Solovay-Strassen.

Coba online di sini!


1

Ruby, 27/73 = 0.369863

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

Ini pasti menyenangkan.


1

Python 3 , skor: 0,386363, retak

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

Pergi untuk menggantung buah yang sangat rendah pada awalnya. Saya akan datang dengan jawaban nakal segera.

user71546 membuatnya "berfungsi" dengan

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

... tapi itu tidak disengaja. Kode asli tadinya

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

Tidak berfungsi untuk x <2, ternyata. Ups.


1
Retak? Tidak berfungsi saat x <2.
Shieru Asakoto

0

JavaScript (ES7), 297 byte, 103 dihapus, .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)██)██

Jawaban Python saya sebelumnya terlalu mudah, jadi ini jawaban yang jahat;)

Logika di baliknya sederhana.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.