การกำหนดค่าอิเล็กตรอน


18

การกำหนดค่าอิเล็กตรอน

ภารกิจของคุณคือการยอมรับหมายเลขอะตอมขององค์ประกอบเป็นอินพุตและส่งออกการกำหนดค่าอิเล็กตรอน (เช่น2,8,8,2สำหรับแคลเซียม)

อินพุต

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

เอาท์พุต

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

  • 2,8,8,2
  • 2.8.8.2
  • 2, 8, 8, 2,
  • [2,8,8,2]
  • 2 8 8 2
  • ([2 [8]] [8] 2)

อิเล็กตรอนทำงานอย่างไร

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

สูงสุดและรวมถึงแคลเซียม (หมายเลขอะตอม 20) เปลือกเติมอย่างสม่ำเสมอและเป็นระเบียบ; เปลือกด้านในเต็มไปครั้งแรกที่ความจุของ 2, ที่สองถึง 8 แล้วที่สามที่จะ 8 และสุดท้ายที่ 2. 2,8,8,2การกำหนดค่าอิเล็กตรอนของแคลเซียมคือ

หลังจากแคลเซียมสิ่งต่าง ๆ มีความซับซ้อน อิเล็กตรอนต่อไปเข้าไปในเปลือกที่สามไม่ใช่ที่สุดท้าย เพื่อให้สิ่งเลววานาเดียม (23) คือ2,8,11,2ในขณะที่โครเมี่ยม (24) เป็น2,8,13,1และแมงกานีส (25) 2,8,13,2คือ

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

  • ทอง (79): 2,8,18,32,18,1
  • ปรอท (80): 2,8,18,32,18,2
  • ...
  • แอสทาทีน (85): 2,8,18,32,18,7
  • เรดอน (86): 2,8,18,32,18,8

กฎระเบียบ

  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • อนุญาตให้ใช้ไลบรารีที่มีอยู่ก่อนการท้าทายนี้
  • ฟีเจอร์ในตัวหรือไลบรารีที่จัดการเฉพาะกับอะตอมโมเลกุลหรือเคมีถูกห้าม
  • ความยาวรหัสต่ำสุดเป็นไบต์ชนะ
  • ในแหล่งข้อมูลที่เชื่อมโยงการกำหนดค่าขององค์ประกอบ 103-118 จะถูกทำเครื่องหมายด้วย(?)ตามที่คาดการณ์ไว้และองค์ประกอบต่างๆจะไม่เสถียรเกินกว่าที่จะตรวจสอบได้ สำหรับความท้าทายนี้ให้ถือว่าพวกเขาถูกต้อง
  • คุณอาจ hardcode ส่วนหนึ่งหรือทั้งหมดของข้อมูลของคุณ
  • [กฎใหม่]โปรดระบุ base64 หรือการถ่ายโอนข้อมูล xxd ของไฟล์ของคุณหากคุณใช้อักขระควบคุมในนั้น (ดูเหมือนคำตอบหลายคำตอบ)

ผู้ชนะ: CJam ของเดนนิสตอบที่ 80 ไบต์ !

คำตอบ:


14

CJam, 87 83 82 80 ไบต์

