PPCG Jeopardy: โจร


18

คุณรู้จักเว็บไซต์นี้ดีแค่ไหน? มาหาคำตอบกัน

นี่เป็นความท้าทายของ ด้ายของตำรวจ

ในฐานะโจรคุณต้อง:

  1. ค้นหาความท้าทายที่ไม่ถูกลบและไม่ปิดที่ตรงกับการส่งของตำรวจ ความท้าทายที่ไม่สามารถมีแท็กต่อไปนี้: , , , , , , , คำตอบผูกมัดความท้าทายต้องมีข้อ จำกัด เกี่ยวกับผลลัพธ์ที่ถูกต้อง
  2. โพสต์ความท้าทายที่นี่และเชื่อมโยงไปยังตำรวจที่คุณกำลังแคร็ก
  3. เพิ่มความคิดเห็น "แตก" ไปยังโพสต์ของตำรวจพร้อมลิงค์กลับไปที่คำตอบนี้

คุณจะได้รับ 1 คะแนนบวก 1 คะแนนสำหรับแต่ละช่วงเวลา 24 ชั่วโมงที่การส่งยังไม่ได้แยก (สูงสุด 7) Tiebreaker เป็นจำนวนรวมของการยอมแพ้ที่แตก

หมายเหตุ:

  • ถ้าเป็นความท้าทายที่ต้องมีการส่งออกของXและคุณเอาท์พุทXYหรือYXที่Yเป็นสิ่งที่นอกเหนือจากช่องว่างที่ยื่นไม่ถูกต้องสำหรับความท้าทายที่
  • ไม่อนุญาตให้มีการท้าทายที่ใหม่กว่า 2016-11-17
  • ฉันขอสงวนสิทธิ์ที่จะห้ามการท้าทายบางอย่างหากมีการใช้งานอย่างกว้างขวาง (สามารถนำไปใช้กับส่วนใหญ่ของการส่งทั้งหมด)
  • ตรวจสอบให้แน่ใจว่าคุณเพิ่มประโยคหนึ่งหรือสองประโยคเป็นคำอธิบาย (ช่วยให้การแปลงของคุณเป็นความคิดเห็น)
  • ขอบคุณDanielสำหรับแนวคิดเริ่มต้น!


คำตอบ:


5

คำนวณความน่าจะเป็นในการได้ครึ่งหนึ่งของจำนวนหัวเท่ากับการโยนเหรียญ

รายการตำรวจ (โพสต์โดย Conor O'Brien): /codegolf//a/100521/8927

คำถามเดิม: คำนวณความน่าจะเป็นในการได้ครึ่งหนึ่งของจำนวนหัวเท่า ๆ กับการโยนเหรียญ


วิธีการแก้ปัญหาที่โพสต์นั้นมีการใช้เทคนิคการทำให้งงงวยอยู่สองสามวิธีแล้วตามด้วยเทคนิคการทำให้งงที่ซ้ำกันหลายชั้น เมื่อผ่านไปสองสามเทคนิคแรกมันกลายเป็นงานง่าย ๆ (ถ้าน่าเบื่อ!) เพื่อแยกฟังก์ชั่นจริง:

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

ใช้เวลาสักครู่เพื่อตระหนักถึงสิ่งที่ฉันกำลังดู (ในขณะที่ฉันสงสัยว่าจะทำอะไรกับเอนโทรปี) แต่เมื่อมันทวีคูณฉันก็สามารถหาคำถามได้อย่างง่ายดายโดยค้นหา "ความน่าจะเป็นของการโยนเหรียญ"


เนื่องจาก Conor O'Brien ท้าทายคำอธิบายเชิงลึกของรหัสของเขานี่เป็นบทสรุปของบิตที่น่าสนใจยิ่งขึ้น:

มันเริ่มต้นจากการทำให้ฟังก์ชั่นการโทรภายในเครื่องมีปัญหา นี่คือความสำเร็จโดย base-32 การเข้ารหัสชื่อฟังก์ชั่นจากนั้นกำหนดให้กับชื่อโกลบอลเนมสเปซใหม่ของอักขระตัวเดียว ใช้เพียง 'atob' เท่านั้น อีก 2 คนเป็นเพียงปลาเฮอริ่งแดง (eval ใช้ชวเลขเดียวกันกับ atob เท่านั้นที่จะถูกแทนที่และไม่ใช้ btoa)

_=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)]
    }
);

