82 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | id: 5900f3a01000cf542c50feb3 | ||
|  | title: '問題 52: 並べ替えられた倍数' | ||
|  | challengeType: 5 | ||
|  | forumTopicId: 302163 | ||
|  | dashedName: problem-52-permuted-multiples | ||
|  | --- | ||
|  | 
 | ||
|  | # --description--
 | ||
|  | 
 | ||
|  | 125874 という数とその倍数 251748 を見ると、それらは全く同じ数字を異なる順序で並べたものになっています。 | ||
|  | 
 | ||
|  | 整数 $\\{2, 3, \ldots, n\\}$ を乗じた結果が、元の数に含まれるのと同じ数字からなるような、最小の正の整数を求めなさい。 | ||
|  | 
 | ||
|  | # --hints--
 | ||
|  | 
 | ||
|  | `permutedMultiples(2)` は数値を返す必要があります。 | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(typeof permutedMultiples(2) === 'number'); | ||
|  | ``` | ||
|  | 
 | ||
|  | `permutedMultiples(2)` は `125874` を返す必要があります。 | ||
|  | 
 | ||
|  | ```js | ||
|  | assert.strictEqual(permutedMultiples(2), 125874); | ||
|  | ``` | ||
|  | 
 | ||
|  | `permutedMultiples(6)` は `142857` を返す必要があります。 | ||
|  | 
 | ||
|  | ```js | ||
|  | assert.strictEqual(permutedMultiples(6), 142857); | ||
|  | ``` | ||
|  | 
 | ||
|  | # --seed--
 | ||
|  | 
 | ||
|  | ## --seed-contents--
 | ||
|  | 
 | ||
|  | ```js | ||
|  | function permutedMultiples(n) { | ||
|  | 
 | ||
|  |   return true; | ||
|  | } | ||
|  | 
 | ||
|  | permutedMultiples(2); | ||
|  | ``` | ||
|  | 
 | ||
|  | # --solutions--
 | ||
|  | 
 | ||
|  | ```js | ||
|  | function permutedMultiples(n) { | ||
|  |     const isPermutation = (a, b) => | ||
|  |         a.length !== b.length | ||
|  |             ? false | ||
|  |             : a.split('').sort().join() === b.split('').sort().join(); | ||
|  | 
 | ||
|  | 
 | ||
|  |     let start = 1; | ||
|  |     let found = false; | ||
|  |     let result = 0; | ||
|  | 
 | ||
|  |     while (!found) { | ||
|  |         start *= 10; | ||
|  |         for (let i = start; i < start * 10 / n; i++) { | ||
|  |             found = true; | ||
|  |             for (let j = 2; j <= n; j++) { | ||
|  |                 if (!isPermutation(i + '', j * i + '')) { | ||
|  |                     found = false; | ||
|  |                     break; | ||
|  |                 } | ||
|  |             } | ||
|  |             if (found) { | ||
|  |                 result = i; | ||
|  |                 break; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     return result; | ||
|  | } | ||
|  | ``` |