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.
- Soal matematika
- Memecahkan teka-teki angka
- Melakukan metode numerik
- Masalah array 2D yang rumit
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
).
- Masalah berurusan dengan bilangan prima
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.
- Pemrosesan string
- Pemrosesan array
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.
- Masalah yang membutuhkan solusi I / O, baik konsol atau file
- Masalah yang mengharuskan Anda untuk menulis solusi Anda sebagai definisi fungsi
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.
- Masalah yang membutuhkan parsing
- Geometri komputasi
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;)