TI-83 / 84 + 시리즈 계산기를위한 TI-BASIC 골프에 대한 일반적인 팁은 무엇입니까? 코드 골프 문제에 적용 할 수 있고 적어도 TI-BASIC에 특정한 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다).
답변 당 하나의 팁을 게시하십시오.
TI-83 / 84 + 시리즈 계산기를위한 TI-BASIC 골프에 대한 일반적인 팁은 무엇입니까? 코드 골프 문제에 적용 할 수 있고 적어도 TI-BASIC에 특정한 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다).
답변 당 하나의 팁을 게시하십시오.
답변:
계산기는 줄 끝을 유추하는 데있어 매우 영리하므로 아주 적은 문자를 생략 할 수 있습니다.
:Disp "HELLO WORLD //is the same as...
:Disp "HELLO WORLD"
For(
루프는 다음과 같은 구문을 For(variable, start, end, increment)
갖지만 증가를 생략 할 수 있으며 1을 사용합니다.
:For(A,1,5 //is the same as...
:For(A,1,5,1)
보드 전체에서 끝 괄호 (줄 끝)를 생략 할 수 있습니다.
:Output(1,1,A
:int(A
:round(A
etc.
TI-84 Silver Edition 계산기에서 테스트
이것이 하나 이상의 아이디어라고 생각되면 (엔딩을 유추하는) 아이디어를 나눕니다.
not(iPart(B))+(A=5
될 수 있습니다 (A=5)+not(iPart(B
.
{lists}
, "strings"
및 [[matrices]]
)에 적용됩니다. 개행, 콜론 (개행의 스탠드 인, 콜론을 포함 할 수 있으므로 문자열에는 적용되지 않음) 또는 →
STO ▶`버튼으로 입력 한 변수 할당 화살표 ()에 도달하면 표현식이 자동으로 닫힙니다. ). 언어의 그런 이상한 특징.
Ans
다음 줄에서만 표현식을 사용하려면 변수에 저장하지 마십시오! 특수 Ans 변수는 평가 된 마지막 표현식의 값을 저장하는 1 바이트 토큰입니다. 그러므로:
Xsin(A)->R
Disp R+tanh(R
될 수있다
Xsin(A)
Disp Ans+tanh(Ans
2 바이트 절약.
약간 고급 팁 :
작은 조회 테이블은 코드 골프에 유용합니다. 예를 들어 0에서 1, 1에서 2, 2에서 1 및 그 밖의 모든 것을 0으로 매핑하는 함수가 필요합니다. 그러나 TI-BASIC 배열은 적합하지 않습니다. 이 목적을 위해 : 하나는 하나를 기반으로하며 다른 하나는 배열이 저장 Ans
되거나 목록 변수에 저장 될 때까지 값을 추출 할 수 없습니다 .
내 대답에 여기에 , 나는 간단하게 사용할 값을 나열베이스 (11)의 마법 상수에 작은 조회 테이블을 저장,
{0,-1,5,-1,-1,2,9,-1,8,6}
유용한 형식으로 변환
{1,0,6,0,0,3,10,0,9,7}
원하는 자료를 작성하십시오 (베이스 11)
.106003A097
베이스 10으로 변환
-1+int(11fPart(11^Ans.0954191904
최단 배열 방식은 8 바이트 더 깁니다!
{1,0,6,0,0,3,10,0,9,7}-1:Ans(X+1
TI-BASIC은 부동 소수점을 14 진수로만 저장하므로 최대 44ish 비트는 14 자리 만 저장할 수 있습니다.
이 기법은 종종 기본 N 인코딩이 아닌 마법 상수를 찾기 위해 무차별 대입 검색을 사용하여 더 향상 될 수 있습니다. 나는 여전히 위의 답변을 골프로 처리하는 과정에 있지만 렌티큘러 TI-BASIC 골퍼 Weregoose 는이 방법 을 사용6, 4, 2, 4, 2, 4, 6, 2
하여 wiki / 포럼 TI-BASIC 에서 30 (즉, 반복 목록)의 숫자 coprime 사이의 차이를 생성했습니다. 이 스 니펫을 가진 개발자 :
2+2iPart(3fPart(576e^(fPart(I/8
마법 상수 576은 Mathematica를 사용하여 찾았지만 사본이없는 경우 선호하는 언어의 스크립트를 사용하십시오.
반복되는 식 방정식 변수를 넣습니다.
전의:
Remainder(randInt(1,9),1
Remainder(randInt(1,9),5
Remainder(randInt(1,9),10
가능 :
"randInt(1,9→u
Remainder(u,1
Remainder(u,5
Remainder(u,10
참고 : 이것에 대한 좋은 사용법을 찾기는 어렵지만 방정식 변수를 잊어야한다는 것을 의미하지는 않습니다 : P
출처 : http://tibasicdev.wikidot.com/selfmodify
옴니 마가에서 -c4ooo
n
와 함께 첫 번째 표현식 에 추가 하여 더 많은 비용을 절약 할 수 Remainder(
있습니다.
현재의 합의는 모든 코드가 새로운 통역사에서 실행될 수 있도록하는 것입니다. 초기화되지 않은 모든 실제 변수 0
는 TI-BASIC에서 Xmin
시작하여 유용한 값으로 시작합니다 -10
. 따라서 Ans에서 입력을받지 않는 프로그램에서 누적 합계를 가져 가야하거나 실제로 -10
1 바이트 미만 이 필요한 경우이 팁이 도움이 될 수 있습니다.
{1,2,...,N}
N이 42 인 목록이 필요한 경우 목록 을 작성하는 확실한 방법은 다음과 같습니다.
seq(X,X,1,42.
그러나 그보다 1 바이트 작은 binomcdf(
(누적 이항 분포) 명령을 사용하는 깔끔한 핵 입니다.
cumSum(binomcdf(41,0
N-1을 코드의 값으로 바꾸면 비용이 절약되므로 N이 상수 일 때만 작동합니다.
더 짧은 코드를 허용하는 두 가지 경우가 있습니다.
L1
차원 N 의 목록이 이미있는 경우 :
cumSum(1 or L1
주문에 관심이없는 경우 :
randIntNoRep(1,N ;random permutation of numbers from 1 to N
seq(X,X,1,N
경우 보다 1 바이트 작고 멍청한 속도를 보장합니다 . N
cumSum(1 or rand(N
2 바이트를 저장합니다. 하나는 End와 하나는 줄 바꿈입니다. 또한 마지막 줄에서 암시 된 Disp를 사용하여 종종 추가 바이트를 절약 할 수 있습니다.
[code]
If A>5
Then
Output(1,1,Ans²+Ans+A
Disp 3ln(A
End
//end of program
가능 :
[code]
If A>5
Then
Output(1,1,Ans²+Ans+A
3ln(A
//end of program
다음은 코드 골프에서 일반적으로 사용하는 스 니펫입니다.
not(not(Ans
또는 Ans and 1
. 어느 것을 사용할지는 필요한 괄호에 따라 다릅니다.int(e^(Ans
. 열린 페어를 저장합니다 1+(Ans
. TI-BASIC에는 1 기반 어레이가 있으므로 매우 유용합니다.{0,1}
에 {1,-1}
: cos(πAns
. 1 바이트를 저장합니다 1-2Ans
.tanh(ᴇ9Ans
-int(-Ans
1+int(log(Ans
{Re,Im}
:imag(Ans{i,1
seq(inString("...",sub(Ans,X,1)),X,1,length(Ans
( ...
검색 문자열은 어디에 있습니까 )ΔList(cumSum(Ans
ΔList(cumSum(Ans)-Ans
L1
가 고유한지 확인하십시오 .SortA(L1:min(ΔList(L1
1+sum(not(cumSum(Ans=X
median(Ans,10^(seq(sum(Ans=Ans(X)),X,1,dim(Ans
tanh(ᴇ9Ans
작동 하는지 이해하지 못한다 .
당신이 자신을 사용하면
0→G ;or any other variable
;other lines of code
그런 다음 (바이트 저장)을 사용할 수 있습니다.
DelVar G;other lines of code
변수 ( G
) 를 삭제하면 기본값 (이 경우) 이되기 때문 0
입니다. 그런 다음, 줄 바꿈없이DelVar
문 뒤에 다른 줄을 넣을 수 있습니다. 명령문 바로 뒤에 중요한 제어문을 넣을 때주의하십시오 .DelVar
(TI-84에서 테스트)
목록을 사용하면 기본 목록을 피하기 L₁
통해 L₆
한 글자 이름을 가진 이름이 목록에 찬성 : ᶫA
통해 ᶫZ
(여기서 ᶫ
작은 L)입니다.
하나 L₁
는 참조하는 데 2 바이트가 필요하지만 ( 단일 토큰 이지만 2 바이트 토큰 임) 목록에 값을 저장할 때 ᶫ
심볼을 삭제하고 바이트를 저장할 수 있습니다 .
{1,2,3,4,5→ᶫA
될 수있다
{1,2,3,4,5→A
계산기는 결과 저장 위치를 결정할 때 표현식의 데이터 유형을 확인합니다.
마찬가지로, Input A
또는 사용자가 숫자 대신 목록을 입력 Prompt A
하면에 저장됩니다 ᶫA
.
ᶫ
대부분의 명령은 골프에서는 거의 사용되지 않지만 몇 가지 다른 명령은을 사용하지 않고 사용할 수 있습니다 . 예를 들어, Matr►list(
허용 ᶫ
넷째, 세번째로 제거하고, 높은 인자한다.
일반적인 규칙은 명령이 목록 표현식이 아닌 목록 변수 이름을 사용 하고 다른 종류의 변수를 넣을 수있는 대체 구문이없는 경우 명령 이 왼쪽으로 작동 할 수 있다는 것입니다 .ᶫ
목록의 단일 항목을 수정하면 작동하지 않습니다 . 1→ᶫA(3
로 변경할 수 없습니다 1→A(3
.
물론 가장 좋은 목록 변수는 항상 Ans
입니다.
Input A
" ᶫA
사용자가 목록을 입력하면 저장됩니다 . "이는 많은 프로그램이 깨지기 매우 쉽다는 것을 의미합니다. Input
어쨌든 많은 프로그램을 가지고 있지 않은 것이 좋습니다. 사용 완투 GetKey
대신 Input
.
A
이후에 변경되었는지 확인할 수 있습니다 Input A
.
B
-byte 표현식 N
시간 을 사용하는 경우 변수에이를 지정해야합니까?
Ans
1+N
사용할 바이트 비용 ( 줄 바꿈 에 대해 하나, 사용 될 때마다 하나씩), Ans when을 사용하십시오 (B-1)*(N-1)>2
. 한 Ans
줄에 하나만있을 수 있으므로 모든 값을 사용해보십시오 Ans
.
실제 변수 (예 :)의 X
비용은 3+N
바이트이므로 (B-1)*(N-1)>4
.
변수는 비용 3+2N
바이트를 나열 하므로 when을 사용하십시오 (B-2)*(N-1)>5
.
수식 변수는 가장 유용하지 않습니다. 4+2N
바이트 가 필요 합니다. 때 사용하십시오 (B-2)*(N-1)>6
.
Min. bytes in an expression to save
N \ var. | Ans | Real | List | Eqn
------------------------------------
2 4 5 8 9
3 3 4 5 6
4 2 3 4 5
함수가 목록으로 평가 될 때와 같은 방정식 변수가 아닌 목록에 저장하십시오 u
. 이것은 1 바이트를 절약합니다.
닫는 괄호가 있거나없는 경우 식을 재정렬하면 저장 표현식이 유리할 수 있습니다.
이제 나는 모순되고 가능한 한 줄에 코드를 작성해야한다고 말합니다. 왜? 일반적으로 줄에 반복 표현이 길면 단순화 할 수 있습니다.
X + int (rand는 randInt보다 작거나 같은 바이트입니다 (randInt는 2 바이트 토큰이므로 X, Y).
하한이 0 일 때 X +를 생략하여 2 바이트를 절약 할 수 있습니다.
randInt 앞에 X +가 필요합니다 (어쨌든 {2,5,8,11}과 같은 단계 함수에서 임의의 상황에서
X + int (Yrand (N은 randInt (X, Y, N)과 마찬가지로 N 개의 난수 목록을 생성 할 수 있습니다.
Line (픽셀 좌표로 쉽게)과 같은 함수를 사용하려면 그래프 화면 축을 정사각형 픽셀로 초기화하고 축을 제거해야합니다.
AxesOff
84→Xmin
72→Ymax
ZInteger
min(U,max(L,N
여기서 N은 숫자 또는 알고리즘이고 U와 L은 상한과 하한입니다.
max(N={X,Y,Z
L1*L2→L3
instead of
for(A,1,dim(L1
L1(A)*L2(A→L3(A
End
This also works for things like this:
not(L1
L1 and L2
Disp 및 Text (연결될 수 있으므로 Disp A, B는 별도의 줄에 A, B를 표시하고 Text (28,40, A, B는 한 줄에 B 옆에 A를 인쇄 함)
이러한 많은 최적화는 화면에서 문자를 가장 적은 바이트로 이동하는 데 사용되는 기술의 일부
http://tibasicdev.wikidot.com/movement
http://tibasicdev.wikidot.com/tokens
도움 점수