สี่ปริศนาสี่


21

The Four fours puzzleเป็นเกมปริศนาทางคณิตศาสตร์ที่ได้รับความนิยมซึ่งเกี่ยวข้องกับการใช้ 4s 4 ตัว (และไม่มีหมายเลขอื่น) และชุดการดำเนินการที่กำหนดไว้เพื่อเข้าถึงทุกหมายเลขตั้งแต่ 0 ถึงสูงสุดที่กำหนด

ในรุ่นนี้อนุญาตให้ดำเนินการต่อไปนี้เท่านั้น:

  • สัญลักษณ์การจัดกลุ่มใด ๆ อาจถูกนำมาใช้
  • การบวก ( +), การลบ ( -), การคูณ ( *), ส่วน ( /)
  • แฟกทอเรียล ( !) ฟังก์ชันแกมมา ( Γ)
  • การยกกำลัง ( ^), รากที่สอง ( )
  • การต่อข้อมูล (เช่น. 44คือสองวิ4)
  • จุดทศนิยม (เช่น. 4.4คือสอง4s), Overbar (เช่น. .4~ = 4/9)

คำสั่งมาตรฐานของการดำเนินการใช้

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

ตัวอย่างเช่นมีการป้อนข้อมูลของโปรแกรมของคุณอาจสร้าง044-44

ไม่อนุญาตให้ใช้โมดูลภายนอก เท่านั้น_.4~ที่ได้รับอนุญาตสำหรับผู้ประกอบการ overbar - ที่เป็นเพียงคนเดียวที่4สามารถจะอยู่เบื้องหลังจุดทศนิยม

นี่คือรหัสกอล์ฟดังนั้นทางออกที่สั้นที่สุดจึงชนะ


แก้ไข : เพื่อให้ชัดเจนเป็นพิเศษโปรแกรมต้องส่งเอาต์พุตชุดของการดำเนินการข้างต้นที่ใช้กับสี่s อย่างแน่นอน4 - ไม่มากไม่น้อย นอกจากนี้ยังเป็นคำที่ถูกต้องและนับเป็นใช้เพียงหนึ่ง.4 = 4/104


