我将源加倍,将输出加倍!


127

您的任务(如果希望接受)是编写一个输出正整数(大于0)的程序。棘手的部分是,如果我复制源代码,则输出必须是原始整数的两倍。

规则

  • 您必须构建一个完整的程序。也就是说,您的输出必须打印到STDOUT。

  • 初始源必须至少为1个字节长。

  • 两个整数都必须以10为底(禁止以其他任何底数或以科学计数法输出)。

  • 您的程序不得接受输入(或具有未使用的空输入)。

  • 允许输出带有尾随/前导空格的整数。

  • 您可能不会在源副本之间使用换行符。

  • 这是,因此每种语言中最短的(原始)代码胜出!

  • 默认漏洞适用。

假设您的源代码为,ABC并且其对应的输出为4。如果我ABCABC改为编写并运行它,则输出必须为8

排行榜

这使用@manatwork的layout


2
@ Mr.Xcoder然后我只需要在自己的源代码中包含一个即可。
steenbergh

3
@ Mr.Xcoder我认为您应该避免阅读自己的源代码。
caird coinheringaahing

1
它只需要工作一次就可以工作一次?我们不需要支持ň许多倍增?
科迪·格雷

6
@Daniel假设您的来源是``(空程序)并且产生了5。如果将其加倍,则5无论您做什么,您的来源都是``(空程序),并且也可以生成。话虽如此,重复的空程序仍然是空程序,并且总是产生相同的输出,除了空程序意味着别的东西(例如随机数生成器)无论如何都无效的情况。
Xcoder先生

1
对于那些在程序终止时自动转储堆栈顶部的esolang,这并不难。
MD XF

Answers:


152

Python 2,33个字节

print len(open(__file__).read())#

在线尝试!

尝试加倍

Python 3,28个字节

print(len(*open(__file__)))#

在线尝试!

尝试加倍

说明

这会使用来打开源代码,open(__file__)并使用来获取其长度,len#防止读取任何其他代码。当光源加倍时,长度也加倍。


28
哇,我住了……真是太好了!
Xcoder先生17年

2
32个字节。通过使用附加模式,将当前位置设置为文件末尾,可以工作。tell()返回文件中的当前位置
Halvard Hummel

@HalvardHummel很好。但是,我无意更新此答案。如果您要自己发布,我认为这是完全不同的。
精神分裂症O'Zaic,

@WheatWizard这是可以理解的,我做了一个单独的答案
Halvard Hummel,


65

Google表格,11个 5字节

匿名工作表公式,不包含输入和输出到保存该公式的单元格中

