Kolmogorov บ้า


32

ซับซ้อน Kolmogorovของสตริงถูกกำหนดให้เป็นความยาวของโปรแกรมที่สั้นที่สุดที่ P s เอาท์พุท หากความยาวของ P สั้นกว่าความยาวของ s ดังนั้น s จะถูกบีบอัดมิฉะนั้น s จะไม่สามารถบีบอัดได้ สตริงส่วนใหญ่ไม่สามารถบีบอัดได้ ...

เขียนโปรแกรมที่สั้นที่สุดที่ส่งออกสตริงนี้ (โดยไม่มีช่องว่างและไม่มีบรรทัดใหม่):

d9 a6 b6 33 56 a7 95 4b 29 b0 ac 7f 2a aa 6d 19 b8 4b 4c f8 b6 2a ac 95 
a1 4b 4e a5 9d b3 e7 c9 4c 49 59 ec 94 b3 aa 6c 93 8f 11 5a 4d 39 75 82 
ec ea 24 cc d3 2d c3 93 38 4e b7 a6 0d d2 b5 37 23 54 ad 1b 79 aa 6e 49 
55 52 94 5a a7 3a 6a e9 e4 52 cd 2d 79 ad c6 12 b5 99 5b b4 76 51 17 4e 
94 f3 9a a2 e7 15 6a 55 14 4d 4e 4a a3 5c 2f ab 63 cc b5 a6 a4 92 96 8a 
2e c3 d8 88 9b 8c a9 16 f5 33 22 5b a2 e2 cc 1b 27 d4 e8 db 17 a4 39 85 
ca aa 5b 4f 36 24 d3 c6 f6 94 ad d7 0f 71 24 e1 b1 c5 ef 65 35 6c 8d d7 
1a 87 1e 25 df 5d c0 13 b2 6f 5a 57 28 98 bd 41 66 04 ed a2 52 c9 ac 83 
b3 6c 56 7e d1 c6 cc 53 4a 62 c5 59 a9 b2 d4 af 22 a5 a9 f4 b2 99 23 32 
f8 fb ae 48 6a 8a 9a b5 46 7a 36 59 9f 92 d3 25 b5 19 bd 8a 4a 49 62 a5 
e4 59 fb e5 ba a2 35 dd a9 36 1d a9 c9 69 89 77 6a b2 34 2d 1d 22 61 c5 
c2 66 1c e2 76 74 52 a5 d9 84 b9 8a a6 b5 14 ec 29 58 b2 bc 96 16 16 48 
f5 c5 bd 2f 32 1b 3d 4f 4b 2e b2 6b 9a d9 32 a4 4b 5c bc 92 b7 b3 26 39 
fa 42 2d 64 ed 1a 79 49 4c a3 b7 85 b2 a6 e2 8c d9 55 90 e1 a8 87 4b 60 
a6 e1 ba c4 bb ec 32 39 76 90 a6 b4 c6 65 79 61 91 aa 3d 54 b7 18 3d 15 
4b 06 db 30 8a 4d 4a a1 35 75 5d 3b d9 98 ac 55 5b 10 dd b3 e2 cc f1 5e 
b3 2b 53 90 b6 ee 2b ac 8f 88 8d 95 5a 75 df 59 2d 1c 5a 4c e8 f4 ea 48 
b9 56 de a0 92 91 a9 15 4c 55 d5 e9 3a 76 8e 04 ba e7 b2 aa e9 ab 2a d6 
23 33 45 3d c4 e9 52 e3 6a 47 50 ba af e4 e5 91 a3 14 63 95 26 b3 8b 4c 
bc aa 5a 92 7a ab ad a6 db 53 2e 97 06 6d ba 3a 66 49 4d 95 d7 65 c2 aa 
c3 1a 92 93 3f ca c2 6c 2b 37 55 13 c9 88 4a 5c 62 6b a6 ae cc de 72 94 

ผลลัพธ์ควรมีลักษณะดังนี้:

