PPCG Jeopardy: Perampok


18

Seberapa baik Anda mengetahui situs ini? Ayo cari tahu.

Ini adalah tantangan . Utas Cop .

Sebagai perampok, Anda harus:

  1. Temukan tantangan yang tidak dihapus, tidak tertutup yang cocok dengan pengajuan polisi. Tantangannya tidak boleh memiliki tanda-tanda berikut: , , , , , , , . Tantangan harus memiliki batasan pada output yang valid.
  2. Poskan tantangan di sini, dan tautkan ke polisi yang sedang Anda hancurkan
  3. Tambahkan komentar "Retak" ke pos polisi, dengan tautan kembali ke jawaban ini

Anda akan menerima 1 poin, ditambah 1 poin untuk setiap periode 24 jam kiriman tetap tidak terputus (maks 7). Tiebreaker adalah jumlah total submisison yang retak.

Catatan:

  • Jika sebuah tantangan membutuhkan output X, dan Anda menampilkan XYatau di YXmana Yselain spasi, pengajuan tidak valid untuk tantangan itu.
  • Tantangan yang lebih baru dari 2016-11-17 tidak diperbolehkan.
  • Saya berhak untuk melarang tantangan tertentu jika mereka dapat diterapkan secara luas (dapat diterapkan ke sebagian besar semua pengajuan).
  • Pastikan Anda menambahkan satu atau dua kalimat sebagai penjelasan (itu juga membantu kiriman Anda agar tidak dikonversi menjadi komentar)
  • Terima kasih kepada Daniel untuk ide awalnya!


Jawaban:


5

Hitung probabilitas mendapatkan kepala sebanyak setengah lemparan koin.

