ถอดรหัสรหัสแหล่งที่มา [ปล้นด้ายสำหรับความพยายามในการถอดรหัส]


44

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

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

โจรที่มีคะแนนมากที่สุด (ชนะได้สำเร็จ)

ลีดเดอร์บอร์ด

แก้มากเกินไป

20 แก้

15 แก้

10 แก้

7 แก้

5 แก้

4 แก้

3 แก้

2 แก้

1 แก้ปัญหา


1
Perl 5, ขนาด 27, โดย Morot - print'pin '= ~ tr (a-za) (za-z) r

@ WumpusQ.Wumbley เราทุกคนเคยไปที่นั่น ... ;)
Martin Ender

3
ฉันปฏิเสธที่จะเสียเวลาพยายามเอาใจมัน

เมื่อพิจารณาจากทั้งสองคำถามดูเหมือนว่าคำตอบแบบสัญญาณกวน / ไม่มีสัญญาณจะกลับคำตอบ
Mooing Duck

Ruby, 23 โดย MegaTom = p% ++. วิธีการ [80] [1 ..- 1]
ประวัติศาสตร์

คำตอบ:


32

CJam ขนาด 20 โดย Martin Büttner

Hi "petStorm!", mame

ลองออนไลน์

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

Hi                      "           int(17)                     ";
   "petStorm!",         "                    len('petStorm!')   ";
                ma      "     atan2(       ,                 )  ";
                  me    " exp(                                ) ";
                        " exp(atan2(int(17), len('petStorm!'))) ";

แคร็กรหัส

ผลลัพธ์ที่ต้องการ2.956177636986737คือเป็นแบบ Double หรือแบบ Double ตามด้วย Long

การใช้เฉพาะอักขระใน"Stop, Hammer time!"นั้นมีตัวดำเนินการภายในสี่ตัวที่ส่งกลับค่าที่ไม่ใช่จำนวนเต็มคู่:

  • mS, ซึ่งเป็น asin
  • ma, ซึ่งเป็น atan2
  • me, ซึ่งเป็น exp
  • mt, ซึ่งเป็น tan

พวกเขาทั้งหมดมีข้อหนึ่งข้อmดังนั้นเราสามารถใช้ได้อย่างมากที่สุดสามข้อ มีเพียงหนึ่งSเดียวaเท่านั้น

ตัวดำเนินการทั้งหมดเหล่านี้ต้องการอินพุตและmaเป็นอินพุตเดียวเท่านั้นที่ใช้อินพุตสองตัว เรามีสามวิธีในการผลักดัน Longs:

  • "...",ซึ่งเพิ่มความยาวของสตริง (น้อยกว่า 18 อย่างเคร่งครัด)
  • Hซึ่งผลัก 17
  • ...!...ซึ่งผลักดันให้ตรรกะไม่

เราไม่มีวิธีที่จะผลักดันบางสิ่งบางอย่างผิดพลาด...ดังนั้นตัวเลือกสุดท้ายจะกด 0 เสมอ

การส่งออกไม่ได้เริ่มต้นหรือลงท้ายด้วยหรือ17 0เนื่องจากทศนิยม 15 หลักเป็นจำนวนหลักปกติของ Double จึงดูเหมือนว่าผลลัพธ์จะเป็น Double ธรรมดา

หากเป็นเช่นนี้รหัสจะต้องอยู่ในหมวดหมู่ใดหมวดหนึ่งต่อไปนี้:

  • <Long> <mS|me|mt>{1,3}
  • <Long> <mS|me|mt>{x} <Long> <mS|me|mt>{y} ma <mS|me|mt>{z}.
  • ข้อใดข้อหนึ่งข้างต้นโดยมีบางตัวเลือกให้กับ Long ( i) หรือ rounding ( mo) ที่ใช้กับ Double

ในกรณีที่สองx + y + zคือ 1 หรือ 2 และหนึ่งใน Longs คือ 0 หรือ 17

ที่เหลือก็เป็นกำลังดุร้าย หลังจากพยายามสองสามครั้ง

18 , {H \ ma me 2.956177636986737 =} =

กลับมา9ซึ่งหมายความว่า

H 9 ma me

สร้างผลลัพธ์ที่ต้องการ

สิ่งที่เหลืออยู่คือการกำจัดทั้งหมดยกเว้น 9 ตัวอักษรจากสตริง ช่องว่างเป็นเสียงรบกวนและiเป็นเสียงรบกวนบน Longs ดังนั้นจึง"petStorm!"เป็นหนึ่งในตัวเลือกที่เป็นไปได้


1
นั่นมันบ้า - คุณคิดยังไงว่าตัวเลขนั้นเป็นอย่างไร?
Sp3000

1
ฉันค้นหาลอการิทึม (และอื่น ๆ ) ของหมายเลขนั้น แต่ไม่ได้รับผลลัพธ์ใด ๆ ตอนนี้ฉันพบว่าฉันใช้ความแม่นยำสูงเกินไป
jimmy23013

2
@ Sp3000: ฉันได้แก้ไขคำตอบของฉัน
เดนนิส

1
ดีมาก! ฉันควรนำตัวละครออกมาอีกสองตัวจากสตริปที่ฉันเดา ในต้นฉบับของฉันฉันมีช่องว่างอยู่ภายในสตริง แต่mrก่อนที่จะรับความยาว ไม่ว่าคุณจะไม่ได้คิดออกมาเช่นกันในบางจุด ;)
Martin Ender

25

Python 3 ขนาด 12 โดย xnor

()and bciprt

