การเลือกภาษาสำหรับการเล่นกอล์ฟ [ปิด]


28

อะไรคือเคล็ดลับในการเลือกภาษาที่ถูกต้องในการเล่นกอล์ฟ ปัจจัยใดที่ส่งผลต่อภาษาที่เลือก

ต่อไปนี้เป็นตัวอย่างปัญหาบางประเภท:

  • ปัญหาที่ต้องใช้โซลูชันI / Oไม่ว่าจะเป็นคอนโซลหรือไฟล์
  • ปัญหาที่ต้องแยกวิเคราะห์
  • ปัญหาที่ต้องให้คุณเขียนโซลูชันเป็นคำจำกัดความของฟังก์ชัน
  • ปัญหาทางคณิตศาสตร์
  • ปัญหาการจัดการกับตัวเลขสำคัญ
  • การไขปริศนาตัวเลข
  • ดำเนินการวิธีการเชิงตัวเลข
  • การประมวลผลสตริง
  • การประมวลผลอาร์เรย์
  • ปัญหาอาร์เรย์ 2 มิติที่ยุ่งยาก
  • เรขาคณิตเชิงคำนวณ
  • recursion
  • กราฟิก 2D
  • กราฟิก 3 มิติ
  • เสียง
  • เครือข่าย / เว็บ
  • การประมวลผลแบบขนาน

อย่าพูดง่ายๆเช่น "ใช้ GolfScript | J" เพราะคุณชอบ


สำหรับปัญหาบางอย่างมันเป็นระบบประเภท เช่นถ้าคุณต้องการจัดการกับจำนวนเต็มมากกว่า 64 บิตคุณต้องการภาษาที่มีอยู่ในนั้น (เช่น Golfscript, Haskell) มากกว่าภาษาที่ทำให้พวกเขามีราคาแพง (เช่น Java)
Peter Taylor

ฉันได้ทำวิกินี้ตามนโยบายของเราสำหรับคำถามประเภท "เคล็ดลับ"
dmckee

99 ขวดจะมีประโยชน์ถ้าคุณจำเป็นต้องมีจุดเริ่มต้นด้วยตัวอักษรภาษาเฉพาะ ...
เจส Millikan

ความรุ่งโรจน์ต่อ ace, trimsty, algorithmshark และ hosch250 สำหรับช่วยทำให้เธรดนี้เป็นทรัพยากรที่ดีขึ้น กรุณาส่งผลงานมา! มันเป็นโทรโปรดปรานยากระหว่าง algorithmshark และ hosch250 ที่ทั้งสองให้จำนวนมากของความพยายามในรายละเอียด แต่ในท้ายที่สุด Herr ฉลามได้รับพยักหน้าสำหรับผู้นำทาง
Jonathan Van Matre

เลือกภาษาที่คุณต้องการ นอกจากนี้ยังเป็นการแข่งขันในภาษาต่างๆ โซลูชันที่น่าสนใจและไม่เหมือนใครในภาษาอื่น ๆ นั้นดีกว่า
Mego

คำตอบ:


-1

ขึ้นอยู่กับสิ่งที่ต้องการ C / C ++ นั้นรวดเร็ว แต่คุณต้องเขียนโค้ดด้วยตัวเองมากขึ้น Python และ Ruby ทำงานช้าลง แต่ง่ายกว่าในการเขียนโค๊ดด้วยวิธีการในตัวที่ทำให้การทำงานสั้นลงมากและจะจัดการกับค่าขนาดใหญ่โดยอัตโนมัติ (ถ้ามี RAM) การใช้ภาษาที่ใช้งานได้เช่น Haskell นั้นยอดเยี่ยมสำหรับการใช้งานทางคณิตศาสตร์อย่างหมดจดหากสามารถแก้ไขปัญหาได้


2
ในฐานะผู้ใช้งานไพ ธ อนส่วนใหญ่ใน Py คุณจ่ายเพื่อความสะดวกในการใช้งานของคุณในการนับจำนวนตัวอักษรแม้ว่าจะมีเทคนิคแฮ็คที่สามารถบันทึกอักขระได้ Haskel และ Lisp ในขณะที่ความสนุกสนานมีแนวโน้มที่จะทำงานได้นานกว่า Python
arrdem

