골판지 숫자는 몇 개입니까?


32

골판지로 만든 숫자를 일부 숫자 ( :)로 표시해야합니다 . 어떤 숫자를 표시해야하는지 미리 알 수 없습니다. 내가 아는 유일한 것은 이보다 크지 않다는 것 n입니다.

몇 개의 골판지 숫자를 준비해야합니까?

예: n = 50

0 ... 50 범위의 숫자를 표시하려면 다음 숫자가 필요합니다.

  1. 숫자 0 또는 다른 둥근 숫자를 표시하기위한 0
  2. 해당 숫자를 표시하기위한 숫자 1, 2, 3 및 4의 사본 2 개
  3. 숫자 5, 6, 7 및 8의 복사본 1 개 (숫자에서 최하위 숫자로 표시되는 경우)
  4. 대신 숫자 6을 대신 사용할 수 있기 때문에 숫자 9는 필요하지 않습니다.

총계 : 13 자리

테스트 사례 (각 라인은 "입력; 출력"형식의 테스트 사례입니다)

0 1
1 2
9 9
11 10
50 13
99 17
100 18
135 19
531 22
1000 27
8192 34
32767 38

2
6/9 이외의 다른 숫자를 회전 할 수 있습니까?
feersum

아니요 (예 참조)
anatolyg 2016 년

따라서 두 개의 1은 7을 만들기 위해 겹쳐 질 수 없습니다
user253751

2
... 그리고 두 개의 0은 8을 만들 수 없습니다.
아나 톨릭

어색한 질문 일지 모르지만 '카드 보드'숫자이므로 필요한 총 비용을 절약하기 위해 양면 인쇄 할 수 있습니까? 예를 들어 6과 0을 함께 사용할 필요는 없습니다.
Weckar E.

답변:


16

젤리 , 9 바이트

‘ḶDœ|/ḟ9L

온라인으로 사용해보십시오!

작동 원리

‘ḶDœ|/ḟ9L
‘Ḷ         [0,1,...,n]
  D        convert each to list of its digits
   œ|/     fold by multiset union
      ḟ9   remove 9
        L  length

14
너무 빨리>. <맹세합니다, 당신은 우주에서 알려진 모든 도전에 대해 젤리 답변을 가지고 있으며 도전 직후에 봇을 게시 할 수 있습니다. : P 좋은 대답입니다.
HyperNeutrino 2016 년

10
@HyperNeutrino 봇은 도전 과제에서 테스트 사례를 추출하고 슈퍼 컴퓨터를 사용하여 가능한 모든 젤리 프로그램을 시도한다고 생각합니다.
NieDzejkob

1
@HyperNeutrino 당신은 느낌을 알고 있습니다 ... 특히 솔루션이 있다면 0rDŒr€ẎQṪÞẎḟ9ĠẎL.
아웃 골퍼 에릭

나는 잠시 동안 ḟ9 파트의 유효성을 의심 한 다음 6 <9를 실현하여 6의 수는 각 조합으로 결합 된 가능한 총 6과 9의 수보다 작을 수 없습니다.
Nader Ghanbari

7

파이썬 2 , 49 바이트

lambda n:9*len(`n`)-9+(n*9+8)/10**len(`n`)+(n<10)

온라인으로 사용해보십시오!

서투른 산술 공식. 에 추가되지 않도록 n안에 맞는 것으로 가정하십시오 .intL

9 개의이되지 않는 일을 처리 할 수되고 있다는 지적에 의해 5 바이트를 저장하는 닐에게 감사 n*9+8대신에 n*9+9, 그래서는, 말, 999*9+8=89999000로 이월되지 않습니다.


@ovs 그것은 작동하지 않습니다, 첫 번째 숫자를 아는 것만으로는 충분하지 않습니다. 예를 들어 333335 개의 3이 22222필요 하지만 4 개만 필요합니다. n*9[0]은 (는) 유혹하고 있지만 1그 이하로 시작하는 숫자는 실패 합니다 111...
xnor

내 계산 (내 배치 답변 참조)으로을 사용 (n*9+8)/10**len(`n`)하지 않도록 할 수 있습니다 min.
Neil

7

하스켈 , 117 114 108 95 89 88 87 84 82 63 바이트

Laikoni 덕분에 6 바이트 절약

1 4 6 바이트는 nimi 덕분에 저장

g x=sum[maximum[sum[1|u<-show y,d==u]|y<-[0..x]]|d<-['0'..'8']]

온라인으로 사용해보십시오!


