Brachylog에서의 골프 팁


19

Brachylog 는 최근 코드 골프에서 눈에 띄게 나타나기 시작한 언어입니다. 프롤로그와 마찬가지로 문제가 어떻게 보이는지에 대한 충분히 정확한 설명만으로 문제를 해결할 수 있다는 장점이 있습니다. 최고 골프 언어 (그리고 때때로 젤리를 이길 것으로 알려져 있습니다).

Brachylog에서 골프를 치기위한 팁 (가장 짧은 프로그램 작성)은 무엇입니까? 이것은 주로 광범위한 언어에 적용되는 조언보다는 Brachylog에 특정한 조언을 찾고 있습니다. (브라질 로그 이외의 다른 언어에 얼마나 많은 응용 프로그램을 사용해야하는지에 따라 일반적으로 선언적 언어의 골프에 대한 팁이 여기에 적절할 수 있습니다 ( Prolog의 골프 팁 도 참조 ).

답변:


4

중첩 된 술어를 활용하여 새 변수 작성

Brachylog에는 두 개의 특수 변수 ?(입력 / 왼쪽 매개 변수)와 .(출력 / 오른쪽 매개 변수)를 사용 하기 위해 많은 특수 구문 사례 가 있습니다. 이 방법 당신이 당신의 술어의에 액세스 할 필요가없는 경우 ?.사용 변수에 필요하지만 수행 할 수 있습니다 자주 사용하는 중첩 된 조건을 만드는 통해 바이트 저장 ?..

간단한 예로, 다음과 같은 프로그램을 생각해보십시오.

… A … ∧A … B … B …

이것은 더 긴 프로그램을위한 매우 일반적인 형태입니다. 결국, 무엇이든 포함 할 수있는 많은 격차가 있습니다. 우리는 필요가없는 가정 ?또는 .세 간격 중앙 내부. 그런 다음 다음과 같이 다시 작성할 수 있습니다.

… { … & … . … } …

여기에서 중첩 술어 ?는의 역할을 담당 A하고 있으며 의 술어 는의 역할을 .담당 B합니다. 이것이 원래 코드보다 짧은 바이트라는 것을 알 수 있습니다. 변경 AABB하려면 {?.}바이트의 관점에 변화가 없다, 그러나 이것은 우리가 간단하게 할 수 ∧?약어로 &.

관련 트릭은 변경하는 것입니다

∧. … ?∧

~{ … }

(1 바이트 더 짧음), 호출자가 대신 인수를 교환하도록하는 것이 거의 항상 저렴하다는 점에 유의하십시오.


3

메타 술어 내에서 길이 2 술어를 나눕니다.

이것은 예를 통해 가장 잘 설명됩니다. 목록의 첫 번째 요소와 마지막 요소를 제거하려면 참수하고 칼로 묶으십시오.

bk

리스트의 모든 요소에 대해이 작업을 수행하려면 맵 작업을 사용할 수 있습니다.

{bk}ᵐ

그러나 술어를 두 개로 나누고 각 부분을 개별적으로 맵핑하는 것은 바이트가 더 짧습니다.

bᵐkᵐ

몇 가지 메타 술어와 동일한 트릭을 사용할 수 있습니다.

{bk}ᵐ  →  bᵐkᵐ
{bk}ˢ  →  bˢkˢ
{bk}ᶠ  →  bᶠkˢ
~{bk}  →  ~k~b

와 같은 일부 메타 술어의 경우 두 부분으로 나눌 수있는 일반적인 방법은 없지만 그럼에도 불구하고 작업중 인 특정 작업에 적합한 분해를 찾을 수 있습니다.


3

빈 목록을 빈 문자열로 캐스팅

때로는 문자열로 작업 []할 때 빈 문자열을 원할 때 빈 알고리즘으로 원하는 것을 통합 할 수 있습니다 "".

,Ẹ빈 문자열을 왼쪽 변수에 추가하는을 사용하여 빈 목록을 빈 문자열로 캐스트 할 수 있습니다 (이것은 ,구현 방식을 악용합니다 ).

이것은 또한 왼쪽 변수가 문자열 인 경우는 아무것도하지 않는다는 이점이있다. 따라서 프로그램이

{  
   some predicate that should always output a string, 
   but actually outputs [] instead of "" in specific cases
}

그때

{
  some predicate that should always output a string, 
  but actually outputs [] instead of "" in specific cases
},Ẹ

원하는 방식으로 작동합니다.


2

단일 요소가 목록에서 실행

이 스 니펫을 고려하십시오.

ḅ∋≠

입력이 목록 또는 문자열 인 경우 더 긴 동일한 요소의 일부가 아닌 길이가 1 인 하위 목록 / 하위 문자열로 출력이 통합됩니다. 리스트를 동일한 요소의 블록으로 나누고 요소가 모두 다른 블록을 찾습니다. 싱글 톤 목록 대신 요소 자체를 얻으려면 h끝까지 고정 하십시오. 나는이 구조를 사용 여기o단지 입력 문자열에 한 번 발생하는 문자를 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.