2016 Time Capsule String:Climb The Integer Ladder


28

使用2016年时间胶囊字符串中的74个字符

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

用相同的语言编写N个代码段,其中:

  • 第一个代码段输出1
  • 第二段代码输出2
  • 第三段输出3
  • ...等等...
  • 第N个代码段输出N(数字,而不是字母)。

“代码段”定义为以下任何一种:

  • 一个完整的程序,无需输入即可正常输出数字。
  • 没有必需参数的函数通常会输出/返回数字。
  • 一个REPL表达式,其计算结果为数字。

(您可以在N个片段中混合并匹配这三个变体。)

您可以在N个摘要的组合集中使用的字符正好是时间封包的74个字符,以及 floor(N/2)可以在任何地方使用的额外“通配符”字节

例如,时间胶囊包含3 @,因此在您的N个摘要中,最多只能存在3个@,除非您决定将一些floor(N/2)通配符字节用于附加@的。

因此,不计算通配符,您的N个摘要中的组合字符集必须是74个时间胶囊字符的子集。它们的总长度不能超过74。 您不能在片段之间重复使用时间胶囊字符或通配符字节。

笔记

  • 代码段长度或每个代码段可以使用多少个通配符没有其他限制。

  • 您必须写出所有从1到N的代码段。从0到N-1,不是k到N + k-1。

  • 这些代码段必须是单独的,而不是一个输出列表的代码段1, 2, 3, ..., N

  • 输出可能是浮点数3.03而不是;如果十进制是您语言的自然底数,则可以使用十进制以外的底数。您必须对所有摘要使用相同的基础。

  • 通配符在您的语言的编码中计为字节。这可能是ASCII,但例如,如果在编码中算作一个字节,则可以将其用作单个通配符字节。

  • 您可以将通配符字节用于多字节字符。例如通常为 3个字节,因此您可以在代码段中使用它,但它将花费您的floor(N/2)通配符字节中的3 个。

  • 诸如之类的换行符\r\n可以视为一个字节。

在Python中,仅使用REPL就可以实现N = 4。有floor(4/2) = 2通配符。

  1. 1从时间胶囊到的表达式1

  2. 2由一个通配符(即)组成2。到的时间2

  3. 3还包含一个通配符。到的时间3。没有更多的通配符。

  4. 4幸运的是在时间囊中,它到了4

这些片段简短而琐碎。真正的答案可能要复杂得多。

(在Python中可能有5个或更多的可能,但我将留给专业人士使用。)

计分

N获胜的答案;即,攀登整数梯最高的那一个。

如果出现平局,则使用最少通配符字节的答案将获胜。
如果仍然有平局,则使用最少累积字符的答案将获胜。
如果仍然平局,则以较早的答案为准。


1
如果一种编程语言没有REPL,如果它的计算结果正确,我们仍然可以用该语言提交表达式吗?(例如,4在没有REPL的较旧版本的Perl中,是否返回4的有效片段?)

1
哦,还有另一个问题:在使用非ASCII兼容编码的语言中,我们是否将时间胶囊字符视为字符(将其转换为语言的编码)或字节(编写程序,以便将程序视为ASCII来查看)似乎完全包含在时间胶囊字符中)?在某些具有奇怪字符集的语言中,大多数时间胶囊字符甚至都不在字符集中,这使得它们很难按原样使用。

1
那前导零呢?是07 一样的7吗?
Emigna

1
这实在是缠着我该字符串中包含既不-也不n...
devRicher

1
基于堆栈的语言中的“片段”能否将其值保留在堆栈中?
FlipTack

Answers:




5

JavaScript,10个数字,5个通配符

其余字符: !!#$$%&())))*...:=@@@HILOQQQTTZ\^```eefmpy{|||~~~~~~~~~

使用5/5个奖励字符: 37680

程式:

  1. 1
  2. ``+!''
  3. 3
  4. 4
  5. 4|!``
  6. 6
  7. 7
  8. 8
  9. 9
  10. 0xA

我曾希望我可以使用的字符串之一\xAB是数字,但是不幸的是,我尝试过的任何组合都不会产生任何效果。使用^(XOR)字符也很有趣,但是我目前看不到有任何机会可以使用它来制作足够多的数字。

如果您看到其他可行的组合,请在评论中告诉我。

编辑:添加#10感谢Arnauld


1
我认为您可以添加10. 0xA0作为授予达到10的新通配符)
Arnauld

您可以(Q=!``)|Q为1做一个额外的1地方。不确定是否会有所帮助
ETHproductions'Jan

4

Pyth,12个摘要,20个字节(6个通配符)

f@

从1开始找到root(n,n)为真的第一个数字。输出:1

y!H

不加倍{}。输出2

3

通配符#1。输出3

4

输出:4。

5

通配符2。输出:5

6

通配符#3。输出6

7

通配符#4。输出:7

8

通配符#5。输出8

9

输出:9

T

预初始化变量。输出:10

+T!Z

十加不为零。输出:11

12

通配符#6(2)。输出:12


4

八度,6个数字,3个通配符

1: ~~I          % not(not(sqrt(-1))) evaluates to true (or 1)
2: 2            % Wildcard
3: 3            % Wildcard
4: 4
5: (T=4)+~~T    % Create a variable T=4, then add not(not(T)) which evaluates to 1.
6: 6            % Wildcard

