apt, 29 28 바이트
Japt 는 Ja vaScri pt 의 단축 버전입니다 . 통역사
1o5 mZ=>$eval$(Uq'+)/2-UgZ%4
화살표 기능에는 최신 버전의 Firefox와 같은 ES6 호환 브라우저가 필요합니다. 입력은 4 개 항목 배열로 들어 [1,-1,4,2]
갑니다 ( 예 :) .
작동 원리
// Implicit: U = input array
1o5 // Create a range of integers from 1 to 5. Returns [1,2,3,4]
mZ=> // Map each item Z in this range to:
$eval$( // evaluate:
Uq'+ // U joined with "+" (equivalent to summing U)
)/2 // divided by 2,
-UgZ%4 // minus the item at Z%4 in the input. This translates to [y₁,x₂,y₂,x₁],
// which in turn tranlsates to:
// [(x₁-y₁+x₂+y₂)/2, (x₁+y₁-x₂+y₂)/2, (x₁+y₁+x₂-y₂)/2, (-x₁+y₁+x₂+y₂)/2]
// which is [Lx,Ly,Rx,Ry], or [Rx,Ry,Lx,Ly], depending on the situation.
// Implicit: Output last expression
골프는 어땠어?
먼저 @Mego의 Python 접근법을 복사하려고했습니다. 이것은 48 바이트 괴물을 남겼습니다 :
(참고 : 입력은 현재 배열로 싸여서는 안됩니다.)
[U-V+W+X /2,(U+V-W+X /2,(U+V+W-X /2,(V+W+X-U /2]
이러한 각 항목을 2로 나눌 필요가 있으므로 전체 배열을 mY=>Y/2
다음 과 같이 매핑하는 것이 더 짧습니다 .
[U-V+W+X,U+V-W+X,U+V+W-X,V+W+X-U]mY=>Y/2
이제 뭐? 배열은 이제 세 개의 입력을 더하고 패턴에 따라 네 번째를 빼는 것입니다 1,2,3,0
. 따라서 입력을 배열로 묶은 다음 함께 더하고 2로 나누고 필요한 항목을 뺍니다.
[1,2,3,0]mZ=>(Ug0 +Ug1 +Ug2 +Ug3)/2-UgZ
좋아요, 바이트를 절약했습니다! 그러나 처음에 어레이를 축소 할 수 있습니까? 문자열로 묶은 다음 다음을 사용하여 배열로 다시 분할 해 봅시다 a
.
"1230"a mZ=>(Ug0 +Ug1 +Ug2 +Ug3)/2-UgZ
저것 봐요, 다른 바이트가 절약되었습니다. 그러나 더 좋은 방법이 있습니까? 우리는 다음과 같은 사실을 사용할 수 있습니다 [1,2,3,0] ≡ [1,2,3,4] mod 4
.
1o5 mZ=>(Ug0 +Ug1 +Ug2 +Ug3)/2-UgZ%4
또 다른 2 바이트! 이제 우리는 어딘가로 가고 있습니다. 그러나 그것은 Ug0 +Ug1 +Ug2 +Ug3
많은 공간을 차지하고 있습니다. 추가로 배열을 줄이면 어떻게됩니까?
1o5 mZ=>Ur(X,Y =>X+Y /2-UgZ%4
와, 정말 도움이되었습니다! 이제 우리는 29 바이트로 줄었습니다. 그리고 @ ן nɟuɐɯɹɐ ן oɯ 덕분에, 나는 줄어든 다른 바이트를 골프화 할 수있었습니다. 그러나 내장을 사용하여 배열을 합산하면 더 짧을 것입니다.
1o5 mZ=>Uu /2-UgZ%4
19 바이트! 놀랄 만한! 불행히도, Japt에는 아직 그러한 내장 기능이 없습니다. 기회가 생길 때 이것을 추가하겠습니다. 프로그램이나 언어에 대한 제안을 환영합니다!
v1.4.4부터는 원래 계획했던 것보다 훨씬 더 많은 기능을 Japt에 구현했습니다. 더 짧은 버전의 원래 계획부터 시작하십시오.
1o5 mZ=>Uu /2-UgZ%4
먼저 몇 가지 사항을 변경해야합니다. 함수는로 정의되고 {
sum 함수는 x
입니다. 이 버전은있는 그대로 작동합니다.
1o5 mZ{Ux /2-UgZ%4
지금 @
의 속기 XYZ{
우리로 전환하여 바이트를 저장할 수, Z
에 X
. 또한 다른 바이트를 저장 £
하는 바로 가기입니다 m@
.
1o5 £Ux /2-UgX%4
최근에 나는 U
프로그램의 시작 부분에 보통을 생략 할 수 있는 기능을 구현 했습니다. 그러나 구현 실수로 인해 함수와 함께 작동합니다.
1o5 £x /2-UgX%4
마지막으로 g
인덱스가 문자열의 끝을 지나면 함수가 줄 바꿈 %4
되어 총 13 바이트 를 제거 할 수 있습니다 .
1o5 £x /2-UgX
그리고 나는 19가 놀랍다 고 생각했다 ;-) 온라인으로 테스트!