Какие советы по выбору правильного языка для гольфа? Какие факторы влияют на язык, который будет выбран?
Вот несколько примеров типов проблем:
- Проблемы, которые требуют решения ввода-вывода , либо консоли, либо файла
- Проблемы, которые требуют разбора
- Проблемы, которые требуют от вас написать решение в виде определения функции
- Математические проблемы
- Проблема, связанная с простыми числами
- Решающие головоломки
- Выполнение численных методов
- Обработка строк
- Обработка массива
- Хитрые проблемы с двумерным массивом
- Вычислительная геометрия
- Рекурсия
- 2D графика
- 3D графика
- аудио
- Сеть / Интернет
- Параллельная обработка
Не просто говорите что-то вроде «Используйте GolfScript | J», потому что они вам нравятся.
Ответы:
Зависит от того, что нужно, C / C ++ работает быстро, но вы должны сами написать больше кода. Python и Ruby работают медленнее, но их гораздо проще кодировать с помощью встроенных методов, которые сокращают объем работы, и они автоматически обрабатывают бесконечно большие значения (если у вас есть ОЗУ). Использование функционального языка, такого как Haskell, отлично подходит для чисто математического функционального использования, если можно так решить проблему.
источник
Помещение моих двух центов в языки программирования массива , в частности 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 оказались хороши для игры в гольф, наряду с другими преимуществами;)
источник
Почему Perl еще не похвалили? Это отличный язык для игры в гольф, почти для каждого из них, особенно для струнных (регулярное выражение).
Бурлеск хорош для программ, связанных с числами, а Ruby - для более простых манипуляций с текстом.
Там на самом деле список языков и гольф оценки над здесь .
источник
Мне нравится использовать малопонятные языки программирования, чтобы (попытаться) выполнить работу.
Вот мои любимые для деталей, которые вы перечислили:
Проблемы, которые требуют решения ввода-вывода, либо консоли, либо файла
Такие языки, как TI-Basic, работают хорошо, но я предпочитаю Ruby из-за
puts
Проблемы, которые требуют разбора
GolfScript определенно поможет вам здесь
Проблемы, которые требуют от вас написать решение в виде определения функции
Таблица TI-84 - позволяет функциям,
Y=
например,Y=|X|
возвращает абсолютное значение XМатематические проблемы
TI-Basic - сделан для калькулятора, поэтому в него входит математика;)
Проблема, связанная с простыми числами
Ничего особенного; Mathematica , вероятно, правильный инструмент для работы
Решающие головоломки
TI-Basic, поскольку он автоматически перебирает массивы
Выполнение численных методов
TI-Basic или Mathematica
Обработка строк
Python - имеет несколько отличных строковых функций.
Независимо от того, насколько хорошо вы думаете, TI-Basic , не используйте его для строк ...
Обработка массива
TI-Basic - автоматически перебирает массивы ; например, увеличить все значения в массиве -
L1+1→L1
Ruby - также имеет очень мощные функции массива, и, конечно, это
!
также поможет сжать кодХитрые проблемы с двумерным массивом
Здесь лучше всего работает Ruby или Python , так как TI-Basic не поддерживает 2D-массивы
Вычислительная геометрия
TI-Basic имеет геометрические особенности и может использоваться для большинства математических задач, вплоть до исчисления и линейной алгебры
БОНУС
перекручивание
Либо Arduino или Quomplex . Arduino имеет встроенный,
void loop(){}
а Quomplex имеет бесконечные циклы, заключенные в скобки ([]
)Рисование / GUI
Game Maker Language обладает очень мощными возможностями рисования, и TI-Basic также является в целом полезным инструментом благодаря поддержке рисования на графике.
Quines
Либо HQ9 +, либо Quomplex, потому что HQ9 + имеет
Q
выход для вывода исходного кода программы, и Quomplex автоматически распечатает свой исходный код, если*
(выходной) не указан или не выводит никакого вывода, определенного с помощью#
источник
Если вы решаете математическую задачу и у вас нет Mathematica, попробуйте Sage . Он основан на Python, поэтому, если вы уже знаете Python, вам не нужно много времени для изучения его синтаксиса.
Примеры:
Это также полезно для построения графиков и решения уравнений (например, вы можете использовать
solve()
функцию в Sage или, если это запрещено правилами, это позволяет легко реализовать процесс Ньютона-Рафсона, поскольку он имеетdiff()
функцию, которая может выполнять символьную дифференциацию) ,Кроме того, если вы программист на Python2, использование Sage может позволить вам обмануть, пропустив длинные
import
операторы. Например,math
иsys
уже импортированы по умолчанию. (Обратите внимание, что это может не сработать, если ваша программа на Python2 зависит от целочисленного деления.)источник
Я знаю три языка - Java, C ++ и Python 3. Я не знаю ни одного из них на высоком уровне, но это мой опыт работы с ними.
Джава:
Я бы никогда больше не использовал Java для игры в гольф. Для написания требуется более 80 символов
Hello World!
. Тем не менее, у него есть свои сильные стороны:C ++
C ++ - очень сильный язык, но он несколько длинен, когда пытается сыграть в гольф на 56 символов
Hello world!
.Python 3
Python 3 похож на C ++ и Java. Он намного короче, поскольку не является строго типизированным - другими словами, он просто догадывается, что это за переменные.
источник