打印丢失的号码


16

作为《迷失》电视连续剧的忠实拥护者,我总是对重复出现在这些情节中的数字序列感兴趣。这些数字是:

4815162342A104101

使用任何编程语言,编写输出这些数字的代码。

得分:

  • 最短答案胜出

  • 输出中不得包含任何其他数字或字母。您可以使用任何其他字符作为分隔符,甚至根本不使用分隔符。

  • 您不能分隔相同数字的数字。48_15162342是有效答案,但481_5162342不是。

  • 您必须遵守订单。

  • 如果您的代码不包含序列中的任何数字,请将您的分数降低30%。该规则确实允许您分别输入数字。例如:

    abcde1fg5h
    

    是有效的候选者,因为答案不包含数字15,仅包含数字。但是,任何48都会使奖金无效。

  • 如果代码根本不包含任何数字,请将您的分数降低50%。其他字符(如,或仍可用于此奖励。¹²³


2
相关的,封闭的问题:codegolf.stackexchange.com/q/23808/67312
朱塞佩·

2
含糊相关:您迷路了吗?
丹尼斯

1
我们是否必须按该顺序打印?
泰特斯

6
为了将来参考,我们restricted-source可以在此处使用一个标签:尽管大多数答案都在避免明显的解决方案,但我认为如果完全禁止使用数字,挑战本来会更加有趣。
Arnauld

Answers:


31

丢失29 27/2 = 13.5字节

%?\>>>>>>>>>>
>>\"*"@"

在线尝试!确认它是确定性的

似乎使用了正确的语言。

说明:

迷失是一种2D语言,其中的指针从任何地方开始,朝任何方向移动。通常,这会导致很多重复检查,以确保指针没有提前进入分区。

...>>>>>>>>>>  These arrows filter all pointers that appear on the top line
.............  Or going vertically


%............  This flips the flag so that the program can end
.............  This stops premature termination

.?\..........  Clear the stack by skipping if a value popped from the stack is positive
.............  When the stack is empty, the \ directs the pointer down

.............  The \ directs the pointer right
..\"*"..  The string literal pushes all the Lost values to the stack

..\..........  The @ terminates the program if the % flag is switched
>>\........@.  Otherwise it clears the stack and repeats

.............  The quote here is to prevent the pointer getting stuck
............"  This happens when the pointer starts between the other quotes

11

果冻,7/2 = 3.5个字节

“ƲÞIȥ’Ḥ

打印不带分隔符的数字,即整数4815162342

在线尝试!

怎么运行的

“ƲÞIȥ’是双射基数为250的整数文字。
ƲÞI,和ȥ具有(1系)索引1542174,和171在果冻的代码页,所以它们所编码的整数2503154+250221+25074+171=2407581171

最后,(unhalve)加倍整数,得到22407581171=4815162342

必须加倍,因为对输出进行编码会直接导致“¡9)Ƙ[’,其中包含一个数字。


9

Neim6 5字节,3 2.5点

Jσς§A

说明:

J     Push 48
 σ    Push 15
  ς   Push 16
   §  Push 23
    A Push 42
      Implicitly join the contents 
      of the stack together and print

在线尝试!


6

05AB1E,得分:10 9 7 字节 / 2 = 3.5

•‘o]Ê•·

在线尝试。

7个字节替代

•’µ[%•R

在线尝试。

两者都输出integer 4815162342

说明:

•‘o]Ê•     # Compressed integer 2407581171
      ·    # Doubled

