CUDDLE計算


19

番号69のWikipediaページによると、69 2 = 4,76169 3 = 328,509が一緒にすべての10進数を使用することに注意してください。数字の69は、実際にこのプロパティを満たす最小の数字です。

同様の理由で、32043は顕著である:32043 2 = 1026753849は、すべての桁を使用しています。

このように興味深い数字について話し続ける場合、表記が必要になります。

ほとんどの整数nの累乗n 2、…、n kは、十分に大きいkの値に対して10回すべての10進数字(先行ゼロはカウントしない)を少なくとも1回使用します。それが存在する場合、我々は最低な呼びますK 抱きしめる累積小数点桁数、最小指数の)nで

仕事

単一の非負整数nを入力として受け入れ、そのCUDDLEを計算して返すプログラムまたは関数を作成します。

nにCUDDLEがない場合、コードが最終的に停止する限り、エラーまたは空の文字列を含む正の整数以外のものを返すことができます。

テストケース

左の列は入力、右の列は出力です。

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にどのように移行したのか疑問に思っていましたが、それがパワーに関係しているのは少し不安です;)
アーロン

数字にカドルがない場合、プログラムが停止しても大丈夫ですか?(つまり、整数カウンターがオーバーフローしたとき)
ドアノブ

また、最初の追加ルールについて:これは、言語の整数型 255を超える数値格納できる場合、コードそれらに対して機能する必要があることを意味しますか?
ドアノブ

@Doorknobは、実際に停止する限り、最終的には問題ありません。入力の上限を255に設定しました。それでも計算にはかなり大きな数字が含まれています
デニス

1
テストケースを追加したのは、インクルードが間違った答え(of )26->8n^1与える最小の例で6、コードでエラーが発生したためです。
-xnor

回答:


4

Pyth、16バイト

hf<9l{=+k^QTtS15

オンラインで試す:デモンストレーションまたはテストスイート

他のソリューションと同様に、上限として15を使用します。これも最大のカドルだと思います。10.000.000までのすべての数値をテストしましたが、CUDDLEが15を超える数値はありません。

CUDDLE > = 10の数字は、すでに非常にまれです。15のCUDDLEを持つ唯一の数字は数字2*10^kです。数字がありません抱きしめる 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

Python 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。場合はs、すべての10桁、戻っているTrueに等しく、1再帰的および追加それ以外の場合は、と1。これは戻るより短いことがわかったi

CUDDLEを使用せずに番号で関数を呼び出すと、で終了しInternal error: RangeError: Maximum call stack size exceededます。それまでの数値は255、15回を超える反復を必要としません。

Python 2のL大きな数字にを追加するという厄介な習慣のため、実際に数字の文字列を初期化しL、設定サイズが少なくとも11であるかどうかを確認strします。Python 3.5は、セットのアンパックでさらに2文字を節約し、Python 2よりも合計で1文字を節約します。

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

Mathematica、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を持たないようであるため、それらはスキップされます。関数は表示された数字のリストを保持し、ゼロがなくなった時点で停止します。

出力:

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と、の10進表現がでn^m始まるように存在しkます。つまり、10のべき乗(および0)をスキップしても問題ありません。)
Sp3000

2

JavaScript(ES6)188

53ビット整数に制限されている言語にとっては悪くありません。

EcmaScripts 6を実装するブラウザーで、矢印関数とスプレッド演算子を含む以下のスニペットの実行をテストします(AFAIK Firefox)

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]set()ハッシュテーブルに明示的に項目を追加することなく、この種の使用のためにPythonの機能を類推するためのきちんとした方法です。

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

gawk 4、73 + 5フラグ= 78バイト

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

入力のべき乗で遭遇するすべての数字0bis について、最初の10桁が見つかるまで()または15回以上繰り返されるまで、inを9表すビットを設定します。2^digitaa == 1023 == 2^10-1

空のフィールドセパレータと大きな数値の-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 62630 63051 63129 65634 67656 66105276276276276276276276276276276276276276 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:69 128 203 302 327 366 398 467 542 591 593 598 633 643 669 690 747 759 903 923 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 97 108 112 115 132 139 144 147 148 152 156 157 159 169 172 174 178179179180181182 184 195 195 213 213 214 215 216 221 223 227 228 232 234 235 239 241 242 248 265 266267270272273279279281285287294298299306311 312314315315316323326329332332336338342343353354356361362362364365368369379388391393395396 397403412413413414416419419426423419426426 431434439442442444444448451 452453454454455457459463466469472473473477479482484484486489493494496503507508509515517523
5:8 16 19 27 28 38 44 47 55 57 61 77 79 80 82 83 86 87 91 92 103 106 113 116 117 118 121 123 125 126 129 131 133 136 138 140 141 142 143 145 146 151 154 158 160 161 165 167 173175176177183183185186187189190191192193197198204204218224224226229230231236240243246249253255257258259259261263268269271275276277278280282282283284286288289292 293 304 309 322 328 331 339 341 344 345 346 347 348 349 352 357 359 367 371 372 373 374 375 377 380 381 384 387 389 402 407 408 409 411 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 98 105 107109114 119 120 122 127 130 134 137 149 153 155 162 163 164 166 168 170194199206 211212217217219220222225225237237238244247252252254256262264274291295295296301308317319319321324325330333333334337351355358360370376378382383385386386390394399 401 404 405 406 415 420 421 424 425 429 430 433 435 438 446 450 460 471 476 478 488 490 498 502 504 506 510 510 513 514 519 530 539 548 556 578 620 628 631 634 636
7:7 11 14 17 29 31 32 35 41 48 52 56 63 64 70 74 85 89 96 99 102 104110 111 135 171 188 201 202 202 205 208 245 251 290 297 303 305 307 310 313 318 320 335 350 363 392 410 465 475480 483 485 5015115185205205​​21560582584584595601630630640682700736736786786798850890 952956965975975 982 990 999 1002 1005 1011 1020 1040 1054 1100 1110 1171 1219 1313 1331 1350 1379 1414 1447 1468 1601 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 76 1242092102502603003405055056501004 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 68 101150 1001 1010 1500 10001 10010 10100 15000 
10:3 4 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.