นี่อาจไม่ใช่คำตอบที่ยอมรับได้ คำอธิบายเกี่ยวกับภาษาระดับสูงและระดับต่ำไม่มีอะไรเกี่ยวข้องกับการนับตัวอักษร
Samy Bencherif

ใช่มันเป็นความจริงที่แท้จริงที่จะระงับคำตอบของคำถามที่แก้ไขเมื่อวันที่ 23 กุมภาพันธ์ 2560 บางทีเราควรหยุดเปลี่ยนคำถามหลังจากที่ได้รับคำตอบแล้ว?
ewanm89

10

ใส่สองเซ็นต์ของฉันในภาษาการเขียนโปรแกรมอาร์เรย์ , JและAPLโดยเฉพาะ

K / Kona, Q, และ Nial ตกอยู่ในหมวดหมู่นี้เช่นกัน แต่โดยทั่วไปแล้วพวกเขาก็มีข้อดีและข้อวิจารณ์เหมือนกัน ใช้ดุลยพินิจ ฉันจะใช้ตัวอย่าง J ด้านล่างส่วนใหญ่เป็นเพราะ ASCII และง่ายต่อการพิมพ์ - จำได้ว่าตัวอักษร APL นับเป็นไบต์เดียวดังนั้นอย่าปล่อยให้ปัญหาของคุณเกี่ยวกับภาษาเป็นทางเลือกสำหรับการเล่นกอล์ฟ

  • ปัญหาทางคณิตศาสตร์
  • การไขปริศนาตัวเลข
  • ดำเนินการวิธีการเชิงตัวเลข
  • ปัญหาอาร์เรย์ 2 มิติที่ยุ่งยาก

ทั้งสองนี้เป็นภาษาทางคณิตศาสตร์และการจัดการข้อมูลที่ดีมากเพราะพวกมันจะโยนอาร์เรย์ในระดับสูงและมีการวนลูปมากมายโดยปริยายโดยการพูดเช่นเพิ่มอีก 10 ใน 3, 4 และ 5 ( 10 + 3 4 5) แถวของอาร์เรย์ ( +/"1 arr- การวนซ้ำอยู่ใน"1)

  • ปัญหาการจัดการกับตัวเลขสำคัญ

โดยเฉพาะอย่างยิ่งปัญหาจำนวนเฉพาะเจมีพื้นฐานแบบเร็วและสั้นเช่นเดียวกับบางภาษาของ APL (แก้ไข: ฉันกำลังคิดถึง Nars2000 ซึ่งเป็นภาษาถิ่นและเป็นส่วนหนึ่งในการนำไปใช้ที่แตกต่างกันโดยสิ้นเชิง APL ไม่มี builtin สำหรับช่วงเวลา) N-th prime ( p:), no. ของช่วงถึง ( _1&p:), แฟคตอริ่ง ( q:), GCD และ LCM ( +.และ*.) และอื่น ๆ มีจำนวนมากอยู่ที่นั่น อย่างไรก็ตามในทางปฏิบัติคำถามมักจะระบุว่าคุณต้องเตรียมการใช้งานเฉพาะของคุณเองดังนั้นสิ่งเหล่านี้จึงไม่เห็นการใช้งานมากเกินไป ยังคงมีวิธีที่ประณีตและเป็นแฟนซีในการได้รับสิ่งที่ดีที่สุดที่คุณต้องการมันเพิ่งจะกลายเป็นน้อยตัดและวาง

  • การประมวลผลสตริง
  • การประมวลผลอาร์เรย์

การประมวลผลแถวและสตริงเป็นบิตของถุงผสม: ถ้าเป็นสิ่งที่ APL / J ทำได้ดีหรือมีสำนวนดั้งเดิมหรือสำนวนสามัญสำหรับมันเกือบจะเป็นเรื่องเล็กน้อย ถ้ามันเป็นสิ่งที่เรียงตามลำดับมากและไม่ขนานกันมากคุณจะมีช่วงเวลาที่แย่ อะไรก็ตามที่อยู่ในอากาศแม้ว่าพวกมันจะตอบสนองได้ดี

  • ปัญหาที่ต้องใช้โซลูชัน I / O ไม่ว่าจะเป็นคอนโซลหรือไฟล์
  • ปัญหาที่ต้องให้คุณเขียนโซลูชันเป็นคำจำกัดความของฟังก์ชั่น

