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


27

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

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

The Cops 'Challenge

ความท้าทายของคุณในฐานะตำรวจคือการเลือกภาษาที่ใช้ได้อย่างอิสระและสอง OEIS ตามลำดับ จากนั้นเขียนโค้ดAในภาษานั้นที่รับอินพุตnและสร้าง S 1 (n) เมื่อโค้ดนั้นถูกแก้ไขโดยระยะทาง LevenshteinของตัวอักขระX (ที่มี X ไม่เกิน0.5 * (length A)) และเปลี่ยนเป็นรหัสBในภาษาเดียวกันมันจะต้องสร้าง S 2 (n) คุณต้องเขียนรหัสBนี้ แต่อย่าเปิดเผยจนกว่าความท้าทายของคุณจะปลอดภัย (ดูด้านล่าง)

ส่งตำรวจต้องมีชื่อภาษารหัสเต็มที่ไบต์นับที่Xมูลค่าของจำนวนการเปลี่ยนแปลงที่จะได้รับของพวกเขาเป็นความลับBรหัสและเลือกS 1และS 2หมายเลขลำดับ คุณสามารถเลือกว่าจะเรียงลำดับ 0 หรือดัชนี 1 ดัชนี แต่โปรดระบุในการส่งของคุณ

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

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

หากคำตอบ cop ของคุณไม่ได้แตกภายใน 7 วัน (168 ชั่วโมง) คุณอาจเปิดเผยโซลูชันBของคุณเองซึ่งคำตอบของคุณจะปลอดภัย ตราบใดที่คุณไม่เปิดเผยวิธีแก้ปัญหาของคุณก็อาจถูกโจรปล้นได้แม้ว่าจะผ่านไป 7 วันแล้วก็ตาม หากคำตอบของคุณแตกโปรดระบุสิ่งนี้ในส่วนหัวของคำตอบของคุณพร้อมกับลิงก์ไปยังคำตอบของโจรที่เกี่ยวข้อง

ตำรวจชนะโดยมีการส่ง Uncracked กับที่สั้นที่สุด หากเชื่อมโยงแล้วX ที่เล็กที่สุดจะถูกใช้เป็น tie-breaker หากยังคงถูกผูกไว้การส่งก่อนหน้าจะชนะ

กฎเพิ่มเติม

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

นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณเปลี่ยนแปลงบางสิ่งในคำถามนี้หรือไม่ให้คุณอัปเดตโจร
mbomb007

จะเกิดอะไรขึ้นถ้าตำรวจตั้งชื่อฟังก์ชั่น / ตัวแปรที่มีขนาดใหญ่มากเมื่อเทียบกับรหัสจริงที่สร้างลำดับ มันเป็นไปได้ที่จะสร้างลำดับใด ๆ ในกรณีนี้โดยมีระยะทาง lev น้อยกว่านั้น(0.5*len(A))
hashcode55

@ hashcode55 สองสิ่ง - 1) ที่ไม่น่าจะเป็นผู้สมัครที่ดีสำหรับการชนะเธรดของตำรวจ 2) ถ้ามันมีขนาดมหึมาเช่นนั้นมันก็ให้ระยะทางที่ดีสำหรับโจรที่จะแตกมัน
AdmBorkBork

1
" นี่คือรหัส - กอล์ฟดังนั้นกฎการเล่นกอล์ฟตามปกติทั้งหมดจึงใช้ " นี่หมายความว่ารหัสAจะต้องมีการตีกอล์ฟให้มากที่สุดหรือสามารถเขียนโดยเจตนาด้วยวิธี verbose / อึดอัดใจมากเกินไปที่จะทำให้มันคล้ายกับรหัสBมากขึ้น?
smls

คำตอบ:


10

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

คำตอบนี้ใช้การจัดทำดัชนี 1 รายการ

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

ลองออนไลน์

สำหรับผู้ที่สนใจมีโปรแกรม Brain-Flak 27475 รายการที่มีระยะทาง Levenshtein 4 จากโปรแกรมนี้และ 27707 ที่มีระยะทาง 4 หรือน้อยกว่า ดังนั้นวิธีการแก้ปัญหากำลังดุร้ายจะเป็นไปได้ในคอมพิวเตอร์ระดับผู้บริโภค


มันอาจจะเป็นแค่สั้นและรวดเร็วในการอ่านถ้าคุณมีแทนX = 4 Levenshtein distance of 4
mbomb007

