เปลี่ยนรหัสเปลี่ยนลำดับ: โจร


15

นี่เป็นความท้าทายของสำหรับเธรดตำรวจให้ไปที่นี่

ความท้าทายนี้เกี่ยวข้องกับสองลำดับOEISที่ตำรวจเลือก - S 1 , S 2 - และลำดับที่สามารถกอล์ฟและ obfuscated

ตำรวจจะมีการสร้างรหัสที่ผลิตS 1และให้หมายเลขXที่พวกเขาอ้างว่าเป็นที่ดีที่สุดLevenshtein ระยะทางที่เป็นไปได้ (ตัวอักษร) เพื่อสร้างBที่ผลิตS 2

ความท้าทายของโจร

ในการถอดรหัสการส่งของตำรวจโดยเฉพาะโจรต้องมากับโปรแกรมCในภาษาเดียวกัน (และเวอร์ชั่น) เนื่องจากคำตอบที่สร้าง S 2 (n) และตัวอักษรYนั้นเปลี่ยนไปจากA (ด้วยY <= X) โจรไม่จำเป็นต้องค้นหารหัสBที่แน่นอนที่ตำรวจ (แอบ) ผลิต ผลงานของโจรจะต้องเป็นไปตามดัชนี 0 หรือดัชนีเดียวกับที่ระบุโดยการส่งของตำรวจ

หากคุณจัดการสิ่งนี้โพสต์คำตอบด้วยวิธีแก้ปัญหาเชื่อมโยงไปยังคำตอบของตำรวจและแสดงความคิดเห็นในคำตอบของตำรวจที่เชื่อมโยงกลับไปยังของคุณ

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

การชนะและการให้คะแนน

โจรจะได้คะแนนจาก(X - Y)*5 + 5การแตกแต่ละครั้งและผู้ปล้นที่มีคะแนนสูงสุดโดยรวมจะเป็นผู้ชนะ

กฎเพิ่มเติม

  • คุณต้องไม่ใช้บิวด์อินใด ๆ สำหรับการสร้างการแฮชการเข้ารหัสหรือการสุ่มหมายเลข (แม้ว่าคุณจะ seed ตัวสร้างตัวเลขสุ่มเป็นค่าคงที่)
  • อนุญาตให้ใช้โปรแกรมหรือฟังก์ชันอย่างใดอย่างหนึ่ง แต่รหัสจะต้องไม่เป็นข้อมูลโค้ดและคุณจะต้องไม่ถือว่าสภาพแวดล้อมแบบ REPL
  • คุณอาจรับอินพุตและให้เอาต์พุต ในรูปแบบที่สะดวกใดวิธีการอินพุต / เอาต์พุตจะต้องเหมือนกันสำหรับทั้งสองซีเควนซ์
  • เครื่องคำนวณที่ชัดเจนสำหรับระยะทางของ Levenshtein สำหรับความท้าทายนี้คือ นี้คำนวณ Planet Planet
  • นอกจากจะเป็นความท้าทายของ CnR แล้วนี่คือเพื่อใช้กฎการเล่นกอล์ฟตามปกติทั้งหมด

คำตอบ:


7

Pyke, Levenshtein ระยะทาง 1, A036487 , A135628 - คะแนน 5

แคร็กของรายการโดย muddyfish

wX*e

ลองที่นี่!

รหัสต้นฉบับX*e, กำลังสองอินพุทX, คูณด้วยอินพุต*และแบ่งเท่า ๆ eกันแล้วชั้นผล

เคล็ดลับคือ'X'56 ในการแสดงฐาน 96 ของwดังนั้นwXให้ 56 คูณด้วยการป้อนข้อมูลแล้วชั้นและครึ่งและคุณได้รับ 28 เท่าของการป้อนข้อมูลตามที่ต้องการ


สิ่งที่ฉันมี กินเวลานานกว่าที่ฉันคาดไว้เล็กน้อย
บลู

ทันทีที่ฉันเห็นมันฉันรู้ว่ามันเป็นทางออกที่ตั้งใจไว้
Jonathan Allan

4

Brain-Flak , 28 ไบต์, ระยะทาง 4, A002817 , A090809

(({(({})[()])}{}){{({}[()])}{}})

