2D 언어로 골프 팁


18

2 차원 프로그래밍 언어로 골프를 치는 데 도움이되는 일반적인 팁은 무엇입니까? 코드 골프 문제에 적용 할 수 있고 2D 프로그래밍 언어에만 적용되는 팁을 찾고 있지만 한 언어에만 국한되지는 않습니다 ( "댓글 제거"및 " M작업 사용"과 같은 응답 은 답변이 아님).

답변 당 하나의 팁을 게시하십시오.


이 질문이 메타에 포함되어 있지 않아야합니까?
Mr Lister

2
무엇을 : 여기에 관련 메타 질문 있어요 차원 프로그램의 크기는? 덮은 지역? 볼록 껍질의 넓이? 사각형을 포함하는 축 정렬 영역? 모든 것이 어떤 형태의 ASCII 크기보다 나은 측정법 일 수 있습니다.
MSalters

@MrLister 팁 질문은 기본 사이트에 대한 주제입니다. 보시면 이미 tips 태그 아래에 많은 질문이 있음을 알 수 있습니다.
밀 마법사

@MSalters 다른 모든 프로그래밍 언어 길이와 마찬가지로 바이트 단위로 측정됩니다. 일부 언어 디자이너는 2D 언어를 Hexagony 또는 Cubix와 같은 다른 방식으로 배열 할 수 있도록합니다.
밀 마법사

답변:


19

수평 간격을 피하십시오

종종 코드는 공백을 공백으로 프로그램의 왼쪽에 남겨 둡니다.

abc
  d
  e

왼쪽 정렬로 피할 수있는 경우 4 바이트가 추가됩니다.

cde
b
a

공백의 큰 간격을 사용해야하는 경우 수평 대신 수직으로 만드십시오.

########
#      #
#      #
#      #

vs

####
#
#
#
#
#
#
####

11

가능하면 한 차원을 사용하십시오

일반적으로 한 줄에 간단한 프로그램을 작성할 수 있습니다. 예를 들어, 고전 고양이 프로그램은 다음과 같습니다.

>iv
^o<

그러나 래핑 동작을 남용하고 이것을 만들 수 있습니다.

io

또는 이러한 래핑 동작이없는 언어로 :

> ?oi<

(가정 ?팝업하지 않습니다.) 비 포장 언어의 경우, 명시 적 루프가 나은 경우가 많습니다.

점프 명령으로

점프 및 조건부 점프 명령이있는 2D 언어에서 프로그램은 다음과 같습니다.

abc >de?v;
    ^hgf<

이것은 또한 될 수 있습니다 :

abc de?!;hgf04&

( !트램폴린이고 &위치로 점프하는 경우)


세 번째 예는 그렇지 ioiioiioi않습니까?
ASCII 전용

@ ASCII-only 실제로 그렇습니다. 죄송합니다.
코너 오브라이언

1
덜 정규적인 명령 중 일부를 설명해야 할 것입니다. 예를 들어, 나는 무엇을 io;해야할지 모르겠 으며, 내가 아는 것은 ?터지지 않습니다. 이것들은 물고기 명령처럼 보이지만 나는 그것이 표준이라고 생각하지 않습니다.
밀 마법사

2
조건부 건너 뛰기 명령이없는 일부 2D 언어 (예 : Labyrinth)에서는 0으로 나누기로 조건부로 프로그램을 종료하여 루핑 단일 라인 프로그램을 작성할 수도 있습니다.
마틴 엔더

10

캐리지 리턴이 너무 바이트입니다

만들 수있는 2D가 적을수록 좋습니다. 캐리지 리턴은 또 하나의 비 작동입니다. @ATaco 및 @ASCII 전용 팁을 무시하지 말고 Y 치수를 가능한 작게 유지하십시오.

###
####
########

~보다 낫다

###
###
###
##
#
#
#
#

캐리지 리턴이 항상 바이트는 아닙니다. \n(줄 바꿈)은 POSIX 시스템에서 왼쪽 정렬 텍스트에 정기적으로 사용되는 줄 끝입니다. Windows 및 Mac OS (mac 이전 버전)는 \n(줄 바꿈)과 \r(캐리지 리턴)의 조합을 사용 합니다.
wizzwizz4

9

건조 (자신을 반복하지 마십시오)

코드 골프에서는 함수로 추상화하는 것이 일반적으로 더 길지만 실제로 2D 언어에 도움이 될 수 있습니다. 코드를 재 작업하여 동일한 스 니펫을 재사용하여 두 가지 실행 분기로 코드를 입력 / 종료 할 수 있습니다.


8

인터리브 경로

일반적으로 2D 언어에는 방향 명령에 따라 이동하는 IP가 있습니다. 공백은 바이트 낭비이기 때문에 프로그램을 재배 열하는 것이 거의 항상 효율적이므로 최대한 자주 왼쪽으로 이동하므로 불필요한 패딩 공간이 필요하지 않습니다.


2

거울 사용

미러는 동시에 두 개의 경로에서 사용될 수 있습니다 (각 경로는 미러의 한쪽면에서 튀어 나옵니다). 이것은 도움이되지 않는 것처럼 보이지만 프로그램을 재정렬하거나 방향 변경이 많은 경우 더 적은 수의 미러로 교체 할 수 있습니다.


2

숙어 암기

다음은 언어의 특성에 따라 특정 작업을 수행하는 몇 가지 "이디엄"입니다.

의사 선형 코드

동적 코드 생성이 필요한 경우 의사 선형 코드 모델을 사용하는 것이 좋습니다.

v
\"line 1"
\"line 2"
.
.
\"line N"

그들이 일반적으로하는 것을 가정 \하고 v의미합니다.

무한 루프

거의 모든 2D 언어에서 ><무한하고 깨지지 않는 루프입니다. 어떤 이유로 든이 작업을 수행 해야하는 경우이 방법이 멋지더라도 이것이 가장 좋은 방법입니다.

>v
^<

당신이 경우에 실제로, 1 라이너를 코드를 만들어 , 당신은 사용할 수 ^또는 v같은 :

i?vo;

이렇게 v하면 IP가 자동으로 전송됩니다. 방향성 명령이 일련의 (상대적) no-ops를 가리키는 모든 경우에이 방법을 계속 사용할 수 있습니다.

Quine 프레임 워크

일반적으로 문자열 / 인용 프레임 워크가있는 언어는 다음과 같이 quine을 가질 수 있습니다.

<quote><generate "><output stack><terminate>

> <>의 경우 다음과 같습니다.

":1-r>o<#

이것을 제외하고 종료 오류로 종료됩니다. 아마도 가장 짧은 > <> quine 또는 적어도 내가 찾은 가장 짧은 것입니다.


이것은 실제로 하나의 팁처럼 보이지 않습니다.
밀 마법사

@WheatWizard 나는 그것들을 나누는 것이 나에게 덜 이해되어서 모든 일반적인 프로그램 레이아웃 관용구이기 때문에 함께 유지했다.
코너 오브라이언

왜해야합니까 <>을 <> quine의를?
조 왕

@JoKing 나는 확실하지 않다 lol
코너 오브라이언

또한 "끝이 잘못된쪽에 있습니다. 팁은 그렇지 않으면 좋습니다. 저는 일반적인 답변을 많은 답변에 사용했습니다
Jo King
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.