d9a6b63356a7954b29b0ac7f2aaa6d19b84b4cf8b62aac95a14b4e...7294

หมายเหตุ: ไม่อนุญาตให้ป้อนข้อมูลผู้ใช้หรือเข้าถึงเว็บหรือไลบรารี (ยกเว้นรายการที่จำเป็นสำหรับการพิมพ์เอาต์พุต)

แก้ไขฉัน:ลำดับดูเหมือนสุ่ม ... แต่ปรากฎว่าเป็นการจัดการที่สามารถบีบอัดได้สูงเป็นจำนวนเฉพาะจำนวนเล็กน้อย ...

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

  1. หากคุณพยายามบีบอัดข้อมูลคุณไม่ต้องไปไกล ...
  2. ในอินเทอร์เน็ตคุณสามารถค้นหา (รู้จักกันดี?) สารานุกรมออนไลน์ของลำดับจำนวนเต็ม (OEIS);
  3. ลองตัวเลขฐานสิบหกตัวแรก d9, a6, b6, 33, ... (หรือการแทนทศนิยมของพวกเขา) ให้ผลลัพธ์ไม่;
  4. แต่ถ้าคุณแปลงตัวเลขเป็นไบนารี่ ( 1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0) และค้นหาใน OEIS คุณจะได้รับผลลัพธ์นี้
  5. ตามที่ Claudiu ตั้งข้อสังเกตฉันก็ให้คำแนะนำเล็กน้อยในคำถาม (แก้ไขฉันด้านบน) ... :-)

ผู้ชนะคือ : Peter Taylor (GolfScript, 50) พร้อมกล่าวถึงเป็นพิเศษสำหรับ Claudiu (Python, 92) คนแรกที่ "แก้ไข" มัน


2
สิ่งนี้น่าสนใจกว่าคำถามที่ซับซ้อนของโคโมโกรอฟอื่น ๆอย่างไร
Doorknob

2
@Doorknob: อาจจะไม่มีอะไร ... อย่างน้อยก็จนกว่าใครจะโพสต์คำตอบ :-)
Marzio De Biasi

5
นี่ควรจะเป็นเกมของ "Guess the Constant" หรือไม่?
Peter Taylor

7
อย่าแก้ปัญหา! ผู้คนกำลังทำงานกันอยู่ :-)
Mau

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

คำตอบ:


11

GolfScript (50 ไบต์)

$ wc -c codegolf24909.min.gs 
50 codegolf24909.min.gs
$ md5sum codegolf24909.min.gs 
ce652060039fba071d17333a1199fd72  codegolf24909.min.gs
$ time golfscript.rb codegolf24909.min.gs 
d9a6b63356a7954b29b0ac7f2aaa6d19b84b4cf8b62aac95a14b4ea59db3e7c94c4959ec94b3aa6c938f115a4d397582ecea24ccd32dc393384eb7a60dd2b5372354ad1b79aa6e495552945aa73a6ae9e452cd2d79adc612b5995bb47651174e94f39aa2e7156a55144d4e4aa35c2fab63ccb5a6a492968a2ec3d8889b8ca916f533225ba2e2cc1b27d4e8db17a43985caaa5b4f3624d3c6f694add70f7124e1b1c5ef65356c8dd71a871e25df5dc013b26f5a572898bd416604eda252c9ac83b36c567ed1c6cc534a62c559a9b2d4af22a5a9f4b2992332f8fbae486a8a9ab5467a36599f92d325b519bd8a4a4962a5e459fbe5baa235dda9361da9c96989776ab2342d1d2261c5c2661ce2767452a5d984b98aa6b514ec2958b2bc96161648f5c5bd2f321b3d4f4b2eb26b9ad932a44b5cbc92b7b32639fa422d64ed1a79494ca3b785b2a6e28cd95590e1a8874b60a6e1bac4bbec32397690a6b4c665796191aa3d54b7183d154b06db308a4d4aa135755d3bd998ac555b10ddb3e2ccf15eb32b5390b6ee2bac8f888d955a75df592d1c5a4ce8f4ea48b956dea09291a9154c55d5e93a768e04bae7b2aae9ab2ad62333453dc4e952e36a4750baafe4e591a314639526b38b4cbcaa5a927aabada6db532e97066dba3a66494d95d765c2aac31a92933fcac26c2b375513c9884a5c626ba6aeccde7294