ไม่ทำอะไรเลย (นิพจน์สร้าง tuple ที่ว่างเปล่าซึ่งไม่ได้พิมพ์) งานนี้เกิดจากการประเมินการลัดวงจร


1
ใน Python 3 IDLE เอาต์พุต()นี้
Hosch250

@ hosch250 ตั้งแต่ในโปรแกรม (ไฟล์หลาม) printไม่มีอะไรจะออกมาเป็นไม่มี
matsjoyce

ฉันเห็น. ฉันกำลังวิ่งจากสิ่งบรรทัดคำสั่ง
Hosch250

47
.... "thing" ....
TheDoctor

4
@Imray เนื่องจากการลัดวงจร - Python โหลด tuple และตรวจสอบว่าค่าของ tuple เป็นจริงหรือไม่เนื่องจากว่างเปล่ามันเป็นเท็จ รหัสในการโหลดตัวแปรbciprtจะไม่ถูกดำเนินการดังนั้นจึงไม่สร้าง NameError
Mateon1

20

Python ขนาด 74 โดย xnor

any(print(set is
set)for i in oct(chr is
map))and aeeeeeggiilnnpprrrrrstvw

มันสนุกดี ขอบคุณ FryAmTheEggman, hosch250 และ isaacg สำหรับคำแนะนำ / ช่วยเหลือ


1
งานที่ดี! ทางออกของฉันค่อนข้างคล้ายกัน: list(\nprint(range is range)for aacdeeeeehmppprrrrssvwy in\noct(int is int)).
xnor

@xnor LOL นั้นชื่อตัวแปร มันแย่ไหมที่ฉันจะไม่เคยคิดเรื่องนั้น? : P
FryAmTheEggman

2
@FryAmTheEggman ผมคิดว่าทุกคนคาดหวังว่าผมใช้เคล็ดลับของฉันจากตำรวจเป็นครั้งแรก
xnor

@FryAmTheEggman ไม่ต้องกังวลคุณไม่ใช่คนเดียว: P
Sp3000

13

Python 2 ขนาด 50 โดย Geobits

print 2**2**2*2**2-22-2**2**2**2/2**2**2**2**2/2/2

เอาท์พุท 42


1
มีจุด :) สำหรับการอ้างอิงดั้งเดิมคือprint 2**2**2**2/2**2**2/2**2**2/2-2**2**2*2**2-22แต่ไม่น่าแปลกใจเลยที่มีมากกว่าหนึ่งตัวเลือกที่ถูกต้อง
Geobits

13

GolfScript ขนาด 13 โดย Peter Taylor

,22,{.4&?+.}/

ทดสอบที่นี่

อีกอันหนึ่งที่ฉันแตกด้วยความช่วยเหลืออย่างมากจาก Sp3000 ขอบคุณ!

ดังนั้นนี่คือวิธีที่เราไปถึงที่นั่น Sp3000 สังเกตเห็นการวิ่งของตัวเลขที่ต่อเนื่องกันในผลลัพธ์:

1,2,3,4,[2608852181],4582,4583,4584,4585,4586,[253225388392299],
142924,142925,142926,142927,142928,[302928],497409,497409

จากการที่เราทำการสันนิษฐานว่านี่เป็นลำดับที่เพิ่มขึ้นซึ่งอนุญาตให้มีการแบ่งตัวเลขที่เหลืออยู่เพียงหนึ่งครั้งเท่านั้น:

1,2,3,4,260,885,2181,4582,4583,4584,4585,4586,25322,53883,92299,
142924,142925,142926,142927,142928,302928,497409,497409

นั่นคือ 23 ตัวเลขซึ่งเป็นตัวบ่งชี้ที่แข็งแกร่งสำหรับการทำซ้ำบล็อก 22 ครั้งรวมถึงการสิ้นสุดบล็อกด้วย.(องค์ประกอบด้านบนสแต็กที่ซ้ำกัน) เช่นผลลัพธ์ก่อนหน้านี้ถูกทิ้งไว้ข้างหลังบนสแต็ก กองซ้อนสองครั้ง 22,{____.}/ที่

ตอนนี้ดูที่ช่องว่างสิ่งเหล่านั้นกลายเป็นพลังอันดับ 4 (ซึ่งก็ดีเพราะเรามี4และ?) แม่นยำยิ่งกว่าพวกมันคือกำลังสี่ของดัชนีของจำนวนปัจจุบัน ต่อไปเราจะดูว่าดัชนีใดสร้างช่องว่าง:

4,5,6,7, 12,13,14,15, 20,21,..?

ในไบนารีนั้นคือ

00100
00101
00110
00111
01100
01101
01110
01111
10100
10101

พวกเขาทุกคนมีชุดบิตที่สามซึ่งหมายความว่าดัชนีน่าจะอยู่ในระดับบิตและ - กับ4(ซึ่งดีอีกครั้งเพราะเราสามารถสร้างอีก4ด้วย.และมี&) มันใช้งานได้ดีโดยเฉพาะอย่างยิ่งเพราะการดำเนินการนี้จะส่งผลใน0หรือหรือ4ถ้าเราใช้มันเป็นเลขชี้กำลังเราจะได้พลังงานหนึ่ง1หรือสี่ซึ่งเป็นสิ่งที่เราต้องการ ดังนั้นเรามารวมกัน:

22,{.4&?+.}/

นี่คือสิ่งที่บล็อกทำ:

.      # Duplicate current index
 4     # Push a 4
  &    # Bitwise and
   ?   # Raise index to resulting power
    +  # Add to previous result
     . # Duplicate for use in next iteration