คำตอบนี้ถูกค้นพบด้วยความช่วยเหลือของสัตว์เดรัจฉานซึ่งสร้างโปรแกรมที่เป็นไปได้ 35,000 โปรแกรม (ล็อตของพวกมันไม่สมดุลและทำให้สมองสะเก็ดโค้ดไม่ถูกต้อง แต่ฉันรีดด้วยข้อผิดพลาด นี่เป็นโปรแกรมที่มีการทดสอบครั้งที่ 20,000 และใช้เวลาประมาณหนึ่งชั่วโมงในการค้นหา

ฉันยังไม่ต้องการโพสต์คำตอบนี้เนื่องจากฉันยังไม่เข้าใจวิธีการทำงานของโปรแกรมนี้ อย่างไรก็ตามคำตอบนั้นใกล้จะปลอดภัยดังนั้นฉันไม่ต้องการให้มันหมดอายุ ฉันหวังว่าจะปรับปรุงคำตอบนี้อีกครั้งเมื่อฉันเข้าใจอย่างถ่องแท้รวมถึงการโพสต์รหัสที่ฉันใช้เพื่อค้นหาคำตอบ แต่ตอนนี้ฉันจะโพสต์คำอธิบายบางส่วน

#Push the sum of:
(

    #The (n-1)th triangular number, and the range [1, n] (The range doesn't count towards the sum I believe)
    ({(({})[()])}{})

    #Triangulate every number on the stack
    {{({}[()])}{}}

)

สิ่งนี้สมเหตุสมผลเนื่องจาก OEIS กล่าวว่า:

สำหรับ n> 0 เงื่อนไขของลำดับนี้เกี่ยวข้องกับ A000124 โดย (n) = ผลรวม (i * A000124 (i), i = 0..n-1) [Bruno Berselli, 20 ธันวาคม 2013]

และ A000124 คือตัวเลขสามเหลี่ยม + 1 อย่างไรก็ตามฉันไม่รู้ว่าฟอรัมคืออะไรดังนั้นฉันจึงไม่สามารถอธิบายได้อย่างเต็มที่ว่าวิธีการนี้ทำงานอย่างไร


3

Perl 6, 19 ไบต์, X = 1, A000045 → A000035

{(0,1,*+<*...*)[$_]}

+>ในสถานที่ของ+<ก็จะทำงาน

ลองออนไลน์!

มันทำงานอย่างไร

มัด ...ค่อนข้างมีประโยชน์สำหรับวนเวียนวนซ้ำอย่างง่าย ๆ (0,1,*+*...*)ส่วนหนึ่งของรหัสเดิมซึ่งเป็นชื่อย่อสำหรับ

(0, 1, -> $x, $y { $x + $y } ... *)

ระบุลำดับที่เริ่มต้นด้วย0และ1จากนั้นเพิ่มรายการโดยการคำนวณผลรวมของสองรายการก่อนหน้าของลำดับ

ในทางตรงกันข้ามการ(0,1,*+<*...*)ใช้บิตบิตกะซ้าย (บิตบิตกะ+>ขวาจะใช้งานได้) เพื่อสร้างลำดับพาริตี เนื่องจากการขยับ1ศูนย์ไปทางซ้ายคือ1และการขยับ0หนึ่งหน่วยทางซ้ายคือ0เราจะได้รูปแบบสลับที่ต้องการของวัตถุและศูนย์


2

Perl 6 , 10 ไบต์, ระยะทาง 1 - คะแนน 5

แตกรายการโดย smls

*[0]o 1***

กลายเป็น:

*[0]o 1*+*

ลองออนไลน์!


เยี่ยมมาก! ฉันไม่คิดว่าจะแก้ปัญหานี้ของฉันเป็นเรื่องยุ่งยากมากขึ้นและต้องการ*[0]o ให้มี ฉันเดาว่าหมายถึงฉันสามารถขึ้นมากับความท้าทายอีกขึ้นอยู่กับ "เคล็ดลับ" ของฉัน ... :)
smls

ฉันไม่รู้ Perl จริงๆแค่เห็น***และคิดว่ามันดูเหมือนว่ามันสามารถตีแผ่การดำเนินการคูณ dyadic *กับข้อโต้แย้งก่อนหน้านี้ฉันไม่รู้จริงๆว่าโค้ดทำอะไร รู้สึกอิสระที่จะแก้ไขในคำอธิบายบางอย่าง!
Jonathan Allan

2
1***มีการแยกวิเคราะห์เป็น 1 ** *เช่นแลมบ์ดาที่ทำ "1 ถึงพลังของ x"1*+*มีการแยกวิเคราะห์1 * (+*)เช่นแลมบ์ดาที่ใช้ "1 คูณด้วย (x แปลงเป็นตัวเลข)"
smls

2

Perl 6 , ระยะทาง 2, smls

เดิม:

+(*%%2)

แตก:

+(*+0%2)

ลองออนไลน์!