Entri polisi (diposting oleh Conor O'Brien): /codegolf//a/100521/8927

Pertanyaan awal: Hitung probabilitas mendapatkan setengah kepala sebanyak lemparan koin.


Solusi diposting memiliki beberapa teknik kebingungan diterapkan, diikuti oleh beberapa lapisan teknik kebingungan yang sama. Setelah melewati beberapa trik pertama, itu menjadi tugas sederhana (jika membosankan!) Untuk mengekstrak fungsi sebenarnya:

nCr(a,b) = a! / ((a-b)! * b!)
result = nCr(x, x/2) / 2^x

Butuh beberapa saat untuk menyadari apa yang saya lihat (untuk sementara saya curiga ada hubungannya dengan entropi), tetapi begitu ranting, saya berhasil menemukan pertanyaan dengan mudah dengan mencari "kemungkinan lemparan koin".


Karena Conor O'Brien menantang penjelasan yang mendalam tentang kode-kodenya, berikut adalah ringkasan dari bit-bit yang lebih menarik:

Itu dimulai dengan mengaburkan beberapa panggilan fungsi bawaan. Ini dicapai dengan basis-32 mengkodekan nama-nama fungsi, kemudian menugaskan mereka ke nama namespace global baru dari satu karakter. Hanya 'atob' yang benar-benar digunakan; 2 lainnya hanya ikan haring merah (eval mengambil steno yang sama dengan atob, hanya untuk diganti, dan btoa tidak digunakan).

_=this;
[
    490837, // eval -> U="undefined"       -> u(x) = eval(x) (but overwritten below), y = eval
    358155, // atob -> U="function (M,..." -> u(x) = atob(x)
    390922  // btoa -> U="function (M,..." -> n(x) = btoa(x), U[10] = 'M'
].map(
    y=function(M,i){
        return _[(U=y+"")[i]] = _[M.toString(2<<2<<2)]
    }
);

Berikutnya ada beberapa perpaduan string sepele untuk menyembunyikan kode. Ini mudah dibalik:

u(["","GQ9ZygiYTwyPzE6YSpk","C0tYSki","SkoYSkvZChhLWIpL2QoYikg"].join("K"))
// becomes
'(d=g("a<2?1:a*d(--a)"))(a)/d(a-b)/d(b) '

u("KScpKWIsYShFLCliLGEoQyhEJyhnLGM9RSxiPUQsYT1D").split("").reverse().join("")
// becomes
"C=a,D=b,E=c,g('D(C(a,b),E(a,b))')"

Sebagian besar kebingungan adalah penggunaan gfungsi, yang hanya mendefinisikan fungsi-fungsi baru. Ini diterapkan secara rekursif, dengan fungsi mengembalikan fungsi baru, atau membutuhkan fungsi sebagai parameter, tetapi akhirnya disederhanakan. Fungsi yang paling menarik untuk keluar dari ini adalah:

function e(a,b){ // a! / ((a-b)! * b!) = nCr
    d=function(a){return a<2?1:a*d(--a)} // Factorial
    return d(a)/d(a-b)/d(b)
}

Ada juga trik terakhir dengan baris ini:

U[10]+[![]+[]][+[]][++[+[]][+[]]]+[!+[]+[]][+[]][+[]]+17..toString(2<<2<<2)
// U = "function (M,i"..., so U[10] = 'M'. The rest just evaluates to "ath", so this just reads "Math"

Meskipun karena bit berikutnya adalah ".pow (T, a)", itu selalu sangat mungkin bahwa itu harus menjadi "Matematika"!

Langkah-langkah yang saya ambil di sepanjang rute perluasan fungsi adalah:

// Minimal substitutions:
function g(s){return Function("a","b","c","return "+s)};
function e(a,b,c){return (d=g("a<2?1:a*d(--a)"))(a)/d(a-b)/d(b)}
function h(a,b,c){return A=a,B=b,g('A(a,B(a))')}
function j(a,b,c){return a/b}
function L(a,b,c){return Z=a,Y=b,g('Z(a,Y)')}
k=L(j,T=2);
function F(a,b,c){return C=a,D=b,E=c,g('D(C(a,b),E(a,b))')}
RESULT=F(
    h(e,k),
    j,
    function(a,b,c){return _['Math'].pow(T,a)}
);


// First pass
function e(a,b){
    d=function(a){return a<2?1:a*d(--a)}
    return d(a)/d(a-b)/d(b)
}
function h(a,b){
    A=a
    B=b
    return function(a){
        return A(a,B(a))
    }
}
function j(a,b){ // ratio function
    return a/b
}
function L(a,b){ // binding function (binds param b)
    Z=a
    Y=b
    return function(a){
        return Z(a,Y)
    }
}
T=2; // Number of states the coin can take
k=L(j,T); // function to calculate number of heads required for fairness
function F(a,b,c){
    C=a
    D=b
    E=c
    return function(a,b,c){return D(C(a,b),E(a,b))}
}
RESULT=F(
    h(e,k),
    j,
    function(a){return Math.pow(T,a)}
);


// Second pass
function e(a,b){...}
function k(a){
    return a/2
}
function F(a,b,c){
    C=a
    D=b
    E=c
    return function(a,b,c){return D(C(a,b),E(a,b))}
}
RESULT=F(
    function(a){
        return e(a,k(a))
    },
    function(a,b){
        return a/b
    },
    function(a){return Math.pow(2,a)}
);


// Third pass
function e(a,b) {...}
C=function(a){ // nCr(x,x/2) function
    return e(a,a/2)
}
D=function(a,b){ // ratio function
    return a/b
}
E=function(a){return Math.pow(2,a)} // 2^x function
RESULT=function(a,b,c){
    return D(C(a,b),E(a,b))
}

Struktur fungsi bersarang didasarkan pada utilitas; fungsi "D" / "j" paling luar menghitung rasio, kemudian fungsi "C" / "h" dan "E" (sebaris) paling dalam menghitung jumlah flip koin yang diperlukan. Fungsi "F", dihapus pada lintasan ketiga, bertanggung jawab untuk menghubungkan ini bersama-sama menjadi keseluruhan yang dapat digunakan. Demikian pula fungsi "k" bertanggung jawab untuk memilih jumlah kepala yang perlu diamati; tugas yang didelegasikan ke fungsi rasio "D" / "j" melalui fungsi pengikatan parameter "L"; digunakan di sini untuk memperbaiki parameter bke T(di sini selalu 2, menjadi jumlah negara yang dapat diambil koin).

Pada akhirnya, kita mendapatkan:

function e(a,b){ // a! / ((a-b)! * b!)
    d=function(a){return a<2?1:a*d(--a)} // Factorial
    return d(a)/d(a-b)/d(b)
}
RESULT=function(a){
    return e(a, a/2) / Math.pow(2,a)
}

Kerja bagus! Ini sedikit salah - eval diatur ke f. Tetapi sisanya benar! Juga, sedikit elaborasi tentang bagaimana RESULTditurunkan mungkin layak;)
Conor O'Brien

