PowerShell : 77 74 71 70 61
골프 코드 :
for($i=(read-host);$i-ne1;$x++){$i=(($i/2),(3*$i+1))[$i%2]}$x
노트:
원래 사용자 입력을 정수로 강요하지 않고 시도했지만 흥미로운 방식으로 중단되었습니다. 홀수 입력은 부정확하게 처리되지만 입력조차도 제대로 작동합니다. 무슨 일이 일어나고 있는지 깨닫는 데 시간이 걸렸습니다.
곱셈 또는 덧셈을 수행 할 때 PowerShell은 형식화되지 않은 입력을 문자열로 먼저 처리합니다. 따라서 '5'*3+1
16 대신 '5551'이됩니다. PowerShell에는 문자열을 구분하기위한 기본 동작이 없기 때문에 짝수 입력이 올바르게 동작합니다. 홀수를 통해 진행되는 짝수 입력조차도 PowerShell에서 홀수에 도달 할 때까지 수학 연산에 의해 변수가 이미 정수로 설정 되었기 때문에 정상적으로 작동했습니다.
Danko Durbic 덕분에 곱셈 연산을 뒤집을 수 있었고 read-host
PowerShell은 첫 번째 객체를 기반으로하기 때문에 int 로 캐스트 할 필요가 없습니다 .
PowerShell 골퍼의 팁 : 이와 같은 일부 시나리오의 경우 switch
이길 수 if/else
있습니다. 여기서 차이는 2 자입니다.
Danko Durbic 의 Protip courtesy :이 특정 시나리오의 경우 switch
8 개 이상의 문자를 절약하기 위해 대신 배열을 사용할 수 있습니다 !
정수가 아닌 값 또는 2보다 작은 정수를 검사하는 데 오류가 없습니다.
스크립트를 감사하려면 스크립트 ;$i
에서 마지막 닫기 괄호 바로 앞에 놓으십시오 .
PowerShell이 매우 큰 값으로 진행되는 숫자를 얼마나 잘 처리하는지 잘 모르겠지만 어느 시점에서 정확도가 떨어질 것으로 예상합니다. 불행히도, 나는 대본을 크게 부 풀리지 않고 그것에 대해 할 수있는 일이 많지 않을 것으로 기대합니다.
주석이 달린 언 골프 코드 :
# Start for loop to run Collatz algorithm.
# Store user input in $i.
# Run until $i reaches 1.
# Increment a counter, $x, with each run.
for($i=(read-host);$i-ne1;$x++)
{
# New $i is defined based on an array element derived from old $i.
$i=(
# Array element 0 is the even numbers operation.
($i/2),
# Array element 1 is the odd numbers operation.
(3*$i+1)
# Array element that defines the new $i is selected by $i%2.
)[$i%2]
}
# Output $x when the loop is done.
$x
# Variable cleanup. Don't include in golfed code.
rv x,i
테스트 사례 :
다음은 감사가 활성화 된 샘플입니다. 또한 입력 및 최종 카운트에 레이블을 추가하고 Collatz 값을 구분하기 위해 간격을 두어 명확성을 위해 출력을 약간 편집했습니다.
---
Input: 2
1
Steps: 1
---
Input: 16
8
4
2
1
Steps: 4
---
Input: 5
16
8
4
2
1
Steps: 5
---
Input: 7
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
Steps: 16
---
Input: 42
21
64
32
16
8
4
2
1
Steps: 8
---
Input: 14
7
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
Steps: 17
---
Input: 197
592
296
148
74
37
112
56
28
14
7
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
Steps: 26
---
Input: 31
94
47
142
71
214
107
322
161
484
242
121
364
182
91
274
137
412
206
103
310
155
466
233
700
350
175
526
263
790
395
1186
593
1780
890
445
1336
668
334
167
502
251
754
377
1132
566
283
850
425
1276
638
319
958
479
1438
719
2158
1079
3238
1619
4858
2429
7288
3644
1822
911
2734
1367
4102
2051
6154
3077
9232
4616
2308
1154
577
1732
866
433
1300
650
325
976
488
244
122
61
184
92
46
23
70
35
106
53
160
80
40
20
10
5
16
8
4
2
1
Steps: 106
---
Input: 6174
3087
9262
4631
13894
6947
20842
10421
31264
15632
7816
3908
1954
977
2932
1466
733
2200
1100
550
275
826
413
1240
620
310
155
466
233
700
350
175
526
263
790
395
1186
593
1780
890
445
1336
668
334
167
502
251
754
377
1132
566
283
850
425
1276
638
319
958
479
1438
719
2158
1079
3238
1619
4858
2429
7288
3644
1822
911
2734
1367
4102
2051
6154
3077
9232
4616
2308
1154
577
1732
866
433
1300
650
325
976
488
244
122
61
184
92
46
23
70
35
106
53
160
80
40
20
10
5
16
8
4
2
1
Steps: 111
---
Input: 8008135
24024406
12012203
36036610
18018305
54054916
27027458
13513729
40541188
20270594
10135297
30405892
15202946
7601473
22804420
11402210
5701105
17103316
8551658
4275829
12827488
6413744
3206872
1603436
801718
400859
1202578
601289
1803868
901934
450967
1352902
676451
2029354
1014677
3044032
1522016
761008
380504
190252
95126
47563
142690
71345
214036
107018
53509
160528
80264
40132
20066
10033
30100
15050
7525
22576
11288
5644
2822
1411
4234
2117
6352
3176
1588
794
397
1192
596
298
149
448
224
112
56
28
14
7
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
Steps: 93
---
질문의 테스트 사례가 아닌 입력 숫자에 대한 흥미로운 내용 :
1+
로 특별한 경우)
입니다.