双重时间不是双重时间


36

基于这一挑战。

在节奏游戏osu中!,难度修改器“两次”实际上只能将速度提高50%。

您的任务是编写一个输出正偶数(大于0)的程序,当源代码中的每个字节/字符(您选择的哪个)重复时,它应输出乘以1.5的数字。

例如,如果您的源代码是ABC,并且输出6,AABBCC则应输出9。

遵循原始挑战的规则:

规则

  • 您必须构建一个完整的程序。
  • 初始源必须至少为1个字节长。
  • 两个整数都必须以10为底(禁止以其他任何底数或以科学计数法输出)。
  • 您的程序不得接受输入(或具有未使用的空输入),并且不得引发任何错误(编译器警告不视为错误)。
  • 允许输出带有尾随/前导空格的整数。
  • 您可能不会在源副本之间使用换行符。
  • 这是,因此每种语言中最少的字节都是成功的
  • 默认漏洞适用。

我想这将比最初的挑战要简单得多,但是希望我们会看到一些创造性和独特的答案!


@Fatalize write a program that outputs a positive even integer是的。每个偶数都可以乘以1.5以得到一个整数
Skidsdev

对我来说似乎是骗子。
暴民埃里克(Erik the Outgolfer)'17年

@EriktheOutgolfer非常相似,但是我敢肯定这会变得困难得多(除非我遗漏了一些明显的东西)。
TheLethalCoder

9
重复字符可能会使琐碎的语言无法运行。我想知道是否存在非单字符命令样式或基于表达式的语言的解决方案。
Keyu Gan

3
@TheLethalCoder也许最大的障碍是full program。很难想象重复的程序仍然具有有效的入口点/功能。
Keyu Gan

Answers:


22

主塔7 5 4字节

在TIO上选择了一种随机语言

46vt

说明:

在线尝试!

46    # Stack is [4, 6]

v     # Reverse the stack [6, 4]

t     # take top of stack 4

翻倍:

4466   # Stack is [4, 4, 6, 6]

vv     # Reverse the stack twice so it's the same [4, 4, 6, 6]

tt     # take top of stack 6 and again which is 6 again

感谢Officialaimm,节省了2个字节

Veedrac节省了1个字节


1
嘿,也4/6vt可以工作...
Officialaimm

18
我全心全意赞成选择随机TIO语言并学习以应对挑战的策略
Skidsdev

@officialaimm你说得对,谢谢。
LiefdeWen

1
4/6 <-4除以-> 4; 然后是6. 44 // 66 <-4除以4-> 1;一无所有->一无所有; 然后是6和6。干得好。
V. Courtois

1
不会46vt一样吗?
Veedrac


14

LibreOffice Calc,8个字节

=A2+3
19

将其另存为*.csv,然后在LibreOffice Calc中将其打开。您将在A1中获得22分。


将它们加倍:

==AA22++33

1199

您将在A1中获得33


1
聪明的语言选择!
朱塞佩

11

MATL,3个字节

TnQ

在线尝试!翻倍的版本

说明

在MATL中,标量值(数字,字符,逻辑值)与包含该值的1×1数组相同。

普通版:

T    % Push true
n    % Number of elements of true: gives 1
Q    % Add 1: gives 2

翻倍的版本:

TT   % Push [true, true]
n    % Number of elements of [true, true]: gives 2
n    % Number of elements of 2: gives 1
Q    % Add 1: gives 2
Q    % Add 1: gives 3

7
TnQ的答案...:D [我们有时会使用tnq作为谢谢的简短形式]
Officialaimm

8
@officialaimm :)[我们有时会使用它来n从数组中获取第一个元素...]
Luis Mendo

10

vim,5岁

i1<esc>X<C-a>

不加倍:

i1<esc>  insert the literal text "1"
X        delete backwards - a no-op, since there's only one character
<C-a>    increment, giving 2

加倍:

ii11<esc>   insert the literal text "i11"
<esc>       escape in normal mode does nothing
XX          since the cursor is on the last character, delete "i1"
<C-a><C-a>  increment twice, giving 3

10

不确定此答案是否有效。只要在这里发布,以防有​​人从这里得到想法。

具有-p标志的Node.js,7个字节