•’µ[%•     # Compressed integer 2432615184
      R    # Reversed

请参阅我的05AB1E技巧(如何压缩大整数部分)以了解为什么•‘o]Ê•2407581171•’µ[%•2432615184


旧的9个字节回答输出列表[4,8,15,16,23,42]

•ΓƒÇ²•т;в

-1字节(因此为-0.5分)感谢@Emigna

其他05AB1E答案更长,但这输出列表[4,8,15,16,23,42]而不是整数4815162342

在线尝试。

说明:

•ΓƒÇ²•       # Compressed integer 1301916192
      т;     # Integer 50 (100 halved)
        в    # Convert the first integer to Base-50 (arbitrary): [4,8,15,16,23,42]

请参阅我的05AB1E技巧(如何压缩大整数?如何压缩整数列表?),以了解为什么•ΓƒÇ²•is 1301916192•ΓƒÇ²•50вis [4,8,15,16,23,42]


1
你可以有•ΓƒÇ²•т;в针对4.5作为后脚本数字是没关系的奖金。
Emigna '18

@Emigna啊,太好了!谢谢。
凯文·克鲁伊森

6

JavaScript(ES7),34/2 = 17个字节

_=>eval(atob`NjUwNTgxMDErNDEqKjY`)

在线尝试!

这将对表达式进行解码和求值,该表达式"65058101+41**6"一旦以base-64编码,就不会包含任何数字。

65058101+416=65058101+4750104241=4815162342


JavaScript(ES6),13个字节

无聊的解决方案。

_=>4815162342

在线尝试!


6

Python 3,25个字节,12.5点

print(*map(ord,'ዏٗ*'))

在线尝试!

脏(脏,⿰马葬),𧨦(谥,⿰言⿱⿵八一皿)花费4个字节,而U + 0657仅花费2个字节...


Python 3,29个字节,14.5点

print(ord('𩦦')*ord('湡'))

在线尝试!

⿰(⿰马葬)是脏的变体,表示“肮脏”。湡是一条河的名字。正如我所知,它们与这个问题无关。


我询问了分隔符规则,我们可以使用任何4815 162342有效的分隔符。这样print(*map(ord,'ዏ𧨦'))可以节省1.5点:)(print(*map(ord,'밗'))可以节省2点,但已被指定为无效)。
乔纳森·艾伦,


4

Java 8,得分:12 11.9(17字节的70%)

v->767*6277917L+3

-0.1分感谢@RickHitchcock

在线尝试。

说明:

v->               // Method with empty unused parameter and long return-type
  767             //  767
     *6277917L    //  multiplied by 6277917 (as long)
              +3  //  And then 3 is added

分数为:12(24字节的50%)的旧答案:

v->(long)''*'Ⓥ'*'䧶'

包含不可打印的字符0x1B

在线尝试。

说明:

v->                   // Method with empty unused parameter and long return-type
  (long)              //  Cast the character (and therefore the result) to a long
        ''            //  27
           *'Ⓥ'       //  Multiplied by 9419
                *'䧶'  //  Multiplied by 18934

在Java中,可以将字符自动装箱为保留其unicode值的整数。不幸的是,最大字符支持的unicode为65,535,所以我不能只使用两个字符相乘(因为除期望的最大两个数字4,815,162,34256,802and 84,77184,771不幸的是,它们超过了max 65,535
此外,由于int为32 2 -1(2,147,483,647),并且结果4,815,162,342大于该值,需要显式强制转换为long,最多可容纳64 2 -1(9,223,372,036,854,775,807)。


无聊的答案将是14个字节,没有任何好处:

v->4815162341L

在线尝试。


1
我喜欢这个。简而言之,是成为Java的人:)
Emigna '18

@Emigna谢谢。太糟糕了,它要求强制转换为long并且不支持非常大的unicode字符。如果不是因为上述两个限制,那么v->'𩦦'*'湡'(15个字节,得分7.5)就足够了。但确实确实很短。:)尽管Java在代码golfing(duhh ..)方面通常有很多很多弱点,但由于不允许使用数字而使用字符进行计算是它的少数优点之一。在我的这个相当类似的答案中也很有用。
凯文·克鲁伊森

1
11.9字节: v->767*6277917L+3
瑞克·希区柯克

3
@RickHitchcock并非每天我们都能节省0.1个字节。;)
Arnauld

@RickHitchcock谢谢!我同意Arnauld在上面的评论。:D
凯文·克鲁伊森

4

R,18x0.7 = 12.6得分

cat(9*2*267509019)

完全可以自我解释,只是做一些算术来避免有问题的数字。


4

7个,10个字节,27个字符

115160723426754314105574033

在线尝试!

该程序在磁盘上的打包表示为(xxd格式):

00000000: 269c 3a71 6f63 308b 7c0d                 &.:qoc0.|.

说明

在“ 自动保存世界”一书中,我们已经看到了数字的顺序,该顺序是定期打印数字,通过使用非常古老的语言使其变得有趣。不过,许多新语言都有其自身的曲折,这使这一挑战变得有趣。(是的,这一段,实际上是我开始编写此答案的原因,实际上只是一种将所有相关挑战显示在侧边栏中的方法;通常人们使用注释来做到这一点,但我没有足够的代表)

