골프를위한 언어 선택하기


28

골프에 적합한 언어를 선택하기위한 팁은 무엇입니까? 언어 선택에 영향을 미치는 요인은 무엇입니까?

다음은 문제 유형의 예입니다.

  • 콘솔 또는 파일 중 I / O 솔루션 이 필요한 문제
  • 파싱 이 필요한 문제
  • 함수 정의 로 솔루션을 작성해야하는 문제
  • 수학 문제
  • 소수 처리 문제
  • 숫자 퍼즐 풀기
  • 수치 법 수행
  • 문자열 처리
  • 배열 처리
  • 까다로운 2D 어레이 문제
  • 계산 기하학
  • 재귀
  • 2D 그래픽
  • 3D 그래픽
  • 오디오
  • 네트워킹 / 웹
  • 병렬 처리

"Use GolfScript | J"와 같은 것을 좋아하지 않기 만하면됩니다.


일부 문제는 유형 시스템입니다. 예를 들어 64 비트보다 큰 정수를 처리해야하는 경우 고가의 언어 (예 : Java)보다는 내장 된 언어 (예 : Golfscript, Haskell)가 필요합니다.
피터 테일러

"도움말"유형 질문에 대한 정책을 준수하기 위해 위키를 만들었습니다.
dmckee

99 병 이 ... 특정 문자와 언어의 시작이 필요한 경우에 유용합니다
제시 밀리칸

이 스레드를 더 나은 리소스로 만드는 데 도움을 준 ace, trimsty, algorithmshark 및 hosch250에 대한 조언. 제출물을 계속 보내십시오! 알고리즘 상어와 hosch250 사이의 힘든 현상금 호출은 모두 많은 노력을 기울 였지만 결국 Herr Shark는 그 길을 이끌 기 위해 끄덕였습니다.
Jonathan Van Matre

원하는 언어를 선택하십시오. 또한 언어 내에서 의 경쟁이기도합니다 . 더 많은 언어로 된 더 독특하고 흥미로운 솔루션이 좋습니다.
Mego

답변:


-1

필요한 것에 따라 C / C ++는 빠르지 만 더 많은 작업을 직접 코딩해야합니다. 파이썬과 루비는 느리지 만 많은 작업을 단축하고 무한히 큰 값 (RAM이있는 경우)을 자동으로 처리하는 내장 메소드로 코딩하기가 훨씬 쉽습니다. Haskell과 같은 기능적 언어를 사용하면 문제를 그런 식으로 해결할 수있는 경우 수학적으로 만 기능적으로 사용할 수 있습니다.


2
파이썬을 주로 사용하는 Py에서는 문자를 절약 할 수있는 해킹 트릭이 있지만 문자 수에 대한 사용 편의성을 지불합니다. Haskel과 Lisp는 재미 있지만 Python보다 더 오래 실행되는 경향이 있습니다.
arrdem

이것은 아마도 받아 들일만한 대답이되어서는 안됩니다. 고수준 언어와 저수준 언어에 대한 설명은 실제로 문자 수와 관련이 없습니다.
Samy Bencherif

그렇습니다. 2017 년 2 월 23 일에 편집 된 질문에 대한 2011 년 답변을 보유하는 것은 공정한 일입니다. 질문에 대한 답변을받은 후에 변경을 중단해야합니까?
ewanm89

10

2 센트를 배열 프로그래밍 언어 , 특히 JAPL넣었 습니다.

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는 다른 이점과 함께 골프에 좋았습니다.)


훌륭한 공헌! 수영장에 처음 오셔서 감사합니다.
Jonathan Van Matre

4

왜 펄은 아직 칭찬받지 않았습니까? 거의 모든 골프, 특히 문자열 관련 물건 (정규식)을위한 훌륭한 골프 언어입니다.

Burlesque는 숫자 관련 프로그램에 적합하고 Ruby는 간단한 텍스트 조작에 적합합니다.

실제로 여기 에는 언어 및 골프 점수 목록이 있습니다 .


나는 Perl에 대해 쪼그리고 앉는 것을 모르지만 동의합니다.
ckjbgames 2012

2

나는 모호한 프로그래밍 언어를 사용하여 작업을 완료하는 것을 좋아합니다.

여기에 나열된 세부 사항에 대한 즐겨 찾기가 있습니다.

콘솔 또는 파일 중 I / O 솔루션이 필요한 문제

같은 언어 TI-기본 잘 작동,하지만 내가 선호하는 루비 때문에puts

파싱이 필요한 문제

GolfScript 는 확실히 당신을 도울 것입니다

함수 정의로 솔루션을 작성해야하는 문제

TI-84 표 - Y=예 를 들어 Y=|X|X의 절대 값을 반환하는 기능 허용

수학 문제

TI- 기본 -계산기 용으로 만들어 졌으므로 수학 포함)

소수 처리 문제

특별한 것은 없습니다. Mathematica 는 아마도 작업에 적합한 도구 일 것입니다

숫자 퍼즐 풀기

배열을 자동으로 반복하는 TI 기본

수치 법 수행

TI 기본 또는 수학

문자열 처리

파이썬 -훌륭한 문자열 함수가 있습니다.

TI-Basic 이 아무리 좋다고 생각하더라도 문자열에 사용하지 마십시오 ...

배열 처리

TI- 기본 - 배열을 자동으로 반복합니다 . 예를 들어 배열의 모든 값을 증가시킵니다-L1+1→L1

루비 -또한 매우 강력한 배열 기능을 가지고 있으며 물론 !코드를 압축 하는 데 도움 이 됩니다.

까다로운 2D 어레이 문제