亚历克斯·瓦尔加

3/3*22

33//33**2222

带有-p标志的Node.js,11个字节

旧的:

3*2*0/1+22

33**22**00//11++2222

输出22和33。


应该怎么办33?TIO似乎无法做到。它锁定在00
五库尔图瓦

1
怎么样:3/3 * 22
亚历克斯·瓦尔加

@AlexVarga太贴心了。
tsh

@ V.Courtois您正在使用严格模式
tsh

1
@EdmundReed需要-p标志来输出表达式值
tsh

10

Python 2 REPL,11个字节

(3/1)*(2/1)

这仅计算为3 * 2 = 6。复制,是

((33//11))**((22//11))

计算得出3 ** 2,即3的2的幂或9。


欢迎来到该网站。此python不产生任何输出,因此不是有效的答案。但是,如果将答案更改为Python REPL,则会产生输出,因此是有效的答案。您将必须删除此答案或将语言从python 2更改为python 2 repl。
小麦巫师

@WheatWizard谢谢,感谢您的帮助!我做得对吗?
卡尔·希尔德克劳特

8

APL,7个字节

⊃⍕⌊3×⍟2

印刷品2

⊃⊃⍕⍕⌊⌊33××⍟⍟22

印刷品3

在线尝试!

Waaat?

单:

3×⍟2         → 2.079441542  ⍝  3 * ln 2
⌊2.079441542 → 2            ⍝  floor
⊃⍕           → '2'          ⍝  format and take first character

双:

⍟⍟22          → 1.128508398  ⍝  ln ln 22
×1.128508398  → 1            ⍝ signum
33×1          → 33           ⍝  33 * 1
⌊⌊33          → 33           ⍝  floor
⊃⊃⍕⍕          → '3'          ⍝  format and take first character

您能垂直对齐评论吗?还是我们有不同的设置或导致我这样的循环的原因
凯文·克鲁伊森

@KevinCruijssen我认为这是您的浏览器字体,但是浏览器不会将APL呈现为等宽。那是我的prntscr.com/fwp0l0
Uriel

嗯,无论如何,它仍然可读并且是一个很好的答案。:)
Kevin Cruijssen '17

对我来说,它呈现为等宽的。可能仅取决于字体(prnt.sc/fwrnz1)。但是,评论绝对不是一致的:P
therealfarfetchd

@therealfarfetchd谢谢,我已经更新了最后3行
Uriel


5

CJam,4个字节

],))

正常尝试!

尝试加倍!

说明

正常:

]     e# Wrap the stack in an array: []
 ,    e# Get its length: 0
  ))  e# Increment twice: 2

双:

]         e# Wrap the stack in an array: []
 ]        e# Wrap the stack in an array: [[]]
  ,       e# Get its length: 1
   ,      e# Get the range from 0 to n-1: [0]
    )     e# Pull out its last element: 0
     )))  e# Increment 3 times: 3

重载是棘手的...;)
Egg the Outgolfer

AB],也可以。
geokavel




3

R,11个字节

8*(!0)+1*!1

在线尝试!

!是取反,**是幂(的别名^)。数字将转换为booleans:0FALSE,其他所有转换为TRUE。布尔地转化为整数:FALSE0TRUE1,所以!0==1!1==0!!00==0!!11==1

8×1+1×0=8880+111=12


1
我只是想提出一个依赖于*和的解决方案**,但是您击败了我!
朱塞佩

@Giuseppe我不确定我的解决方案是最佳的(括号周围的需求!0很烦人)。有可能是更短一些与-*,但我还没有找到这样的解决方案尚未...
罗宾·莱德

2

Cubix,6个字节

O.1)W@

印刷品2

  O
. 1 ) W
  @

推动1)递增,W向左跳转至O输出2,并@完成程序。

加倍,显然是OO..11))WW@@,在多维数据集上是:

    O O
    . .
1 1 ) ) W W @ @
. . . . . . . .
    . .
    . .

它按下1两次,)增加两次,W再次跳到左边,然后将其放在O向北的右边,输出3,然后下一个命令@终止该程序。

在线尝试!

在线翻倍!


2

克莱因8 6字节

/3+@4\

单人双人

说明

