Помещение моих двух центов в языки программирования массива , в частности J и APL .
K / Kona, Q и Nial также попадают в эту категорию, но они, как правило, имеют те же преимущества и критику. Используйте усмотрение. Я буду использовать примеры J ниже, в основном потому, что это ASCII и, следовательно, их легко набирать - помните, что символы APL считаются как одиночные байты, поэтому не допускайте, чтобы это была ваша проблема с языком, выбранным для игры в гольф.
- Математические проблемы
- Решающие головоломки
- Выполнение численных методов
- Хитрые проблемы с двумерным массивом
Эти два очень хороших языка математики и манипулирования данными, потому что они отбрасывают массивы на высоком уровне, и много циклов выполняется неявно , например, добавляя десять к каждому из 3, 4 и 5 ( 10 + 3 4 5
) или суммируя каждый строка массива ( +/"1 arr
- цикл в "1
).
- Проблема, связанная с простыми числами
В частности, в случае простых чисел J имеет быстрые и короткие встроенные примитивы, как и некоторые диалекты APL. (Правка: я думаю о Nars2000, который является частью диалекта и частью совершенно другой реализации. У APL нет встроенной функции для простых чисел.) N-й простой ( p:
), нет. простых чисел до ( _1&p:
), факторинга ( q:
), GCD и LCM ( +.
и *.
) и т. д., там много всего. Однако на практике этот вопрос будет часто указывать на то, что вам нужно готовить свои собственные простые реализации, поэтому они не видят особого смысла. Есть все еще изящные и причудливые способы получить основной материал, в котором Вы нуждаетесь, это просто становится немного меньше вырезать и вставить.
- Обработка строк
- Обработка массива
Обработка массивов и строк - это немного смешанный пакет: если в APL / J он хорош или имеет примитивную или общую идиому, то это почти тривиально; если это что-то очень последовательное и не очень распараллеливаемое, у вас будет плохое время. Все, что находится между ними, находится в воздухе, хотя обычно они реагируют положительно.
- Проблемы, которые требуют решения ввода-вывода, либо консоли, либо файла
- Проблемы, которые требуют от вас написать решение в виде определения функции
IO странно. APL имеет выражение ввода односимвольного, но с J вы должны провести по крайней мере , 8 читать в номере: ".1!:1]1
. Вывод немного менее многословен, но на практике вы по-прежнему смотрите на 6 или 7 символов впустую. J, в частности, очень нравится, если вы можете воспринимать входные данные в качестве аргументов функции вместо того, чтобы возиться с самим вводом-выводом.
На практике, с J и APL, решение обычно пишется как функция, которую вы вызываете на консоли. С помощью APL вы можете просто ввести имена переменных для своих аргументов, обернуть выражение, с которым вы работали, в фигурные скобки и назвать его днем.
Но с J есть некоторые издержки для явного определения функций 3 :'...'
- и вы должны избегать любых строк внутри - так что обычно делается так называемое молчаливое программирование: вы программируете на уровне функций, комбинируя примитивы таким образом, мало чем отличается от Хаскелла. Это может быть как благословением, так и проклятием, потому что вам не нужно тратить столько символов, ссылающихся на ваши аргументы, но легко утонуть в скобках и потерять десятки символов, пытаясь взломать ваше короткое и умное решение. то, что работает.
- Проблемы, которые требуют разбора
- Вычислительная геометрия
У меня нет опыта игры в гольф с этими конкретными проблемами, но я скажу так: в конце концов, языки программирования массивов очень хороши для передачи и преобразования большого количества данных таким же образом. Если вы можете превратить проблему в упражнение по перетасовке чисел, вы можете сделать это проблемой APL / J, без пота.
Тем не менее, не все это проблема APL / J. В отличие от Golfscript, APL и J оказались хороши для игры в гольф, наряду с другими преимуществами;)