ตอนนี้มีสองปัญหาซ้าย: เรามีจรจัดเราไม่ได้ใช้เลยและซ้ำแรกเป็นกรณีพิเศษในการที่มีค่าจากการย้ำก่อนหน้านี้ที่เราสามารถเพิ่มสิ่งที่เมื่อพบไม่มี, +เราพบว่าต้องขอบคุณความคิดเห็นที่ไม่เกี่ยวข้องโดยผู้ใช้ 23013 ที่กล่าวถึงอย่างไม่ตั้งใจว่า GolfScript เริ่มต้นด้วยสตริงว่างบนสแต็ก (ถ้าไม่มีอะไรใน STDIN) ดังนั้นเราสามารถใช้,สิทธิอื่น ๆในตอนเริ่มต้นเพื่อเปลี่ยนสตริงนั้นให้เป็น a 0ซึ่งเป็นเพียงสิ่งที่เราต้องการเป็นจุดเริ่มต้นของการทำซ้ำ


จับได้เห็นชัดตรงเผง. สิ่งนี้ได้รับแรงบันดาลใจมาจากลำดับใน OEIS ซึ่งตอนนี้ฉันหาไม่เจอ
Peter Taylor

3
และนี่คือสาเหตุที่การมีเธรดแยกต่างหากสำหรับโจรเป็นความคิดที่ดี งานที่ดี!
Dennis


11

ทับทิมขนาด 17 โดย Doorknob

p 2,%r~n~i=~'*tN'

มันสนุกมาก ขอบคุณ Sp3000 ที่ช่วยเหลือฉันด้วยสิ่งนี้! และฉันเรียนรู้ว่า%r?...?ตัวอักษรสามารถมีตัวคั่นได้ :)


10
อุปกรณ์ประกอบฉากสู่ Doorknob ที่ทำให้เข้าใจผิดอย่างบ้าคลั่งprintเพียงเพื่อแยกมันออกเป็นpสำหรับการพิมพ์%rสำหรับ regexes และiสำหรับการจับคู่ regex ที่ไม่คำนึงถึงขนาดตัวพิมพ์
Sp3000

11

PHP, ขนาด 49, โดย bwoebi

print@substr(new exception,+~$$a+=++$$m+$$i+2+n);

นั่นคืออย่างจิต

มันได้ไป

print@substr(new exception,);

ค่อนข้างเร็ว ณ จุดนี้ฉันต้องการบางสิ่งบางอย่างที่ให้-6หลังจากเครื่องหมายจุลภาคที่$++$++$++$+=$~main$2เหลือ

จับหลักคือว่า$a, $mและ$iทั้งหมดNULLดังนั้นการใช้พวกเขาโดยทางอ้อมในตัวแปรตัวแปร , หมายความว่าพวกเขาชี้ไปที่ตัวแปรเดียวกัน อย่างไรก็ตาม PHP ดูเหมือนจะทำสิ่งแปลก ๆ เกี่ยวกับการแก้ไขตัวแปรตัวแปร ด้วยตัวแปรปกติคุณสามารถทำสิ่งต่าง ๆ เช่น

echo $a+$a=2;

สิ่งที่พิมพ์4(ที่2ได้รับมอบหมาย$aและจากนั้นเพิ่มให้กับตัวเอง) แต่ถ้าฉันทำเช่นเดียวกันกับตัวแปรตัวแปร:

echo $$a+$$a=2;

ฉันได้รับ2เพราะตอนนี้อันแรก$$aจะถูกประเมินก่อนมอบหมาย

ในที่สุดฉันก็สามารถบังคับบางคำสั่งได้โดยใส่ค่าที่เพิ่มขึ้นใน RHS +=ที่ต้องได้รับการประเมินก่อนการมอบหมายเพิ่มเติมนั้น ด้วยวิธีการที่ฉันได้5ซึ่งฉันสามารถเพียงแค่เติมเต็มบิต ยัง ... มีบางสิ่งลึกลับเกิดขึ้นและฉันก็ไม่รู้ว่าทำไมครึ่งสิ่งที่ฉันพยายามทำและไม่ได้ผล


สำหรับการอ้างอิงต้นฉบับของฉัน:print@substr(new exception,~$$mn+=2+$$a+++$$i++);
bwoebi

Btw ฉันหวังว่าสัญญาณดอลลาร์ทั้งหมดและความจริงที่ว่าตัวอักษรทั้งหมดที่mainอยู่ในสายทำให้คุณเข้าใจผิดมาก นอกจากนี้วิธีการที่ผิดปกติ แต่สำหรับการสกัด{main}ผมคิดว่า ;-)
bwoebi

@bwoebi mainไม่ได้จริงๆเข้าใจผิดฉันหลังจากจำexception, และnew substrฉันคิดว่าพวกเขาจะเป็นชื่อตัวแปร ฉันใช้เวลาเล็กน้อยที่จะเกิดขึ้นกับการใช้ตัวแปรตัวแปรและกว่าที่ฉันใช้เวลาส่วนใหญ่ในการหาลำดับของการดำเนินการที่จริง ๆ แล้วจะให้ผล5ที่ฉันสามารถเติมเต็มได้โดยไม่ต้องใช้วงเล็บชุดอื่น
Martin Ender