我仍然有19然后*离开了,但我不知道这对我有多大帮助。我会看看如何处理这些:)

不使用Esolang时要获得许多号码并不容易。我希望能够再获得一两个,但我认为这很难。


2

Pushy,10个数字(4个通配符)

所有这些都是片段,将结果保留在堆栈中。您可以在在线解释器中对此进行测试,方法是将其附加#到每个代码段后(以打印数字)

A(      \ 1:  Get alphabet and check that 'Z' >= 'Y'. Results in 1 (True)
x&+     \ 2:  Check stack equality (True - both are empty) then duplicate and sum.
3       \ 3:  Push 3 (1 wildcard)
4       \ 4:  Push 4
1 4+    \ 5:  1 + 4 in postfix, leaves 5 on the stack (1 wildcard)
`L`T%   \ 6:  Get character code of 'L' and modulo by T (ten) - leaves 6 on the stack
7       \ 7:  Push 7 (1 wildcard)
8       \ 8:  Push 8 (1 wildcard)
9       \ 9:  Push 9
T       \ 10: Push 10

答案尚未完成-尽管似乎不太可能进一步解决。


1

05AB1E,12个数字,6个通配符

 1:    1                                   -> 1
 2:    )O!x                                -> sum([])!*2
 3:    4L`\                                -> 2nd_last(range(1...4))
 4:    4                                   -> 4
 5:    5        # wildcard 1 = 5           -> 5
 6:    6        # wildcard 2 = 6           -> 6
 7:    Tf`~                                -> or(last2(prime_factors(10)))
 8:    8        # wildcard 3 = 8           -> 8
 9:    9                                   -> 9
10:    T                                   -> 10
11:    A`Q!T+   # wildcard 4 = T           -> (y==z)!+10
12:    TÌ       # wildcard 5,6 = T,Ì       -> 10+2

1

Hexagony,6号,3个通配符,23个字节

1!@
))!@
)|\@$!
4!%
4)!:
6!@

在线尝试!

整个第六个程序都由通配符组成。

唯一真正有趣的是3。虽然我能做到这一点的4(!@,这将让我没有4产生5容易,所以我用这个代替去:

 ) |
\ @ $
 ! .

由于存在|,因此)第一行的IP将运行两次,然后IP绕到右上角。$跳过@,然后\通过)第三次重定向IP 。IP包装到左下角,!打印3@终止程序。

我认为最多只能有6个摘要,因为只有5个打印命令(!!!!!)和5个命令可用于终止程序(@@@%:)。因此,在第五个代码段之后,每个代码段至少需要两个通配符。因此,即使我设法在6不使用通配符的情况下获得代码,也没有足够的通配符可用于摘要7。


1

JavaScript,8个数字,4个通配符

 1: 1
 2: -~!``
 3: 4+~!$
 4: ~!``*~!``
 5: 4|!$
 6: 0xf^9
 7: 7
 8: 8

我可能稍后再试-当您深入到2和6时,我有点在浪费字符。


0

Befunge-98、4个摘要,18个字节,2个通配符

!.@
!:+.@
41-.@    wildcard 1 = -
4.#A9H   wildcard 2 = .

剩余字符: !!!$$%&())))*=ILOQQQTTZ\^`````````eefmpxy{||||~~~~~~~~~

我怀疑还有更多的可能性,因为每个额外的程序都需要某种形式的输出,而所有这些.,都已经用完了。如果我想出一种不用通配符的3和5的方法,那就有可能。

由于堆栈已满,最后一个程序最终将终止。A并且H未加载任何指纹将反映出来,程序将继续按9。


我认为最后一个无效。除非挑战另有说明,否则程序必须终止。
Martin Ender'1

不过,您可以简单地终止%
Martin Ender

@MartinEnder 00%在Befunge-98中有效,结果为0(或在Befunge-93中要求用户输入结果
。– PurkkaKoodari

@MartinEnder此外,假定有有限的内存,最后一个程序最终终止。Funge-98规范提到{如果内存不足,它可以反转。没有关于正常推送的任何说明,并且所有解释器似乎都无法通过OOM进行操作,但是显然在语言规范中考虑了内存限制。
PurkkaKoodari

我认为,由于p角色的存在,这可能会有所改进(也许??),但需要一些工作。您可以e%9得到5,但是您将需要一种方式来打印它并结束程序,所以我对此表示怀疑
MildlyMilquetoast

0

SmileBASIC,12个摘要,5个通配符,31个字节

!.     '. is parsed as the number 0.0; taking the logical not gives 1
!.+!.  'Previous value added to itself
@Q||Q  '@Q is a label string and Q is a variable. For some reason, certain comparison/logical operations between strings and numbers return 3 rather than 1 or 0. 
4      '4
#TLIme 'Constant for the text color lime green, value is 5.
6      '6 (wildcard)
7      '7 (wildcard)
8      '8 (wildcard)
9      '9
&HA    'Hexadecimal A
11     '11 (one of them is a wildcard)
4*3    '4 multiplied by 3 (3 is wildcard)

我还可以使用变量代替.(变量从0开始),并使用字符串变量(如Q$)代替@Q

使用的字符: !!!#&*+...1449@AHILQQTem||

使用的通配符: 67813

未使用的字符: !!$$%()))):=@@OQTZ\\^`````````efpxy{||~~~~~~~~~

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.