Mettre mes deux cents sur les langages de programmation de tableau , J et APL en particulier.
K / Kona, Q et Nial entrent également dans cette catégorie, mais ils ont généralement les mêmes avantages et critiques. Faites preuve de discrétion. J'utiliserai des exemples J ci-dessous, principalement parce qu'ils sont en ASCII et donc faciles à taper - rappelez-vous que les caractères APL comptent comme des octets simples, alors ne laissez pas cela être votre problème avec la langue comme choix pour le golf.
- Problèmes mathématiques
- Résoudre des énigmes numériques
- Exécution de méthodes numériques
- Problèmes de tableau 2D délicats
Ces deux sont de très bons langages de mathématiques et de manipulation de données, car ils lancent des tableaux autour d'un niveau élevé, et beaucoup de boucles se font implicitement , en disant, par exemple, ajoutez dix à chacun des 3, 4 et 5 ( 10 + 3 4 5
) ou additionnez chacun ligne d'un tableau ( +/"1 arr
- le bouclage est dans le "1
).
- Problème avec les nombres premiers
Avec des problèmes de nombre premier en particulier, J a des primitives intégrées rapides et courtes, comme le font certains dialectes d'APL. (Edit: je pense à Nars2000, qui est en partie dialecte et en partie implémentation complètement différente. APL n'a pas de code intégré pour les nombres premiers.) N-ème prime ( p:
), non. des nombres premiers jusqu'à ( _1&p:
), factorisation ( q:
), GCD et LCM ( +.
et *.
), et ainsi de suite, il y en a beaucoup. Cependant, dans la pratique, la question précisera souvent que vous devez cuisiner vos propres implémentations principales, donc celles-ci ne voient pas trop d'utilité. Il existe toujours des façons soignées et sophistiquées d'obtenir les éléments de base dont vous avez besoin, cela devient juste un peu moins couper-coller.
- Traitement des chaînes
- Traitement des tableaux
Le traitement des tableaux et des chaînes est un peu un sac mélangé: si c'est quelque chose pour lequel APL / J est bon ou a un idiome primitif ou commun, c'est presque trivial; si c'est quelque chose de très séquentiel et pas très parallélisable, vous allez avoir du mauvais temps. Tout ce qui se trouve entre les deux est en suspens, mais en général, ils répondront favorablement.
- Problèmes nécessitant une solution d'E / S, console ou fichier
- Problèmes qui vous obligent à écrire votre solution en tant que définition de fonction
IO est bizarre. APL a une expression d'entrée d'un seul caractère, mais avec J vous devez passer au moins 8 à lire dans un numéro: ".1!:1]1
. La sortie est un peu moins verbeuse, mais vous regardez toujours 6 ou 7 caractères perdus, dans la pratique. J en particulier l'aime vraiment beaucoup si vous pouvez prendre l'entrée en tant qu'arguments d'une fonction, au lieu d'avoir à fouiner avec IO lui-même.
En pratique, avec J et APL, la solution est généralement écrite comme une fonction que vous invoquez sur la console. Avec APL, vous pouvez simplement mettre des noms de variables pour vos arguments et encapsuler l'expression avec laquelle vous travailliez entre accolades et l'appeler un jour.
Mais avec J, il y a un peu de surcharge pour définir des fonctions explicitement - 3 :'...'
, et vous devez échapper à toutes les chaînes à l'intérieur - donc ce qui est généralement fait est quelque chose appelé programmation tacite: vous programmez au niveau de la fonction, en combinant les primitives d'une manière un peu comme celle de Haskell. Cela peut être à la fois une bénédiction et une malédiction, car vous n'avez pas à dépenser autant de caractères en référence à vos arguments, mais il est facile de se noyer entre parenthèses et de perdre des dizaines de personnages en essayant de pirater votre solution autrement courte et intelligente en quelque chose qui fonctionne.
- Problèmes nécessitant une analyse
- Géométrie de calcul
Je n'ai pas d'expérience avec le golf sur ces problèmes particuliers, mais je dirai ceci: au final, les langages de programmation de tableaux sont très bons pour canaliser et transformer beaucoup de données de la même manière. Si vous pouvez transformer le problème en un exercice de mélange des nombres, vous pouvez en faire un problème APL / J, pas de sueur.
Cela dit, tout n'est pas un problème APL / J. Contrairement à Golfscript, APL et J se sont avérés être bons pour le golf, à côté de leurs autres avantages;)