Hardcoding Polisi dan Perampok (Polisi)


28

Ini adalah tantangan . Utas perampok ada di sini .

Pertanyaan menarik untuk dipikirkan adalah sebagai berikut:

Jika saya memiliki urutan angka, berapa banyak dari mereka yang harus saya berikan sebelum jelas urutan apa yang saya bicarakan?

Sebagai contoh jika saya ingin berbicara tentang bilangan bulat positif dalam urutan mulai dari , saya dapat mengatakan , tetapi apakah itu benar-benar cukup?1 , 2 , 3 , 11,2,3,

Saya punya satu cara untuk menjawab pertanyaan ini, dan menjadi pegolf-kode itu melibatkan golf kode. Anda telah memberikan ketentuan urutan yang cukup jika kode terpendek yang menghasilkan istilah tersebut menghasilkan semua ketentuan urutan tersebut. Jika kami memikirkan hal ini dalam hal kode-golf, ini berarti Anda telah memberikan cukup uji kasus sehingga kode terpendek yang lulus uji-kasus melakukan tugas yang diinginkan.

Tantangan

Tantangan ini adalah tantangan . Di mana polisi akan mempresentasikan kasus uji dan perampok harus menemukan cara yang lebih pendek untuk menipu kasus uji selain dari urutan yang dimaksud. Polisi akan menyajikan hal-hal berikut:

  • Sepotong kode yang mengambil integer non-negatif sebagai input dan menghasilkan integer sebagai output. Kode ini akan menentukan urutan Anda. Kode Anda tidak perlu mendukung 0 sebagai input, dan memilih untuk mengambil 1 sebagai input terkecil. Seharusnya jelas apakah ini yang terjadi dalam jawaban Anda.

  • Segala persyaratan platform atau bahasa yang relevan yang dapat memengaruhi output, misalnya ukuran longint.

  • Sejumlah , bersama dengan n pertama dari urutan yang dihitung oleh kode. Ini akan bertindak sebagai "kasus uji".nnn

Anda disarankan untuk menjelaskan apa yang dilakukan urutan Anda dan menautkan OEIS jika ada, namun kode Anda yang menentukan urutan bukan deskripsi.

Perampok akan menemukan program dalam bahasa yang sama yang lebih pendek dari yang disajikan dan melewati semua kasus uji (menghasilkan output yang sama untuk input pertama sebagai kode polisi). Kode perampok juga harus berbeda dalam output dari program polisi untuk beberapa nomor lebih besar dari .nnn

Polisi harus dapat memecahkan jawaban mereka sendiri sebelum mengirimkannya.

Setelah satu minggu, seorang polisi dapat mengungkapkan celah mereka dan menandai jawaban mereka sebagai Aman. Jawaban yang ditandai seperti itu tidak lagi dapat dipecahkan.

Mencetak gol

Jawaban polisi akan dinilai dengan jumlah byte dengan lebih sedikit byte menjadi lebih baik. Jawaban yang retak skor skor yang tak terbatas.


Sudah jelas ada cara untuk memecahkan masalah secara matematis, seperti hanya mencetak semua kasus uji, tetapi masalah itu tergantung pada kasus yang disediakan polisi. Haruskah ada aturan tentang itu? Apakah ada batasan terhadap komputabilitas urutan atau apa pun dari Ramsey Theory? (yaitu apakah Anda harus dapat memecahkan mesin Anda?)
theREALyumdub

2
@theReallyumdub pertanyaan menentukan Anda harus dapat memecahkan kiriman Anda sendiri.
Wheat Wizard

@CatWizard Terima kasih, saya terus maju dan itu sudah ada di meta postingan yang jelas, itu menghambat beberapa orang ini rupanya. Jadi bukan dalam semangat tag untuk membuat crack membutuhkan waktu lebih dari satu jam untuk menghitung atau sesuatu
theREALyumdub


Apakah ada "walaupun secara teori solusi Anda harus bekerja untuk semua angka dalam praktiknya hanya perlu bekerja untuk ..."?
user202729

Jawaban:


6

cQuents , 4 byte ( Cracked )

"::$

Cobalah online!

Berikut ini delapan ( n=8) kasus:

1 1
2 12
3 123
4 1234
5 12345
6 123456
7 1234567
8 12345678

Penjelasan kode:

"      Stringify sequence (join on "", remove it and see what happens)
 ::    Given input n, output all items in the sequence up to and including n
   $   Each item in the sequence equals the index

Jadi urutannya adalah 1,2,3,4,5 ..., ia bergabung ""sehingga menjadi 12345 ..., dan ::berarti ia mencetak hingga input.



