러시아에는 전통과 같은 것이 있습니다. 행운의 티켓을 찾는 것을 좋아합니다.
일반 항공권은 다음과 같습니다.
보시다시피 티켓에는 6 자리 숫자가 있습니다.
처음 세 자리의 합이 마지막 세 자리의 합과 같은 경우 6 자리 숫자는 운이 좋은 것으로 간주됩니다 .
사진의 숫자는 운이 좋지 않습니다.
038937
038 937
0 + 3 + 8 = 11
9 + 3 + 7 = 19
11 != 19
도전
범위 제한을 포함하여 (범위 포함) 그 안에 포함 된 행운의 티켓 번호 수를 반환합니다.
매개 변수
- 입력 : 2 개의 정수 : 범위의 첫 번째 정수와 마지막 정수
- 입력 값은 0에서 999999 사이입니다.
- 출력 : 1 정수 : 범위에있는 행운의 숫자 수
- 입력을 받아 허용되는 형식으로 출력을 반환 할 수 있습니다
- 100000보다 작은 숫자의 앞에 0을 가정하십시오.
예
0, 1 => 1
100000, 200000 => 5280
123456, 654321 => 31607
0, 999999 => 55252
이것은 코드 골프 이므로 모든 언어에서 가장 짧은 바이트 단위의 대답이 이깁니다.
답변
05AB1E , 8 (또는 10?) 11 (또는 13?) 바이트
Ÿʒ₄n+¦S3ôOË
온라인으로 시도 하거나 더 많은 테스트 사례를 확인 하십시오 .
참고 : 05AB1E에서 문자열과 정수는 서로 바꿔서 사용할 수 있으므로 출력 숫자에 선행 0이 포함되지 않습니다. 그러나 이것은 1 추가 바이트 ( 12 바이트) 로 고정 될 수 있습니다 ) .
Ÿ₄n+€¦ʒS3ôOË
온라인으로 사용해보십시오 하거나 더 많은 테스트 사례를 확인 .
길이가 3 이하인 버그 수정 번호에 +3 바이트 (범위) [000000, 000999]
).
설명:
Ÿ # Create an inclusive (on both sides) range from the two inputs
# i.e. 038920 and 038910 →
# [38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920]
ʒ # Filter this list by:
₄n+ # Add 1,000,000 to the number
| # And remove the leading 1
# i.e. 38910 → 1038910 → '038910'
S # Transform it to a list of digits
# i.e. '038910' → ['0','3','8','9','1','0']
3ô # Split it into chunks of length 3
# i.e. ['0','3','8','9','1','0'] → [['0','3','8'],['9','1','0']]
O # Sum the digits in both parts
# i.e. [['0','3','8'],['9','1','0']] → [11,10]
Ë # Check if they are equal (if they are, they remain in the filtered list)
# i.e. [11,10] → 0
편집 : 나 (그리고 대부분의 다른 답변)가 도전을 약간 잘못 읽은 것으로 보이며 범위 내의 숫자 자체 대신 숫자의 양을 묻는 것입니다. 이 경우 후행 }g
을 추가 할 수 있습니다 (필터를 닫고 필터링 된 목록에 남아있는 숫자의 양을 얻음). 대신 10 13 바이트입니다 .
Ÿʒ₄n+¦S3ôOË}g
온라인으로 시도 하거나 더 많은 테스트 사례를 확인 하십시오 .
답변
C # (. NET 코어) , 93 + 18 = 111 바이트
a=>b=>Enumerable.Range(a,b-a+1).Select(e=>$"{e:D6}").Count(e=>e[0]+e[1]+e[2]==e[3]+e[4]+e[5])
18 바이트 using System.Linq;
. 입력 및 출력 형식이 유연 할 수 있다고 가정했습니다. 그래서 두 개의 정수를 입력으로 사용합니다 (범위 포함).
일부 테스트 결과 :
a=1000
b=1100
Lucky numbers = 3 [001001, 001010, 001100]
a=2000
b=2100
Lucky numbers = 3 [002002, 002011, 002020]
a=222000
b=222100
Lucky numbers = 7 [222006, 222015, 222024, 222033, 222042, 222051, 222060]
a=0
b=999999
Lucky numbers = 55252 (that's 5.5% of the total numbers)
답변
자바 스크립트 (ES6), 66 바이트
currying 구문에서 입력을 받습니다. (m)(n)
여기서 m 은 배타적 상한값이고 n 은 배타적 인 하한값입니다.
m=>g=n=>n<=m&&![...n+=''].reduce((t,d,i)=>t-=n[i+3]?d:-d,0)+g(-~n)
어떻게?
우리 는 숫자 d i 를 걷고 총 t를 업데이트하여 각 숫자 을 테스트합니다 .
- 이 뒤에 3 자리 이상의 숫자가 남아 있으면
- 달리
프로세스의 끝에 이 있으면 n 은 행운의 숫자입니다.
자바 스크립트 (ES6), 67 바이트
동일한 입력 형식.
m=>g=n=>n<=m&&!eval([...n/1e3+''].join`+`.split`+.`.join`^`)+g(n+1)
어떻게?
각 숫자 :
- 나눕니다 : 예
38937 --> 38.937
- 줄로 강제하고 분열 :
['3','8','.','9','3','7']
- 와 함께
+
:"3+8+.+9+3+7"
- 대체
+.
와 함께^
:"3+8^+9+3+7"
- JS 코드로 평가하고 결과가 인지 테스트하십시오 . ( 11 XOR 19 )
24
n ≡ 0 인 경우 이면 소수점이 생성되지 않으며 n = 0 (truthy)이아닌 한 평가 된 표현식은 양의 합(거짓)입니다. 두 경우 모두 예상되는 결과입니다.
답변
루비 , 56 54 바이트
->a,b{(a..b).count{|i|j=i.digits;j[0,3].sum*2==j.sum}}
방법:
- 모든 숫자에 대해 숫자의 배열을 만듭니다 (반대 됨)
- 배열의 처음 3 자리 숫자 (숫자의 마지막 3)에 2를 곱한 값을 전체 배열의 합계와 비교합니다.
- 두 합이 같은 수를 센다
답변
답변
파이썬 3 117 113 106 135 바이트
이것은 나의 첫 번째 대답이므로 개선의 여지가 있다고 확신합니다.
def x(a,b):
n=0
for i in range(a,b+1):
if sum(map(int,str(i//1000)))==sum(map(int,str(i%1000))):n+=1
print(n)
- WW 덕분에 -4 바이트
- Asone Tuhid 덕분에 -7 바이트
- 함수를 생성하기위한 +29 바이트
정수 나누기를 통해 처음 세 자리를 가져오고 마지막 세 자리를 모듈로 통해 가져옵니다. 범위의 첫 번째 정수와 마지막 정수는 각각 x
as a
및 로 함수의 인수로 입력됩니다 b
. 출력이 n
인쇄됩니다.
언 골프 드 :
def x(a, b):
n = 0
for i in range(a, b + 1):
if sum(map(int, str(i // 1000))) == sum(map(int, str(i % 1000))):
n += 1
print(n)
답변
R , 93 86 바이트
@ Giuseppe /의 최종 칭찬에 더 짧은 논리
function(a,b){for(i in sprintf("%06d",a:b)){x=utf8ToInt(i);F=F+!sum(x[1:3]-x[4:6])}
F}
정수 입력. 로 채 웁니다 0
. 6 개의 ASCII 코드 포인트로 변환하십시오. F
내장을 남용하십시오 .