Apa saja tips untuk memilih bahasa yang tepat untuk golf? Faktor apa yang memengaruhi bahasa yang akan dipilih?
Berikut adalah beberapa contoh jenis masalah:
- Masalah yang membutuhkan solusi I / O , baik konsol atau file
- Masalah yang membutuhkan parsing
- Masalah yang mengharuskan Anda untuk menulis solusi Anda sebagai definisi fungsi
- Soal matematika
- Masalah berurusan dengan bilangan prima
- Memecahkan teka-teki angka
- Melakukan metode numerik
- Pemrosesan string
- Pemrosesan array
- Masalah array 2D yang rumit
- Geometri komputasi
- Rekursi
- Grafik 2D
- Grafik 3D
- Audio
- Jaringan / web
- Proses paralel
Jangan hanya mengatakan hal-hal seperti "Gunakan GolfScript | J" karena Anda menyukainya.
Jawaban:
Bergantung pada apa yang dibutuhkan seseorang, C / C ++ cepat, tetapi Anda harus mengkodekan lebih banyak pekerjaan sendiri. Python dan Ruby lebih lambat tetapi jauh lebih mudah untuk dikodekan dengan metode bawaan yang memperpendek banyak pekerjaan dan mereka secara otomatis menangani nilai yang jauh lebih besar (jika seseorang memiliki RAM). Menggunakan bahasa fungsional seperti Haskell sangat bagus untuk penggunaan fungsional matematika murni jika seseorang dapat membingkai masalah dengan cara itu.
sumber
Menempatkan dua sen saya pada bahasa pemrograman array , khususnya J dan APL .
K / Kona, Q, dan Nial termasuk dalam kategori ini juga, tetapi mereka umumnya memiliki manfaat dan kritik yang sama. Gunakan kebijaksanaan. Saya akan menggunakan contoh J di bawah ini, sebagian besar karena ini adalah ASCII dan dengan demikian mudah diketik - ingat daripada karakter APL yang dihitung sebagai byte tunggal, jadi jangan biarkan itu menjadi masalah Anda dengan bahasa sebagai pilihan untuk bermain golf.
Keduanya adalah matematika yang sangat baik dan bahasa manipulasi data, karena mereka melemparkan array di sekitar tingkat tinggi, dan banyak perulangan dilakukan secara implisit , dengan mengatakan, misalnya tambahkan sepuluh masing-masing dari 3, 4, dan 5 (
10 + 3 4 5
) atau jumlah masing-masing deretan array (+/"1 arr
--perulangan berada di"1
).Dengan masalah bilangan prima khususnya, J memiliki primitif cepat dan pendek, seperti halnya beberapa dialek APL. (Sunting: Saya sedang memikirkan Nars2000, yang merupakan dialek bagian dan implementasi yang sama sekali berbeda. APL tidak memiliki builtin untuk bilangan prima.) N-th prime (
p:
), no. dari bilangan prima hingga (_1&p:
), anjak (q:
), GCD dan LCM (+.
dan*.
), dan seterusnya, ada banyak di sana. Namun, dalam praktiknya, pertanyaannya sering kali menentukan bahwa Anda harus memasak implementasi utama Anda sendiri, jadi ini tidak terlalu berguna. Masih ada cara rapi dan mewah untuk mendapatkan barang-barang utama yang Anda butuhkan, itu hanya menjadi sedikit kurang cut-and-paste.Array dan pemrosesan string adalah sedikit campuran: jika itu adalah sesuatu yang baik untuk APL / J atau memiliki idiom primitif atau umum, hampir sepele; jika itu adalah sesuatu yang sangat berurutan dan tidak bisa diparalelkan, Anda akan memiliki waktu yang buruk. Apa pun di antaranya ada di udara, meskipun biasanya mereka akan merespons dengan baik.
IO aneh. APL memiliki ekspresi masukan karakter tunggal, tetapi dengan J Anda harus menghabiskan setidaknya 8 untuk membaca di nomor:
".1!:1]1
. Outputnya sedikit kurang verbose, tetapi Anda masih melihat 6 atau 7 karakter terbuang, dalam praktiknya. J khususnya benar-benar sangat menyukainya jika Anda dapat menerima input sebagai argumen untuk suatu fungsi, daripada harus mengacaukannya dengan IO itu sendiri.Dalam praktiknya, dengan J dan APL, biasanya solusinya ditulis sebagai fungsi yang Anda panggil di konsol. Dengan APL, pada dasarnya Anda bisa memasukkan nama variabel untuk argumen Anda dan membungkus ekspresi yang Anda kerjakan dengan kurung kurawal dan menyebutnya sehari.
Tetapi dengan J, ada sedikit overhead untuk mendefinisikan fungsi secara eksplisit -
3 :'...'
, dan Anda harus menghindari string apa pun di dalam - jadi apa yang biasanya dilakukan adalah sesuatu yang disebut pemrograman diam-diam: Anda memprogram pada tingkat fungsi, menggabungkan primitif dengan cara tidak berbeda dengan Haskell. Ini bisa menjadi berkah sekaligus kutukan, karena Anda tidak harus menghabiskan banyak karakter untuk merujuk pada argumen Anda, tetapi mudah untuk tenggelam dalam tanda kurung dan akhirnya kehilangan puluhan karakter yang mencoba meretas solusi Anda yang pendek dan cerdas ke dalam sesuatu yang berhasil.Saya tidak memiliki pengalaman dalam bermain golf masalah-masalah khusus ini, tetapi saya akan mengatakan ini: pada akhirnya, bahasa pemrograman array sangat baik dalam memipis dan mengubah banyak data dengan cara yang sama. Jika Anda bisa mengubah masalah menjadi latihan dalam pengocokan angka, Anda bisa menjadikannya masalah APL / J, tanpa keringat.
Yang mengatakan, tidak semuanya masalah APL / J. Tidak seperti Golfscript, APL dan J kebetulan bagus untuk bermain golf, di samping manfaat lainnya;)
sumber
Mengapa Perl belum dipuji? Ini adalah bahasa golf yang sangat baik, untuk hampir semua ini, terutama hal-hal terkait string (regex).
Burlesque baik untuk program yang berhubungan dengan angka, sedangkan Ruby sangat bagus untuk manipulasi teks yang lebih sederhana.
Sebenarnya ada daftar bahasa dan skor golf di sini .
sumber
Saya suka menggunakan bahasa pemrograman yang tidak jelas untuk (mencoba) menyelesaikan pekerjaan.
Berikut adalah favorit saya untuk detail yang Anda cantumkan:
Masalah yang membutuhkan solusi I / O, baik konsol atau file
Bahasa seperti TI-Basic berfungsi dengan baik, tapi saya lebih suka Ruby karena
puts
Masalah yang membutuhkan parsing
GolfScript pasti akan membantu Anda di sini
Masalah yang mengharuskan Anda untuk menulis solusi Anda sebagai definisi fungsi
Tabel TI-84 - memungkinkan fungsi seperti
Y=
misalnyaY=|X|
mengembalikan nilai absolut XSoal matematika
TI-Basic - dibuat untuk kalkulator, jadi termasuk matematika;)
Masalah berurusan dengan bilangan prima
Tidak ada yang spesial; Mathematica mungkin merupakan alat yang tepat untuk pekerjaan itu
Memecahkan teka-teki angka
TI-Basic karena secara otomatis loop melalui array
Melakukan metode numerik
TI-Basic atau Mathematica
Pemrosesan string
Python - memiliki beberapa fungsi string yang hebat.
Tidak peduli seberapa baik Anda berpikir TI-Basic , jangan gunakan untuk string ...
Pemrosesan array
TI-Basic - secara otomatis loop melalui array ; mis., tambah semua nilai dalam array -
L1+1→L1
Ruby - juga memiliki fitur array yang sangat kuat, dan tentu saja
!
akan membantu kompres kode jugaMasalah array 2D yang rumit
Ruby atau Python berfungsi paling baik di sini, karena TI-Basic tidak mendukung array 2D
Geometri komputasi
TI-Basic memiliki fitur geometris dan dapat digunakan untuk sebagian besar matematika hingga Aljabar Kalkulus dan Linear
BONUS
Looping
Baik Arduino atau Quomplex . Arduino memiliki built-in
void loop(){}
dan Quomplex memiliki loop tak hingga yang terkandung oleh tanda kurung ([]
)Gambar / GUI
Game Maker Language memilikifitur menggambar yang sangat kuat, dan TI-Basic juga merupakan alat yang umumnya bermanfaat karena dukungan untuk menggambar pada grafik.
Quines
Baik HQ9 + atau Quomplex karena HQ9 + memiliki
Q
untuk meng - output kode sumber program dan Quomplex akan secara otomatis mencetak kode sumbernya kecuali*
(output) ditentukan atau tidak menghasilkan output, didefinisikan dengan#
sumber
Jika Anda memecahkan masalah matematika dan Anda tidak memiliki Mathematica, coba Sage . Ini didasarkan pada Python, jadi jika Anda sudah tahu Python Anda tidak perlu banyak waktu untuk mempelajari sintaksnya.
Contoh:
Ini juga berguna untuk plot grafik dan penyelesaian persamaan (misalnya Anda dapat menggunakan
solve()
fungsi dalam Sage, atau jika itu dilarang oleh aturan, ini memungkinkan implementasi yang mudah dari proses Newton Raphson karena memilikidiff()
fungsi yang dapat melakukan diferensiasi simbolik) .Selain itu, jika Anda seorang programmer Python2, menggunakan Sage memungkinkan Anda untuk menipu dengan melewatkan
import
pernyataan panjang . Misalnya,math
dansys
sudah diimpor secara default. (Perhatikan bahwa ini mungkin tidak berfungsi jika program Python2 Anda bergantung pada pembagian integer.)sumber
Saya tahu tiga bahasa - Java, C ++, dan Python 3. Saya tidak tahu ini pada tingkat tinggi, tapi ini adalah pengalaman saya dengan mereka.
Jawa:
Saya tidak akan pernah menggunakan Java untuk bermain golf lagi. Dibutuhkan lebih dari 80 karakter hanya untuk menulis
Hello World!
. Namun, ia memang memiliki kekuatan:C ++
C ++ adalah bahasa yang sangat kuat, tetapi agak panjang ketika mencoba bermain golf dengan 56 karakter
Hello world!
.Python 3
Python 3 mirip dengan C ++ dan Java. Itu jauh lebih pendek karena tidak diketik dengan kuat - dengan kata lain, itu hanya menebak apa variabelnya.
sumber