1
@ mbomb007 ส่วนตัวแล้วฉันสับสนเล็กน้อยเมื่อความท้าทายใช้ตัวแปรตัวอักษรจำนวนมากเพื่อยืนหยัดเพื่อสิ่งที่ฉันพยายามหลีกเลี่ยงความสับสน ฉันทำให้มันสั้นลงตอนนี้หวังว่าจะไม่ทำให้เกิดความสับสน
ข้าวสาลีตัวช่วยสร้าง

ยัก หากทุกคนอ่านคำถามพวกเขาควรจะได้รับ Xเป็นตัวแปรเดียวที่พวกเขาต้องรู้
mbomb007

@ mbomb007 แม้ว่าคำถามจะขอนับเป็นไบต์
DLosc


6

7 , 33 ตัวอักษร, 13 ไบต์, X = 10, A000124A000142 , ปลอดภัย

171720514057071616777023671335133

ลองออนไลน์!

ระยะทาง Levenshtein นั้นวัดในรูปของตัวอักษรดังนั้นฉันจึงเขียนโปรแกรมเป็นตัวละครที่มีอยู่ด้านบน (และลองใช้ออนไลน์! รวมถึงภาษาด้วยตัวเองยินดีที่จะเรียกใช้โปรแกรมที่เข้ารหัสใน ASCII) อย่างไรก็ตามโปรแกรมจะถูกเก็บไว้ในดิสก์โดยใช้การเข้ารหัสย่อยของ 7 ซึ่งหมายความว่าตัวโปรแกรมนั้นเป็น hexdump ต่อไปนี้ (ซึ่งมีความยาว 13 ไบต์):

00000000: 3cf4 2982 f1ce 3bfe 13dc b74b 7f         <.)...;....K.

(เนื่องจากระยะทาง Levenshtein ถูกวัดในรูปของตัวละครคุณไม่จำเป็นต้องเพิ่ม / ลบ / เปลี่ยน 10 ไบต์ที่นี่ดังนั้นจึงควรใช้งานกับ ASCII ดั้งเดิมได้ดีที่สุด)

โปรแกรมตามที่เขียนไว้ใช้ A000124 (ตัวเลขสามเหลี่ยม + 1); รอยแตกใด ๆ จะต้องใช้ A000142 (แฟคทอเรียล) ทั้งสองโปรแกรมรับอินพุตจาก stdin (เป็นจำนวนเต็มฐานสิบ) เขียนเอาต์พุตของตนไปยัง stdout และปฏิบัติอินพุต 1 ตามความหมายองค์ประกอบแรกของลำดับ (และอินพุต 2 เป็นองค์ประกอบที่สองเป็นต้น)

หวังว่าค่า X ที่สูงมากจะหยุดยั้งผู้คนในการบังคับใช้โปรแกรมในครั้งนี้ (ซึ่งมักจะมีความเสี่ยงในการเข้าร่วมตำรวจและโจรใน 7)

การแก้ไขปัญหา

177172051772664057074056167770236713351353

ลองออนไลน์!

ความแตกต่างจากต้นฉบับ:

17 172051 405707 1 61677702367133513 3
17 7 172051 77266 405707 405 61677702367133513 5 3

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



4

Perl 6 , 10 ไบต์, X = 1, A000012A001477

แตก!

*[0]o 1***
  • S 1 = A000012 = 1,1,1,1,1,...= ลำดับทั้งหมด 1 (0 จัดทำดัชนี)

  • S 2 = A001477 = 0,1,2,3,4,...= จำนวนเต็มที่ไม่ใช่ค่าลบ (0 จัดทำดัชนี)

ลองออนไลน์!

ยืนยันที่จะทำงานกับPerl 6 รีลีส 2017.01และกับ Perl6 เวอร์ชั่นที่รันบน TIO

( Aสามารถเล่นกอล์ฟต่อไปได้1***- ฉันหวังว่าจะอนุญาตเหมือนเดิม)


3

Perl 6 , 13 ไบต์, X = 1, A161680A000217

ปลอดภัย!

{[+] [,] ^$_}
  • S 1 = A161680 = 0 0 1 3 6 10 15 21...= ศูนย์ตามด้วยตัวเลขสามเหลี่ยม
  • S 2 = A000217 = 0 1 3 6 10 15 21 28 ...= หมายเลขสามเหลี่ยม
  • ศูนย์การจัดทำดัชนี