สำหรับครั้งต่อไปถ้ามีเงินมากกว่าตัวละครก็มักจะเป็นตัวแปร (ในกรณีนี้ฉันใช้วาร์วาร์ในทางที่ผิดเพื่อบังคับให้ประเมินผลจากซ้ายไปขวา) คุณใช้เวลานานแค่ไหนในการตรวจสอบข้อยกเว้นใหม่ของ substr นอกจากนี้โดยวิธีการฉันมีความรู้ลึกของเครื่องยนต์ Zend ดังนั้นฉันสามารถอธิบายให้ตัวเองอย่างสมบูรณ์แบบว่าทำไมสิ่งต่าง ๆ ได้รับการประเมินตามลำดับและเป็นสิ่งที่ดีสำหรับความท้าทายเหล่านี้ ;-) หากมีบางสิ่งที่คุณไม่เข้าใจ จะอธิบายให้คุณฟังอย่างมีความสุข
bwoebi

@bwoebi มาคุยกันในวันพรุ่งนี้และเราสามารถพูดคุยเกี่ยวกับเรื่องนี้ แต่ฉันใช้เวลานานพอในวันนี้ ;) สำหรับคำถามแรกของคุณexceptionเห็นได้ชัดซึ่งทำให้ตัวละครเร่ร่อนsubstrและnewโกหก มันเป็นสิ่งแรกที่ฉันเห็นเมื่อเริ่มทำงานกับมัน
Martin Ender

9

ทับทิมขนาด 38 โดย Doorknob

[$><<(!$pece60).to_s[rand($win)].succ]

ฉันค่อนข้างแน่ใจว่านี่ไม่มีที่ไหนเลยใกล้กับต้นฉบับ มันrandค่อนข้างแน่นอนแม้จะใช้

นี่คือวิธีการนี้ทำงาน $><<เป็นเพียงการส่งออก $pece60และ$winเป็นตัวแปรทั่วโลกที่ไม่ได้กำหนดซึ่งเป็นเพียงแค่nil(และพวกเขาอนุญาตให้ฉันกำจัดตัวละครที่ไม่เกี่ยวข้องออกไป) !$pece60ทำให้trueและให้สตริงto_s"true"

สำหรับทุกวัยผมพยายามที่ได้รับ2หรือ-2การเข้าถึงที่uอยู่ในนั้น แต่แล้วฉันรู้ฉันก็สามารถใช้เวลาtและโทร.succ(essor) uที่มันจะทำให้

randด้วยnilพารามิเตอร์ที่ส่งกลับลอยแบบสุ่มในช่วงเวลา [0,1) เมื่อใช้การลอยเพื่อทำดัชนีในสตริงพวกมันจะถูกปัดเศษเป็นจำนวนเต็มดังนั้นสิ่งนี้จะส่งกลับอักขระแรกเสมอ

ในที่สุดฉันมีคู่สำรอง[]ดังนั้นฉันจึงห่อทุกอย่างไว้ในนั้นเพราะขอบคุณทุกอย่างที่แสดงออกในรูบี

ขอบคุณ Sp3000 สำหรับการแสดงความคิดเห็นในการแชท


8
ทับทิมเป็นภาษาที่ดูน่ากลัว
feersum

8

C, 51 โดย es1024

c=0xf.cp9,hhtaglfor;main() {;; printf("%d",(++c));}

หลังจาก 20 ปีของการเขียนโปรแกรม C วันนี้ฉันเรียนรู้เกี่ยวกับค่าคงที่เลขฐานสิบหก


8

Ruby, 45 (มิชชั่น)

%q[zyfnhvjkwudebgmaclprs x].to_i(36)/51074892

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

คำอธิบาย:

  • %q[]เป็นวิธีทางเลือกสำหรับการสร้างสตริง อาจใช้วงเล็บและวงเล็บปีกกา
  • String#to_i ใน Ruby ยอมรับตัวเลขในฐานใด ๆ ตั้งแต่ 2 ถึง 36 มันจะไม่สนใจอักขระตัวแรกในสตริงที่ไม่ได้เป็นส่วนหนึ่งของตัวเลขดังนั้นอักขระพิเศษใด ๆ ที่สามารถ "โยนทิ้ง" หลังช่องว่าง

และนี่คือรหัสที่ฉันใช้ในการถอดรหัส:

require 'set'

# return true if the string is made up of unique characters
def uniq(s)
  a = s.each_char.to_a
  return a == a.uniq
end

def uniq_while_same(a,b)
  s = Set.new
  a.each_char.zip(b.each_char).each do |ai, bi|
    return true if ai != bi
    return false if s.include? ai
    s << ai
  end
  return true
end

def ungolf(answer)
  # For each base that even makes sense
  [            36, 35, 34,     32, 31, 30,
   29, 28, 27, 26, 25, 24, 23,     21, 20,
   19, 18, 17, 16, 15, 14, 13, 12,     10].each do |base|
    # Ignore bases where it is not possible to create a unique-string number greater than answer
    next if answer > base ** base
    # Pick digits for the denominator that are not duplicates of the digits in base
    denominator_digits = ('1234567890'.each_char.to_a - base.to_s.each_char.to_a)
    # For each permutation of those digits for the denominator
    (1..10).each do |denominator_length|
      denominator_digits.permutation(denominator_length) do |denominator_s|
        # Maybe the denominator is in octal
        denominator_base = 10
        if denominator_s[0] == '0'
          next if denominator_s.include?('8') || denominator_s.include?('9')
          denominator_base = 8
        end
        denominator_s = denominator_s.join
        denominator = denominator_s.to_i denominator_base
        print "#{"\b"*64}(%q[#{(answer * denominator).to_s(base).ljust(36)}].to_i #{base})/#{denominator_s.ljust(10)}" if rand < 0.01
        # Ignore denominators that are definitely impossible to have answers for
        next unless uniq_while_same "qtoi#{base}#{denominator_s}#{(answer * denominator).to_s(base)}",
                                    "qtoi#{base}#{denominator_s}#{((answer + 1) * denominator).to_s(base)}"

        # For each numerator that gives answer when divided by the denominator
        (answer * denominator...(answer + 1) * denominator).each do |numerator|
          print "#{"\b"*64}%q[#{numerator.to_s(base).ljust(36)}].to_i(#{base})/#{denominator_s.ljust(10)}" if rand < 0.01
          # Remove any that are still not unique
          s = "#{numerator.to_s(base)}#{base}#{denominator_s}qtoi"
          next unless uniq s
          # Done. Compute which characters need to be thrown away to fill the remaining space
          remains = ('0123456789abcdefghijklmnopqrstuvwxyz'.each_char.to_a - s.each_char.to_a).join
          print "#{"\b"*64}#{" "*64}#{"\b"*64}"
          return "%q[#{numerator.to_s(base)} #{remains}].to_i(#{base})/#{denominator_s}"
        end
      end
    end
  end
  print "#{"\b"*64}"
  puts "\nnone"
  return nil