real    365m11.938s
user    364m45.620s
sys     0m6.520s

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

38200,{:x,{)x\%!},,2=},4/{3\{2&!!1$++}/.57>39*+}%+

ภาพรวมการผ่า

  • คำนวณช่วงเวลาที่เล็กกว่า Nด้วย N = 38200: นี่จะให้ช่วงเวลา 4032 ครั้งแรก:38200,{:x,{)x\%!},,2=},
  • เราต้องการหนึ่งบิตต่อไพร์มด้วยการแปลงฐานสิบหกดังนั้นแบ่งออกเป็นกลุ่ม 4: 4/
  • สำหรับแต่ละกลุ่มแต่ละแผนที่สำคัญpที่จะp&2 != 0และทำฐาน 2 ถึง 16 ฐานการแปลง: {3\{2&!!1$++}/.57>39*+}%(นี่คือที่เทคนิคที่น่าสนใจ)
  • ตอนนี้เรามีอาร์เรย์ของค่า ASCII บวกกับสตริงว่างจาก stdin; เชื่อมต่อกันเพื่อรับค่าสตริงเดียวสำหรับเอาต์พุต:+

การแยกรายละเอียดเพิ่มเติมของการแปลงฐาน

เนื่องจากสแต็กถือสตริงว่างและรายการช่วงเวลาเราต้องทำการแปลงสองครั้ง:

  1. แปลงนายกแต่ละรายการเป็นบิตโดยระบุว่ามันเท่ากับ 2 หรือ 3 (mod 4)
  2. แปลงบิตเป็นเลขฐานสิบหก

มีวิธีที่ยาวพอ ๆ กันในการทำ 1; เช่น

{4%1>}%
{4%2/}%
{2/1&}%
{2/2%}%
{2&!!}%

หรือแม้กระทั่ง

{2&}% followed by a 2/ after the base conversion

สำหรับ 2 วิธีที่ชัดเจนคือ

2base 16base{'0123456789abcdef'=}%+

แต่ฐานเป็นคำที่ยาวและตั้งแต่ 16 = 2 4เราสามารถบันทึกได้ไม่กี่ตัว

4/{2base'0123456789abcdef'=}%+

ตอนนี้ของเสียที่ชัดเจนที่สุดคือ 18 ตัวอักษรที่อุทิศให้กับสตริงนั้น เราแค่ต้องการฟังก์ชั่นจากหลักถึงรหัส ASCII เราต้องการที่จะ map 0เพื่อ'0' = 48, ... , 9ไป'9' = 57, 10ไป'a' = 97... ไป15'f' = 102

4/{2base.9>39*+48+}%+

baseแต่ตอนนี้โยนลงไปในส่วนผสมห้าม เราต้องใช้มันเอง การดำเนินงานที่ชัดเจน (ในทิศทางนี้ง่ายอย่างใดอย่างหนึ่ง) เป็นที่เป็นพับk base ทางเลือกอีกเล็กน้อยเป็นซ้ำตรงไปตรงมาซึ่งความต้องการกรณีฐาน:{\k*+}* 0\{\k*+}/ฐาน 2 นั้นพิเศษเล็กน้อย: 1$++เทียบเท่ากับ\2*+ความยาวเท่ากันและฉันได้ทำตามวิธีนั้นแล้ว

ทั้งสองตัวนั้นยาวกว่า 5 2baseชาร์ แต่เนื่องจากตอนนี้เราวนซ้ำค่าเราจึงสามารถดึงส่วนที่ 1 ให้มีลูปเดี่ยว เราแทนที่

{2&!!}%4/{2base.9>39*+48+}%+

