所有异种


15

介绍

在基体A xenodrome Ñ是整数,其中所有其在碱位数Ñ是不同的。是异种的一些OEIS序列。

例如,在底座16, FACE42FEDCBA9876543210是一些xenodromes(哪些是642066618364758544493064720在基座10),但11DEFACED不是。

挑战

给定输入底数n在底数10中输出该底物的所有异种。

输出应从最小到最大。应该清楚序列中的一个术语在何处结束而一个新的术语在何处开始(例如[0, 1, 2],清楚012不在哪里。)

n将是一个大于0的整数。

澄清说明

这项挑战专门针对以10为基数的IO,以避免将整数及其基数作为字符串处理。挑战在于抽象地处理任何基础。因此,我添加了以下附加规则:

整数不能以字符串形式存储在以10为基数的基数中。

如果在语言实现上没有时间,内存,精度或其他技术限制,则您的程序在理论上应该能够处理合理的n

这是,因此以字节为单位的最短程序胜出。

输入和输出示例

1  # Input
0  # Output
2
0, 1, 2
3
0, 1, 2, 3, 5, 6, 7, 11, 15, 19, 21
4
0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 18, 19, 24, 27, 28, 30, 33, 35, 36, 39, 44, 45, 49, 50, 52, 54, 56, 57, 75, 78, 99, 108, 114, 120, 135, 141, 147, 156, 177, 180, 198, 201, 210, 216, 225, 228

1
n是否有限制?
FlipTack

@ Flp.Tkc否。它应该能够处理相当高的n。我不希望挑战受语言的内置基数转换可以处理的基数限制。
Artyer

@Artyer那应该是挑战文本的一部分。似乎已经有了一些答案
Luis Mendo

我知道Pyth中的基本转换可以处理大于36的值,但是由于这需要所有xenodromes,因此当列表太大时,底层的python就会中断,并说它不能适合a中的值ssize_t。以这种方式破坏是否可以接受?
FryAmTheEggman '16

2
由于内置的​​精度限制,似乎有人否决了所有不能处理较大基数的答案,这似乎也只是一种实现方式,而不是算法问题。你能澄清一下吗?
丹尼斯

Answers:


10

Pyth,8个字节