IO แปลก APL มีการแสดงออกของการป้อนข้อมูลตัวเดียว แต่มีเจที่คุณต้องใช้เวลาอย่างน้อย 8 ".1!:1]1ในการอ่านในจำนวน: เอาท์พุทเป็น verbose น้อยกว่าเล็กน้อย แต่คุณยังคงมองไปที่ 6 หรือ 7 ตัวอักษรที่เสียไปในทางปฏิบัติ J โดยเฉพาะอย่างยิ่งชอบมันมากถ้าคุณสามารถใช้ในการป้อนข้อมูลเป็นข้อโต้แย้งกับฟังก์ชั่นแทนที่จะต้องยุ่งกับ IO ตัวเอง

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

แต่ด้วย J มันมีค่าใช้จ่ายเล็กน้อยสำหรับการกำหนดฟังก์ชั่นอย่างชัดเจน3 :'...'- และคุณต้องหลีกเลี่ยงสตริงใด ๆ ภายใน - ดังนั้นสิ่งที่มักจะทำคือสิ่งที่เรียกว่าการเขียนโปรแกรมโดยปริยาย: โปรแกรมของคุณในระดับฟังก์ชั่น ไม่แตกต่างจาก Haskell นี่อาจเป็นทั้งคำอวยพรและคำสาปเพราะคุณไม่จำเป็นต้องใช้ตัวละครจำนวนมากที่อ้างถึงข้อโต้แย้งของคุณ แต่มันง่ายที่จะจมอยู่ในวงเล็บและจบลงด้วยการสูญเสียตัวละครหลายสิบตัวที่พยายามจะแฮ็ค สิ่งที่ใช้งานได้

  • ปัญหาที่ต้องแยกวิเคราะห์
  • เรขาคณิตเชิงคำนวณ

ฉันไม่มีประสบการณ์เกี่ยวกับการเล่นกอล์ฟโดยเฉพาะปัญหาเหล่านี้ แต่ฉันจะพูดแบบนี้: ในที่สุดภาษาการเขียนโปรแกรมอาเรย์นั้นดีมากในการไพพ์และแปลงข้อมูลจำนวนมากในแบบเดียวกัน หากคุณสามารถเปลี่ยนปัญหาให้เป็นการออกกำลังกายในการสับหมายเลขคุณสามารถทำให้เป็นปัญหา APL / J ได้โดยไม่ต้องเหงื่อ

ที่กล่าวว่าไม่ใช่ทุกสิ่งที่เป็นปัญหา APL / J ซึ่งแตกต่างจาก Golfscript, APL และ J เพิ่งเกิดขึ้นจะดีสำหรับการเล่นกอล์ฟควบคู่ไปกับผลประโยชน์อื่น ๆ ของพวกเขา;)


ผลงานยอดเยี่ยม! ขอบคุณที่เป็นคนแรกที่ลงสระ
Jonathan Van Matre

4

ทำไม Perl ถึงไม่ได้รับการยกย่อง? มันเป็นภาษากอล์ฟที่ยอดเยี่ยมสำหรับเกือบทุกคนโดยเฉพาะอย่างยิ่งสิ่งที่เกี่ยวข้องกับสตริง (regex)

Burlesque นั้นดีสำหรับโปรแกรมที่เกี่ยวข้องกับจำนวนในขณะที่ Ruby นั้นยอดเยี่ยมสำหรับการจัดการข้อความที่ง่ายขึ้น

มีจริงรายการของภาษาและคะแนนการเล่นกอล์ฟมากกว่าที่นี่


ฉันไม่รู้เกี่ยวกับ Perl แต่ฉันเห็นด้วย
ckjbgames

2

ฉันชอบใช้ภาษาการเขียนโปรแกรมที่คลุมเครือเพื่อ (พยายาม) ทำงานให้เสร็จ

นี่คือรายการโปรดของฉันสำหรับรายละเอียดที่คุณระบุไว้:

ปัญหาที่ต้องใช้โซลูชัน I / O ไม่ว่าจะเป็นคอนโซลหรือไฟล์

ภาษาอย่างTI-Basicทำงานได้ดี แต่ฉันชอบทับทิมเพราะputs