ถัดไปมีการรวมตัวกันของสตริงเล็กน้อยเพื่อซ่อนรหัส สิ่งเหล่านี้สามารถย้อนกลับได้ง่าย:

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))')"

ส่วนใหญ่ของการทำให้งงคือการใช้gฟังก์ชั่นซึ่งเพียงกำหนดฟังก์ชั่นใหม่ สิ่งนี้ถูกนำไปใช้ซ้ำด้วยฟังก์ชั่นที่ส่งคืนฟังก์ชั่นใหม่หรือต้องการฟังก์ชั่นเป็นพารามิเตอร์ ฟังก์ชั่นที่น่าสนใจที่สุดที่จะออกมาคือ:

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)
}

นอกจากนี้ยังมีเคล็ดลับขั้นสุดท้ายสำหรับบรรทัดนี้:

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"

แม้ว่าตั้งแต่บิตถัดไปคือ ".pow (T, a)" มันเป็นไปได้เสมอที่จะต้องเป็น "คณิตศาสตร์"!

ขั้นตอนที่ฉันใช้ไปตามเส้นทางของฟังก์ชั่นการขยายคือ:

// 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))
}

โครงสร้างของฟังก์ชั่นการซ้อนนั้นมีพื้นฐานมาจากยูทิลิตี้ ฟังก์ชั่น "D" / "j" ส่วนใหญ่จะคำนวณอัตราส่วนจากนั้นฟังก์ชั่น "C" / "h" และ "E" (อินไลน์) ภายในจะคำนวณจำนวนการพลิกเหรียญที่จำเป็น ฟังก์ชั่น "F" ซึ่งถูกลบออกในรอบที่สามมีหน้าที่เชื่อมต่อสิ่งเหล่านี้เข้าด้วยกันเป็นทั้งการใช้งาน ในทำนองเดียวกันฟังก์ชั่น "k" มีหน้าที่ในการเลือกจำนวนหัวที่จะต้องปฏิบัติตาม; งานที่มอบหมายให้ฟังก์ชั่นอัตราส่วน "D" / "j" ผ่านฟังก์ชั่นการเชื่อมพารามิเตอร์ "L"; ใช้ที่นี่เพื่อแก้ไขพารามิเตอร์bเป็นT(ที่นี่เสมอ 2 คือจำนวนของเหรียญที่สามารถใช้ได้)

ในท้ายที่สุดเราจะได้รับ:

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)
}

เยี่ยมมาก! นี้ไม่ถูกต้องออกไปเล็กน้อย - EVAL fมีการตั้งค่า แต่ส่วนที่เหลือนั้นถูกต้อง! นอกจากนี้บิตของรายละเอียดเป็นวิธีการที่RESULTได้มาอาจจะคุ้มค่า;)
Conor โอไบรอัน

@ ConorO'Brien แน่นอน; ฉันเพิ่มบันทึกย่อของฉันและคำอธิบายเกี่ยวกับยูทิลิตี้ของแต่ละฟังก์ชั่นก่อนที่จะยุบทั้งหมด
เดฟ

@ ConorO'Brien ขอบคุณสำหรับความโปรดปราน!
เดฟ

มีความสุขอยู่เสมอ :)
Conor O'Brien

3

MATL, Luis Mendo , นับจำนวนทศนิยมที่หนักระหว่าง 2 ตัวเลข

&:"@FYAYm7>vs

ฉันหาว่ามันทำอะไรโดยการเล่นกับอินพุต แต่ฉันไม่สามารถหาสิ่งที่ท้าทายที่คุณต้องคำนวณจำนวนเต็มในช่วงที่ผลรวมมากกว่า 7 คูณจำนวนหลัก หลังจากอ่านเอกสาร MATL ฉันฉันรวบรวมคำอธิบายคร่าวๆของสิ่งนี้:

&    % 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

จากนั้นฉันเปลี่ยนจากการค้นหา "ผลรวมหลักมากกว่า 7 ครั้งความยาว" เป็น "เฉลี่ยหลักมากกว่า 7" ซึ่งให้ความท้าทายที่ฉันค้นหา





2

Perl, Gabriel Benamy , ตัวตรวจสอบ palindrome สะดวก

เห็นได้ชัดว่ารหัสนั้นมีลักษณะเป็นบางส่วน เมื่อฉันเลือกy- - -โครงสร้างและสังเกตสิ่งที่ทับศัพท์แล้วฉันก็รู้ว่ามันท้าทายอะไร


คุณเอาชนะฉันในไม่กี่วินาที ... แต่มันใช้เวลานานในการดาวน์โหลด Perl
Laikoni