=4/(2

作为一个公式,它的计算结果类似于一个看起来像

=4/(2
=4/(2)
=4/2
=2
2

但是,当此工作表公式加倍时,此调用堆栈的计算结果为

=4/(2=4/(2
=4/(2=4/(2)
=4/(2=4/(2))
=4/(2=2)
=4/(True)
=4/True
=4/1
=4
4

当然,使用此方法的含义是,一旦重复执行了多次,则在问题的第三次及之后的所有迭代中,调用堆栈将到达=4/(2=4)并评估=4/0并抛出#DIV/0!错误。

通过从=DIVIDE(4,2公式切换到代数来获得-6个字节


18
没想到Google表格会在代码高尔夫中使用。聪明的解决方案
hucancode '17

11
@hucancode对此真正有趣的一点是,因为如果您排除尾部)的,则Excel会引发错误,这是我见过的唯一未转换为Excel答案的Google表格答案
Taylor Scott

45

05AB1E,2个字节

原版的

XO

在线尝试!

加倍

XOXO

在线尝试!

说明

X1压入堆栈。
O对堆栈求和。


48
XOXO,不错的解决方案。
Xcoder先生17年

4
您是故意这样做的,虽然您知道也可以使用1O
暴民埃里克(Erik the Outgolfer)'17年

12
你们在哪里找到这些荒谬的语言?
DavidB

7
@DavidB通常,他们编写它们。
Federico Poloni

3
@DavidB是的,人们发明了codegolf语言,是的,他们可以得到令人印象深刻的得分较低,但这样做愚蠢的事情一样解决它在1个字节的挑战后,发明了一种语言是不允许的,和编程在这些语言通常是从简单。
Esolanging Fruit '18

43

C(gcc),37个字节

i;main(){putchar(i+49);}/*
i=1;//*///

该文件不包含尾随换行符。

双重版本,用于语法突出显示:

i;main(){putchar(i+49);}/*
i=1;//*///i;main(){putchar(i+49);}/*
i=1;//*///

TIO链接:


3
您能解释一下这是如何工作的吗?为什么评论不会被评论?
phil294

10
当您将源代码加倍时,/*会用注释掉//,这意味着以下内容i=1不会被注释。如果将代码的加倍版本放入语法荧光笔中
则更

1
哇,一个暂定的定义技巧。真好
aschepler '17

39

六边形,7字节

/)!@.).

定期打印1,然后将2翻倍。

在线尝试!在线尝试翻倍!

扩展版本:

定期:

 / )
! @ .
 ) .

翻倍:

  / ) !
 @ . ) .
/ ) ! @ .
 ) . . .
  . . .

常规程序遵循以下路径:/)!.@增加内存边沿(将所有位置初始化为零),然后打印其数值。翻倍的程序如下:/.)/)!@而是在打印之前将边缘增加两次。


6
哇,辛苦了。我认为您是手工发现的?由于6个字节在蛮力范围内,所以我认为我可以尝试一下,实际上有一个4字节的解决方案:([@!)和大约570个5字节的解决方案)。由于您实际上要手工寻找解决方案,因此非常高兴为您发布4字节的解决方案。
Martin Ender

1
如果您有兴趣,这里是完整列表,包括打印的数字:pastebin.com/TtRujjA4
Martin Ender


36

Braingolf,1个字节

+

在线尝试!

现在我们在说话!

输出20,或40当源加倍时。

说明

+ 当然是Braingolf中的“ sum”,“ add”或“ plus”运算符,但是它具有二进位,一元函数和niladic函数。

当堆栈中至少有2个项目时,它是二进位的,并且将累加堆栈中的前2个项目。

当堆栈中只有1个项目时,它是单子,并且将使该项目加倍。

当堆栈中没有物品时,这是尼拉度,然后按20!

为什么要推20?好吧,因为一个空的Braingolf程序仅打印换行符,而换行符的ASCII值为10,所以我认为我要执行niladic +push 20,所以这实际上是隐含的换行符上的单子(即使不是在换行符上)所有)

因此:

+   No input
+   Niladic sum, Push 20
    Implicit output

当加倍时:

++  No input
+   Niladic sum, Push 20
 +  Monadic sum, Double top of stack
    Implicit output

28

Haskell26 18字节

main=print$0
 +1--

在线尝试!

翻倍:

main=print$0
 +1--main=print$0
 +1--

在线尝试!

我在回答挑战三重版本时找到了这个版本。


26字节版本,无评论滥用:

main|n<-1,nmain<-2=print n

在线尝试!印刷品1

在图案守护标识符n被设置为1nmain2,然后print n打印1

双重程序:

main|n<-1,nmain<-2=print nmain|n<-1,nmain<-2=print n

在线尝试!印刷品2

在第一图案后卫再次n被设定为1nmain2,但是print语句已经成为print nmain,所以2被打印出来。因为模式保护中的标识符声明评估为true,所以永远无法到达第二个模式保护。


23

Mathematica,5个字节

(1+1)

输出2和(1 + 1)(1 + 1)输出4

当然(正如你们中许多人所问的那样)

Mathematica,3个字节

(2)

1
(2)工作吗?
geokavel

9
@geokavel 2和一个空格可以正常工作,+1但是应该注意,所有这些都假设Mathematica的笔记本环境
Martin Ender

1
如果您在opencloud Mathematica Sandbox中运行它,则一个空格变为x,这样2 输出22 2 变为2x2 打印4。您可以将其添加为替代解决方案。
Xcoder先生17年

2
(2)也可以。
Xcoder先生17年

6
2 也可以。
alephalpha

17

Brain-Flak,6个字节

({}())

在线尝试!

说明

这应该是很清楚的。 {}从堆栈中获取一个值,该值从一开始就隐含为零,然后向其 ()添加一个并(...)推入该值。在第二次运行中,由于堆栈中已经存在1,因此只需向其添加另一个1就可以得出2。实际上,如果您复制代码n时间,它将始终输出n


17

> <>7 6个字节

-1字节感谢Teal Pelican

\ln;
0

在线尝试!
尝试加倍!

说明

我使用了- 0但我也可能使用1- 9a-,f因为它们都将单个值压入堆栈。

未加倍:

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (1) onto stack; STACK: [0, 1]
n pops off the top value (1) and prints it; STACK: [0]
; end of execution

翻倍:

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
0 pushes zero onto stack; STACK: [0, 0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (2) onto stack; STACK: [0, 0, 2]
n pops off the top value (2) and prints it; STACK: [0, 0]
; end of execution

5
欢迎来到PPCG!这是一个很好的第一答案,带有很好的解释和良好的代码。您赢得了我的支持!
Xcoder先生17年

1
我刚刚看到了这个答案,太好了!这对> <>答案有非常好的改进(包括我的!)-在这里查看TIO链接;tio.run/##S8sszvj/PyYnz5rLAEL@/w8A-我所做的只是将0移到该空间并节省了1个字节。:)
蓝绿色鹈鹕

1
@Tealpelican谢谢!我不敢相信我错过了这么简单的进步。(实际上,我可以,我不经常使用> <>,​​所以我是打高尔夫球的新手!)老实说,我并没有真正仔细研究其他解决方案,我发现它们相对较大,因此决定尝试打高尔夫球,因为这样更容易比赛。
Borka223

1
好答案!只是想指出,这使用了与我的Klein答案相同的方法。(不要指责您抄袭我,如果有人只是指出两个类似的答案。)
精神分裂症O'Zaic

14

视网膜,3个字节


1

在线尝试!

印刷品2。将其打印加倍4

1可以用几乎任何东西来代替。

说明


1

将空输入替换为1


计算1两个为零的空匹配数(一个在之前1,之后一个)。

如果我们将程序加倍,则会得到一个类似于第一个阶段的附加阶段。这次,它1在初始值之前和之后插入,给出111。现在,当我们计算空正则表达式的匹配数时,将得到其中四个。



12

Neim,1个字节

>

只需增加堆栈的顶部即可。

可以将堆栈想象成无穷无尽的零开始,因此此堆栈将增加0以获得1,然后增加一倍,再次将其递增以获得2。

在线尝试!

替代解决方案:

加2而不是1。



12

Java8,135个 118 110字节

单张,版画8

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

翻倍,打印16

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

预览答案,118字节

单张,打印1张

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

翻倍,打印2

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

如何运作

java编译器为源文件中的每个类创建一个文件。因此,我可以简单地检查是否存在名称为B.class的资源。


原始答案,135个字节

单张,打印1张

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///

翻倍,打印2

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///

您对评论所做的事情真的很酷。但是,您真的需要换行吗?
vikarjramun

噢,NVM,没有注意到第二行的单行注释
vikarjramun 17'7

11

Python 2,32字节

print open(__file__,"a").tell()#

在线尝试!

双源代码

说明

这将以追加模式打开源代码文件

open(__file__,"a")

然后,我们在文件中找到当前位置,由于在追加模式下打开,该位置将在文件末尾

open(__file__,"a").tell()

我们打印这个长度

print open(__file__,"a").tell()

并添加注释,以便使源代码加倍不会执行更多代码

print open(__file__,"a").tell()#

9

Excel VBA,12字节

匿名VBE立即窗口功能,可将输入从范围输出到范围[A1]。的范围内的默认值[A1]""(空字符串)和一个后执行以下各组这1和增量通过1与所有后续执行。

[A1]=[A1+1]:

输入输出

单一版本

[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 1

翻倍的版本

[A1]=[A1+1]:[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 2


8

外壳,3个字节

|1"

在线尝试!

一个原始的想法,我在其他答案中看到的。

说明

|Husk中的in是一个“或”运算符,如果它是thruthy,则返回其第二个参数,否则返回第一个参数。当应用于不同类型的参数时,它首先将所有参数转换为数字:字符串(通常是列表)的转换是通过计算其长度来完成的。

在原始程序中,我们适用|于1和一个空字符串,该字符串将转换为0:结果为1。

在加倍程序中,我们将|1 应用于字符串“ | 1”,并将其转换为2:结果为2。



7

CJam,3个字节

5],

在线尝试

将5封装在阵列中。返回数组的长度。当您复制代码时,先前返回的长度1已经在堆栈上,因此您获得了[1,5]的数组,该数组返回长度2。



7

Wumpus,4个字节

" O@

在线尝试!

" O@" O@

在线尝试!

普通代码打印32,双倍打印一次64

说明

"就像在其他Fungeoids中一样工作:切换字符串模式,在该模式下,每个单独的字符代码被压入堆栈,而不是执行命令。但是,与大多数其他Fungeoids相比,Wumpus的游戏场不会环绕,因此IP会从末端反射并通过代码来回跳动。

因此,对于单个程序,实际上将执行以下代码:

" O@O " O@

弦推32, 79, 64, 79, 32。然后,该空格不执行任何操作,O打印32@终止程序。

对于加倍的程序,该字符串在IP反弹之前被终止,因此该代码仅被遍历一次:

" O@" O@

这次,字符串push 32, 79, 64O打印64@终止程序。

这似乎是唯一的4字节解决方案。


6

,,, 2 个字节

1∑

说明

1∑

1   push 1
 ∑  pop everything and push the sum of the stack

我是否缺少某些东西,或者源代码加倍,那不是3吗?
泰勒·斯科特

@TaylorScott对不起,我应该注意会弹出堆栈中的所有元素。
totallyhuman

1
这更有意义-感谢您的澄清
泰勒·斯科特

Sigma是两个字节,不是吗?
nishantjr

1
@nishantjr ,,,使用其自己的代码页,该页链接在标题中。
完全人类

6

批次,13个字节

@echo %~z0
:

说明:%~z0扩展为源文件的长度,因此将文件加倍只是将其长度加倍。第二行定义一个空标签,不执行任何操作。将文件加倍后,它将变成名为的标签@echo %~z0,而第三行是另一个空标签。


6

QBasic, 44  28字节

没有在最后换行符。4单身8时输出,双倍时输出。

4
READ x,y
?x+y
END
DATA 4,0

说明

对于单个版本:

  • 4 是行号。
  • READ x,yDATA语句中获取前两个值,并将它们存储在x和中y。因此,x获得4y得到0
  • ?x+y 将两个数字相加并打印出来。
  • END 退出程序。

在加倍版本中,该DATA语句变为DATA 4,04,它同时分配4xy,从而使x+y相等8


6

Befunge-98,5个字节

90g.@

在线尝试!

g获取Funge-Space中坐标(9,0)处的字符值;.将其打印为整数,然后@暂停程序。在未加倍的版本中,(9,0)超出了程序的范围,并且程序外部的Funge-Space初始化为默认的空格值,因此我们打印32。在加倍的版本中,(9,0 0)是@字符,因此我们打印64。


这不是我期望的最佳Befunge-98答案看起来像...真正有创意的答案!
MildlyMilquetoast


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.