ปัญหาที่ต้องแยกวิเคราะห์

GolfScriptจะช่วยคุณที่นี่อย่างแน่นอน

ปัญหาที่ต้องให้คุณเขียนโซลูชันเป็นคำจำกัดความของฟังก์ชั่น

TI-84 Table - อนุญาตให้ฟังก์ชันY=เช่นY=|X|ส่งคืนค่าสัมบูรณ์ของ X

ปัญหาทางคณิตศาสตร์

TI-Basic - สร้างขึ้นสำหรับเครื่องคิดเลขดังนั้นจึงมีคณิตศาสตร์;)

ปัญหาการจัดการกับตัวเลขสำคัญ

ไม่มีอะไรพิเศษ; Mathematicaอาจเป็นเครื่องมือที่เหมาะสมสำหรับงาน

การไขปริศนาตัวเลข

TI-Basicจะทำการวนซ้ำโดยอัตโนมัติ

ดำเนินการวิธีการเชิงตัวเลข

TI-BasicหรือMathematica

การประมวลผลสตริง

Python - มีฟังก์ชันสตริงที่ยอดเยี่ยม

ไม่ว่าคุณจะคิดว่าTI-Basicนั้นดีแค่ไหนอย่าใช้มันกับสตริง ...

การประมวลผลอาร์เรย์

TI-Basic - ลูปโดยอัตโนมัติผ่านอาร์เรย์ ; เช่นการเพิ่มค่าทั้งหมดในอาร์เรย์ -L1+1→L1

Ruby - ยังมีคุณสมบัติอาเรย์ที่มีประสิทธิภาพมากและแน่นอนว่า!จะช่วยในการบีบอัดโค้ดด้วย

ปัญหาอาร์เรย์ 2 มิติที่ยุ่งยาก

RubyหรือPythonทำงานได้ดีที่สุดที่นี่เนื่องจากTI-Basicไม่รองรับอาร์เรย์ 2 มิติ

เรขาคณิตเชิงคำนวณ

TI-Basicมีคุณสมบัติทางเรขาคณิตและสามารถใช้กับคณิตศาสตร์ส่วนใหญ่จนถึงแคลคูลัสและพีชคณิตเชิงเส้น


โบนัส

วนลูป

ทั้งArduinoหรือQuomplex Arduinoมีในตัวvoid loop(){}และQuomplexมีลูปแบบไม่ จำกัด ที่มีอยู่ในวงเล็บ ( [])

Drawing / GUI

Game Maker Languageมีคุณสมบัติการวาดที่ทรงพลังมากและ TI-Basicยังเป็นเครื่องมือที่มีประโยชน์โดยทั่วไปเนื่องจากการสนับสนุนการวาดภาพบนกราฟ

Quines

ทั้งHQ9 +หรือQuomplexเพราะHQ9 +มีQการส่งออกรหัสที่มาของโปรแกรมและQuomplexโดยอัตโนมัติจะพิมพ์ออกมารหัสที่มาเว้นแต่*(output) ที่ระบุไว้หรือผลิตออกไม่มีกำหนดด้วย#


2

หากคุณกำลังแก้ปัญหาทางคณิตศาสตร์และคุณไม่ได้มี Mathematica ลองSage มันขึ้นอยู่กับ Python ดังนั้นหากคุณรู้จัก Python อยู่แล้วคุณไม่ต้องการเวลามากในการเรียนรู้ไวยากรณ์

ตัวอย่าง:

นอกจากนี้ยังมีประโยชน์สำหรับการพล็อตกราฟและการแก้สมการ (เช่นคุณสามารถใช้solve()ฟังก์ชั่นใน Sage หรือถ้าเป็นสิ่งต้องห้ามตามกฎจะช่วยให้การใช้งานง่ายของกระบวนการ Newton Raphson เพราะมันมีdiff()ฟังก์ชั่น .

นอกจากนี้หากคุณเป็นโปรแกรมเมอร์ Python2 การใช้ Sage อาจทำให้คุณโกงโดยการข้ามimportข้อความสั่งยาวๆ ตัวอย่างเช่นmathและsysนำเข้าแล้วโดยค่าเริ่มต้น (โปรดทราบว่านี่อาจไม่ทำงานหากโปรแกรม Python2 ของคุณขึ้นอยู่กับการแบ่งจำนวนเต็ม)


ข้อมูลดี! ขอบคุณสำหรับการมีส่วนร่วม
Jonathan Van Matre

1

ฉันรู้สามภาษา - Java, C ++ และ Python 3 ฉันรู้ว่าไม่มีภาษาเหล่านี้ในระดับสูง แต่นี่เป็นประสบการณ์ของฉันกับพวกเขา

Java:

ฉันจะไม่ใช้ Java เพื่อเล่นกอล์ฟอีกเลย มันต้องใช้เวลากว่า 80 Hello World!ตัวอักษรเพียงเพื่อเขียน อย่างไรก็ตามมันมีจุดแข็ง:

อินพุตต้องการการสร้างScannerวัตถุ เป็นการยากที่จะป้อนอักขระเดียว มันต้องการสเปคของประเภทที่คุณกำลังป้อน
การแยกวิเคราะห์ง่ายพอเนื่องจากการforวนซ้ำ การปรับปรุงการforวนซ้ำนั้นยอดเยี่ยมสำหรับสิ่งนี้
Java รองรับเมธอด แต่การประกาศเมธอดค่อนข้างยาว
Java เป็นเลิศทางคณิตศาสตร์เช่นเดียวกับภาษาระดับสูงอื่น ๆ ทั้งหมด
Java ใช้ยากเมื่อปัญหาเกี่ยวข้องกับการแก้ไขสตริง คุณไม่สามารถแก้ไขสตริงที่มีอยู่ได้
อาร์เรย์ของ Java นั้นใช้ง่าย
Java ดีในการเรียกซ้ำ
Java มีกราฟิกในตัว พวกเขาใช้งานง่ายมาก

C ++

C ++ เป็นภาษาที่แข็งแกร่งมาก แต่มันเป็นเรื่องที่ค่อนข้างยืดยาวเมื่อพยายามที่จะกอล์ฟที่ 56 Hello world!ตัวอักษร

อินพุตและเอาต์พุตเป็นเรื่องง่าย คุณไม่จำเป็นต้องระบุประเภทที่คุณกำลังป้อน - ทำโดยอัตโนมัติ อย่างไรก็ตามคุณต้องรวมไลบรารี iostream
การแยกวิเคราะห์ง่ายมาก
การประกาศฟังก์ชั่นนั้นง่าย แต่กินตัวละครที่สำคัญมากมาย C ++ เก่งคณิตศาสตร์ แต่ไม่มี PI หรือ E เหมือน Java
สตริงของ C ++ นั้นใช้งานง่ายและเปลี่ยนแปลงได้ตามต้องการ
ฉันใช้vectors ที่เป็นไปได้แทนarrays แต่ทั้งสองใช้งานง่าย
C ++ ดีที่การเรียกซ้ำ
C ++ ไม่รวมกราฟิกในตัว

Python 3

Python 3 คล้ายกับ C ++ และ Java มันสั้นกว่ามากเพราะมันไม่ได้พิมพ์อย่างรุนแรง - ในคำอื่น ๆ มันก็แค่เดาว่าตัวแปรคืออะไร

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


ฉันเดาว่าด้วยการปรับปรุง for-loop คุณกำลังพูดถึง range-for loop C ++ รองรับสิ่งนี้ตั้งแต่ C ++ 11 ( en.cppreference.com/w/cpp/language/range-for ) มันคล้ายกับวากยสัมพันธ์ของ Java for-range loop และต้องการให้คลาสของวัตถุที่ทำซ้ำได้เริ่มต้นใช้ () และสิ้นสุด () หรือเริ่ม (T) และเริ่มต้น (T) และสิ้นสุด (T) เพื่อให้โอเวอร์โหลดสำหรับวัตถุที่กำหนด มันยังนำมาใช้สำหรับสตริง C-style และอาร์เรย์ในตัวและใช้งานได้กับคอนเทนเนอร์ไลบรารีมาตรฐานทั้งหมด
foobar

@foobar ใช่ฉันกำลังพูดถึงเรื่องนั้น ขอบคุณสำหรับข้อมูลฉันต้องการตั้งแต่นั้นมาตั้งแต่ฉันใช้จาวา
Hosch250

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