กับ

4/{{2&!!1$++}*.9>39*+48+}%+

สำหรับการออม 1 ถ่านที่ดีหรือ

4/{0\{2&!!1$++}/.9>39*+48+}%+

สำหรับการสูญเสีย 1 ถ่าน

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

4/{3\{2&!!1$++}/.57>39*+}%+

ข้อต่อที่สั้นที่สุดและความฉลาดของโบนัสทำให้มันน่าสนใจยิ่งขึ้น


1
360 นาที! นั่นเป็นระยะเวลาหนึ่ง สงสัยว่าคุณใช้วิธีใด .. การขุดของฉันใช้เวลา <1 นาที
Claudiu

4
@Claudiu ฉันสามารถทำให้เร็วขึ้นมาก แต่มันจะเพิ่มประมาณ 5 ตัวอักษรและนี่คือkolmogorov-complexมากกว่า code-golf ที่มีข้อ จำกัด ด้านเวลา
Peter Taylor

คุณจะเอามันลงไปได้เท่าไหร่ถ้าคุณใช้base? โซลูชันอื่น ๆ ทั้งหมดใช้วิธีเทียบเท่า (การใช้ของฉันการใช้hexC หนึ่งการใช้printf("%x")Haskell showHex)
Claudiu

1
@Claudiu ที่จริงแล้วแนวทางที่ดีที่สุดในปัจจุบันของฉันมีความbaseยาวมากกว่านี้เพราะฉันได้ทำการปรับให้เหมาะสมที่สุดหลังจากชี้แจงว่าฉันไม่สามารถใช้งานได้ baseทำให้ผมมีค่า 0-15 0-9a-fดังนั้นจึงยังต้องทำงานบางอย่างที่จะแปลง ฉันอาจกลับมาใช้อีกครั้งbaseในบางจุด แต่ไม่ใช่คืนนี้
Peter Taylor

32

Python 92 ตัวอักษร

ที่นี่เป็นสุภาพสตรีและสุภาพบุรุษรหัสตัวเอง!

>>> code = "R=range;print hex(int(''.join(`i/2%2`for i in R(38198)if all(i%x for x in R(2,i))),2))[2:-1]"
>>> len(code)
92
>>> exec code
d9a6b63356a7954b29b0ac7f2aaa6d19b84b4cf8b62aac95a14b4ea59db3e7c94c4959ec94b3aa6c938f115a4d397582ecea24ccd32dc393384eb7a60dd2b5372354ad1b79aa6e495552945aa73a6ae9e452cd2d79adc612b5995bb47651174e94f39aa2e7156a55144d4e4aa35c2fab63ccb5a6a492968a2ec3d8889b8ca916f533225ba2e2cc1b27d4e8db17a43985caaa5b4f3624d3c6f694add70f7124e1b1c5ef65356c8dd71a871e25df5dc013b26f5a572898bd416604eda252c9ac83b36c567ed1c6cc534a62c559a9b2d4af22a5a9f4b2992332f8fbae486a8a9ab5467a36599f92d325b519bd8a4a4962a5e459fbe5baa235dda9361da9c96989776ab2342d1d2261c5c2661ce2767452a5d984b98aa6b514ec2958b2bc96161648f5c5bd2f321b3d4f4b2eb26b9ad932a44b5cbc92b7b32639fa422d64ed1a79494ca3b785b2a6e28cd95590e1a8874b60a6e1bac4bbec32397690a6b4c665796191aa3d54b7183d154b06db308a4d4aa135755d3bd998ac555b10ddb3e2ccf15eb32b5390b6ee2bac8f888d955a75df592d1c5a4ce8f4ea48b956dea09291a9154c55d5e93a768e04bae7b2aae9ab2ad62333453dc4e952e36a4750baafe4e591a314639526b38b4cbcaa5a927aabada6db532e97066dba3a66494d95d765c2aac31a92933fcac26c2b375513c9884a5c626ba6aeccde7294
>>> import hashlib; hashlib.sha256(code).hexdigest()
'60fa293bbe895f752dfe208b7b9e56cae4b0c8e4cdf7c5cf82bf7bab60af3db6'