@ ConorO'Brien yakin; Saya menambahkan catatan saya dan penjelasan tentang kegunaan masing-masing fungsi sebelum menciutkan semuanya.
Dave

@ ConorO'Brien terima kasih atas hadiahnya!
Dave

Selalu menyenangkan :)
Conor O'Brien

3

MATL, Luis Mendo , Hitung jumlah desimal besar antara 2 angka

&:"@FYAYm7>vs

Saya mencari tahu apa fungsinya dengan bermain dengan input, tetapi saya tidak tahu untuk tantangan apa Anda harus menghitung jumlah bilangan bulat dalam rentang yang jumlahnya lebih besar dari 7 kali jumlah digit. Setelah membaca dokumen MATL, saya mengumpulkan penjelasan kasar tentang apa yang dilakukannya:

&    % Change default input format
:    % Implictly input two integers, create inclusive range
"    % For each item in this range:
  @    % Push the item
  F    % Push false
  YA   % Convert to base N digits; N is false, so this produces base-10 digits
  Ym   % Calculate arithmetic mean
  7>   % Push 1 if this is greater than 7, 0 otherwise
  v    % Concatenate result into array with previous result
  s    % Sum
     % Implicitly end loop and output

Saya kemudian beralih dari mencari "jumlah digit lebih besar dari 7 kali panjang" ke "digit rata-rata lebih besar dari 7", yang menghasilkan tantangan yang saya cari.





2

Perl, Gabriel Benamy , Pemeriksa palindrom nyaman

Kode itu jelas semacam palindrom. Begitu saya memilih y- - -struktur dan memperhatikan apa yang sedang ditransliterasi, saya tahu tantangan apa itu.


Anda mengalahkan saya beberapa detik ... tetapi butuh waktu lama untuk mengunduh perl.
Laikoni

@Laikoni Jujur, setelah pasangan mencoba Ideone, saya menyerah menjalankan kode dan mencoba membacanya. ;)
DLosc





1

Ruby, histokrat , Menerapkan Mesin Kebenaran

Kode mendefinisikan sistem fungsi iterated f(n) = n*(3*n-1)/2yang berjalan sampai nmod 7 adalah 0. 0Oleh karena itu input berakhir segera (setelah dicetak 0sekali). Input 1memberi 1, yang mengarah ke loop pencetakan tanpa batas 1. Input lain berakhir setelah 1-3 langkah jika inisial nkongruen ke 0, 2, 3, 5, atau 6 mod 7, atau tumbuh selamanya jika kongruen dengan 1 atau 4 mod 7. Tapi itu tidak relevan.


1

Hexagony, 548 bytes, Martin Ender

Ini adalah tantangan " Cetak setiap karakter yang tidak dimiliki program Anda "!

Cetakan:

Elizabeth obnoxiously quoted (just too rowdy for my peace): "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG," giving me a look

Yang sangat mirip dengan output yang satu ini . Petunjuk di sini adalah bahwa yang terakhir .tidak dicetak. Juga, kode itu sendiri tidak memiliki huruf, dan kita semua tahu bahwa frasa dalam output berisi semua huruf dalam alfabet.



0

Python 3, /codegolf//a/100381/31343

Gunakan rumus xkcd untuk memperkirakan populasi dunia

Saya hanya mencari tantangan yang melibatkan tahun kabisat (karena keterbelahan yang diurai oleh empat pemeriksa) dan itu tidak membutuhkan input.


Ya! Saya tahu itu akan menjadi jelas karena %4dan strftime, tetapi pekerjaan yang baik untuk melihat bagian-bagian penting dari kode (sebagian besar adalah omong kosong)
FlipTack

Ah dangit, aku juga sudah dekat. Saya telah menemukan itu ada hubungannya dengan tanggal, mendapatkan 2005 dan 2016/2017. Pekerjaan yang baik.
Yodle

Saya terkejut bahwa Anda berdua tidak menjalankan kode, yang menghasilkan output 7.3 328, dan mencari itu. Tantangan datang segera.
FlipTack



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.