ลองออนไลน์!

(ยืนยันว่าจะทำงานกับรุ่น Perl 6 ที่ทำงานบน TIO)

วิธีการแก้

{[+] [\,] ^$_}

วิธีการใช้งานเดิม:

{           }  # A lambda.
          $_   # Lambda argument.                     e.g. 4
         ^     # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [,]       # Reduce with comma operator.          e.g. 0, 1, 2, 3
 [+]           # Reduce with addition operator.       e.g. 6

วิธีการแก้ปัญหาทำงาน:

{            } # A lambda.
           $_  # Lambda argument.                     e.g. 4
          ^    # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [\,]      # Triangle reduce with comma operator. e.g. (0), (0,1), (0,1,2), (0,1,2,3)
 [+]           # Reduce with addition operator.       e.g. 10

1 + 2 + 3 + 4 = 10ใช้ประโยชน์จากความจริงที่ว่าผู้ประกอบการที่เป็นตัวเลขเช่นนอกจากการรักษารายการเป็นจำนวนขององค์ประกอบดังนั้นในตัวอย่างรวมเป็น

และใช่การ "ลดด้วยเครื่องหมายจุลภาค" ไม่มีตัวเลือกในแบบดั้งเดิมคือรอบกฎของรหัสกอล์ฟ แต่ฉันชอบที่จะมองว่ามันเป็นอัลกอริทึมที่โง่ซึ่งได้รับการตีกอล์ฟให้มากที่สุด (ช่องว่าง ฯลฯ ) สำหรับ มันคืออะไร... :)


นี่คือการขอร้องให้เป็นสัตว์เดรัจฉานบังคับถ้าฉันมีเวลาหรือความโน้มเอียง (และความรู้ของ perl)
Rohan Jhunjhunwala

สิ่งนี้มีชีวิตรอดมานานพอที่จะถูกระบุว่าปลอดภัย
fəˈnɛtɪk

2

เยลลี่ , 11 ไบต์, X = 5, A005185A116881

ịḣ2S;
1Ç¡ḊḢ

นี่เป็นโปรแกรมเต็มรูปแบบที่รับจำนวนเต็มเป็นอาร์กิวเมนต์บรรทัดคำสั่งและพิมพ์จำนวนเต็ม

ทั้งสองมีการจัดทำดัชนีเป็น OEIS เช่นA005185เป็น 1 ดัชนีและA116881เป็นดัชนี 0

ลองออนไลน์!


2

Javascript, 41 ไบต์, ระยะทาง 3, A061313 , A004526 , แคร็ก

f=x=>{return x>1?x%2?f(x+1)+1:f(x/2)+1:0}

ลองออนไลน์

ใช้การจัดทำดัชนี 1 รายการโซลูชันใช้ดัชนีที่อิง 0

อีกครั้งโซลูชันที่แตกต่าง ...

f=x=>{return x>1?x<2?f(x-1)+1:f(x-2)+1:0}


3
อย่างไรก็ตามคุณไม่ควรใช้tio.run permalinks พวกเขาจะหยุดทำงานในไม่ช้า
เดนนิส

^ ใช้tio.run/nexusแทน
mbomb007

1

Perl 6 , 19 ไบต์, X = 1, A000045A000035

แตก!

{(0,1,*+*...*)[$_]}
  • S 1 = A000045 = 0 1 1 2 3 5 8 13 21 34...= "หมายเลขฟีโบนักชี" ( จัดทำดัชนี 0 )
  • S 2 = A000035 = 0 1 0 1 0 1 0 1 0 1...= "ระยะเวลา 2" ( จัดทำดัชนี 0 )

ลองออนไลน์!

(ยืนยันว่าจะทำงานกับรุ่น Perl 6 ที่ทำงานบน TIO)



1

WolframAlpha, 18 ไบต์, X = 1

แคร็กโดย math_junkie!

