CUDDLE 계산


19

69Wikipedia 페이지에 따르면 69 2 = 4,76169 3 = 328,509 는 모두 십진수를 모두 사용 한다는 점에 유의하십시오 . 숫자 69 는 실제로이 속성을 만족하는 가장 낮은 숫자입니다.

비슷한 이유로 32,043 은 놀랍습니다. 32,043 2 = 1,026,753,849 는 모든 10 진수를 사용합니다.

이런 식으로 흥미로운 숫자에 대해 계속 이야기하려면 표기법이 필요합니다.

대부분의 정수 n의 경우, 거듭 제곱 n 2 ,…, n k 는 충분히 큰 값의 k에 대해 적어도 10 회 (앞의 0을 계산하지 않음)를 한 번 이상 사용 합니다. 그것이 존재한다면, 우리는 가장 낮은 kCUDDLE ( CUmulative Decimal Digits, Least Exponent ) n이라고 부를 것이다.

직무

음이 아닌 단일 정수 n 을 입력으로 받아들이고 CUDDLE을 계산하고 반환 하는 프로그램이나 함수를 작성하십시오 .

경우 n은 이없는 안아 , 당신은 결국 당신의 코드가 정지 한, 오류 또는 빈 문자열을 포함하여 아무것도하지만, 양의 정수를 반환 할 수 있습니다.

테스트 사례

왼쪽 열이 입력되고 오른쪽 열이 출력됩니다.

0 
1 
2          15
3          10
4          10
5          11
6          12
7           7
8           5
9           6
10 
11          7
12          6
13          6
14          7
15          9
16          5
17          7
18          4
19          5
20         15
26          8
60         12
69          3
128         3
150         9
200        15
32043       2
1234567890  3

추가 규칙

  • 코드는 최대 255 개의 모든 입력에 대해 작동해야합니다 .

    이것은 꽤 큰 숫자를 다루는 것을 포함합니다. 20 15 는 이미 2 64 보다 큽니다 .

  • 결과를 인쇄하면 줄 바꿈이 뒤따를 수 있습니다.

  • 표준 규칙이 적용됩니다.


14
나는 우리가 CUDDLE에서 69로 어떻게되었는지 궁금해하고 있었고, 그것이 힘과 관련이 있다는 것을 조금 혼란스럽게 생각합니다.)
Aaron

숫자에 CUDDLE이 없으면 프로그램이 정지해도 괜찮습니까? (즉, 정수 카운터가 넘칠 때)
Doorknob

또한 첫 번째 추가 규칙의 경우 : 언어의 정수 유형 255보다 큰 숫자 저장할 수 있으면 코드 작동해야 함을 의미합니까?
Doorknob

@Doorknob 결국 실제로 중단되는 한 괜찮습니다. 입력에 255의 상한을 설정했습니다. 그래도 계산에는 꽤 큰 숫자가 포함됩니다.
Dennis Dennis

1
테스트 케이스를 추가 한 것은 코드에 잘못 입력 한 오류 (of ) 26->8n^1제공 하는 가장 작은 예이므로 테스트 사례를 추가했습니다 6.
xnor

답변:


4

Pyth, 16 바이트