TI-Basic 은 2D 배열을 지원하지 않으므로 Ruby 또는 Python 이 가장 효과적입니다.

계산 기하학

TI-Basic 에는 기하학적 특징이 있으며 미적분 및 선형 대수까지 대부분의 수학에 사용할 수 있습니다


보너스

루핑

Arduino 또는 Quomplex 중 하나 입니다. Arduino 에는 빌트인 기능이 void loop(){}있으며 Quomplex 에는 괄호 ( []) 로 묶인 무한 루프가 있습니다

드로잉 / GUI

Game Maker Language 에는 매우 강력한 그리기 기능이 있으며 TI-Basic 은 그래프 그리기를 지원하기 때문에 일반적으로 유용한 도구입니다.

퀸즈

HQ9 + 는 프로그램의 소스 코드를 출력 할 수 있기 때문에 HQ9 + 또는 Quomplex 중 하나 이며 Quomplex 는 (출력)이 지정 되지 않거나 소스 코드 를Q*#


2

수학 문제를 해결하고 Mathematica가없는 경우 Sage를 사용해보십시오 . Python을 기반으로하므로 이미 Python을 알고 있다면 구문을 배우는 데 많은 시간이 필요하지 않습니다.

예 :

또한 그래프 플로팅 및 방정식 풀기에 유용합니다 (예 : solve()Sage 에서 함수를 사용할 수 있거나 규칙에서 금지 된 경우 Newton Raphson 프로세스를 쉽게 구현할 수있어 diff()기호 차별화를 수행 할 수 있는 기능이 있음) .

또한 Python2 프로그래머라면 Sage를 사용하면 긴 import문장 을 건너 뛰어 속임수를 쓸 수 있습니다 . 예를 들어, math그리고 sys이미 기본적으로 가져옵니다. (Python2 프로그램이 정수 나누기에 의존하는 경우에는 작동하지 않을 수 있습니다.)


좋은 정보! 기여해 주셔서 감사합니다.
Jonathan Van Matre

1

Java, C ++ 및 Python 3의 세 가지 언어를 알고 있습니다.이 언어에 대해서는 전혀 모르지만 이것이 저의 경험입니다.

자바:

다시는 골프를 위해 Java를 사용하지 않을 것입니다. 쓰려면 80 자 이상이 필요 Hello World!합니다. 그러나 다음과 같은 장점이 있습니다.

입력은 Scanner객체를 생성해야 합니다. 단일 문자를 입력하기가 어렵습니다. 입력하는 유형을 지정해야합니다. 루프
때문에 구문 분석이 충분히 간단 for합니다. 향상된 for루프는 이것에 탁월합니다.
Java는 메소드를 지원하지만 메소드 선언은 상당히 길다.
Java는 수학 및 기타 모든 고급 언어에 능숙합니다.
문제가 문자열을 수정하는 경우 Java를 사용하기가 어렵습니다. 기존 문자열을 수정할 수 없습니다.
Java의 배열은 사용하기 쉽습니다.
Java는 재귀에 능숙합니다.
Java에는 내장 그래픽이 포함되어 있습니다. 그들은 사용하기 매우 쉽습니다.

C ++

C ++은 매우 강력한 언어이지만 56 자 (으)로 골프를 칠 때 다소 시간이 오래 걸립니다 Hello world!.

입력과 출력이 쉽습니다. 입력하는 유형을 지정할 필요가 없습니다. 자동으로 수행됩니다. 그러나 iostream 라이브러리를 포함해야합니다.
파싱은 매우 쉽습니다.
함수 선언은 간단하지만 중요한 문자를 많이 먹습니다. C ++는 수학에 능숙하지만 Java와 마찬가지로 PI 또는 E는 포함하지 않습니다.
C ++의 문자열은 사용하기 쉽고 필요에 따라 변경됩니다. 가능한
경우 vectors 대신 arrays를 사용하지만 둘 다 사용하기 쉽습니다.
C ++은 재귀에 능숙합니다.
C ++에는 내장 그래픽이 포함되어 있지 않습니다.

파이썬 3

Python 3은 C ++ 및 Java와 유사합니다. 강력하게 형식화되지 않았기 때문에 훨씬 짧습니다. 즉, 변수가 무엇인지 추측합니다.

입력은 쉽지만 모든 것이 문자열로 입력됩니다. 모든 입력을 원하는 값으로 수동으로 변환해야합니다.
파싱과 루핑은 매우 간단합니다.
파이썬 함수 선언은 매우 간단하고 짧습니다.
파이썬은 수학을 잘합니다.
파이썬의 문자열은 사용하기 쉽습니다.
배열은 사용하기 쉽습니다.
파이썬은 재귀에 능숙합니다.
파이썬에는 내장 그래픽이 포함되어 있지 않습니다.


향상된 for-loop에 의해 range-for loop에 대해 이야기하고 있다고 생각합니다. C ++는 C ++ 11부터이를 지원합니다 ( en.cppreference.com/w/cpp/language/range-for ). 구문 적으로 Java for-range 루프와 유사하며 지정된 객체에 대해 begin () 및 end () 또는 begin (T) 및 end (T)를 구현하려면 반복 가능한 객체의 클래스가 필요합니다. 또한 C 스타일 문자열 및 내장 배열에 대해 구현되며 모든 표준 라이브러리 컨테이너에서 작동합니다.
foobar

@foobar 그렇습니다. 정보에 감사드립니다. Java를 사용한 이후로 그랬 으면 좋겠습니다.
Hosch250

Java에는 이제 61 바이트 솔루션이 있지만 요점은 여전히 ​​유효합니다.
MilkyWay90
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.