(sum1to#of n^1)*2&

บางครั้ง WolframAlpha จะสามารถแสดงฟังก์ชั่นบริสุทธิ์แบบนี้ในรูปแบบการทำงานได้ (บางครั้งมันก็สับสน); แต่สามารถเรียกใช้อย่างสนุกสนานด้วยอินพุตที่กำหนด - ตัวอย่างเช่น(sum1to#of n^1)*2&@5อัตราผลตอบแทน30อัตราผลตอบแทน

S1 = A002378 (หมายเลข pronic)

S2 = A000537 (ผลรวมของครั้งแรกn )

ลำดับทั้งสองเป็นดัชนี 0




1

Javascript, 15704 ไบต์, ระยะทาง 2, A059841และA000004 - แตก

การแก้ปัญหานี้มีความยาวมากดังนั้นคุณสามารถค้นหารหัสเต็มได้ที่สรุปสาระสำคัญ GitHub นี้

คำตอบเดิม (อันนี้) คือ 1 ดัชนี (ฉันรู้ว่ามันยาวเกินไปมันเป็นแค่ความสนุกสนาน)


Cracked นอกจากนี้การเพิ่มรหัสที่ไร้ประโยชน์อย่างแน่นอน! + [] - (! + []) ไม่ได้อยู่ในจิตวิญญาณของกฎ
fəˈnɛtɪk

เพียงคุณรู้คำตอบนี้ทำให้เกิดปัญหาบางอย่างสำหรับ OP ของความท้าทายนี้ เห็นได้ชัดว่ามันทำให้ทั้งหน้าถูกบล็อกเพราะดูเหมือนจาวาสคริปต์แบบร่าง คุณสามารถใส่รหัสในลิงค์ภายนอกได้ไหม (สรุป, วาง, ฯลฯ )
DJMcMayhem

อันที่จริงฉันใส่มันลงในส่วนสำคัญของตัวเอง หากคุณต้องการให้มีรหัสที่อื่นโปรดแก้ไขอีกครั้งหากฉันทำเกินขอบเขตไป
DJMcMayhem

ฉันเดาว่า! + [] - (! + []) ทำเพื่อที่คุณจะไม่สามารถแปลงกลับได้ แต่ขยะอื่น ๆ บางอย่างทำให้มันนานขึ้น รหัสเทียบเท่ามีเพียง 15640 ไบต์
fəˈnɛtɪk


0

Javascript, 30 ไบต์, ระยะทาง 4, A000290 , A000079 , - แตก!

f=x=>{return x?2*x-1+f(x-1):0}

การทำดัชนีแบบ 0

โซลูชันของ @Kritixi Lithos นั้นแตกต่างจากของฉันจริงๆ

f=x=>{return x?f(x-1)+f(x-1):1}

ลองออนไลน์


1
นี่คือx**2และไม่2**x
Kritixi Lithos

ฉันคิดว่ามันคือA000290ไม่ใช่ A000079
betseg

@KritixiLithos มันควรจะเป็นทั้ง ฉันเปลี่ยนลิงค์ลำดับผิดที่ด้านบนเมื่อฉันเปลี่ยนปลายอีกด้าน
fəˈnɛtɪk


0

Javascript (ES6), ระยะทางคือ 1, A000079และA000004 - แตก

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

คำตอบเดิม (อันนี้) เป็น 0 ตอนนี้มันได้แตกแล้วนี่คือฟังก์ชัน B ดั้งเดิม:

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

1
ฉันสามารถรับcodegolf.stackexchange.com/a/109976/64505ของฉันเพื่อให้ทำงานไม่สอดคล้องกันระหว่างสองสภาพแวดล้อมที่แตกต่างกัน
fəˈnɛtɪk

0

Perl 6 , 7 ไบต์, X = 2, A059841A001477

แตก!

+(*%%2)
  • S 1 = A059841 = 1 0 1 0 1 0 1 0...= "* ช่วงเวลา 2: ทำซ้ำ (1,0)" (0 จัดทำดัชนี)
  • S 2 = A001477 = 0 1 2 3 4 5 6 7...= "จำนวนเต็มที่ไม่ใช่ค่าลบ" (0 จัดทำดัชนี)

ลองออนไลน์!

(ยืนยันว่าจะทำงานกับรุ่น Perl 6 ที่ทำงานบน TIO)


1
ฉันทำสิ่งนี้ถูกไหม? < codegolf.stackexchange.com/a/110001/60793 >
Joey Marianer

0

Java 7, Levenshtein ระยะทาง 4, 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;}

0 การจัดทำดัชนี
ลองที่นี่!


@LliwTelracs ทำอย่างนั้นสำหรับ 15 จำนวนเต็มไม่เป็นลบแรกดูคำตอบที่อัปเดตของฉัน
peech

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