0"hTHøìð¼Ä¿håêÛ¾ªÔ¼"256b6b5a/4a8**li<{[33:B_B*65_B*1]=\_B%8=B\#*+}/Bb0-`

รหัสด้านบนมีอักขระที่ไม่สามารถพิมพ์ได้

ลองใช้ออนไลน์ในล่าม CJam หากลิงก์ไม่ทำงานให้คุณคัดลอกจากวางนี้

พื้นหลัง

เพื่อให้ได้โครงร่างอิเล็กตรอนของอะตอมNthเราเริ่มต้นด้วยอะตอมที่ไม่มีอิเล็กตรอนและใช้การแปลงNกับมัน

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

ยกตัวอย่างเช่นการกำหนดค่าของอิเล็กตรอนโมลิบดีนัม (42) เป็น[2 8 18 13 1] สิ่งนี้สอดคล้องกับจำนวนเต็ม2 × 33 4 + 8 × 33 3 + 18 × 33 2 + 13 × 33 + 1 = 26,79,370

แพลเลเดียม (48) เป็นกรณีพิเศษที่เราปฏิบัติต่อ [2 8 18 18 0]แทน[2 8 18 18]

การเป็นตัวแทนที่สะดวกนี้ช่วยลดการแปลงดังกล่าวเป็นคณิตศาสตร์อย่างง่าย:

  • R += 1 (เพิ่มอิเล็กตรอนไปยังเปลือกนอก)
  • R += 33 (เพิ่มอิเล็กตรอนไปยังเปลือกนอกชั้นที่สอง)
  • R += 65 (เพิ่มอิเล็กตรอนสองตัวในเปลือกนอกชั้นที่สอง; ลบหนึ่งออกจากครั้งแรก)
  • R += 1089 (เพิ่มอิเล็กตรอนในเปลือกนอกชั้นที่สาม)
  • R += 2145 (เพิ่มอิเล็กตรอนสองตัวในเปลือกนอกชั้นที่สาม; ลบหนึ่งออกจากวินาที)
  • R *= 33, R += 1 (เพิ่มเปลือกใหม่ที่มีอิเล็กตรอนเดียว)

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

[1 1 65 1 1 1 1 1 1 1 2369 1 1 1 1 1 1 1 78401 1 33 33 33 65 1 33 33 33 65 1 1 1 1 1 1 1 2598017 1 33 33 65 33 1 65 33 65 1 1 1 1 1 1 1 1 85745345 1 33 1089 2145 1089 1089 1089 1089 33 2145 1089 1089 1089 1089 1089 33 33 33 33 33 33 33 65 33 1 1 1 1 1 1 1 2830095041 1 33 33 2145 1089 1089 2145 1089 33 2145 1089 1089 1089 1089 1089 65 1 33 33 33 33 33 33 65 1 1 1 1 1 1 1]

ความแตกต่างที่ไม่เหมือนใครในอาเรย์นี้มีดังต่อไปนี้:

[1 33 65 1089 2145 2369 78401 2598017 85745345 2830095041]

ทั้งหมดยกเว้น 5 รายการแรกนั้นสอดคล้องกับอินสแตนซ์เมื่อมีการเพิ่มเชลล์ใหม่ สิ่งเหล่านี้สามารถละเว้นได้ตั้งแต่การคูณด้วย 33 และการเพิ่ม 1 ให้ผลลัพธ์เดียวกันกับการเพิ่มความแตกต่าง

เนื่องจากเราต้องเพิ่มกระสุนใหม่ถ้าและถ้าอะตอมปัจจุบันมีอิเล็กตรอนแปดตัวในเปลือกนอกของมัน (ยกเว้นHe (2) ↦ Li (3)ซึ่งสามารถเข้ารหัสเป็นเพิ่ม 65 ) เราสามารถเข้ารหัส การแปลงเหล่านั้นเป็นการเพิ่ม 1และพิจารณาความต้องการการคูณในทันที

ดังนั้นหากเรากำหนด

X := 0
I := 0
L := [33 1089 65 2145 1]
T := [1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 3 1 0 0 0 3 1 1 1 1 1 1 1 1 1 0 0 3 0 1 3 0 3 1 1 1 1 1 1 1 1 1 1 0 2 4 2 2 2 2 0 4 2 2 2 2 2 0 0 0 0 0 0 0 3 0 1 1 1 1 1 1 1 1 1 0 0 4 2 2 4 2 0 4 2 2 2 2 2 3 1 0 0 0 0 0 0 3 1 1 1 1 1 1 1]

การกำหนดค่าอิเล็กตรอนของอะตอมNthสามารถคำนวณได้ดังนี้:

while(X < N):
    R *= (33 ** (R % 33 == 8))
    R += L[T[X]]
    X += 1

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

" Push 0, the initial value of R; convert the following array into an integer by
  considering it a base 256 number, then back to the array of its digits in base 6.       ";

0"hTHøìð¼Ä¿håêÛ¾ªÔ¼"256b6b

" Replace each 5 in the resulting array by [4 4 4 4 4 4 4 4]. This yields the array T
  from the above section.                                                                 ";

5a/4a8**

" Read an integer N from STDIN and discard all but the first N elements of T.             ";

li<

" For each element Y of the remainder of T, do the following:                             ";

{
    [33:B_B*65_B*1]=\   " Define B := 33, push L, retrieve L[Y] and swap it with R.       ";

    _B%8=B\#*           " Execute R *= 33 ** (R % 33 == 8).                               ";

    +                   " Execute R += L[Y].                                              ";
}/

" Convert R into the array of its digits in base 33, remove eventual zeros (Palladium)
  and replace the resulting array with its string representation.                         ";

Bb0-`

ตัวอย่างการวิ่ง

$ base64 -d > electrons.cjam <<< MCJoVEgM+OzwErzEGL9o5erbvqrUB4YZhrwRIjI1NmI2YjVhLzRhOCoqbGk8e1szMzpCX0IqNjVfQioxXT1cX0IlOD1CXCMqK30vQmIwLWA=
$ cksum electrons.cjam
3709391992 80 electrons.cjam
$ for i in {1..118}; do LANG=en_US cjam electrons.cjam <<< $i; echo; done
[1]
[2]
[2 1]
[2 2]
[2 3]
[2 4]
[2 5]
[2 6]
[2 7]
[2 8]
[2 8 1]
[2 8 2]
[2 8 3]
[2 8 4]
[2 8 5]
[2 8 6]
[2 8 7]
[2 8 8]
[2 8 8 1]
[2 8 8 2]
[2 8 9 2]
[2 8 10 2]
[2 8 11 2]
[2 8 13 1]
[2 8 13 2]
[2 8 14 2]
[2 8 15 2]
[2 8 16 2]
[2 8 18 1]
[2 8 18 2]
[2 8 18 3]
[2 8 18 4]
[2 8 18 5]
[2 8 18 6]
[2 8 18 7]
[2 8 18 8]
[2 8 18 8 1]
[2 8 18 8 2]
[2 8 18 9 2]
[2 8 18 10 2]
[2 8 18 12 1]
[2 8 18 13 1]
[2 8 18 13 2]
[2 8 18 15 1]
[2 8 18 16 1]
[2 8 18 18]
[2 8 18 18 1]
[2 8 18 18 2]
[2 8 18 18 3]
[2 8 18 18 4]
[2 8 18 18 5]
[2 8 18 18 6]
[2 8 18 18 7]
[2 8 18 18 8]
[2 8 18 18 8 1]
[2 8 18 18 8 2]
[2 8 18 18 9 2]
[2 8 18 19 9 2]
[2 8 18 21 8 2]
[2 8 18 22 8 2]
[2 8 18 23 8 2]
[2 8 18 24 8 2]
[2 8 18 25 8 2]
[2 8 18 25 9 2]
[2 8 18 27 8 2]
[2 8 18 28 8 2]
[2 8 18 29 8 2]
[2 8 18 30 8 2]
[2 8 18 31 8 2]
[2 8 18 32 8 2]
[2 8 18 32 9 2]
[2 8 18 32 10 2]
[2 8 18 32 11 2]
[2 8 18 32 12 2]
[2 8 18 32 13 2]
[2 8 18 32 14 2]
[2 8 18 32 15 2]
[2 8 18 32 17 1]
[2 8 18 32 18 1]
[2 8 18 32 18 2]
[2 8 18 32 18 3]
[2 8 18 32 18 4]
[2 8 18 32 18 5]
[2 8 18 32 18 6]
[2 8 18 32 18 7]
[2 8 18 32 18 8]
[2 8 18 32 18 8 1]
[2 8 18 32 18 8 2]
[2 8 18 32 18 9 2]
[2 8 18 32 18 10 2]
[2 8 18 32 20 9 2]
[2 8 18 32 21 9 2]
[2 8 18 32 22 9 2]
[2 8 18 32 24 8 2]
[2 8 18 32 25 8 2]
[2 8 18 32 25 9 2]
[2 8 18 32 27 8 2]
[2 8 18 32 28 8 2]
[2 8 18 32 29 8 2]
[2 8 18 32 30 8 2]
[2 8 18 32 31 8 2]
[2 8 18 32 32 8 2]
[2 8 18 32 32 10 1]
[2 8 18 32 32 10 2]
[2 8 18 32 32 11 2]
[2 8 18 32 32 12 2]
[2 8 18 32 32 13 2]
[2 8 18 32 32 14 2]
[2 8 18 32 32 15 2]
[2 8 18 32 32 16 2]
[2 8 18 32 32 18 1]
[2 8 18 32 32 18 2]
[2 8 18 32 32 18 3]
[2 8 18 32 32 18 4]
[2 8 18 32 32 18 5]
[2 8 18 32 32 18 6]
[2 8 18 32 32 18 7]
[2 8 18 32 32 18 8]

1
การลงคะแนนสำหรับจำนวนของความพยายามที่แท้จริงครับ ;)
COTO

6

GolfScript (96 ไบต์)

เอาต์พุตอยู่ในรูปแบบ

[2 8 18 18]

นี่ใช้สายเวทซึ่งมีอักขระที่ไม่สามารถพิมพ์ได้ดังนั้นฉันจึงให้สคริปต์ในรูปแบบ xxd:

0000000: 7e30 5c27 0193 ca05 528e 6b25 e461 4d12  ~0\'....R.k%.aM.
0000010: 3195 9abf c9a4 bfad 588b d876 5e72 c82a  1.......X..v^r.*
0000020: 2dd3 6e92 4940 e00b 80dc 71f6 fc97 2732  -.n.I@....q...'2
0000030: 3536 6261 7365 2037 6261 7365 3c7b 2731  56base 7base<{'1
0000040: 0a29 0a5c 295c 0a2b 310a 2b29 0a40 2940  .).\)\.+1.+).@)@
0000050: 400a 402b 5c28 3227 6e2f 3d7e 7d2f 5d60  @.@+\(2'n/=~}/]`

สำหรับการทดสอบออนไลน์ฉันกำลังเขียนสตริงเวทย์มนตร์กับทางหนี:

"\x01\x93\xCA\x05R\x8Ek%\xE4aM\x121\x95\x9A\xBF\xC9\xA4\xBF\xADX\x8B\xD8v^r\xC8*-\xD3n\x92I@\xE0\v\x80\xDCq\xF6\xFC\x97"

แต่มันจะเทียบเท่ากันเมื่อคุณไม่พบปัญหาในการวางอักขระลงใน textareas ของเบราว์เซอร์

วิธีการคือการสร้างเครื่องเสมือนด้วย 7 คำสั่งซึ่งแต่ละรายการจะจัดการรายการของจำนวนอิเล็กตรอน จากนั้นสำหรับองค์ประกอบที่nเราเริ่มต้นด้วยรายการการนับอิเล็กตรอน0และเรียกใช้nคำแนะนำแรกจากรายการที่เข้ารหัสโดยสายเวท

คำแนะนำคือ:

  1. เพิ่มเปลือกใหม่ด้วย 1 อิเล็กตรอน: 1
  2. เพิ่มอิเล็กตรอนไปยังเปลือกนอก: )
  3. เพิ่มอิเล็กตรอนไปยังเปลือกถัดไปด้านนอก: \)\
  4. รวมเปลือกนอกทั้งสองและรวมอิเล็กตรอนหนึ่งอัน: +)รวมทั้งสองเปลือกนอกและเพิ่มอีกหนึ่งอิเล็กตรอน:(ใช้สำหรับแพลเลเดียมเท่านั้น)
  5. รวมเปลือกนอกทั้งสองและสร้างเปลือกใหม่ด้วย 1 อิเล็กตรอน: +1
  6. เพิ่มอิเล็กตรอนไปยังเปลือกที่สามใน: @)@@
  7. เพิ่มอิเล็กตรอนไปยังเปลือกที่สามและย้ายหนึ่งจากเปลือกที่สองไปยังเปลือกที่สาม สิ่งนี้จะเกิดขึ้นเมื่อเปลือกนอกมีอิเล็กตรอน 2 ตัวเท่านั้นดังนั้นมันจึงถูกนำไปใช้งาน@+\(2มากกว่าที่จะนานกว่า@2+@(@

อะไรคือ 7 คำแนะนำของคุณ?
COTO

อา. ขอบคุณ ฉันเดาว่าฉันจะต้องเลือกหนึ่งในภาษากอล์ฟลึกลับเหล่านี้เพื่อที่จะชนะการแข่งขันกอล์ฟหนึ่งในวันนี้ ฉันมีเวลาเขียนโค้ดขนาดกะทัดรัดที่สามารถตีความคำสั่งสองคำได้ : P
COTO

ฉันให้อินพุตกับ STDIN หรือไม่ (และจากนั้นจะปรากฏบนสแต็ก)?

@professorfish: ใช่ GolfScript วางข้อมูลจาก STDIN บนสแต็กโดยอัตโนมัติ
เดนนิส

5

Python 2 (46 + 271 = 327)

รหัส:

print open('f').read().decode('zip').split(';')[input()]

ไฟล์fที่มีไบนารีขยะต่อไปนี้ (นี่คือรหัสถ่าน)

120, 156, 101, 146, 219, 21, 195, 32, 12, 67, 87, 233, 8, 193, 188, 204, 201, 254, 123, 21, 40, 46, 146, 253, 65, 163, 171, 10, 98, 199, 188, 233, 149, 87, 62, 243, 247, 179, 158, 121, 174, 50, 87, 157, 171, 205, 213, 231, 210, 181, 118, 66, 119, 70, 119, 74, 119, 78, 119, 82, 119, 86, 127, 233, 147, 183, 29, 182, 103, 156, 103, 122, 76, 36, 19, 249, 68, 167, 56, 78, 49, 81, 77, 52, 19, 118, 110, 210, 235, 100, 19, 197, 68, 53, 209, 76, 116, 19, 250, 23, 247, 36, 56, 107, 192, 139, 30, 208, 114, 211, 183, 96, 172, 121, 87, 123, 253, 6, 90, 175, 66, 23, 118, 66, 15, 216, 6, 118, 130, 205, 96, 63, 216, 18, 119, 197, 141, 185, 222, 6, 146, 36, 76, 138, 16, 101, 162, 66, 84, 29, 225, 153, 157, 254, 163, 90, 100, 32, 229, 135, 136, 106, 201, 226, 104, 16, 225, 136, 22, 38, 70, 97, 204, 140, 133, 177, 50, 246, 251, 33, 23, 170, 71, 97, 204, 140, 133, 177, 50, 54, 198, 206, 168, 14, 253, 155, 195, 187, 135, 55, 220, 103, 145, 199, 69, 230, 188, 157, 225, 63, 44, 207, 121, 25, 53, 26, 110, 75, 247, 9, 95, 170, 27, 187, 248, 201, 75, 28, 126, 152, 255, 111, 232, 41, 56, 62, 147, 130, 35, 193, 201, 193, 41, 193, 169, 193, 105, 193, 209, 80, 79, 172, 153, 111, 72, 188, 36, 241, 158, 196, 171, 18, 111, 203, 185, 16, 95, 151, 67, 8, 97

Base64:

eJxlktsVwyAMQ1fpCMG8zMn+exUoLpL9QaOrCmLHvOmVVz7z97Oeea4yV52rzdXn0rV2QndGd0p3
TndSd1Z/6ZO3HbZnnGd6TCQT+USnOE4xUU00E3Zu0utkE8VENdFMdBP6F/ckOGvAix7QctO3YKx5
V3v9BlqvQhd2Qg/YBnaCzWA/2BJ3xY253gaSJEyKEGWiQlQd4Zmd/qNaZCDlh4hqyeJoEOGIFiZG
YcyMhbEy9vshF6pHYcyMhbEyNsbOqA79m8O7hzfcZ5HHRea8neE/LM95GTUabkv3CV+qG7v4yUsc
fpj/b+gpOD6TgiPBycEpwanBacHRUE+smW9IvCTxnsSrEm/LuRBfl0MIYQ==

ตามคำขอนี่เป็นโปรแกรมเต็มรูปแบบแทนที่จะเป็นฟังก์ชั่น

คำตอบเก่า: Python (ไร้เดียงสาพื้นฐาน, 422):

f=lambda n:'eJxlktsVwyAMQ1fpCMG8zMn+exUoLpL9QaOrCmLHvOmVVz7z97Oeea4yV52rzdXn0rV2QndGd0p3TndSd1Z/6ZO3HbZnnGd6TCQT+USnOE4xUU00E3Zu0utkE8VENdFMdBP6F/ckOGvAix7QctO3YKx5V3v9BlqvQhd2Qg/YBnaCzWA/2BJ3xY253gaSJEyKEGWiQlQd4Zmd/qNaZCDlh4hqyeJoEOGIFiZGYcyMhbEy9vshF6pHYcyMhbEyNsbOqA79m8O7hzfcZ5HHRea8neE/LM95GTUabkv3CV+qG7v4yUscfpj/b+gpOD6TgiPBycEpwanBacHRUE+smW9IvCTxnsSrEm/LuRBfl0MIYQ=='.decode('base64').decode('zip').split(';')[n]

เนื้อหาของ zip:

>>>'eJxlktsVwyAMQ1fpCMG8zMn+exUoLpL9QaOrCmLHvOmVVz7z97Oeea4yV52rzdXn0rV2QndGd0p3TndSd1Z/6ZO3HbZnnGd6TCQT+USnOE4xUU00E3Zu0utkE8VENdFMdBP6F/ckOGvAix7QctO3YKx5V3v9BlqvQhd2Qg/YBnaCzWA/2BJ3xY253gaSJEyKEGWiQlQd4Zmd/qNaZCDlh4hqyeJoEOGIFiZGYcyMhbEy9vshF6pHYcyMhbEyNsbOqA79m8O7hzfcZ5HHRea8neE/LM95GTUabkv3CV+qG7v4yUscfpj/b+gpOD6TgiPBycEpwanBacHRUE+smW9IvCTxnsSrEm/LuRBfl0MIYQ=='.decode('base64').decode('zip')
';1;2;2 1;2 2;2 3;2 4;2 5;2 6;2 7;2 8;2 8 1;2 8 2;2 8 3;2 8 4;2 8 5;2 8 6;2 8 7;2 8 8;2 8 8 1;2 8 8 2;2 8 9 2;2 8 10 2;2 8 11 2;2 8 13 1;2 8 13 2;2 8 14 2;2 8 15 2;2 8 16 2;2 8 18 1;2 8 18 2;2 8 18 3;2 8 18 4;2 8 18 5;2 8 18 6;2 8 18 7;2 8 18 8;2 8 18 8 1;2 8 18 8 2;2 8 18 9 2;2 8 18 10 2;2 8 18 12 1;2 8 18 13 1;2 8 18 13 2;2 8 18 15 1;2 8 18 16 1;2 8 18 18;2 8 18 18 1;2 8 18 18 2;2 8 18 18 3;2 8 18 18 4;2 8 18 18 5;2 8 18 18 6;2 8 18 18 7;2 8 18 18 8;2 8 18 18 8 1;2 8 18 18 8 2;2 8 18 18 9 2;2 8 18 19 9 2;2 8 18 21 8 2;2 8 18 22 8 2;2 8 18 23 8 2;2 8 18 24 8 2;2 8 18 25 8 2;2 8 18 25 9 2;2 8 18 27 8 2;2 8 18 28 8 2;2 8 18 29 8 2;2 8 18 30 8 2;2 8 18 31 8 2;2 8 18 32 8 2;2 8 18 32 9 2;2 8 18 32 10 2;2 8 18 32 11 2;2 8 18 32 12 2;2 8 18 32 13 2;2 8 18 32 14 2;2 8 18 32 15 2;2 8 18 32 17 1;2 8 18 32 18 1;2 8 18 32 18 2;2 8 18 32 18 3;2 8 18 32 18 4;2 8 18 32 18 5;2 8 18 32 18 6;2 8 18 32 18 7;2 8 18 32 18 8;2 8 18 32 18 8 1;2 8 18 32 18 8 2;2 8 18 32 18 9 2;2 8 18 32 18 10 2;2 8 18 32 20 9 2;2 8 18 32 21 9 2;2 8 18 32 22 9 2;2 8 18 32 24 8 2;2 8 18 32 25 8 2;2 8 18 32 25 9 2;2 8 18 32 27 8 2;2 8 18 32 28 8 2;2 8 18 32 29 8 2;2 8 18 32 30 8 2;2 8 18 32 31 8 2;2 8 18 32 32 8 2;2 8 18 32 32 10 1;2 8 18 32 32 10 2;2 8 18 32 32 11 2;2 8 18 32 32 12 2;2 8 18 32 32 13 2;2 8 18 32 32 14 2;2 8 18 32 32 15 2;2 8 18 32 32 16 2;2 8 18 32 32 18 1;2 8 18 32 32 18 2;2 8 18 32 32 18 3;2 8 18 32 32 18 4;2 8 18 32 32 18 5;2 8 18 32 32 18 6;2 8 18 32 32 18 7;2 8 18 32 32 18 8'
>>>len(_)
1478

และทดสอบอย่างรวดเร็ว:

map(f, range(119))
Out[48]: 
['',
 '1',
 '2',
 '2 1',
 '2 2',
 '2 3',
 '2 4',
 '2 5',
 '2 6',
 '2 7',
 '2 8',
 '2 8 1',
 '2 8 2',
 '2 8 3',
 '2 8 4',
 '2 8 5',
 '2 8 6',
 '2 8 7',
 '2 8 8',
 '2 8 8 1',
 '2 8 8 2',
 '2 8 9 2',
 '2 8 10 2',
 '2 8 11 2',
 '2 8 13 1',
 '2 8 13 2',
 '2 8 14 2',
 '2 8 15 2',
 '2 8 16 2',
 '2 8 18 1',
 '2 8 18 2',
 '2 8 18 3',
 '2 8 18 4',
 '2 8 18 5',
 '2 8 18 6',
 '2 8 18 7',
 '2 8 18 8',
 '2 8 18 8 1',
 '2 8 18 8 2',
 '2 8 18 9 2',
 '2 8 18 10 2',
 '2 8 18 12 1',
 '2 8 18 13 1',
 '2 8 18 13 2',
 '2 8 18 15 1',
 '2 8 18 16 1',
 '2 8 18 18',
 '2 8 18 18 1',
 '2 8 18 18 2',
 '2 8 18 18 3',
 '2 8 18 18 4',
 '2 8 18 18 5',
 '2 8 18 18 6',
 '2 8 18 18 7',
 '2 8 18 18 8',
 '2 8 18 18 8 1',
 '2 8 18 18 8 2',
 '2 8 18 18 9 2',
 '2 8 18 19 9 2',
 '2 8 18 21 8 2',
 '2 8 18 22 8 2',
 '2 8 18 23 8 2',
 '2 8 18 24 8 2',
 '2 8 18 25 8 2',
 '2 8 18 25 9 2',
 '2 8 18 27 8 2',
 '2 8 18 28 8 2',
 '2 8 18 29 8 2',
 '2 8 18 30 8 2',
 '2 8 18 31 8 2',
 '2 8 18 32 8 2',
 '2 8 18 32 9 2',
 '2 8 18 32 10 2',
 '2 8 18 32 11 2',
 '2 8 18 32 12 2',
 '2 8 18 32 13 2',
 '2 8 18 32 14 2',
 '2 8 18 32 15 2',
 '2 8 18 32 17 1',
 '2 8 18 32 18 1',
 '2 8 18 32 18 2',
 '2 8 18 32 18 3',
 '2 8 18 32 18 4',
 '2 8 18 32 18 5',
 '2 8 18 32 18 6',
 '2 8 18 32 18 7',
 '2 8 18 32 18 8',
 '2 8 18 32 18 8 1',
 '2 8 18 32 18 8 2',
 '2 8 18 32 18 9 2',
 '2 8 18 32 18 10 2',
 '2 8 18 32 20 9 2',
 '2 8 18 32 21 9 2',
 '2 8 18 32 22 9 2',
 '2 8 18 32 24 8 2',
 '2 8 18 32 25 8 2',
 '2 8 18 32 25 9 2',
 '2 8 18 32 27 8 2',
 '2 8 18 32 28 8 2',
 '2 8 18 32 29 8 2',
 '2 8 18 32 30 8 2',
 '2 8 18 32 31 8 2',
 '2 8 18 32 32 8 2',
 '2 8 18 32 32 10 1',
 '2 8 18 32 32 10 2',
 '2 8 18 32 32 11 2',
 '2 8 18 32 32 12 2',
 '2 8 18 32 32 13 2',
 '2 8 18 32 32 14 2',
 '2 8 18 32 32 15 2',
 '2 8 18 32 32 16 2',
 '2 8 18 32 32 18 1',
 '2 8 18 32 32 18 2',
 '2 8 18 32 32 18 3',
 '2 8 18 32 32 18 4',
 '2 8 18 32 32 18 5',
 '2 8 18 32 32 18 6',
 '2 8 18 32 32 18 7',
 '2 8 18 32 32 18 8']

นี่เป็นสิ่งที่ดี แต่โปรดทำให้เป็นโปรแกรมที่สมบูรณ์ (อ่านจากอินพุตจาก stdin หรืออาร์กิวเมนต์); นอกจากนี้คุณสามารถใช้ไฟล์ภายนอกเพื่อหลีกเลี่ยง base64 (แต่ไฟล์และชื่อจะนับต่อความยาวโค้ด)

คำตอบที่คุณเชื่อมโยงจะเริ่มต้นด้วยยกเว้นคำถามนั้นเป็นข้อยกเว้นที่ชัดเจน (ข้อยกเว้นหลักคือสิ่งที่ติดแท็ก kolmogorov-complex)ซึ่งเป็นกรณีนี้ แนวคิดทั้งหมดของคำถามที่ซับซ้อนของ kolmogorov คือการให้ hardcode ผลลัพธ์อย่างมีประสิทธิภาพมากที่สุด
Dennis

ฉันพลาดแท็ก kolmogorov-complex และที่นี่ฉันกำลังพยายามถอดรหัสระดับพลังงานของ subshells ต่าง ๆ และฉันไม่ได้เป็นนักฟิสิกส์ :I
Sammitch

"คำตอบเก่า" ใช้ได้เฉพาะใน Python2 เท่านั้น ฉันยังไม่ได้ตรวจสอบใหม่ - คุณมี base64 ของไฟล์fเพื่อให้ฉันสามารถทำซ้ำได้หรือไม่

@professorfish แน่นอนที่สุด อันใหม่นี้ก็คือ python 2 เท่านั้น ( printเป็นคีย์เวิร์ดแทนที่จะเป็น function)
Sepıʇǝɥʇuʎs

3

MATLAB - 248 244 241 178 + 44 = 222 ไบต์

minified:

i=1;a=fread(fopen('a'));b=fix(a/7);a=a-7*b+1;d=0*a;for n=1:input(''),A=a(i);if b(i),m=1;i=i+(d(A)+2>b(i));else A=A-[1;0];m=[2;-1];i=i+1;end;d(A)=d(A)+m;end;fprintf('%d ',d(~~d));

ขยาย:

i = 1;
a = fread( fopen( 'a' ) );
b = fix( a/7 );
a = a-7*b+1;
d = 0*a;
for n = 1:input('')
    A = a(i);
    if b(i)
        m = 1;
        i = i + (d(A)+2 > b(i));
    else
        A = A - [1; 0];
        m = [2; -1];
        i = i + 1;
    end
    d(A) = d(A) + m;
end
fprintf( '%d ', d(~~d) );

การพึ่งพาไฟล์ไบนารี (ชื่อไฟล์ ' a '):

0e 39 3a 11  4f 03 72 03  3b 12 49 04  5e 12 04 73
04 3c 13 43  88 04 b2 43  04 e3 6d 05  82 3d 14 4b
05 9e 05 b3  44 05 e4 06  14 75 06 3e

ฉันเชื่อว่านี่เป็น "โปรแกรมที่สมบูรณ์" ซึ่งสามารถเรียกใช้จาก commandline มันอ่านจากstdinและส่งออกไปยังstdoutและผลการ

มันใช้ชนิดของคำสั่งสองคำสั่งในการสร้างการกำหนดค่าอิเล็กตรอน คำแนะนำสองคำคือ

inc D until N      (i.e. increment valence D by 1; advance to next instruction when D = N)

และ

pulldown D         (i.e. pull down one electron from valence D, thereby decrementing it by 1
                         and incrementing valence D-1 by 2)

คำแนะนำจะถูกเข้ารหัสในสองอาร์เรย์ ครั้งแรกที่เก็บDอาร์กิวเมนต์ในทุกกรณี ที่สองเก็บNอาร์กิวเมนต์หรือ0เพื่อระบุpulldownคำสั่งตั้งแต่N = 0ไม่เคยใช้เป็นอาร์กิวเมนต์

ลำดับที่สมบูรณ์ของคำแนะนำคือ:

inc 1 until 2
inc 2 until 8
inc 3 until 8
inc 4 until 2
inc 3 until 11
pulldown 4

inc 3 until 16
pulldown 4

inc 4 until 8
inc 5 until 2
inc 4 until 10
pulldown 5

inc 4 until 13
inc 5 until 2
pulldown 5

inc 4 until 16
pulldown 5

inc 5 until 8
inc 6 until 2
inc 5 until 9
inc 4 until 19
pulldown 5

inc 4 until 25
inc 5 until 9
pulldown 5

inc 4 until 32
inc 5 until 15
pulldown 6

inc 5 until 18
inc 6 until 8
inc 7 until 2
inc 6 until 10
pulldown 6

inc 5 until 22
pulldown 6

inc 5 until 25
inc 6 until 9
pulldown 6

inc 5 until 32
pulldown 7

inc 7 until 2
inc 6 until 16
pulldown 7

inc 7 until 8

เป็นที่น่าสังเกตว่าตัวละคร 28 ตัวสามารถลดลงได้ถ้าเราใช้ชุดอักขระเฉพาะของ MATLAB แต่ฉันต้องการให้โซลูชันของฉันเป็นแบบธรรมดาในระบบ Exchange Stack โดยไม่มีการอ้างอิงไฟล์ภายนอกใด ๆ

อ้างอิงไฟล์ภายนอกมันเป็น

ตัวอย่างผลลัพธ์

39: 2 8 18 9 2

78: 2 8 18 32 17 1

117: 2 8 18 32 32 18 7

5: 2 3


ฉันจะสร้าง "การพึ่งพาไฟล์ไบนารี" ได้อย่างไร

ไฟล์นี้เป็นรหัส 44 ไบต์ที่ฉันระบุไว้จากซ้ายไปขวาบนลงล่างตามลำดับปกติ ชื่อไฟล์เป็นเพียง "a" โดยไม่มีนามสกุล จำเป็นต้องอยู่ในไดเรกทอรีทำงานเมื่อสคริปต์ทำงาน ฉันได้อัปโหลดสำเนาที่สามารถดาวน์โหลดได้ไปที่syonidv.hodginsmedia.com/misc/a
COTO

2

Perl 5, 235 (234 + 1 สำหรับ -E)

แข็งแรงเล่นกอล์ฟ:

@a=unpack'C*','ABR3S4sT5tU6';if(($-=<>)~~[unpack'C*',')*,-./9:@NOYZ[\]`g']){$.+=($-~~[46,90]);$p=2+$-/33;$->87|$-~~[57..64]&&($.*=-1);$o[$p]+=$.,$o[$p+1]-=$.}$%=($%=$a[$q]/8)>$-?$-:$%,$o[$a[$q++]&7]+=$%while($--=$%);$,=$";say@o

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

ไม่พอใจกับความคิดเห็น:

$_=<>;
# For each byte, the first 5 bits are the number of spaces to fill at a time, the next 3 bits represent the shell number, minus 1.
# Values: 10 41 42 13 52 33 14 53 34 15 73 54 35 16 74 55 36
# The 1st shell takes 2 electrons
# Then the 2nd shell take 8, then the third takes 8...
@a=unpack'C*','ABR3S4sT5tU6';
# Contains the atomic numbers of abnormal elements
# Values: 18 1d 29 2a 2c 2d 2e 2f 39 3a 40 4e 4f 59 5a 5b 5c 5d 60 67
@b=unpack'C*',')*,-./9:@NOYZ[\]`g';
# if abnormal
if($_~~@b){
    # All abnormals, except element 46 and 90, only displace 1 electron
    $y=1+($_~~[46,90]);
    # Abnormals with atomic number less than 33 involve switches between shells 3 and 4
    # 33-65: 4 and 5
    # 66-98: 5 and 6
    # 99+ : 6 and 7
    $p = (3 + ~~($_/33)) - 1;
    # abnormals in these ranges move electrons from lower to higher
    # abnormals elsewhere do higher to lower
    if($_ >= 88 || $_ ~~ [57..64]){
        $y *= -1;
    }
    # move electrons
    $o[$p] += $y;
    $o[$p+1] -= $y;
}

    # extract max number of electrons to fill shell with
    # >> 3 is equivalent to /8 for integers; $% is always an integer.
    $% = $a[$q] / 8,
    # do not overfill
    $% = $% > $_ ? $_ : $%,
    # add electrons to shell
    $o[ $a[$q++] & 7 ] += $%
# reduce number of electrons left to fill shells with
while($_ -= $%);
# set list separator to space
$, = $";
# print list representing shells
say @o 

ฐานสิบหก:

0000000: 4061 3d75 6e70 6163 6b27 432a 272c 2710  @a=unpack'C*','.
0000010: 4142 1352 3314 5334 1573 5435 1674 5536  AB.R3.S4.sT5.tU6
0000020: 273b 6966 2828 242d 3d3c 3e29 7e7e 5b75  ';if(($-=<>)~~[u
0000030: 6e70 6163 6b27 432a 272c 2718 1d29 2a2c  npack'C*','..)*,
0000040: 2d2e 2f39 3a40 4e4f 595a 5b5c 5d60 6727  -./9:@NOYZ[\]`g'
0000050: 5d29 7b24 2e2b 3d28 242d 7e7e 5b34 362c  ]){$.+=($-~~[46,
0000060: 3930 5d29 3b24 703d 322b 242d 2f33 333b  90]);$p=2+$-/33;
0000070: 242d 3e38 377c 242d 7e7e 5b35 372e 2e36  $->87|$-~~[57..6
0000080: 345d 2626 2824 2e2a 3d2d 3129 3b24 6f5b  4]&&($.*=-1);$o[
0000090: 2470 5d2b 3d24 2e2c 246f 5b24 702b 315d  $p]+=$.,$o[$p+1]
00000a0: 2d3d 242e 7d24 253d 2824 253d 2461 5b24  -=$.}$%=($%=$a[$
00000b0: 715d 2f38 293e 242d 3f24 2d3a 2425 2c24  q]/8)>$-?$-:$%,$
00000c0: 6f5b 2461 5b24 712b 2b5d 2637 5d2b 3d24  o[$a[$q++]&7]+=$
00000d0: 2577 6869 6c65 2824 2d2d 3d24 2529 3b24  %while($--=$%);$
00000e0: 2c3d 2422 3b73 6179 406f                 ,=$";say@o

ฉันจะกลับ hexdump ได้อย่างไร (มันอาจจะดีกว่าถ้าจะทำการถ่ายโอนข้อมูล xxd แบบพลิกกลับได้หรือ

@professorfish เพิ่ม xxd dumpable ที่กลับคืนได้
es1024

2

CJam, 309 289 ไบต์

0000000: 22 cc b5 a3 1a f7 bd 07 1b 26 ce 73 16 55 87 08  "........&.s.U..
0000010: 27 d2 65 54 66 ac c1 38 ff de 95 d8 8a 77 6d 4e  '.eTf..8.....wmN
0000020: 0d 13 df bb b7 c6 8c ae 6b 32 4d b9 f1 7c b9 f1  ........k2M..|..
0000030: bc 68 2d 8a 5c 22 e6 5c 22 e1 d7 c9 80 ba a5 5d  .h-.\".\"......]
0000040: 64 24 47 0b aa 78 c9 13 a5 0a 65 41 08 f3 ee e3  d$G..x....eA....
0000050: 2e 58 92 19 5f 1a 80 fc d9 30 3b 51 99 c7 1b 51  .X.._....0;Q...Q
0000060: ba 0c 8a 3c 7d f0 60 1e d5 1c e7 2f 33 16 c8 1f  ...<}.`..../3...
0000070: e6 df 24 75 d1 51 e6 af 38 b4 f7 b1 63 77 14 8d  ..$u.Q..8...cw..
0000080: d3 69 bc 99 9e a5 98 56 53 e7 71 f7 48 76 7a 24  .i.....VS.q.Hvz$
0000090: a7 dc 5c 22 fc a6 55 05 30 e2 03 d6 a8 ef 1a 9f  ..\"..U.0.......
00000a0: e4 03 c6 a0 5e 60 be 01 2b ca 12 83 d4 64 69 3d  ....^`..+....di=
00000b0: a7 2e cc 59 5e 0c bb 69 b0 19 1d e1 f2 53 e4 1b  ...Y^..i.....S..
00000c0: 6e 6d cc 45 d3 1f cc 3c b7 1b 5f ca c8 d0 94 fe  nm.E...<.._.....
00000d0: 05 ea ae dc 98 9e 9a 47 a6 fa 3a 0e c3 45 ef 31  .......G..:..E.1
00000e0: 61 a0 7c 80 55 9a 5d 7a af 8e 51 e8 5c 79 c4 22  a.|.U.]z..Q.\y."
00000f0: 32 35 36 62 33 38 62 22 24 12 23 20 5c 22 12 21  256b38b"$.# \".!
0000100: 08 00 02 22 3a 69 32 2f 7b 5f 30 3d 5f 29 33 33  ...":i2/{_0=_)33
0000110: 3f 61 40 5c 2f 5c 2a 7d 2f 30 61 2f 6c 69 28 3d  ?a@\/\*}/0a/li(=
0000120: 60                                               <

ทำงานโดยแทนที่การทำงานทั่วไป (เช่น 2 8 18 32 ) ด้วยจำนวนเต็มมากกว่า 32 และพิจารณาอาร์เรย์ของการกำหนดค่าทั้งหมดเป็นหมายเลขฐาน 38 ซึ่งเข้ารหัสในไบนารี

ตัวอย่างการวิ่ง

$ base64 -d > electrons.cjam <<< Isy1oxr3vQcbJs5zFlWHCCfSZVRmrME4/96V2Ip3bU4NE9+7t8aMrmsyTbnxfLnxvGgtilwi5lwi4dfJgLqlXWQkRwuqeMkTpQplQQjz7uMuWJIZXxqA/NkwO1GZxxtRugyKPH3wYB7VHOcvMxbIH+bfJHXRUeavOLT3sWN3FI3TabyZnqWYVlPncfdIdnokp9xcIvymVQUw4gPWqO8an+QDxqBeYL4BK8oSg9RkaT2nLsxZXgy7abAZHeHyU+Qbbm3MRdMfzDy3G1/KyNCU/gXqrtyYnppHpvo6DsNF7zFhoHyAVZpdeq+OUehcecQiMjU2YjM4YiIkEiMgXCISIQgAAiI6aTIve18wPV8pMzM/YUBcL1wqfS8wYS9saSg9YA==
$ cksum electrons.cjam 
3109698089 289 electrons.cjam
$ LANG=en_US cjam electrons.cjam <<< 42; echo
[2 8 18 13 1]
$ for i in {1..118}; do LANG=en_US cjam electrons.cjam <<< $i; echo; done | md5sum
d09cb34c282ee52c2466a6b80aa30d22  -
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.