Marzio ทิ้งคำใบ้ฉลาดโดยบอกว่า "มันจะออกมาเป็นอัดสูงจัดการนิด ๆ หน่อย ๆของตัวเลขที่สำคัญ" ฉันแน่ใจว่า "นิดหน่อย" ไม่ใช่ตัวเอียงโดยไม่ได้ตั้งใจดังนั้นฉันจึงแปลงสตริง hex เป็นบิตและพยายามหารูปแบบ ฉันคิดว่าในตอนแรกเขาเป็นตัวแทนของช่วงเวลาทั้งหมดเป็นบิตและเชื่อมโยงพวกเขาเข้าด้วยกัน แต่นั่นไม่ได้ผล จากนั้นอาจใช้ตัวเลขเพียงไม่กี่หลักหรือวางเลขศูนย์ทั้งหมดในสตริงบิต - ยังคงไม่ใช่ บางทีมันอาจเป็นบิตของจำนวนน้อยที่สุดที่สำคัญของช่วงเวลาสองสามช่วงแรก? ไม่มาก แต่ในที่สุดฉันก็ได้พบสิ่งที่ใช้งานได้ - มันเป็นบิตของบิตที่มีนัยสำคัญน้อยที่สุดจากช่วงเวลาที่กำหนด

ดังนั้นรหัสของฉันทำเช่นนั้น: สร้างช่วงเวลาที่เพียงพอใช้เวลาบิตที่สองของแต่ละ ( i/2%2) เชื่อมต่อพวกเขาเป็นสตริงไบนารีแล้วแปลงเป็นฐาน 10 ( int(..., 2)) และจากนั้นไปที่ฐาน 16 ( hex(...))


1
ที่ดี! ฉันยังใหม่กับการเขียนโค้ดกอล์ฟ แต่สิ่งที่แฮชเป็นวิธีที่ดีที่จะให้ผู้อื่นมีความสุขในการค้นพบ "วิธีการทำ" ฉันจะรอสองวันจากนั้นเปิดรับรางวัล (ที่ฉันจะให้รางวัลกับความไว้วางใจ :)
Marzio De Biasi

5
@MarzioDeBiasi: แน่นอนว่าได้ผล! หรืออาจจะดีกว่าที่จะบอกว่าคุณจะให้รางวัลในวันก่อนครบกำหนดและถ้าผู้ชนะไม่เปิดเผยคำตอบของเขาในการชนะอันดับที่ 2 ฯลฯ ... ทำไมต้องเชื่อใจเมื่อคุณไม่ต้อง ?
Claudiu

ทำไมรหัสใน hashlib ไม่ถูกนับ? รหัสกำลังทำงานเพื่อสร้างผลลัพธ์ไม่ใช่หรือไม่
philcolbourn

2
@philcolbourn: ไม่มีรหัสไม่ได้ใช้ hashlib เป็นเพียงการสร้างแฮช sha256 ดังนั้นพรุ่งนี้ฉันสามารถพิสูจน์ได้ว่าฉันเขียนโค้ดเมื่อฉันโพสต์สิ่งนี้เป็นครั้งแรก คุณจะเห็นพรุ่งนี้!
Claudiu

@Claudiu: ตอนนี้คุณควรอธิบายฉันว่าคุณแตกปัญหา! ทำได้ดี!
rubik

9

Haskell, 105

แฮช SHA1: a24bb0f4f8538c911eee59dfc2d459194ccb969c

เอาท์พุท:

d9a6b63356a7954b29b0ac7f2aaa6d19b84b4cf8b62aac95a14b4ea59db3e7c94c4959ec94b3aa6c938f115a4d397582ecea24ccd32dc393384eb7a60dd2b5372354ad1b79aa6e495552945aa73a6ae9e452cd2d79adc612b5995bb47651174e94f39aa2e7156a55144d4e4aa35c2fab63ccb5a6a492968a2ec3d8889b8ca916f533225ba2e2cc1b27d4e8db17a43985caaa5b4f3624d3c6f694add70f7124e1b1c5ef65356c8dd71a871e25df5dc013b26f5a572898bd416604eda252c9ac83b36c567ed1c6cc534a62c559a9b2d4af22a5a9f4b2992332f8fbae486a8a9ab5467a36599f92d325b519bd8a4a4962a5e459fbe5baa235dda9361da9c96989776ab2342d1d2261c5c2661ce2767452a5d984b98aa6b514ec2958b2bc96161648f5c5bd2f321b3d4f4b2eb26b9ad932a44b5cbc92b7b32639fa422d64ed1a79494ca3b785b2a6e28cd95590e1a8874b60a6e1bac4bbec32397690a6b4c665796191aa3d54b7183d154b06db308a4d4aa135755d3bd998ac555b10ddb3e2ccf15eb32b5390b6ee2bac8f888d955a75df592d1c5a4ce8f4ea48b956dea09291a9154c55d5e93a768e04bae7b2aae9ab2ad62333453dc4e952e36a4750baafe4e591a314639526b38b4cbcaa5a927aabada6db532e97066dba3a66494d95d765c2aac31a92933fcac26c2b375513c9884a5c626ba6aeccde7294

แก้ไข: รหัส:

import Numeric;f(x:z)s=f[y|y<-z,0/=mod y x]$s*2+quot(mod x 4)2;f[]s=s;main=putStr$showHex(f[2..38198]0)""

ฉันพลาดกฎเกี่ยวกับการไม่ใช้ฟังก์ชันไลบรารีใด ๆ ยกเว้นการพิมพ์ (putStr) ฉันสมมติว่าตัวดำเนินการทางคณิตศาสตร์ในขณะที่พวกเขากำลังทำหน้าที่ทางเทคนิคได้รับอนุญาต


9

C, 136 116 109 103 ตัวอักษร

ตกลงแล้วนี่คือความพยายามของฉัน:

i;p;q;main(n){for(;n++,q<4032;){for(i=1;++i<n&&n%i;);if(i==n)p+=p+(n&2)/2,p=++q&3?p:printf("%x",p)*0;}}

MD5 hash = f638552ef987ca302d1b6ecbf0b50e66

1
เนื่องจากprintfส่งคืนจำนวนอักขระที่เขียนซึ่งไม่ใช่ศูนย์ที่นี่เสมอคุณสามารถใช้!printf(...)แทนprintf(...)*0การบันทึกอักขระหนึ่งตัว
pastebin.com slash 0mr8spkT

@ace * slaps หน้าผาก *อ่าทำไมฉันไม่คิดอย่างนั้นล่ะ ?? ขอบคุณ ace เช่นเคย :-) (และอาจปล่อยให้รหัสเหมือนเดิมเนื่องจากควรตรงกับแฮช MD5)
ossifrage คลื่นไส้

7

JS, 764

ถ้าเราพิจารณาว่าสายนี้เป็น base64 เราสามารถมีรุ่นที่เล็กกว่าโดยใช้รุ่นที่ไม่ได้เป็นฐาน 64-ed:

