2 센트를 배열 프로그래밍 언어 , 특히 J 와 APL 에 넣었 습니다.
K / Kona, Q 및 Nial도이 범주에 속하지만 일반적으로 동일한 이점과 비판이 있습니다. 재량을 사용하십시오. 아래의 J 예제는 주로 ASCII이므로 입력하기 쉽기 때문에 주로 사용합니다. APL 문자는 1 바이트로 계산되므로 골프를위한 언어 선택에 문제가되지 않도록하십시오.
- 수학 문제
- 숫자 퍼즐 풀기
- 수치 법 수행
- 까다로운 2D 어레이 문제
이 두 가지는 매우 우수한 수학 및 데이터 조작 언어입니다. 왜냐하면 배열을 높은 수준으로 던지고 많은 루핑이 암시 적 으로 수행되기 때문에 3, 4 및 5 ( 10 + 3 4 5
) 각각에 10을 더하거나 각각 배열의 행 ( +/"1 arr
-루핑은에 있음 "1
).
특히 소수 문제로 인해 J는 APL의 일부 방언과 같이 빠르고 짧은 내장 기본 요소를 가지고 있습니다. (편집 : 부분 언어와 완전히 다른 구현 인 Nars2000을 생각하고 있습니다. APL에는 소수에 대한 기본 제공 기능이 없습니다.) N 번째 소수 ( p:
), no. 최대 ( _1&p:
), 팩토링 ( q:
), GCD 및 LCM ( +.
및 *.
) 등이 있습니다. 그러나 실제로 질문은 종종 자신의 주요 구현을 요리해야한다고 지정하므로 너무 많이 사용하지는 않습니다. 필요한 주요 재료를 얻는 깔끔하고 멋진 방법이 여전히 있으며, 잘라 내기 및 붙여 넣기가 조금 줄어 듭니다.
배열과 문자열 처리는 약간의 혼합 백입니다. APL / J가 능숙하거나 원시적이거나 일반적인 관용구가 있다면 거의 사소한 것입니다. 매우 순차적이고 병렬화가 불가능한 경우 시간이 나쁠 것입니다. 중간에있는 것은 공기 중에 있지만 일반적으로 호의적 인 반응을 보일 것입니다.
- 콘솔 또는 파일 중 I / O 솔루션이 필요한 문제
- 함수 정의로 솔루션을 작성해야하는 문제
IO가 이상합니다. APL에는 단일 문자 입력 표현식이 있지만 J를 사용하면 숫자를 읽으려면 최소한 8을 소비해야합니다 ".1!:1]1
. 출력은 조금 덜 장황하지만 실제로 6 ~ 7 문자가 낭비되는 것을 실제로보고 있습니다. J는 IO 자체를 다루지 않고 입력을 함수의 인수로 취할 수 있다면 특히 그것을 좋아합니다.
실제로 J 및 APL을 사용하면 일반적으로 솔루션은 콘솔에서 호출하는 함수로 작성됩니다. APL을 사용하면 기본적으로 인수의 변수 이름을 넣고 중괄호로 작업 한 표현식을 감싸서 하루에 호출 할 수 있습니다.
그러나 J에서는 함수를 명시 적으로 정의하는 데 약간의 오버 헤드 3 :'...'
가 있으며 내부에서 모든 문자열을 이스케이프해야합니다. 따라서 일반적으로 수행되는 작업은 암묵적 프로그래밍입니다 : 함수 수준에서 프로그래밍하여 기본 요소를 방식으로 결합 하스켈과는 다릅니다. 당신은 당신의 주장을 언급하는 많은 문자를 소비 할 필요가 없기 때문에 이것은 축복이자 저주가 될 수 있습니다. 작동하는 무언가.
이러한 특정 문제를 해결해 본 경험은 없지만, 이렇게 말할 것입니다. 결국, 배열 프로그래밍 언어는 많은 방식으로 데이터를 파이핑하고 변환하는 데 매우 능숙합니다. 문제를 숫자 섞기의 연습으로 바꿀 수 있다면 땀이없는 APL / J 문제로 만들 수 있습니다.
모든 것이 APL / J 문제는 아닙니다. Golfscript와 달리 APL과 J는 다른 이점과 함께 골프에 좋았습니다.)