ไม่มีการปัดเศษ? :-(
John Dvorak

@JanDvorak เอ่อไม่ไม่ได้รับอนุญาต
ความผันผวน

อนุญาตให้มีแกมม่าและแฟคทอเรียลหรือไม่
John Dvorak

@JanDvorak ทุกสิ่งที่อยู่ในรายการ (แต่สามารถใช้ได้เฉพาะสิ่งที่ระบุไว้)
ความผันผวน

เราได้รับอนุญาตให้ส่งออกแฟกทอเรียลเป็นฟังก์ชั่นนำหน้า ( !(4)แทนที่จะ(4)!)
John Dvorak

คำตอบ:


6

GolfScript (129 ตัวอักษร *)

[4.`2'√4'24'4!'6'Γ4'1'Γ√4'120'ΓΓ4']2/:F{.F=[[44.`]]*\{`{+{'+*-'1/{:^;.[~@[\]{'()'1/*}%^*@@^~\]\}/}:|~2/~\+|;}+F/}%+}3*\{\0==}+?1=

เวลาทำงานอยู่ที่ลำดับ 4 นาทีบนพีซีของฉัน ปานกลางความเร็วสูงขึ้นสามารถรับได้ที่ค่าใช้จ่ายของตัวละครสองตัวโดยการเพิ่มการดำเนินงานที่เป็นเอกลักษณ์ทันทีหลังจากที่.&%+

ผมใช้การแสดงออกก่อนเขียนสำหรับ1, 2, 4, 6, 24, 120และ44และสร้างส่วนที่เหลือขึ้นมาจากผู้ที่ใช้เท่านั้น+, และ* -ด้วยวิธีนี้ฉันไม่จำเป็นต้องทำเลขคณิตใด ๆ ที่ไม่ใช่จำนวนเต็มในโปรแกรมเอง ฉันพยายามทำให้การแสดงออกง่ายขึ้นโดยการใส่ค่ารหัสที่ง่ายกว่าตอนเริ่มต้น

จำเป็นต้องใช้ค่าทั้งหมดเหล่านี้และจำเป็นต้องรองรับการลบทั้งสองทิศทาง ( complex_expression - simple_expressionและในทางกลับกัน) นอกจากนี้ยังจำเป็นต้องรวมการดำเนินการบางอย่างที่จำเป็นต้องใช้วงเล็บ (โดยเฉพาะa*(b-c)) ดังนั้นฉันจึงกำหนดการแสดงย่อยทั้งหมดโดยไม่เลือก

* ฉันกำลังนับคะแนนโค้ด Unicode ที่สมมติว่าโปรแกรมเป็นแบบ UTF-8 และแปรงใต้พื้นพรมข้อเท็จจริงที่ว่าถ้าคุณไม่ใช้ Ruby รุ่นล่าสุดเพื่อรันล่ามมันจะถือว่าเป็นอักขระ ASCII จริง ๆ หากคุณกังวลมากเกี่ยวกับเรื่องนี้ให้ใช้Gกับแกมม่าและvสำหรับ sqrt

ดีอย่างเคร่งครัดฉันจะลบ44ในการแลกเปลี่ยนสำหรับ11เป็น44/4และ71เป็น√(Γ√4+(ΓΓ4+Γ√4)!)แต่ที่ไม่ได้เป็นการปิดดี


7

Python 155 ไบต์

h={4:'4',24:'4!',6:'â4',.4:'.4',1:'âû4',4/9.:'.4~'}
f={}
def g(r,s='24',y='4!'):f[eval(s)]=y;[g(r-1,s+o+`k`,y+o+h[k])for k in h for o in'/*-+'if r]
g(3)

สามไบต์แรก ( \xEF\xBB\xBF) คือเครื่องหมายคำสั่ง UTF-8 ถึงแม้ว่าไฟล์ควรได้รับการบันทึกในรูปแบบ ANSI ûและâจะได้รับการ interpretted เป็นและΓตามลำดับ cp437และcp850ซึ่งควรจะทำงานในเพียงเกี่ยวกับกล่องของ Windows ใด ๆ

รันไทม์ประมาณ 0.4s บนคอมพิวเตอร์ของฉัน

ตัวอย่างการใช้งาน (ตั้งชื่อไฟล์four_fours.py):

$ python
>>> from four_fours import f
>>> f[39]
'4!+4!/.4/4'
>>> f[87]
'4!*4-4/.4~'
>>> for i in range(101): print i, f[i]
0 4!+4!-4!-4!
1 4!+4!/4!-4!
2 4!-4!+Γ4-4
3 4!-4!+4-Γ√4
4 4!+4!/Γ4-4!
.
.
.
96 4!+4!+4!+4!
97 4!*4!/Γ4+Γ√4
98 4!*4+Γ4-4
99 4!*4+4-Γ√4
100 4!*4!/Γ4+4

ผลลัพธ์สำหรับ 0..1000..100 เนื่องจากวิธีการแฮชซ้ำแล้วจึงชอบที่จะใช้4!บ่อยที่สุด

แก้ไข: บันทึกจำนวนไบต์ด้วยการเพิ่มΓ√4 = 1ซึ่งไม่จำเป็นสำหรับการจัดกลุ่มใด ๆ และโดยการลบ√4 = 2ซึ่งไม่จำเป็นอีกต่อไป


4

J, 175 161 ตัวอักษร

   f=.')',~'(',;@((<;._2'+ - * % .4 .4~ g(r(4)) r(4) 4 g(4) 4! ( ) '){~(143402 A.i.9)
      /:~(12,11,0,6$0 4 4)+(9$4 7 7)#:((,@(+/,-/,*/,%/)~)^:2,0.4 4r9 1 2 4 6 24)&i.)

   f 1
(.4+.4)+(.4%r(4))

   f 42
(r(4)+4)+(g(4)*g(4))

   f 100
(r(4)+r(4))+(4*4!)

รูปแบบที่ตรวจสอบเป็น(v op v) op (v op v)ที่v={0.4 4/9 1 2 4 6 24}และop={+ - * /}

ผล 0..100 เต็ม


ฉันไม่คิดว่า.4เป็นหมายเลขที่ถูกต้องสำหรับเกมนี้
John Dvorak

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