end


print ungolf 9410663329978946297999932

วิธีฝังปัญหา NP ไว้ในปริศนา ฉันถูกเนิร์ดอย่างถี่ถ้วน เยี่ยมมาก!


ฉันเพิ่มความคิดเห็นในคำตอบเดิมสำหรับคุณ
FireFly

นี่เป็นสิ่งที่ยอดเยี่ยม (และใกล้กับคำตอบที่ตั้งใจไว้) แต่ในทางเทคนิคไม่ถูกต้องเพราะไม่มีเอาต์พุต
ฮิสโทแกต

* facepalm ฉันยังสนุกอยู่
charredUtensil

2
@charredUtensil หากคุณไม่คิดที่จะเรียกใช้สคริปต์ของคุณอีกต่อไปฉันคิดว่าการพิมพ์กำลังจะย้ายpไปยังก่อนนิพจน์ สมมุติว่าตัวละครที่เหลือสามารถใช้ในการสร้างค่าคงที่ตามที่คุณทำ
FireFly

ฉันไม่จำเป็นต้องเรียกใช้อีกครั้ง ตัวละครไม่กี่สุดท้ายของสตริงสามารถจัดใหม่โดยไม่มีการเปลี่ยนแปลงผล - p %q[zyfnhvjkwudebgmaclrsx].to_i(36)/51074892ฉันรู้ว่าฉันยากจนความพยายามของฉันที่เกิดขึ้นจริงแตกแม้ว่า :)
charredUtensil

7

Python [any] ขนาด shell 44 โดย Caridorc

__name__[3]  or (enfin_____[42], manager[1])

ฉันแน่ใจว่าควรจะมีมากกว่านี้ แต่เนื่องจาก__name__เท่ากับ__main__ตัวละครตัวที่สี่ 'a' ถูกเลือกและส่วนที่เหลือของบรรทัดจะไม่ถูกประเมิน


เพียงเพื่อการอ้างอิงโปรแกรมต้นฉบับคือ[__name__ for ___name__ in range(1,4)][2][3]
Caridorc


7

CJam ขนาด 13 โดยผู้ใช้ 23013

G,Cf#If/sE*K%

ทดสอบที่นี่

แก้ไขได้ด้วยมือเช่น:

ครั้งแรกพื้นหลังบางส่วนสำหรับผู้ที่ไม่ใช่ CJammers:

  • CEGIKเป็นตัวแปรซึ่งมีก่อนที่จะเริ่มต้นใช้12, 14, 16, 18, 20ตามลำดับ
  • s แปลงองค์ประกอบสแต็คด้านบนเป็นสตริง
  • สตริงเป็นเทคนิคของอาร์เรย์อักขระ
  • fวิเศษมาก สำหรับจุดประสงค์ของคำตอบนี้เวอร์ชันที่ง่ายที่สุดคืออาร์เรย์ลำดับaค่าอื่น ๆbและโอเปอเรเตอร์gบางส่วนลำดับการabfgแม็พg(_,b)ลงบนa(โดยที่แต่ละองค์ประกอบของaเข้าไปใน_สล็อต)
  • / คือการหารและการแยกอาร์เรย์ (เหนือสิ่งอื่นใด)
  • * เป็นการคูณและการทำซ้ำอาร์เรย์ (เหนือสิ่งอื่นใด)
  • %เป็นโมดูโลและดำเนินการบางอย่างแปลก ๆ ซึ่งในรูปแบบad%สำหรับอาร์เรย์aและจำนวนเต็มdจะใช้เวลาทุกdองค์ประกอบของ TH a(เช่นหั่นงูใหญ่มีความกว้างขั้นตอนd)
  • # เป็นการยกกำลัง (เหนือสิ่งอื่นใด)
  • ,เปลี่ยนตัวเลขเป็นช่วง (จาก0ถึงn-1) และส่งคืนความยาวของอาร์เรย์

โอเคนั่นพ้นทาง ...

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

ก่อนอื่นฉันคิดว่าfs ใช้กับ#และ%, แต่นั่นหมายความว่าเราต้องการตัวเลขประมาณ 90 เพื่อให้ได้จำนวนที่ถูกต้องของตัวเลขในที่สุด และสิ่งนี้ไม่ได้อธิบายว่าจะทำอย่างไรกับsและเนื่องจากคำตอบนั้นดูช่างกอล์ฟฉันจึงสงสัยว่าผู้ใช้ 23013 เพิ่งต่อท้ายsว่าไม่มีประสิทธิภาพในการทิ้งคน