3
1.) maximum[a,b]는와 동일합니다 max a b. 2.) 목록 이해력은 종종 다음보다 짧습니다 filter.max d$sum[1|x<-show a,x==b]
Laikoni

1
gpointfree 함수 리터럴로 대체 할 수 있습니다 sum.(#[-9..]).
nimi

@nimi pointfree 함수 리터럴이 무엇인지 모르겠지만 제안하는 내용을 알 것 같습니다. 내가 틀렸다면 말해줘
밀 마법사

1
... length[x|x<-...]입니다 sum[1|x<-...].
nimi

1
함수의 이름을 지정할 수 없으므로 (필요하지 않을 g=수도 있지만 TIO 버전에 포함하고 싶을 수도 있습니다.)
nimi

5

Mathematica, 49 바이트

Tr@Delete[Max~MapThread~DigitCount@Range[0,#],9]&

좋은! 이것은 내 대답을 기반으로합니까?
J42161217

5

자바 스크립트 (ES6), 60 53 바이트

f=(n,i=9)=>n>(i%9+1+"e"+(i/9|0))/9-1?1+f(n,-~i):n>9^1

일종의 해키 재귀 솔루션. 숫자를 추가 해야하는 숫자가 생성됩니다.

1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 22, 33, 44, 55, 66, 77, 88, 100, 111, 222, ...

그런 다음 입력보다 적은 수를 계산합니다. 행복한 기적으로 숫자를 제거하면 9실제로 함수에서 몇 바이트 가 제거 됩니다. 순서가 다음과 같이 생성 될 수 있기 때문입니다 (정수 나누기 가정).

1e1 / 9 = 1, 2e1 / 9 = 2, ..., 8e1 / 9 = 8, 9e1 / 9 = 10, 1e2 / 9 = 11, 2e2 / 9 = 22, ...

10 미만의 숫자에는 여전히 0이 필요하다는 사실을 고려해야하지만, 추가하는 것만 큼 간단합니다. n > 9 ? 0 : 1 결과에 하는 합니다.

테스트 사례


n>9^1아마있을 수 있습니다n<10
CalculatorFeline

@CalculatorFeline 글쎄, 그것은 trueinput 을 제공 0하므로 조금 주저합니다.
ETHproductions

0>9거짓 false^1입니까 , 1입니까?
CalculatorFeline

@CalculatorFeline 예, 숫자 대신 부울 을 출력 하는 것을 주저하고 있습니다. true1
ETHproductions

4

배치, 67 바이트

@if %1 geq 10%2 %0 %1 0%2 -~%3
@cmd/cset/a(%1*9+8)/10%2+9*%30+!%30

이 문제의 표준 정립, 당신은 별도의 필요 69숫자,하지만 당신은 표시 할 필요가 없습니다 것 0. n필요한 최대 값이 증가하면 필요한 숫자의 숫자는 재 숫자에 도달 할 때마다 (그 숫자가 충분하지 않기 때문에) 100 의 거듭 제곱에 도달 할 때마다 (추가 0이 필요할 때) 증가합니다. 전체적으로 각각의 거듭 제곱은 이전 의 1010보다 더 많은 숫자가 필요합니다 floor(log10(n))*10. n10의 거듭 제곱 사이의 값에 대해 중간 repdigits의 수는 다음과 같이 floor(n/((10**floor(log10(n))*10-1)/9))또는 다르게 계산 될 수 있습니다 floor(n*9/(10**floor(log10(n))*10-1)).

floor(log10(n))첫 번째 줄의 루프를 사용하여 계산 합니다. 매번 %2추가 0%3얻고 추가 를 얻습니다 -~. 이 수단 10%2이다 10*10**floor(log10(n))하고 %30있다floor(log10(n)) .

의 중복 69두 가지 효과가 있습니다. 첫째,의 9각 거듭 제곱에 필요한 숫자 만 10있고, 둘째로 반복 숫자 탐지는 반복 숫자를 무시해야합니다 9. 다행스럽게도 10의 거듭 제곱보다 하나가 작으므로 수식을 조정하여 결과를 얻을 수 있습니다.floor((n*9+8)/(10**floor(log10(n))*10)) .

0을 다루는 것은 합리적으로 간단합니다 . n<10즉, floor(log10(n))==0.


2

수학, 83 바이트

v=DigitCount;s=v@0;(Table[s[[i]]=v[j][[i]]~Max~s[[i]],{i,10},{j,#}];s[[9]]=0;Tr@s)&


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