对于单一程序,程序遵循非常简单的路径。第一个镜像将其偏转到第二个镜像,第二个镜像将其偏转4到程序的末尾。

双重有点复杂。这里是:

//33++@@44\\

前两个镜像的工作原理相同,但是由于加倍,因此出现了一个新镜像,它将ip偏转回开始,它被第一个镜像的副本捕获并向末端偏转。运行的全部是,33++结果为6。


2

TI基本,3个字节

单:

int(√(8

最后一个表达式是在TI-Basic中隐式返回/打印的,因此可以打印 2

翻倍:

int(int(√(√(88

退货/打印3

TI-Basic是一种标记化语言int(√(8分别是内存中的一个字节。


从技术上讲,挑战规范明确说明了每个角色何时翻倍,但我会允许它并更新规范
Skidsdev

2

Ruby REPL,8个字节

";3#";22

REPL仅打印最后评估的值:22

翻倍:

"";;33##"";;22

这次33是最后评估的值。该字符串将再次被丢弃,并且a #开始注释。


2

> <>,19 8字节

32b*!{n;

打印22
在线尝试!

说明:

32b   push literals onto the stack: [3,2,11]
*     multiply the top two values: [3,22]
!     skip the next instruction
{     (skipped)
n     pop and print the top value from the stack (22)
;     end execution

翻倍:

3322bb**!!{{nn;;

打印33
在线尝试!

说明:

3322bb push literals onto the stack: [3,3,2,2,11,11]
**     multiply top values (twice): [3,3,2,242]
!      skip next instruction
!      (skipped)
{{     rotate the stack to the left (twice): [2,242,3,3]
nn     pop and print the top two values from the stack (33)
;      end execution

旧版本:
普通:

11+!vn;
    n
    ;

打印2
在线尝试!

说明:

1    push 1 on the stack: [1]
 1    push 1 on the stack: [1,1]
  +    add top two values of the stack: [2]
   !    skip the next instruction
    v    (skipped)
     n    print the top value of the stack (2)
      ;    end execution

翻倍:

1111++!!vvnn;;
        nn
        ;;

打印3
在线尝试!

说明:

1111    push four 1's on the stack: [1,1,1,1]
    +    add top two values of the stack: [1,1,2]
     +    add top two values of the stack: [1,3]
      !    skip the next instruction
       !    (skipped)
        v    change direction of execution (down)
         n    print the top value of the stack (3)
          ;    end execution


5
我认为您也应该复制换行符。
暴民埃里克(Erik the Outgolfer)'17年

@EriktheOutgolfer不再有换行符。
KSmarts

1

Zsh,14个字节

<:|echo 22
3
:

在线尝试!

要获得一种使用非在线语言的完整程序来打印任何源代码重复的东西,这是一个挑战。Zsh对此非常有用,因为文件和heredocs被隐式传递给cat。让我们看一下两种情况下的第一行:

<:|echo 22            # Give the file : on stdin to cat. cat pipes to 'echo 22', which ignores stdin
<<::||eecchhoo  2222  # Start heredoc on following lines with EOF string '::', pass to cat.
                      # Since cat exits 0, 'eecchhoo 2222' is not executed

只要3不是程序,第一个程序只会打印22。第二个程序将打印33出来,并带有多余的换行符(由于重复)。


如果3是函数/程序/别名,则此18字节的解决方案仍然有效!

<:|echo 22\\c\
3
:

在线尝试!

最后\是行继续,因此换行符被丢弃,有效地使echo语句 echo '22\c3'。的\c原因回声停止打印后22(这也恰好抑制换行)。


1

Perl 6、14个字节

'|d 3#';say 22

在线尝试! 尝试加倍!

这使用方便命名的调试功能dd将加倍的程序输出到STDERR。为了分离逻辑,我们将加倍的程序用引号引起来,然后将加倍的程序互相抵消,并加上注释字符#以注释掉现在无效的普通程序。



0

MathGolf,2个字节

▬)

在线尝试! 尝试加倍

与其他答案类似,第一个指令1在加倍时产生偶数,第二个指令将其递增。在这种情况下,我使用了逆幂运算(0**0 = 0**0**0 = 1),但它也可能是任何!£≤°指令,甚至可能是我错过的更多指令。


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.