ดังนั้นผมจึงคิดว่าบางทีเขาอาจจะไม่ได้แม้กระทั่งการรักษาตัวเลขขนาดเล็กที่มี%แต่เขาสร้างอาร์เรย์ของจำนวนมากที่เชื่อมแทนสายของพวกเขาด้วยแต่แล้วเพียงหยิบบางชิ้นที่แปลกออกมาจากมันด้วยs %ดังนั้นฉันจึงเล่นกับกรอบต่อไปนี้:

__*,_f#_f/s_%

(คุณไม่สามารถทำได้_f/ก่อนเพราะจะให้ผลเป็นศูนย์อย่างน้อย 12 องค์ประกอบแรก)

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

เมื่อถึงจุดหนึ่งมันก็เกิดขึ้นกับฉันว่าเราไม่ต้องการช่วงที่มีขนาดใหญ่ (เช่นผลคูณของตัวเลขสองตัว) ถ้าเราใช้*เพื่อทำซ้ำสตริงผลลัพธ์ เนื่องจากความไม่ตรงกันของพารามิเตอร์ของ*และ%สิ่งนี้จะไม่มีผลซ้ำในผลลัพธ์:

_,_f#_f/s_*_%

ผลลัพธ์นี้มีความยาวใกล้เคียงกับสิ่งที่ฉันค้นหา ฉันจะลองจริง ๆ ทั้ง 240 คน แต่ค่อนข้างเร็ว (ครั้งที่สามหรือครั้งที่สี่) ฉันก็สะดุด

E,Cf#If/sG*K%

ซึ่งให้ผลผลิต

03081942753650251594592190492275006661328850322159030034930530649722385533653290754678977

และฉันคิดว่าการจับคู่ของตัวเลขหกตัวแรกนั้นไม่ใช่เรื่องบังเอิญ ดังนั้นคำถามคือวิธีการจัดเรียงใหม่โดยไม่ทำให้การคำนวณจริง:

  • ฉันไม่สามารถเปลี่ยนแปลงได้Kเพราะจะเลือกตัวเลขที่แตกต่างกันโดยสิ้นเชิง
  • ฉันไม่สามารถเปลี่ยนCหรือIเพราะจะเปลี่ยนตัวเลขที่เป็นผลมาจากการดำเนินการบนแผนที่ทั้งสอง
  • หากฉันเปลี่ยนGที่จะเปลี่ยนจำนวนการทำซ้ำเท่านั้นซึ่งจะไม่ทำอะไรเลยนอกจากเปลี่ยนความยาวของผลลัพธ์ (สิ่งไหนดี.)
  • ถ้าฉันเปลี่ยนEที่จะเปลี่ยนช่วงของอาร์เรย์ แต่ช่วงจะยังคงเริ่มต้นด้วย[0 1 2 3 ...]ดังนั้นมันจะไม่ส่งผลกระทบต่อการคำนวณ มันจะส่งผลกระทบต่อความยาวของสตริงฐานที่ส่งคืนโดยsซึ่งก็หมายความว่าK%จะเลือกตัวเลขที่แตกต่างกันตามการทำซ้ำเพิ่มเติม

ดังนั้นฉันแค่ลองเปลี่ยนEและGและ voila:

030819828850379075460427536222159187897761502517030034671154875945928930530907551421904962649729

โดยสรุปนี่คือสิ่งที่รหัสทำ:

G,            "Push [0 1 2 3 ... 13 14 15].";
  Cf#         "Raise each element to the 12th power.";
     If/      "Divide each element by 18.";
        s     "Concatenate all numbers into a string.";
         E*   "Repeat 14 times.";
           K% "Pick every 20th digit.";


6

Pyth ขนาด 11 โดย isaacg

:\\w$ ",d,N

นั่นคือข้อผิดพลาดบางอย่างหมายถึงมีการละเมิด สิ่งนี้รวบรวมไปที่:

Pprint("\n",at_slice("\",input(), ",d,N))

ข้อผิดพลาดที่เกี่ยวข้องคือการ\\รวบรวม"\"แทน"\\"ซึ่งจะช่วยให้คุณรวบรวม Pyth เป็นสตริง


ควรPprintจะเป็นprintหรืออย่างน้อยpprint?
FireFly

@FireFly นั่นคือสิ่งที่เอาต์พุต debug ระบุไว้ บางทีล่าม Pyth อาจกำหนด Pprint ของตัวเอง?
Martin Ender

โอเคไม่เป็นไรแล้ว
FireFly

6

Python ขนาด 69 โดย Sp3000

print(sum(list(map(ord,str((dict(((str(dict()),list()),)),str()))))))

นั่นเป็นเรื่องยาก ...


1
ดี! สำหรับการอ้างอิงต้นฉบับนั้นมีprint(sum(map(ord,str((dict(list(((str(),str(dict())),))),list())))))อยู่จริง แต่แน่นอนว่ามีการเรียงสับเปลี่ยนคำหลักที่แตกต่างกันจำนวนมากจะใช้งานได้
Sp3000

2
นั่นเป็นระดับ LISP ของ parens ที่นั่น!
xnor

6

Python 3, 37 ไบต์, โดย Sp3000

print(sum(b"a".zfill(len(str(...)))))

ส่วนที่ยากที่สุดที่น่าอายคือการหาวิธีแปลงสตริงเป็นไบต์ ฉันต้องนอนบนมันและในตอนกลางคืนก็รู้ว่า 'ดือมันเป็นตัวอักษรที่แท้จริง!'