5

Python 3 , 66 57 byte ( Retak )

retak oleh xnor
juga retak oleh Cat Wizard sebelum diedit

def f(n):x=n/10-2;return int(x*60-x**3*10+x**5/2-x**7/84)

Cobalah online!

Halo! Berikut ini adalah urutan untuk memecahkan untuk . Ini memberi 40 elemen pertama ini dengan pengindeksan 0, itu bukan urutan OEISn=40

[-54, -56, -58, -59, -59, -59, -59, -57, -55, -53, -50, -46, -43, -38, -33, -28, -23, -17, -11, -5, 0, 5, 11, 17, 23, 28, 33, 38, 43, 46, 50, 53, 55, 57, 59, 59, 59, 59, 58, 56]

Saya lupa menghapus spasi, saya belum pegolf ahli: p Apakah Anda keberatan jika saya mengedit untuk memperbaikinya?
crashoz

Tentu saja. Saya akan menghapus celah saya.
Wheat Wizard


5

Python 2 , 44 byte ( retak )

f=lambda n,i=1,p=1:n and-~f(n-p%i,i+1,p*i*i)

Cobalah online!

Bilangan prima. Urutan apa yang lebih murni? Atau lebih berlebihan ? Tujuan Anda adalah untuk menghasilkan 50 bilangan prima pertama bagi n=1untuk n=50.

Kode tersebut adalah generator Teorema Wilson yang disalin tepat dari tip ini .

Nilai yang berbeda untuk urutan alternatif bukan karena keterbatasan alat berat seperti luapan dan presisi. Tidak ada perpustakaan pihak ke-3.


Retak oleh Arnauld, @PoonLevi, dan Mr. Xcoder.


Cukup yakin Anda tidak bermaksud retak oleh ini ; mungkin tentukan "Python (tanpa perpustakaan pihak ke-3)" atau "Python (tanpa impor)" atau sesuatu?
Jonathan Allan

@ JonathanAllan Terima kasih, saya mengedit bahwa tidak ada perpustakaan pihak ke-3.
xnor

Saya belum dapat memecahkan ini (upaya terbaik saya saat ini adalah 47 byte atau lebih), tapi saya pikir ada sesuatu yang menarik untuk dicatat tentang bilangan prima tertentu. Untuk setiap , dengan i [ 1 , 50 ] N , ini berlaku: 2 p i2 ( mod  p i ) . Pada saat yang sama, ini tidak benar untuk angka apa pun yang tidak prima (dalam rentang yang disebutkan di atas), tetapi itu berlakupii[1,50]N2pi2(mod pi)jadi untuk nilai yang lebih tinggi. Saya meninggalkan ide ini di sini sehingga orang lain dapat mencoba dengan menggunakan teknik yang disebutkan, dan mungkin mendapatkan skor yang lebih baik :)
Tn. Xcoder

@ Mr.Xcoder Ini adalah upaya terbaik saya berdasarkan metode yang Anda usulkan. Berhasil menyimpang di N = 69, mengembalikan 341 (pseudoprime Fermat pertama ke basis 2, atau nomor Poulet pertama) tetapi juga gagal untuk N = 1. Saya ragu saya bisa memperbaikinya sendiri, jadi saya pikir saya sebaiknya membagikan apa yang saya miliki. (Perbaikan terbaik saya adalah 46 byte ...)
Arnauld

1
@Arnauld saya menemukan 44-byte solusi menggunakan metode ini. Saya sepertinya tidak bisa melangkah lebih jauh. Mungkin orang lain akan bisa mengetahui hal ini.
Poon Levi

4

Bahasa Wolfram (Mathematica) , 39 34 byte (Aman)