f{IjTQU^

如果在base n中没有重复元素,则过滤[0,n ^ n-1]中的数字。Pyth中的基数转换可以与任何基数一起使用,但是由于它查看的是数量迅速增加的数字列表,因此最终将无法在内存中存储值。

在线尝试!

说明:

f{IjTQU^QQ    - Auto-fill variables
      U^QQ    - [0, n^n-1]
f             - keep only those that ...
 {I           - do not change when deduplicated
   jTQ        - are converted into base n

哇,比丹尼斯制造的果冻解决方案还短的解决方案!:'P
HyperNeutrino

3
没有人能击败果冻。¶:
RomanGräf16年

5

Python 2,87字节

n=input()
for x in range(n**n):
 s={n};a=x
 while{a%n}|s>s:s|={a%n};a/=n
 print-~-a*`x`

为非异种打印更多的空白行:

golf % python2.7 xenodromes.py <<<3
0
1
2
3

5
6
7



11



15



19

21

5

果冻9 8 字节

ð*ḶbQ€Qḅ

感谢@JonathanAllan打高尔夫球1个字节!

在线尝试!验证所有测试用例

怎么运行的

ð*ḶbQ€Qḅ  Main link. Argument: n

ð         Make the chain dyadic, setting both left and right argument to n.
          This prevents us from having to reference n explicitly in the chain.
 *        Compute nⁿ.
  Ḷ       Unlength; yield A := [0, ..., nⁿ - 1].
   b      Convert each k in A to base n.
    Q€    Unique each; remove duplicate digits.
      Q   Unique; remove duplicate digit lists.
       ḅ  Convert each digit list from base n to integer.

4

果冻,12 字节

*`ḶbµQ⁼$Ðfḅ³

TryItOnline!

只要有n足够的内存,Jelly的基本转换就不会对任何东西都起作用。

怎么样?

*`ḶbµQ⁼$Ðfḅ³ - Main link: n
    µ        - monadic chain separation
*            - exponentiation with
 `           - repeated argument, i.e. n^n
  Ḷ          - lowered range, i.e. [0,1,2,...,n^n-1]
   b         - covert to base n (vectorises)
        Ðf   - filter keep:
       $     -     last two links as a monad
     Q       -         unique elements
      ⁼      -         equals input (no vectorisation)
           ³ - first program argument (n)
          ḅ  - convert from base (vectorises)

3

JavaScript(ES7),86个字节

n=>{a=[];for(i=n**n;i--;j||a.unshift(i))for(j=i,b=0;(b^=f=1<<j%n)&f;j=j/n|0);return a}

失败1(应输出[0],但RangeErrors。)
Artyer

正是我所拥有的,但是从理论上讲,37如果精度不是问题,那将失败,我认为这将使它无效……
ETHproductions 2016年

@Artyer我已经移植了Batch版本,所以现在它适用于n113浮点精度将其终止之前的版本。
尼尔

我喜欢解决方案起步很短,然后突然跳一个数量级的方法。
妮莎

2

Perl 6,47个字节

{(0..$_**$_).grep: !*.polymod($_ xx*).repeated}

返回一个Seq。(SeqIterator的基本Iterable包装

输入后16,需要20秒才能计算出Seq(87887)的第53905个元素。

展开:

{       # bare block lambda with implicit parameter 「$_」

  ( 0 .. ($_ ** $_) )    # Range of values to be tested

  .grep:                 # return only those values

    !\                   # Where the following isn't true
    *\                   # the value
    .polymod( $_ xx * )  # when put into the base being tested
    .repeated            # has repeated values
  }
}

2

批处理204200字节

@set/an=%1,m=1
@for /l %%i in (1,1,%1)do @set/am*=n
@for /l %%i in (0,1,%m%)do @set/ab=0,j=i=%%i&call:l
@exit/b
:l
@set/a"f&=b^=f=1<<j%%n,j/=n"
@if %f%==0 exit/b
@if %j% gtr 0 goto l
@echo %i%

n> 9无效,因为Batch仅具有32位算术。方便地,Batch计算f &= b ^= f = 1 << j % n为,f = 1 << j % n, b = b ^ f, f = f & b而不是f = f & (b = b ^ (f = 1 << j % n))


2

Mathematica,59 48字节

Select[Range[#^#]-1,xMax[x~DigitCount~#]==1]&

包含U + F4A1“专用”字符

说明

Range[#^#]-1

产生{1, 2, ..., n^n}。减1.。{0, 1, ..., n^n - 1})。

xMax[x~DigitCount~#]==1

布尔函数:True如果每个数字在基数中最多出现一次n

Select[ ... ]

从清单 {0, 1, ..., n^n - 1},选择True在应用上述布尔函数时给出的选项。

59字节版本

Select[Range[#^#]-1,xDuplicateFreeQ[x~IntegerDigits~#]]&

2

Mathematica,48 55字节

Union[(x   x~FromDigits~#)/@Permutations[Range@#-1,#]]&

(之间的三倍空间 x s需要用3个字节的字符\ uF4A1替换,以使代码正常工作。)

单个参数的未命名函数。它只测试生成允许数字的子集的所有可能排列(这会自动避免重复),而不是对整数进行异种测试,并将相应的整数转换为以10为基数。每个异域生成两次,带或不带前导0;Union删除重复项并排序要引导的列表。


1
失败2。函数给出{0, 1}。相信您需要Permutations[Range@#-1, #]代替Subsets[Range@#-1]
JungHwan Min

Gah,真是个愚蠢的错误。感谢您的观察,并为您提供完美的解决方案!
格雷格·马丁
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.