@Laikoni สุจริตหลังจากที่ทั้งคู่พยายามที่จะ Ideone ฉันให้ขึ้นในการใช้รหัสและพยายามอ่านมันแทน ;)
DLosc



1

MATL, หลุยส์ Mendo , น้ำหนัก Hamming คำนวณที่มีน้ำหนัก Hamming ต่ำ

dP7EGn:q^1J2/h)ts_hX=Gs[BE]Wd=~>~GBz*

ฉันทดสอบการใส่ตัวเลขและพบว่าน้ำหนักที่เพิ่มขึ้นของOEIS ลดลง

จากนั้นฉันค้นหาใน PPCG ลองใส่สตริงและใช้งานได้


ในขณะที่ฉันแสดงความคิดเห็นในการท้าทายตำรวจนี้ไม่แตกจริงของฉันส่ง น่าเสียดายที่ฉันเดาว่าคำตอบนี้จะต้องถูกลบ
Luis Mendo


1

Ruby, histocrat , ใช้งาน Truth-Machine

รหัสจะกำหนดระบบฟังก์ชั่นที่วนซ้ำf(n) = n*(3*n-1)/2ซึ่งทำงานจนกว่าnmod 7 คือ 0 อินพุต0จึงยุติทันที (หลังจากพิมพ์0ครั้งเดียว) ใส่ของ1ให้1นำไปสู่วง จำกัด 1ของการพิมพ์ อินพุตอื่นสิ้นสุดลงหลังจาก 1-3 ขั้นตอนหากค่าเริ่มต้นnสอดคล้องกับ 0, 2, 3, 5 หรือ 6 mod 7 หรือเพิ่มขึ้นตลอดไปหากสอดคล้องกับ 1 หรือ 4 mod 7 แต่นั่นไม่เกี่ยวข้อง


1

Hexagony, 548 ไบต์, Martin Ender

นี่คือ"ท้าทายตัวละครทุกตัวที่โปรแกรมของคุณไม่มี "!

พิมพ์:

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

ซึ่งคล้ายกับเอาต์พุตในอันนี้มาก เบาะแสที่นี่คือที่ล่าสุด.ไม่ได้พิมพ์ นอกจากนี้โค้ดเองไม่มีตัวอักษรและเราทุกคนรู้ว่าวลีในผลลัพธ์ประกอบด้วยตัวอักษรทั้งหมดในตัวอักษร


1

Python 935 ไบต์ Mega Man , จำนวนเต็มบวกฐาน 10 ที่เล็กที่สุดที่สามารถพิมพ์โดยโปรแกรมที่สั้นกว่า (เป็นตัวอักษร) คืออะไรกว่าตัวเอง?

ฉันไม่ได้ลองจริงๆ แต่ฉันเดาว่ามันพิมพ์ตัวเลขได้นานกว่าโปรแกรม


มันพิมพ์ 99 ** 9999 ซึ่งเป็นเพียงขนาดใหญ่กว่าเล็กน้อย
Peter Taylor

0

Python 3 /codegolf//a/100381/31343

ใช้สูตรของ xkcd เพื่อประมาณประชากรโลก

ฉันเพียงแค่ค้นหาความท้าทายที่เกี่ยวข้องกับปีอธิกสุรทิน


อ้อ! ฉันรู้ว่ามันจะชัดเจนเพราะ%4และstrftimeแต่งานที่ดีสำหรับการตรวจสอบส่วนสำคัญของรหัส (ส่วนใหญ่มันเป็นซึ่งพูดพล่อยๆ)
FlipTack

อ้าวฉันก็เข้าใกล้ด้วยเหมือนกัน ฉันพบว่ามันเป็นเรื่องเกี่ยวกับการเดทกำลังได้รับปี 2005 และ 2016/2017 งานที่ดี.
Yodle

ฉันประหลาดใจที่ไม่มีคุณเพียงแค่เรียกใช้รหัสซึ่งสร้างผลลัพธ์7.3 328และค้นหานั้น ความท้าทายเกิดขึ้นทันที
FlipTack



0

ทับทิมวัด , 400th ฉลองคำถาม / ความท้าทาย

นั่นคือสิ่งแรกที่ฉันพบเมื่อค้นหา "400" ที่กล่าวว่าความท้าทายดูเหมือนว่าจะผิดพลาดและควรจะเป็น popcon และอาจจะถูกปิดเพราะไม่มีความต้องการตามวัตถุประสงค์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.