Check[{1,9,7}[[#]],18+Boole[#>9]]&

Cobalah online!

Terlihat sederhana, solusinya harus sulit.

1-diindeks dan . Urutan ini tidak tersedia di OEIS.n=99

{1, 9, 7, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}

Daftar di atas sama dengan:

Join[{1, 9, 7}, Table[18, 6], Table[19, 90]]

Inilah templat untuk memeriksa solusi Anda: Coba online!

Retak yang Dimaksudkan

Tangkapan di sini adalah bahwa output meningkat sebesar 1 ketika jumlah digit meningkat sebesar 1, dengan pengecualian untuk tiga suku pertama; solusi yang dimaksud ada hubungannya dengan konversi string.

Oleh karena itu, membaca dokumentasi tentang Konversi antara Ekspresi & String , orang dapat menemukan fungsinya SpokenString.

Solusinya hanyalah panjang versi string string yang diucapkan x^nuntuk berbagai input:StringLength@SpokenString[x^#]&


3

Haskell , 29 byte (Retak: 1 , 2 )

a n=n*ceiling(realToFrac n/2)

Cobalah online!

Ini adalah A093005 : .a(n)=nn2

Test case untuk , yaitu :0n20map a [0..20]

[0,1,2,6,8,15,18,28,32,45,50,66,72,91,98,120,128,153,162,190,200]

Solusi yang dimaksudkan (20 byte)

b n=sum$n<$show(3^n)

Cobalah online! Berbeda pada , dengan a ( 23 ) = 276 dan b ( 23 ) = 253 .n=23a(23)=276b(23)=253

Fungsi ini setara dengan . Berkat plafon, kedua fungsi tumpang tindih untuk argumen integer dalam rentang dari 0 hingga 22 :b(n)=n len(3n)=nlog10(1+3n)022

sumber



@Laikoni, jika retakan yang dimaksud lebih pendek, maka orang lain berpotensi mengklaim perampok dari BMO.
fəˈnɛtɪk

@ fəˈnɛtɪk Terima kasih, saya tidak mengetahui aturan ini.
Laikoni


2
@BMO Ini dia :) :)
Laikoni

2

JavaScript (ES6), 12 byte ( Retak )

Yang ini agak mudah.

n=>n*(8*n+1)

Cobalah online!

Ini A139275 :

a(n)=n(8n+1)

Kode Anda harus mendukung :0n<9

0,9,34,75,132,205,294,399,520

Dan sesuai aturan tantangan, itu harus berbeda.


n=>8*n*n+nberbeda untuk n=94906273, apakah ini celah yang valid?
ngn

@ ngn Kelihatannya menurut saya sesuai dengan aturan tantangan, tapi mungkin Anda harus bertanya kepada OP apakah kehilangan presisi dianggap sebagai divergensi yang valid? Namun, celah yang dimaksud berbeda n=9.
Arnauld

@CatWizard ^
ngn

Saya akan mengatakan itu adalah celah yang valid.
Wheat Wizard

2
cracked ( |bukannya +)
ngn

2

Malbolge, 10 byte

ub&;$9]J6

Perhatikan bahwa kode berakhir dengan byte 0x14 (kontrol perangkat 4).

Cobalah online!

Urutan 0-diindeks untuk retak adalah [9, 19, 29].


2

> <> , 276 byte ( Retak )

1$1-:?!v$:      1[0$          >:?!va2[$:{:@%:{$-{,]v
       >$n; v              <  ^   >~{]02.1+1+ffr+1r<
 :}[r]{  [01>:{*@@+$a*l2=?!^~]+ff+9+1g"3"=?v"3"ff+9+1pf0.
 :}[l01-$>    $:0(?v$@$:@@:@)?v@@1-$}v     >"2"ff+9+1p00.
>.       ^-1l v!?} <  .4a}$@@$<   .4a<
^26{]r0[}:{]~{<

Cobalah online! Sebut yang ini dengan -v nuntuk mendapatkan elemen ke-n (1-diindeks)

1$1-:?!;$::n84*o1[0$          >:?!va2[$:{:@%:{$-{,]v
            v              <  ^   >~{]02.1+1+ffr+1r<
 :}[r]{  [01>:{*@@+$a*l2=?!^~]+ff+9+1g"3"=?v"3"ff+9+1pf0.
 :}[l01-$>    $:0(?v$@$:@@:@)?v@@1-$}v     >"2"ff+9+1p00.
>.       ^-1l v!?} <  .4a}$@@$<   .4a<
^26{]r0[}:{]~{<

Cobalah online! Panggil dengan -v nuntuk mendapatkan daftar elemen n-1 mulai dari 1

Penerjemah Ikan Online

Yang panjang dan kompleks, ini adalah OEIS A004000 .

Biarkan a (n) = k, bentuk m dengan Membalikkan angka k, Tambahkan m ke k Lalu Sortir angka dari penjumlahan ke dalam peningkatan urutan untuk mendapatkan (n + 1).

Contoh: 668 -> 668 + 866 = 1534 -> 1345.

n=34

1 2 4 8 16 77 145 668 1345 6677 13444 55778 133345 666677 1333444 5567777 12333445 66666677 133333444 556667777 1233334444 5566667777 12333334444 55666667777 123333334444 556666667777 1233333334444 5566666667777 12333333334444 55666666667777 123333333334444 556666666667777 1233333333334444 5566666666667777

Bagaimana cara menjalankan program untuk menghasilkan output tunggal untuk diberikan n(seperti yang dipersyaratkan oleh pertanyaan)?
Jonathan Allan

Karena sebenarnya tidak ada "fungsi" pada ikan, saya menambahkan versi yang dapat Anda panggil untuk mendapatkan n-th (yang pada dasarnya sama, karena harus menghitung elemen n-1 sebelumnya)
crashoz

Lebih penting lagi, apakah Anda memiliki celah yang sesuai dengan pengindeksan input yang sama yang menghasilkan output tunggal?
Jonathan Allan

1
1<=n<=34n>34


2

Jelly , 6 byte , Aman!

<4+ạ2ȯ

Ini mendefinisikan urutan tanpa indeks di mana:

a(n)={1n<32n=3n2n>3

a(0)a(15)1,1,1,2,2,3,4,5,6,7,8,9,10,11,12,13

Cobalah online! (di sini adalah versi nilai tunggal)

Ini saat ini tidak ada dalam OEIS (meskipun A34138 akan berfungsi sebagai celah jika cukup pendek)

Retak yang Dimaksudkan

16n
17th1070045392852801514=a(16)

!ÆsDL


1

JavaScript, 26 byte ( Retak )

let f=x=>x>1?f(x-1)*f(x-2)+1:1

for (x of [0,1,2,3,4,5,6,7]) {
  console.log(x + ' -> ' + f(x))
}

OEIS A007660

Output adalah 6 elemen pertama dengan 0 pengindeksan (1,1,2,3,7,22)

(agak bergeser dari apa yang terdaftar sebagai OEIS)

Hanya menciptakan jawaban yang mudah dipecahkan untuk memulai sesuatu

Cobalah online!



Output cuplikan contoh Anda dimulai dari 1, bukan 0?
Paŭlo Ebermann

@ PaŭloEbermann Memperbaiki itu
fəˈnɛtɪk



1

Sekam , 5 byte ( dipecahkan oleh Jonathan Allan )

16

←d+16

Cobalah online!

0n<23

1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3

Penjelasan

←d+16  -- example input:  23
  +16  -- add 16:         39
 d     -- digits:         [3,9]
←      -- extract first:  3

Larutan

LdΣ





0

> <> , 42 byte, retak

i3%0v
642 .
840
789
159
a 1
v<<
n
l
?
\/
;

Cobalah online!

Sequence to crack (0-diindeks): 101786, 5844, 19902(bukan pada OEIS).

Solusi yang dimaksudkan , untuk referensi.



Biasanya para perampok harus keras mengkodekan output
Jo King

@JoKing Retak Anda tampaknya tidak menghasilkan nilai yang berbeda dari milik saya (atau mungkin saya belum mengujinya secara menyeluruh untuk menemukan nilai yang berbeda), tapi itu mungkin mudah diperbaiki. Meskipun tampaknya tidak ada apa pun dalam peraturan yang melarang hardcoding, saya setuju bahwa itu mungkin tidak sesuai dengan semangat tantangan - dalam kasus apa pun Anda telah menunjukkan bahwa hardcoding (untuk seorang polisi) memiliki risiko sendiri.
Aidan F. Pierce

1
Saya telah memperbarui jawaban saya untuk menghasilkan nilai yang berbeda untuk4
Jo King

0

Perl 6 , 53 byte

{(1,2,2,{$!=++$;prepend(@,2-$!%2 xx$_).pop}...*)[$_]}

Cobalah online!

Blok kode anonim yang mengembalikan urutan Kolakoski yang diindeks 0 ( OEIS A000002 ). Solusi diperlukan untuk mencocokkan 130 elemen pertama, sehingga untuk beberapa n > 129itu berbeda dari urutan Kolakoski.


0

Pascal (FPC) , 86 byte ( retak )

var n:word;begin read(n);write(n div 2+n div 4+n div 8+n div 16+n div 32+n div 64)end.

Cobalah online!

n=120

0   0   1   1   3   3   4   4   7   7   8   8  10  10  11  11  15  15  16  16  18  18  19  19  22  22  23  23  25  25  26  26  31  31  32  32  34  34  35  35  38  38  39  39  41  41  42  42  46  46  47  47  49  49  50  50  53  53  54  54  56  56  57  57  63  63  64  64  66  66  67  67  70  70  71  71  73  73  74  74  78  78  79  79  81  81  82  82  85  85  86  86  88  88  89  89  94  94  95  95  97  97  98  98 101 101 102 102 104 104 105 105 109 109 110 110 112 112 113 113 116


Solusi asli saya adalah

var n,i,s:word;begin read(n);i:=2;repeat s:=s+n div i;i:=i*2until i>n;write(s)end.

tapi r_64 membuatnya lebih baik !


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.