Ahaha ทำได้ดีมากฉันคิดว่า Ellipsis อาจจะเดินทางคน แต่ฉันเดาไม่ได้
Sp3000

ฉันเห็นจุดไข่ปลาและ zfill แต่ไม่รู้เกี่ยวกับวัตถุไบต์ สิ่งเหล่านั้นอาจมีประโยชน์ในการเล่นกอล์ฟอาร์เรย์จำนวนเต็ม!
feersum

เยี่ยมมาก! ฉันเพิ่งเห็นงานพิมพ์และ. zfill และฉันรู้ว่าผลรวมอาจเป็นส่วนหนึ่งของมัน แต่ฉันแก้ปัญหาไม่ได้ มี +1
Hosch250

6

PHP, 53, โดย PleaseStand

แคร็กมันในที่สุด:

for($d=57,$o=35;$o+$d<999;)$o+=printf("$d%o",$d+=$o);

วิธีแก้ปัญหาค่อนข้างเร็วเมื่อฉันสังเกตว่าลำดับประกอบด้วยตัวเลขทศนิยมและเลขฐานแปดที่สลับกัน:

Dec: 57...92...132...177...228...285...348...417...492....573....661....756....858....
     571349220413226117734422843528553434864141775449210755731225661136475615328581707
Oct: ..134..204...261...344...435...534...641...754...1075...1225...1364...1532...1707
==Dec:  92  132   177   228   285   348   417   492    573    661    756    858    967

นอกจากนี้ช่วงเวลาระหว่างชุดตัวเลขแต่ละชุดจะเพิ่มขึ้นในอัตราเท่ากับค่าที่ส่งคืนโดยprintf()(เช่นจำนวนอักขระที่เขียน)


3
ว้าวนักสืบทำงานได้ดี!
Sp3000

6

Python 2 ขนาด 132 โดย Vi

exec('from string import printable as e\nprint "cqance"\x2Ereplace("q",e[len("fgiillmmooprrsstt")])or ",,,\016:::S[]____tuuvyy" ""')

ขอบคุณสำหรับเครื่องหมายแบ็กสแลชและเครื่องหมายคำพูด :)


แก้ไข: รุ่น 96 ถ่านที่อัปเดตแล้ว:

exec "try:exec'from __future__ import braces\\nt(12)'\nexcept SyntaxError as q:print(q[0][6:])"

สิ่งนี้นำมาจากโซลูชันของ Alex ทั้งหมดในhttps://codegolf.stackexchange.com/a/41451/32353


เฮ้ สงสัยว่าคำตอบที่ได้รับคือ ...
FireFly

นี่ไม่ใช่ทางออกที่ตั้งใจไว้ วิธีการแก้ปัญหาเดิมไม่ได้มีสิ่งที่ "โยนออกไป" ชอบหรือfgiillmmooprrsstt ,,,\016:::S[]____tuuvyy
วิ

exec? รหัสของฉันจะสั้นกว่านี้ ... ฉันเลียนแบบด้วยcompile+ evalเพราะฉันลืมเกี่ยวกับexec...
Vi

ใช้เวอร์ชันที่สั้นกว่า พยายามคิดกลอุบายดั้งเดิม
วิ

5

CJam ขนาด 15 โดย Ypnypn

98,{7%}%{6+}%:+

จากตัวละครที่ให้มาฉันเดาว่ามันจะต้องเป็นหนึ่งในสามของรูปแบบต่อไปนี้:

__,{_%}%{_+}%:+
_,{_%}%{__+}%:+
__,{_+}%{_%}%:+

ซึ่งสร้างช่วงสองหลักจากนั้นแมปการเพิ่มและโมดูโลการดำเนินการ (ตามลำดับ) ลงบนช่วงก่อนที่จะสรุป ดังนั้นฉันเพิ่งเริ่มด้วยอันแรกและลองเรียงสับเปลี่ยนอย่างเป็นระบบ6789ในช่องว่าง


บ้าฉันเพิ่งแก้ไขได้ด้วย: /
เครื่องมือเพิ่มประสิทธิภาพ


5

Python 2 ขนาด 61 โดย FryAmTheEggman

print(dir('~s]l.c:st_''-p_tp.l]-~.:o:Te[_u[.i_')[10][2:][:3])

ฉันจะแปลกใจมากถ้าสิ่งนี้ตรงกับต้นฉบับ


มันไม่ได้ แต่ขอแสดงความยินดีต่อไป! รหัสของฉันคือ:print''.__doc__[::2][::3].split()[1].split('.')[0][:-~-~True]
FryAmTheEggman

ในการเข้าใจย้อนหลังฉันไม่ควรรวมคำพูด ... ;)
FryAmTheEggman

@FryAmTheEggman โอ้ว้าว - เป็นโปรแกรมที่ดีมาก! ฉันมั่นใจว่าคุณเคยชินdir()กับการหา 'รับ' อย่างน้อย และใช่มันคงจะยากมากหากไม่มีคำพูด
grc

5

Python 3, Sp3000, ขนาด 44

print(~(~(()<((),))<<(()<((),))))<<((()<()))

Python 3 ช่วยฉันมาที่นี่เพราะฉันสามารถทำให้เกิดข้อผิดพลาด (ขยับไปทางซ้ายNoneโดยบางอย่าง) หลังจากพิมพ์คำตอบ


อืม ... ดูเหมือนว่าข้าจะไร้สาระกับการล้อเลียนของข้า มีมาprint(~(~(()<())<<((()<((),))<<(()<((),)))))แต่เดิม
Sp3000