Darn เป็นอีกวิธีง่ายๆที่ฉันไม่ได้พิจารณา ... (ของฉันช่างสับสนมากขึ้น+(^*Z%2)ฉันเดาว่าฉันไม่เก่งในการร่างความท้าทายเหล่านี้
smls

2

WolframAlpha, ระยะทาง 1, Greg Martin , A002378 , A000537

(sum1to#of n^1)^2&

มันทำงานอย่างไร

ฉันรู้ว่าน่าสนใจ (n * (n + 1) / 2) ^ 2 เป็นสูตรสำหรับลำดับที่สอง เนื่องจากผลรวม (1 ถึง n) เทียบเท่ากับ n * (n + 1) / 2 ฉันแค่ต้องเปลี่ยน * เป็น a ^


คุณควรแจ้งให้เขาทราบว่าคุณได้แตกคำตอบของเขาแล้ว
โพสต์ร็อคการ์ฟฮันเตอร์

เห็นดี! :)
Greg Martin

2

Brain-Flakขนาด 20 ไบต์DJMcMayhem

({({})({}[()])()}{})

ลองออนไลน์!

เพิ่ม a ({})ที่ตำแหน่งเริ่มต้นของลูปเพื่อเพิ่มค่าเป็นสองเท่าในการวนซ้ำแต่ละครั้ง


ดี! FWIW โซลูชั่นขนาด 18 ไบต์ที่ฉันมี({(({}[()])){}}{})
DJMcMayhem


1

JavaScript (ES6), ระยะทาง 1, ขั้นสูง

เดิม:

as=function(){ return 2*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

แตก:

as=function(){ return 0*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

ลองออนไลน์!

หรือ

as=function(){ return 2*1**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

ลองออนไลน์!

อย่างใดฉันก็สามารถที่จะให้มันทำงานที่แตกต่างกันระหว่าง TIO และ repl.it (แน่นอนไม่มีเหตุผลว่าทำไม 2 * 1 ^ ... จะเท่ากับ 0 ตามที่ repl.it)


ฉันโง่เกินไปผมไม่ได้คิดเกี่ยวกับการเปลี่ยนแปลง 2 ถึง 0. as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}นี่คือฟังก์ชั่นบี:


1

Java, ระยะทาง 4, Peech , A094683 , A000290

เดิม:

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%2==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)r:k;}

แตก:

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%1==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)n*n:k;}
                                                                                                                                                          ^                                                         ^^^

ส่งคืน n * n


1

Javascript, Advancid , ระยะทาง 2, A059841และ A000004

ปล่อยรหัสไว้ด้านหลังลิงก์ TIO เท่านั้นเพราะดูเหมือนว่าจะทำให้ไซต์แตกหัก

ขอบคุณ @nderscore ซึ่งมีรหัสฉันใช้ในการถอดรหัสรหัสเริ่มต้น

มีรหัสซ้ำซ้อนเช่นการใช้ !! [] + [] + [] แทนที่จะเป็น !! [] + []

การเพิ่ม! + [] - (! + []) (+ 1-1) เริ่มป้องกันการถอดรหัส

ลองออนไลน์


1

Pyke, Levenshtein ระยะทาง 2, A008788, A007526

'SS^

ลองที่นี่!

มันทำงานอย่างไร

นี่คือการแปลงฐานแบบผสม

'Sคว้าอินพุตnและนำไปใช้โดยกด[1, ... , n]บนสแต็ก ถัดไปSจะรับอินพุตnและเพิ่มอาร์เรย์เดียวกันอีกครั้ง 'ดูเหมือนว่าจะทำให้คำสั่งถัดไปที่จะใช้กับด้านบนก่อนหน้าในสแต็ก; ฉันมีรายละเอียดเล็กน้อยคลุมเครือ

สุดท้าย^ใช้การแปลงฐานแบบผสมดังนั้น[1, ... , n] [1, ... , n] fคำนวณ
a (n): = [1] n + n + (n) (n-1) .. . + [n!] 1โดยที่วงเล็บระบุค่าสถานที่และตัวเลขทางขวาของตัวเลข

ตอนนี้a (n) = (1 + (1) (n-1) + (n-1) (n-2) (n-3) + ... + (n-1)!) n = n ( a (n) + 1)ซึ่งเป็นสูตรแบบเรียกซ้ำที่กำหนดa (n)ใน [A007526] เนื่องจากผลรวมว่างเปล่าเป็นศูนย์a (0) = 0และกรณีฐานตรงกันเช่นกัน


คุณได้รับมันด้วยความพยายามเพียงไม่กี่ครั้ง? ฉันสนใจกระบวนการคิดของคุณ
บลู

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