btoa("wÖºo­÷离÷ÛÖôiÎßÙ¦éÝ}oÎáÇüo­iÏyk^áæ¹õÖ÷{·=áÎ=ç×÷÷i®÷×^ZáÝýï6yÇÛw}swßÎo¶ºÑ×voûÛ~xiÝ[ïÖéî=çv÷Zk½Ú駽{vqÝïÖs­vo}å¶øï®u×¾÷÷õ¦¶{½yé®y×áîk~\Ùöëwoºkv÷¯Ùç7wÏ<õ¿kÝz÷Ûn[kg¶qÍ[Û·x{Ç[׶¸ßß9q¦å¾ß­¸ww:¯xi×{ÑþõÛµoW9yþ¹ßñ×{Õ¯;Õí¹uþ]sMwonå®{ÛÏ|mÞ5ë­8yÖ¶çg=iÏ7o~ç®ÞwW:qÎw᮶s}kÖöwÛf¹k×øoo}Û}öÇÛiî<é¯õ¦ùã®Úß®}õÿvw}¹o}mßá®=ëf¹{}}·¹m¦¶ß]kÝúÕÖ½sÞ½óÞûé¦ößÕݶëW9snºÕǶï®øçf¹wß8oßk¦ù×ÛÞ|ofÜ÷­z×®<9mÝßm[ÝÞá½onõ§}ßf¸á¾\mÏvo¶÷Û­ý}®6ÙÞ¸yÝZïÞ=áÆ·o¿9ofº{owÞy÷GµkÏ;á¾´k§µm§8m·ßmýï¯tk¦øs®¹ïÞµ÷VÝÞxo½|ÝÝyá½:u½ôñ®á¦µßùåÝÛwß|iÎyå½tuÖ÷{g^^o}çto§Ù¶ñÿ<ñßyå®ùuþ}ÙÝ\å®{Çøy®<oÞzuæ´÷oukÝyáÎyw½Ý®úñí8m§»of{ÖÙ§zÛ}÷ãÝs½çg·é®;çFÚi÷¸{uk}xëyÛ¦÷ñ¾mÆå¯ví¦iÖºu¾wÙï{Ó®m­Úë®=áßyw¾¹sfs}Z÷owÝ÷snÙ½ûçwsß<á®\ënk¦qÇ^ïox")

แต่ฉันคิดว่าผู้เขียนต้องการให้เราหาตรรกะที่อยู่เบื้องหลังสตริงที่ไม่สุ่มนี้แทน


1
เพื่อหลีกเลี่ยง "downvotes rush" ฉันได้เพิ่มรายละเอียดบางอย่างในคำถาม :-)
Marzio De Biasi

4

Mathetmatica - 56

ความลึกลับได้รับการแก้ไขแล้วดังนั้นเพียงนำความคิดไปใช้

⌊.5Prime@Range@4032⌋~Mod~2~FromDigits~2~IntegerString~16

ดี ฉันอยากรู้ว่าโอกาสที่สั้นที่สุดคือตอนนี้แมวออกจากกระเป๋า
Claudiu

คุณเรียกว่า "ไม่มีไลบรารี่ (ยกเว้นที่จำเป็นสำหรับการพิมพ์เอาต์พุต)" หรือไม่?
Peter Taylor

@PeterTaylor ใช่ไม่มีการนำเข้า - ไม่มีห้องสมุด
swish

ตัดสินจากความคิดเห็นฉันไม่คิดว่านั่นเป็นวิธีที่ OP ต้องการให้ตีความ
Peter Taylor

3

J - 46 ตัวอักษร

ไม่รังเกียจฉันแค่บันทึก J golf ที่นี่เพื่อลูกหลาน ไม่ฉลาดพอที่จะเข้าใจกลอุบาย