5

PHP, ขนาด 52, โดย kenorb

_:@print_r(chr(@++$i+pow(3<<5,1)));if($i<2*4)goto _;

(พระเจ้านานแค่ไหนที่ฉันต้องใช้เวลาคิดว่าจะทำอย่างไรกับ_rคำต่อท้ายที่เหลือจนกว่าฉันจะสังเกตเห็นว่ามันไม่ได้printแต่print_r... )


และผมไม่ทราบว่าวิธีการที่คุณคิดออก :) _:print_r(chr(3*pow(2,5)+@++$i));if(@$i<4<<1)goto _;เดิม:
kenorb

3
@kenorb a) คุณต้องพิมพ์บางอย่างดังนั้นจึงechoไม่สามารถทำได้ printยังคง; b) คุณต้องการลูปบางส่วน แต่สำหรับforลูปนั้นมีอัฒภาคไม่เพียงพอและก็มีโคลอน ... ดังนั้นอาจมีป้ายกำกับร่วมกับ goto; c) ถ้าต้องการยกเลิก goto-loop มีตอนนี้X:print($Y);if($Y)goto X;(X และ Y เป็นตัวยึด); d) มี++แต่ไม่มี=อาจมี++$Zตั้งแต่ 1 ถึง 8; e) รับจดหมายจากจำนวนเต็มเราต้องการchr()(ปกติ) - มันอยู่ที่นั่น; f) ตอนนี้ฉันแค่ต้องการหาตัวเลข 96 และ 8 สำหรับ chr และ if จากนั้นกรอกตัวยึดและvolià
bwoebi

5

PHP, ขนาด 54, โดย Steve Robbins

echo(21<<($$$$$$${$aaaabbbbbbehi==$l&$w^2}^1==1));;;;

ไม่ใช่วิธีดั้งเดิมฉันคิดว่า


2
ฮ่าฮ่าน่ารักมาก ฉันเริ่มต้นด้วยการตกปลาออกไปechoและwhileจากนั้น แต่ก็ไม่สามารถใส่ใจที่จะหาวงที่สร้าง 42
มาร์ตินเอนเดอร์

มีwhileในต้นฉบับของฉัน
Steve Robbins

5

C, es1024, ความยาว 70

e='C',f;main(g){Chorkil:f=printf("40%.d",e+e-  -g);}hAx;*hotpoCkats();

ส่วนที่ยากที่สุดก็คือการติดตามตัวละครที่ไม่จำเป็นทั้งหมด ... อย่างจริงจัง ... ฉันต้องทำมันซ้ำประมาณ 10 ครั้ง สิ่งเดียวที่ทำให้ฉันกังวลคือ.แต่อย่างใดฉันติดอยู่ตรงกลางของprintfสตริงรูปแบบและมันก็มองไม่เห็น!



5

Haskell ขนาด 34 โดย Petr Pudlák

main=print(0xb2f3d5^0x7f1f27::Int)

โปรดทราบว่าโปรแกรมนี้จะต้องทำงานบนเครื่อง 32- บิต หากคุณต้องการตรวจสอบว่านี่เป็นโปรแกรมที่ถูกต้องและคุณมีเครื่อง 64- บิตคุณสามารถใช้สิ่งนี้แทน:

import Data.Int
main=print(0xb2f3d5^0x7f1f27::Int32)

มันเป็นเรื่องง่ายสวยที่จะคาดเดา "กรอบ" main=print(0x<hex digits>^0x<hex digits>::Int)ของโปรแกรม ความมหัศจรรย์ทั้งหมดอยู่ในการค้นหาวิธีที่ถูกต้องในการแบ่งและเรียงลำดับตัวเลข ฉันไม่ได้ฉลาดมากที่นี่เพียงค้นหาสัตว์เดรัจฉานบังคับแม้ว่าฉันจะระมัดระวังในการละเมิดความจริงที่ว่าตัวเลขบางส่วนถูกทำซ้ำอาจมีจำนวนประมาณจำนวนหลักในฐานและเลขชี้กำลังและ ตัวเลขสุดท้ายของฐานแทบไม่แน่นอน รหัสการค้นหาที่สมบูรณ์มีอยู่ด้านล่าง มันใช้แพคเกจmultiset-comb การค้นหาเต็มใช้เวลาประมาณ 10:33 ในเครื่องของฉัน (และสร้างคำตอบที่ถูกต้องเพียงข้อเดียว)

{-# LANGUAGE NoMonomorphismRestriction #-}
import Control.Monad
import Data.Int
import Data.List (inits, tails, group)
import Numeric
import Math.Combinatorics.Multiset

main = print (searchFor (-1121766947))

searchFor n = do
    nl <- [6,5,7,4,8,3,9,2,10,1,11]
    (l_, r_)  <- chooseSubbag nl digits
    l <- perms l_
    guard (last l /= '2')
    r <- perms r_
    guard ((fromString l :: Int32) ^ (fromString r :: Integer) == n)
    return (l, r)

chooseSubbag n = chooseSubbag' n . group
chooseSubbag' n xss = go (drop (n-1) (concat xss)) n xss where
    go _  n xss | n < 0 = []
    go _  0 xss = [([],concat xss)]
    go [] n xss = []
    go m  n (xs:xss) = do
        (kx, tx) <- zip (tails xs) (inits xs)
        (k , t ) <- go (drop (length tx) m) (n-length kx) xss
        return (kx++k, tx++t)

digits = "1223577bdfff"
fromString = fst . head . readHex
perms = permutations . fromList

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