要注意的第一件事是7完全由数字组成,因此这里的奖金不太可能起作用(尽管如果您将程序视为八位字节序列,则它们都不对应于任何原始数字的ASCII表示形式,因此您可以从这种意义上领取奖金)。接下来要注意的是,7具有重新创建可能产生特定数据的命令序列的命令;所以我们可以解释一下丢失的数字4815162342为7程序本身的一部分?

答案是“不太”。最有问题的部分是第二个数字8。八进制编写了7个程序;没有数字8。因此,字符串的开头必须以不同的方式打印。

因此,该程序的基础是基于7个“ Hello world”程序的:

5431410557403
543141055          string literal
         7         separate data from code
          4        rearrange stack: {program's source}, empty element, {literal}
           0       escape {the literal}, appending it to {the empty element}
            3      output {the escaped literal}, pop {the program's source}

转义文字使用特定领域的语言,其解释如下:

5                  output format: US-TTY using pairs of digits in the string
 43                select character set: digits and common symbols
   14              "4"
     10            "8"
       55          forget the set output format

之后,一个extra 3,输出剩余的堆栈元素(并由于剩余堆栈不足而退出)。该元素是在程序开始时指定的,为了避免不匹配6(它有点像一个右括号),我们使用代码生成它,而不是直接将其写为数据。(请注意,7程序的开头有两个隐含字符,与此处相关):

{77}115160723426
 7                 empty stack element
  7 11516          append "1151"
         0         append "6"
          723246   append "2324"

产生以下文字:

115162324
1                  set output format: literally as octal
 15162324          "15162324"

被打印出来。


尽管发布了一些很好的答案,但是您仍然没有声誉,这感觉很奇怪。我已经读过您仅发布社区答案的理由,在此方面,我全力支持您,但是有时必须烦人才能无法发表评论:(
Jo King

@JoKing:好吧,这启发了我实际发布该问题的答案,结果比我预期的要有趣得多。因此,我想这更多地证明了我的假设,即如果您不寻求声誉,那么您的贡献最终将对该站点更有利。(实际上,我对永久地停留在11个声誉的主要挫败是,我不能建议对Meta进行编辑,这意味着,如果我在那里看到错误信息,就无法纠正它。)
ais523


3

MASM 8088汇编源,(93字节-50%)= 46.5字节

在源中不使用数字或顺序:

MOV AH,'P'-'G'
LEA DX,L
INT '!'
RET
T EQU '-'-'+'
L DW 'ph'/T,'jb'/T,'lb'/T,'fd'/T,'dh'/T,'$'

输出:

A>LOST.COM
4815162342

2

木炭,13字节/ 2 = 6.5

IETPIHA.⁻⁸⁸℅ι

在线尝试!链接是详细版本的代码。通过TPIHA.从88中减去字符串的ASCII码并将其转换为字符串来工作。


2

Aheui(esotope),45个字节(15个字符)* 0.5 = 22.5点

반밤밪박밭빠따받발따밣뱣히망어

在线尝试!


说明:

另请参见;Aheui参考(英文

Aheui program starts with default stack '아'(or none)

반: push 2, move cursor right by 1(→).
밤: push 4, →
밪: push 3, →
박: push 2, →
밭: push 4, →
빠: dup, →
따: pop 2, push mul result(16).
받: push 3, →
발: push 5, →
따: pop 2, push mul result(15).
밣: push 8, →
뱣: push 4, move cursor right by 2(→→).
히: end.
망: pop 1, print, → (if stack is empty, move cursor left by 1.)
어: move cursor left by 1(←).

请注意,如果堆栈(或队列)为空,则ㅁ(打印指令)将光标反向移动。




2

naz,46字节,得分32.2

2a2a1o2m1o7s1o5m1o2s2s1o6m1o2s2s1o1a1o1a1o2s1o

只需一次输出每个数字4815162342


1

JavaScript,143个字节(不确定如何评分)

(g=`${2*2}`)=>g.repeat(6).replace(/(.)/g,(m,p,i,k='')=>
  (k=m*[g-3,g-2,g,g,+g+2,g*3-1][i]
  ,RegExp(`${g-2}|${g}`).test(i)?k-1:i==+g+1?k-(g/2):k))

在线尝试!

从六开始4,相乘,相加,相减,4以得出输出。


2
好的,您试图获得奖金,但是使用这样大小的代码,它没有补偿。为什么不简单地使用“ 4815162342”呢?
Eduardo Hoefel

@EduardoHoefel不要收集“得分”或“奖金”系统,没有尝试获得奖金,只是试图不使用输出中所需的任何数字。代码输出数字而无需对任何数字进行硬编码。字符串(或数组)中的数字4(带有加,减,乘和数字索引4)可用于得出所需的数字。
guest271314

您的分数是143*0.7=100.1
约翰·金

1

PHP,35/2 = 17.5

<?=zzzzzzzzzzzzzzz^NVBVKOVKLVHIVNH;

数字方式:40 * .7 = 28

<?=2+2,_,5+3,_,17-2,_,17-1,_,17+6,_,7*6;

没有数字,没有字符串:68/2 = 34

<?=$p++,!$p++,$p+=$p,_,$p+=$p,_,~-$q=$p+$p,_,$q,_,--$p+$q,_,$p*~-$p;

在线试用它们


1
或仅14个字节用于<?=4815162342;
Jo King

1
OP尚未答复我们是否可以省略定界符。但是,是的。为什么不只是10个字节:4815162342。或<?=~+ 10个无法打印的内容-> 15/2 = 7.5
泰特斯

1

JavaScript(SpiderMonkey),67字节/ 2 = 33.5 60字节/ 2 = 30 58字节/ 2 = 29 48字节/ 2 = 24

-7字节/ 3.5-2字节/ 1 @JoKing的礼貌,-10字节/ 5礼貌@tsh的

print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)

在线尝试!


1
print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)
tsh

2
或者只是print(4815162342)为17个字节
乔金



1

空格,得分:49 41字节/ 2 = 20.5

[S S S T    S S S T T   T   T   T   S S S S S S S T T   S S S T S T T   T   T   T   S S T   T   S N
_Push_4815162342][T N
S T _Print_number]

字母S(空格),T(制表符)和N(换行符)仅作为突出显示而添加。
[..._some_action]仅作为说明添加。

在线尝试(仅使用空格,制表符和换行符)。

伪代码:

Integer i = 4815162342
Print i as number to STDOUT

说明:

在空格中,按以下方式推送数字:

  • S:启用堆栈操作
  • S:推送号码
  • S/T:分别为正/负
  • 一些T/ S后跟一个N:小数作为二进制,其中T1和S0

之后,只需将其打印为TNST

  • TN:启用I / O
  • S:输出堆栈的顶部
  • T:作为号码

压入数字本身是否比使用额外的乘法和压入整数指令更长?
Jo King

@JoKing我通常使用vii5ard在线Whitespace编译器,因为它在左侧突出显示了命令。但是显然,它的工作方式与Java整数类似,因为最大值为32位,并且在该值之前环绕到负数。因此,该数字太大,无法一目了然。现在,当我在TIO中输入数字时,它仍然可以正常工作。
凯文·克鲁伊森

1

F#,45个字节= 22.5点

只是运行for数字的常规循环:

for c in"DHOPWj"do printf"%d"(int c-int '@')

以上是可以编译为可执行文件的完整程序。

在REPL(读取评估打印循环)中,例如FSI(F#交互式),以下较短的版本将起作用,因为REPL将输出所评估表达式的表示形式。它有35个字节= 17.5分:

[for c in"DHOPWj"->int c-int '@'];;

1

派克(Pyke),3分

77 91 f8 86 98 06

在这里尝试!

第一个字节发出信号以读入基数128,直到没有高位的字节被置位。

最后,从结果中减去32(出于历史原因)。

这允许在很小的空间中生成大量数字


1

MathGolf,7个字节* 0.5 = 3.5

ÿ≤┼ÇÅ$∞

在线尝试!

说明

请注意,此代码尚不适用于TIO。我最近对MathGolf进行了一些更改,包括添加了$运算符。一旦将其拉到TIO,您就可以在那里运行它,然后我将对此答案进行更新。它在终端中完美运行

ÿ≤┼ÇÅ     Push "≤┼ÇÅ"
     $    pop(a), push ord(a) (pushes 2407581171)
      ∞   pop a, push 2*a

我利用了MathGolf具有1个字节的字面量来创建长度最大为4的字符串这一事实。如果我想将基数为256的字符串转换为整数,则需要使用2 ",而该字符串应为5字符。这样,我节省了2个字节,但是最后加倍运算符使我丢失了一个字节。





1

Befunge-98(FBBI),15字节/ 2 = 7.5点

"*H/!k-"*.*+..@

在线尝试!

说明:

首先按此顺序将字符'* + H /!k-(42、72、47、33、107、45)的ASCII值压入堆栈。然后计算4815=451071623=3347+72,并输出。

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.