4[1!:2&4'0123456789abcdef'{~#.2|<.-:p:i.1007 4

อธิบาย:

  • p:i.1007 4- สร้างเมทริกซ์ 4 คอลัมน์ 1007 แถวของจำนวนเต็มตั้งแต่ 0 จากนั้นจึงนำจำนวนเฉพาะที่สอดคล้องกับจำนวนเต็มเหล่านั้น ใช่p:เป็นตัว J ใช่เรามีสี่ช่วงเวลาสั้น ๆ

  • 2|<.-:- แบ่งตัวเลขแต่ละตัว ( -:) วางพื้น ( <.) แล้วใช้โมดูโล 2 ( 2|) นี่เป็นเช่นเดียวกับการซักครั้งต่อไป

  • #.- แปลงแต่ละแถวของผลลัพธ์จากฐาน 2 เป็นจำนวนเต็ม สิ่งนี้ทำให้เรามีหมายเลข 1007 จาก 0 ถึง 15 รวม

  • '0123456789abcdef'{~#.- ใช้แต่ละแถวของเมทริกซ์ของบิตนี้เป็นไบนารีสำหรับตัวเลขและใช้หมายเลขนั้นเพื่อเลือกจากรายการของเลขฐานสิบหก สิ่งนี้จะแปลงทุก ๆ สี่บิตให้เป็นเลขฐานสิบหก

  • 1!:2&4- ล่าม J มีปัญหากับการส่งออกสายอักขระที่ยาวกว่า 256 ตัวอักษรดังนั้นเราต้องส่งข้อมูลนี้ไปยัง stdout โดยตรง คุณชนะบางอย่างคุณสูญเสียบางอย่าง

  • 4[- ในที่สุดให้ทิ้งผลลัพธ์จาก1!:2และแทนที่ผลลัพธ์ที่หายไป 4 จากผลลัพธ์ เราทำเช่นนี้เพราะสั้นกว่าการรวมช่วงเวลาสี่ช่วงสุดท้ายและส่งคืนผลลัพธ์ที่ว่างเปล่าที่นี่


0

JS, 503

กำลังติดตามความคิด @xem:

s='Ù¦¶3V§K)°¬*ªm¸KLø¶*¬¡KN¥³çÉLIY쳪lZM9uìê$ÌÓ-Ã8N·¦\nÒµ7#T­yªnIURZ§:jéäRÍ-y­Æµ[´vQNó¢çjUMNJ£\/«c̵¦¤.ÃØ©õ3"[¢âÌ'+"'"+'ÔèÛ¤9ʪ[O6$ÓÆö­×q$á±Åïe5l×%ß]À²oZW(½Afí¢Rɬ³lV~ÑÆÌSJbÅY©²Ô¯"¥©ô²#2øû®HjµFz6YÓ%µ½JIb¥äYûåº\n5Ý©6©Éiwj²4-"aÅÂfâvtR¥Ù¹¦µì)X²¼HõŽ/2=OK.²kÙ2¤K\¼·³&9úB-díyIL£·²¦âÙUá¨K`¦áºÄ»ì29v¦´Æeyaª=T·=KÛ0MJ¡5u];Ù¬U[ݳâÌñ^³+S¶î+¬ZußY-ZLèôêH¹VÞ ©LUÕé:vºç²ªé«*Ö#3E=ÄéRãjGPº¯äå£c&³L¼ªZz«­¦ÛS.mº:fIM×eªÃ?ÊÂl+7UÉJ\bk¦®ÌÞr'
r=''
for(var i=0;i<s.length;i++) r+=s.charCodeAt(i).toString(16);
console.log(r)

0

Mathematica, 55

Prime~Array~4031~BitAnd~2~FromDigits~2~IntegerString~16

ทดสอบกับ Mathematica 8 แล้วใช้การสังเกตสองแบบ:

  • Mathematica ของFromDigitsไม่จริงตรวจสอบช่วงของตัวเลขที่กำหนดดังนั้นหากคุณใช้มันไปยังรายการของรูปแบบที่คุณเพิ่งได้รับเป็นครั้งที่สองผลเป็นถ้าการนำไปใช้{2,0,2,2,0,...} {1,0,1,1,0,...}แต่นั่นเป็นรูปแบบที่สร้างโดยBitAndการเติมช่วงเวลาด้วย 2
  • บิตสุดท้ายของจำนวนซึ่งเราต้องการให้เป็นเลขฐานสิบหกเกิดขึ้นเป็นศูนย์ (ตามที่เห็นด้วยสายอักขระที่ลงท้ายด้วยเลขคู่) ดังนั้นมันจึงเป็นเพียงสองเท่าของจำนวนที่คุณจะได้รับโดยมีนายกรัฐมนตรีน้อยกว่า แต่สิ่งที่สองคือสิ่งที่เราได้รับจากการใช้การสังเกตก่อนหน้านี้ดังนั้นทุกอย่างลงตัวพอดีกัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.