hf<9l{=+k^QTtS15

온라인으로 사용해보십시오 : 데모 또는 테스트 스위트

다른 솔루션과 마찬가지로 15를 상한으로 사용합니다. 나는 이것이 또한 최대 CUDDLE 이라고 믿는다 . 모든 숫자를 10.000.000까지 테스트했으며 CUDDLE 이 15보다 큰 숫자는 없습니다 .

CUDDLE > = 10 인 숫자 는 이미 매우 드 rare니다. CUDDLE 이 15 인 유일한 숫자 는 숫자 2*10^k입니다. A를 아무 숫자 없습니다 안아 (14) 또는 (13)에서, 안아 (12)는 단지 숫자 표시 6*10^k안아 에만 11 5*10^k.

따라서이 코드는 모든 자연수에 완벽하게 작동한다고 생각합니다.

해결책이 없으면 오류 메시지를 인쇄합니다.

설명:

hf<9l{=+k^QTtS15   implicit: Q = input number
                             k = empty string
            tS15   the list [2, 3, 4, ..., 15]
 f                 filter this list for elements T, which satisfy:
         ^QT          compute Q^T
       +k             k + ^ (converts to string implicitly)
      = k             save the result in k
    l{  k             length of set of k (number of different chars)
  <9                  test if 9 is smaller than ^
h                  print the first number in the filtered list
                   (throws error if empty)

8

파이썬 2, 56

f=lambda n,i=2,s='L':len(set(s))>10or-~f(n,i+1,s+`n**i`)

재귀 솔루션. 지수를 i시작 하여 지수를 세고 2거듭 제곱수 n**i를 스트링에 축적 합니다 s. 때 s10 개의 숫자, 수익률이 True동일, 1재귀 및 추가 그렇지 않으면,와 1. 이것은 돌아 오는 것보다 짧았습니다 i.

CUDDLE이없는 번호에서 함수를 호출하면로 종료됩니다 Internal error: RangeError: Maximum call stack size exceeded. 255그 출력 까지의 숫자 는 15 회 이상의 반복이 필요하지 않습니다.

파이썬 2는 L많은 숫자 를 추가하는 성가신 습관 때문에 실제로 숫자 문자열을 초기화 L하고 설정된 크기가 11 이상인지 확인합니다. 파이썬 3은 이것을 필요로하지 않아 2 문자를 절약하지만 str백틱 을 사용하면 3 문자를 잃습니다 . Python 3.5는 세트 풀기를 사용하여 2 개의 문자를 더 절약하여 총 2 개의 문자를 Python 2에 저장합니다.

f=lambda n,i=2,s='':len({*s})>9or-~f(n,i+1,s+str(n**i))

4

루비, 67 65 자

->n{s='';[*2..99].index{|i|(s+="#{n**i}").chars.uniq.size==10}+2}

255보다 큰 모든 테스트 사례에서 거의 즉각적으로 작동합니다.

CUDDLE이없는 숫자의 오류.

설명:

-> n {                         # define function with short lambda syntax
  s = ''                       # the string we are storing the numbers in
  [*2..99]                     # for all numbers from 2 to 99...
    .index {|i|                # find index of the number `i` for which...
      (s+="#{n**i}")           # after appending pow(n,i) to s...
        .chars.uniq.size==10}  # num of uniq chars in s is 10 (each digit)
  + 2                          # add 2, because our index starts from 2
}

3

CJam, 28 바이트

LliG,2>f#{s+_&_}%:,A#)_)s\g*

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

이것은 @xnor가 처음 관찰 한 것처럼 CUDDLE (있는 경우)이 입력 범위에 대해 15보다 크지 않다는 사실에 의존합니다.

해결책이없는 경우에 대한 출력을 생성하는 더 좋은 방법이있을 것입니다. 생각이 든다면 업데이트하겠습니다.

설명:

L     Push empty string, will be used for accumulating digits.
li    Get input and convert to integer.
G,    Build list of exponents [0 .. 15].
2>    Slice off first two values, to produce [2 .. 15].
f#    Apply power operator with all exponents to input.
{     Start loop over powers.
  s     Convert to string. We care about the digits here.
  +     Concatenate with previously found digits.
  _&    Uniquify using set intersection of digit list with itself.
  _     Copy for continued accumulation in next loop iteration.
}%    End of loop over powers. We'll have an extra copy of the last value here,
      but it does no harm so we just keep it.
:,    Apply length operator to accumulated digit lists.
A#    Find 10 in the list. The search result will correspond to the first power
      that resulted in 10 different accumulated digits. If not found, the result
      will be -1. Note that 0 corresponds to power 2, since that was the first
      power we used. So we need to add 2 to get the result, and check for -1.
)     Increment value. 0 now corresponds to no solution.
_     Copy this value. Will be used as multiplier to create empty string if 0.
)     Increment again, to get the +2 needed for the result.
s     Convert to string.
\     Swap once-incremented value to top, which is 0 for no solution, non-zero
      otherwise.
g     Signum to get 0/1 for no solution vs. solution.
*     Multiply with result string, to get empty string for no solution.

2

수학, 103 바이트

f=(d=DigitCount;x=1;y=d[0];For[n=0,!IntegerQ@Log10[#]&&MemberQ[y,0],++n,x*=#;y+=d[x]];Print[#,"\t",n])&

10의 거듭 제곱 만 CUDDLE을 갖지 않는 것으로 보이므로 생략됩니다. 이 함수는 표시된 자릿수 목록을 유지하고 더 이상 0이 없으면 중지됩니다.

산출:

1    0
2    15
3    10
4    10
5    11
6    12
7    7
8    5
9    6
10    0
11    7
12    6
13    6

재미있는 사실 : log_10(n)비이성적 인 한, 양의 정수 k가 주어지면 m소수점 이하 자릿수가로 n^m시작합니다 k. 이는 10의 거듭 제곱 (0)을 건너 뛰는 것이
좋습니다

2

자바 스크립트 (ES6) 188

53 비트 정수로 제한되는 언어에는 나쁘지 않습니다.

화살표 기능 및 스프레드 연산자 (AFAIK Firefox)를 포함하여 EcmaScripts 6을 구현하는 브라우저에서 아래 스 니펫 실행 테스트

f=n=>{for(p=1,d=[],v=n=[...n+''].reverse();++p<20;){v.map((a,i)=>n.map((b,j)=>r[j+=i]=a*b+~~r[j]),r=[],c=0),r=r.map(r=>(r+=c,c=r/10|0,d[r%=10]=r));v=c?[...r,c]:r;if(d.join``[9])return p;}}

// Less golfed
U=n=>{
// Arbitrary precision multiplication
  M=(A,B,R=[],c=0)=>
  (
    A.map((a,i)=>B.map((b,j)=>R[j+=i]=a*b+~~R[j])),
    R=R.map(r=>(r+=c,c=r/10|0,r%10)),
    c?[...R,c]:R
  );
  v=n=[...n+''].reverse();
  for(p=1,d=[];++p<20;)
  {
    v=M(n,v)
    
    v.map(c=>d[c]=c)
    if (d.join``[9])return p
  }  
}

// TEST
for(i=o='';++i<300;)o+=i+' : '+f(i)+'\n'
O.innerHTML=o
  
  
<pre id=O></pre>


2

PowerShell, 94 바이트

param($n,$s='')
2..99|%{$s+=[bigint]::Pow($n,$_);if(($s-split''|sort -U).Count-eq11){$_;break}}

(As a single line)

그것에 대해 너무 영리한 것은 아니지만 파이핑을 하는 것은 해시 테이블에 항목을 명시 적으로 추가하지 않고 이러한 종류의 사용을 위해 sort -U[nique]Python의 set()기능을 잘 처리하는 깔끔한 방법 입니다.

param($n,$s='')                              # Take command line parameter.
2..99 |%{                                    # Loop from 2 to 99, inclusive.
    $s+=[bigint]::Pow($n,$_)                 # $n^Loopvar, concatenate to string.
    if (($s-split''|sort -U).Count-eq11) {   # Convert to unique-characters-array; count.
        $_;break                             # Print current loopvar and quit.
    }
}                                            # Otherwise, finish (silently).

예 :

PS C:\> .\CUDDLE-of-n.ps1 10

PS C:\> .\CUDDLE-of-n.ps1 12
6

PS C:\> .\CUDDLE-of-n.ps1 255
5

1

플래그 = 78 바이트 인 경우 gawk 4, 73 + 5

{for(n=$0;a-1023&&++i<15;j=0)for($0*=n;j++<NF;)a=or(a,2^$j)}$0=i<15?++i:_

각 디지트를 들어 0비스 9가 입력되는 전력의 발생, 그것을 나타내는 비트 설정 2^digit하여 a제 10 개 자리가 발견된다 (까지 a == 1023 == 2^10-1) 또는 15 개 이상의 반복이있었습니다.

빈 필드 구분 기호와 큰 숫자의 경우 -M 플래그를 사용하여 호출해야합니다.

echo 17 | awk -M '{for(n=$0;a-1023&&++i<15;j=0)for($0*=n;j++<NF;)a=or(a,2^$j)}$0=i<15?++i:_' FS=

이 문제를 해결하면서 다른 CUDDLE에 대해 다음 시퀀스를 발견했습니다.

2 : 32043 32286 33144 35172 35337 35757 35853 37176 37905 38772 39147 39336 40545 42744 43902 44016 45567 45624 46587 48852 49314 49353 50706 53976 54918 55446 55524 55581 55626 56532 57321 58413 58455 58554 59403 60984 61575 61866 62679 62961 63051 63636567 65637 65637 65637 65637 65637 65637 65637 65637 65637 65637 65637 65637 65637 65637 65629 65637 65629 65637 65629 65637 65629 68781 69513 71433 72621 75759 76047 76182 77346 78072 78453 80361 80445 81222 81945 83919 84648 85353 85743 85803 86073 87639 88623 89079 89145 89355 89523 90144 90153 90198 91248 91605 92214 94695 95154 96702 97779 98055 98802 99066
3 : 69128203302 3273663669867542 591 567859633 643 669690747 759 903923 943 1016 1018 1027 1028 1043 1086 1112 1182 1194 1199 1233 1278 1280 1282 1328 1336 1364 1396 1419 1459 1463 1467 1472 1475 1484 1499 1508 1509 1519 1563 1569 1599 1602 1603 1618 1631 1633 1634 1659 1669 1687 1701 1712 1721 1737 1746 1767 1774 1778 1780 1791 1804 1837 1844 1869 1889 1895 1899 1903 1919 1921 1936 1956 1958 1960 1962 1973 1984 1985 1991 1994 1996 2003 2017 2019 2030 2033 2053 2075 2123 2126 2134 2157 2158 2159 2168 2175 2183
4 : 18 54 59 67 71 84 93 95 971081121151321391441471481481521561571591691721741741787918018118218419519962132142152162212232727228232234235 239241241242248265 266 267 270 272 273 279 268 285 287 294 298 299 306 311 312 314 315 316 323 326 329 332 336 338 342 343 353 354 356 361 362 364 365 368 369 379 388 391 393 395 396 397 403 412 413 414 416 419 423 426 4314344439442444344444445145145253534544554574575963466 469472473 477 479482482484486 489 493 494 496503507507508509515517517
5 : 8 16 19 27 28 38 44 47 55 57 61 77 79 80 82 83 86 87 91 92103106 113116117118121123125126129129133133138138140141142143145145146151154158160161161165167 173175176 1177 183 185186187 189190191192 193 197 19820420721822422422229230231236240243246245253253255 257258 25926126327268 269 271 2752762777278280282282838428628228889 293 304309322322328331 343343443334534647 348 349352 357 359 367 371 373 337373753777380 381384 387 38940240740840809411 417 418 422 427
6 : 9 12 13 22 23 24 33 36 37 39 42 43 45 46 49 51 53 58 62 66 72 73 75 78 81 88 90 94 98105107109114114119120122127130134134137149153155162162163164166168 170194199206211211212217219220222222225232372382442472472542542562622642627423891 29630130831731932132132432533033333333373751355358360370376 378 382 383 3386 3390 394 399 401 404 405 406 415 420 421 424 425 429 430 433 435 438 446 450 460 471 476 478 488 490 498 50250450651051351351451953533953548 5556620628 631 634636
7 : 7 11 14 17 29 31 32 35 41 48 52 56 63 64 70 74 85 89 96 9910210411011113517117188201202205208245251290 297303303307307310313318320335350 363 392410 465 475480 48348550150151151852052152156058848495601630640682 700736740740786798850850 9595956965975 9829909991002 1005 1011 1020 1040 1054 1100 1110 1171 1219 1313 1331 1115 179 1414 1141 1313 1601 1141 1414 14707 1470 179 1414 1144 1 14 1 14 1 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 14 1 1 3 1 3 1 1 1710 1735 1748 2001 2010 2020 2050 2080 2450 2510 2534 2641 2745 2900 2914 2955 2970 3030 3050 3070 3100 3130 3136 3180 3193 3200
8:21 25 26 30 34 65 761242092102502603003405055056501004 1240 2002 2090 2100 2500 2600 2975 3000 3400 3944 4376 5050 6500 6885 7399 10040 12400 15483 20002 20020 20900 21000 25000 26000 29750 30000 34000 43760 50500 65000 68850 73990 
9 : 15 681011501001 1010 1500 10001 10010 10100 15000 
10:34 40400 4000 40000 
11 : 5 50500 5000 50000 
12 : 6 60600 6000 60000 
15 : 2 20200 2000 20000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.