闯入彩票


44

您最近在一个狡猾的赌博网站上开设了一个帐户,费用为25美元,他们会随机退还0到50美元。在两次获得5美元的收益后,您决定证明该网站是骗局。使用默认密码访问其外部防火墙后,您便可以进入其数据库服务器,并找到将最小和最大数量的值保存在何处。您决定将25'9's作为最大值插入,但是会收到一条错误消息,指出最大值必须为'uint64'类型。但是,现在您发现有些数字键似乎无法正确输入远程控制台。挑战似乎摆在您面前,几乎就像在Q + A网站上键入一样。

仅使用方便安装的程序测试和执行您的特定语言,输出无符号64位整数值的最大大小,但是,除编程工具外,几乎所有其他内容在本机上都损坏,因此您无需使用数字1, 2,4,6,8-在源代码或文字中,您还会注意到执行每段附加代码所需的程序似乎要花费成倍的时间,因此,如果您希望将其保持简短,最好想要在绘画之前致富!


挑战

  • 编写一个程序,输出一个18446744073709551615(一个无符号的64位整数的最大值),可以是一个数字或单个字符串。

  • 您的源代码不能包含任何字符“ 1”,“ 2”,“ 4”,“ 6”或“ 8”

  • 如果您的语言没有无符号的64位整数或等效值,则输出可以采用字符串格式或其他格式,但必须为上述数字。

  • 这是因此每种语言中最短的代码胜出!


14
预定义值。pfft
马修·鲁

可以输出一个十六进制数吗?
user902383 '17

1
@ user902383必须采用正确的格式,只要输出采用普通的十进制表示法,就可以将其解析为十六进制数字。
colsw

10
我喜欢这个故事。更多挑战需要这样的背景故事
Cruncher

2
因此,既然有许多解决方案可供选择,那么赌博网站是欺诈吗?
Tominator

Answers:


20

蜂蜡,3个字节

_M{

说明:

_   # Create a bee going horizontally across the line, reading the code
 M  # Decrement the bee's counter, which starts at 0.
    # This will set the counter to 2^64-1, because as bees don't have a concept of
    # negative numbers, all values that are negative are translated to 2^64-n,
    # and in this case, n = -1, as we are calculating 0 - 1.
  { # Print the value

在线尝试!

这种语言非常适合应对这一挑战。

这是Beeswax上Esolang页面的摘录:

众所周知,蜜蜂没有负数的概念,但他们发现蜜蜂可以使用地址的最高有效位来解决这个问题。因此,相对于蜜蜂位置的坐标是通过坐标的二进制补码实现的。这样,一半的64位地址空间可用于本地寻址,而无需在每个方向上回绕。

64位十六进制中最大的正64位二进制补码地址为9223372036854754775807或0x7fffffffffffffffff。从0到此值的所有值均等同转换为相同的64位值。相反(负)方向上的所有值n都转换为2 ^ 64-n。例如:n = -1由18446744073709551615寻址。n = -9223372036854775808由9223372036854775808寻址。

这基本上是无符号的多头。

编辑:我仍然期望丹尼斯以2字节的解决方案超越我。


如果表单将返回值,则无需打印它。查看其他答案。
MatthewRock '17

41

C,26个字节

main(){printf("%lu",~0l);}

打印一个unsigned long值。

要求的大小为long64位。


好东西。几乎在Perl一样:print~0
Dada's

2
~0l应该管用。
克里斯托夫(Christoph)

11
@AnixPasBesoin是小写字母“ L” :)
Quentin

2
你假设sizeof(long) * CHAR_BIT == 64。高尔夫的合理假设,但值得指出。

1
@Chris是按位而非运算符。
Ven



22

Python3 REPL,12个字节

在REPL中: ~-(~-3<<9*7)

在REPL之外:print~-(~-3<<9*7)<-> Python2!

这是另一个17个字节的内容:~-(~-3<<ord("?"))

说明

没什么特别的。分解如下:

~-           | Subtract 1 from the next value.
  (          | 
   ~-3       | Subtract 1 from 3, resulting in 2
      <<     | Binary shift 2's digits to left,
        9*7  | by 9*7 (63).
           ) | The value inside the parentheses is now 2**64.

结果表达式大致(但不完全) ~-(2<<63)-> (2**64)-1。我在这里两次使用了operator操作符。它打高尔夫球的技巧是在这里

还有sys.maxint在Python2可以使用,但我不会看那个。

repl.it <-测试链接。


为什么这段代码看起来像只猫在吃另一只猫?
OldBunny2800 '02

@ OldBunny2800这是~-(~第一只猫的眼睛吗?我看不到第二只猫...
Yytsi

16

公元前, 15 13字节

通过操作节省了2个字节。

(a=9+7)^a-3/3

没什么好看的,只是(16 ^ 16)-1。


2
欢迎来到PPCG!
ETHproductions '02

1
(a=9+7)^a-3/3
manatwork '17

谢谢我本来是在bash中做类似的事情,然后才意识到我的回答比纯bc更好。
理查德

13

dc,7个字节

我认为允许基于堆栈的语言将答案留在堆栈的顶部单元格上,类似于函数的返回值。如果需要显式打印p,请在代码末尾添加。

AZ5E^z-

在线尝试!

它使用几种技巧来计算(2 64-1):

  • 2Z以整数10(A)中的位数()的形式给出
  • 64给出为5E。默认情况下,dc使用10作为输入基数。即使这样,它也可以接受十六进制数字,但是它们的转换方式与您期望的不同。示例:(5E)默认 =(5E)(输入基数= 10) =(5 * 10 1)+(14 (E) * 10 0)= 50 + 14 = 64

  • 1给出为堆栈的深度(z),因为仅存在(2 64

替代故事:

但是,现在您发现有些数字键似乎无法正确输入远程控制台。您深吸一口气,然后开始测试每个数字键。比你想的还要糟!没有一个是可行的,剩下的任务是仅使用字母和符号来产生所需的整数。

DC解决方案:计算(16 16-1),仍然是7个字节!

Fz+d^z-          # push 15, push 1, add, duplicate, exponentiate, push 1, subtract

在线尝试!


2
很棒的替代故事
级联样式


10

05AB1E,4个字节

žJn<

说明:

žJ   # Push 4294967296
  n  # Squared
   < # Decreased by one

最后!有机会使用05AB1E的内建函数来获得2的幂!

在线尝试!

另一个4字节的答案:

žxo<

说明:

  o  # 2 to the power of
žx   # 64
   < # Decreased by one

在线尝试!

(如果有人想知道,这个问题早于所有其他4字节答案)


我觉得似乎有一个较短的解决方案,64o<但我还没有找到。类似于'@Ço<创造性的64位推送...如果您设法以1个字节推送64,那么我要说明的就是3分。
魔术八爪鱼缸

10

MATLAB /八度,5字节

@Sanchises发布了一个出色的MATLAB答案,但是这是一种完全不同的方法,因此无论如何我都会发布它:

tic/0

在MATLAB中,tic返回自打开程序以来经过的毫秒数。至关重要的是,它返回的值是一种uint64类型。这样就不必uint64从MATLAB的默认类型强制转换为数字了double

在MATLAB中除以0的任何数字都被视为无穷大,对于非浮点类型,MATLAB将此表示为该类型的最大整数值。


这也适用于Octave,但根据您使用的解释器的不同,它也可能会发出“被零除”的警告。您可以在此处在线尝试代码,就像我说的那样,您会收到/ 0警告,该警告未出现在MATLAB中。


真的很聪明,不错。
colsw

我现在只看到这个答案。非常聪明!(当然,如果您在运行速度非常快的计算机上执行此操作(例如tic==0在启动😉时不起作用))
Sanchises


7

PHP,16字节

这很像Ven的答案:https : //codegolf.stackexchange.com/a/110751/38505

printf("%u",~0);

https://repl.it/Frcy/0

为此,您需要使用64位体系结构。这是因为〜0为-1,这是32位二进制数为11111111111111111111111111111111111111111111111111111111111111111111111111‌1111的二进制数,而32位二进制数为11111111111111111111111111111111111111,且数字与平台相关-Ismael Miguel


1
大声笑。这也适用于bashprintf %u $[~0]
manatwork '17

啊哈,不错@manatwork
ʰᵈˑ

这与体系结构有关,在i386上不起作用。
pt

1
@pts显然!i386是16/32位。PHP对此非常挑剔。为此,您需要使用64位体系结构。这是因为~0is -1,它是111111111111111111111111111111111111111111111111111111111111111164位的二进制形式(与32位相比)11111111111111111111111111111111,并且数字与平台有关。
Ismael Miguel

@ʰᵈˑ不客气 我必须承认我有所懈怠。我已经复制粘贴了32个1。如果需要,您可以在答案上修正语法。
Ismael Miguel

6

MATLAB /八度,22字节

eye(['~rw}?='-9 ''])/0

在线尝试!

eye用于创建单位矩阵(1对角线为的矩阵,否则为零)。没有参数,这将创建一个1x1单位矩阵,换句话说,将创建一个单位矩阵1。它带有一个可选参数,该参数是所创建矩阵的数据类型(在MATLAB术语中为“类”)。因此,我们要求一个1class uint64,然后将其除以零,这将导致生成InfMATLAB并被裁剪为intmax('uint64')

向量的['~rw}?='-9 '']计算结果为'uint64'。将空字符连接到向量比使用短1个字节char('~rw}?='-9)

intmax做出此答案的原因:内置函数可悲地求值为32位有符号整数的最大值。显而易见的下一个选项是uint64(),其中包含禁止的字符。替代方法是使用将字符串作为数据类型的函数。显而易见的候选人intmaxcast,但替代品包括zerosoneseye

eye(['~rw}?='-9 ''])/0    % Winning version! 22 bytes.
intmax(['~rw}?='-9 ''])   % Obvious candidate. 23 bytes.
1/zeros(['~rw}?='-9 ''])  % 24 bytes
cast(Inf,['~rw}?='-9 '']) % 25 bytes. Also an obvious candidate, but actually very long.

注意:默认情况下,MATLAB实际上安装在所有狡猾的赌博网站上。


6

JavaScript,39 38 33 32字节

alert(0xafebff0+'737095'+0xc99f)

编辑:由于@Arnauld,节省了5个字节。


2
删除警报,因为它可以在控制台中运行。
亚历克西斯·泰勒

6

Java 8,30字节

()->Long.toUnsignedString(~0L)

在线测试


缺少Java“样板”和system.out.print部分
Viktor Mellgren

2
@ViktorMellgren这声明了一个lambda表达式,这很好。
桑契斯'17

这需要Java 8
mbomb007 '17

20
是Java 8及更高版本,不再有样板!怕打高尔夫球!Java现在是真正的竞争者。这是你们所有人都非常害怕的时候,所有的代码编程语言都是徒劳的!哦,还等着30个字节,... 隐藏起来
dwana

5
当然,“更简短的解决方案”使用的是非法字符1846
尼尔

5

BF,108字节

-[----->+<]>--.+++++++.----..++.+.---..----.+++++++.----.++++.-------.+++++++++.----..----.+++++.-----.++++.

如果将每个命令视为3位,则可能为41个字节。


3
每个命令是一个字节。不是3位。
mbomb007 '17

好吧,是的,这就是为什么我把它设置为108个字节...
Timtech '17

是的,但您说的是“这可能是41个字节”,不是。
mbomb007 '17

可以让解释器将3位组解释为八个命令之一+-<>[].,
Timtech '17

那已经存在。它被称为esolangs.org/wiki/Binaryfuck
mbomb007 '02

5

视网膜28 27字节

感谢Kritixi Lithos,节省了1个字节


bieegheeahdhajffbgbf
T`l`d

在线尝试!

说明


bieegheeahdhajffbgbf

用此字符串替换不存在/空的输入。这个特定的字符串是由该程序的“逆”生成的。它编码a通过j0通过9分别。

T`l`d

这是一个T洗礼阶段。该ld是用于音译字符集。l代表小写字母,d是全数字。因此,它映射abcdefghij0123456789



@KritixiLithos哦,是的。我还没有完全清醒:P
商业猫

5

C ++,46个字节。

int m(){std::cout<<unsigned long long(5+3-9);}

第一次参加标准高尔夫,但我对自己感到很满意。乐意接受任何批评/建议:)


5

脑高射炮64,62,58,54个字节

(((((()()()()){}){}){}){}){({}<(({}()){}[()])>[()])}{}

在线尝试!

[在线尝试!]

感谢@Riley,节省了四个字节!

说明:

#Push a 64
(((((()()()()){}){}){}){})

#While true
{

  #Pop the top of the stack. We'll store this value for later, but first
  ({}

  #Before pushing the value
  <

    #Push (N + 1) * 2 - 1
    # (where N is the number underneath, originally 0)
    (({}()){}[()])

  >

  #And push the TOS minus one back on
  [()])

#endwhile
}

#Pop the zero left over
{}

#And decrement the number underneath
({}[()])

为了进行记录,我尝试将32和4倍增大,但字节数相同。


通过使用()64 中的s 之一来推动1,可以节省4个字节:((((((())()()()){}){}){}){})
Riley

@Riley Aha,当然!谢谢
DJMcMayhem



嗯,你不能N*2+1代替(N+1)*2-1吗?
Jo King

4

C#6,31字节

()=>System.Console.Write(~0UL);

与Java几乎相同。

C#5,56字节

class P{static void Main(){System.Console.Write(~0UL);}}

C#6的答案只是匿名操作,C#5中也存在
。– TheLethalCoder

此外,挑战仅要求您输出数字,以便您可以将其编译Func<ulong>为:()=>~0UL;
TheLethalCoder

它还没有说您不能使用任何输入,因此您可以编译为a Func<int, ulong>来保存一个字节:_=>~0UL;而且我认为它仍然有效。
TheLethalCoder

4

Forth(gforth),11 9 7个字节

true U.

在线尝试

true与相同-1U.将数字打印为无符号整数。

这在TIO上有效,可能是因为它具有64位体系结构?我不确定。-1 U.例如,如果我在repl.it上运行,则得到2 ** 32-1。如果repl.it支持双精度整数,则将其输出UD.代替。


您可能会减少到-3 3 / U.
zeppelin

或者,甚至更好:(true U. 节奏也很好)
zeppelin

哦,我忘了true,因为我很习惯使用0and 1。谢谢。
mbomb007 '17

4

Python3 REPL,11个字节

~0^~0>>~077

这个怎么运作

  • 〜0是-1(二进制补码,“ 1”的无穷序列)
  • 077是八进制的63,所以〜077是-64
  • 带有负参数的右移是向左移
  • 总而言之,-1 xor(-1 << 64)是我们要查找的数字

4

PowerShell29个 14字节

0xC000PB/3-3/3

在线尝试!

感谢@ n0rd基本上将其打了一半。

这利用了内置的一元运算PB符,该运算符的基本作用是“将前面的数字乘以1125899906842624”(即,一个pebibyte中有多少个字节)。这再加上十六进制0xC000,或者49152,让49152 pebibytes。我们除以3,屈服18446744073709551616,并减去3/3得到最终值。


"0x$(7-3)000PB-9/9"|iex
n0rd

2
0xC000PB/3-3/3
n0rd

@ n0rd哦,那真是巧,就是PB那样使用的。谢谢!
AdmBorkBork '17

@ n0rd令人印象深刻,欢迎来到PPCG!
colsw '17


3

x64汇编,7字节

十六进制(已组装):4831C048FFC8C3

拆卸,评论:
XOR RAX,RAX ;Zero the value of 64 bit register RAX DEC RAX ;Decrement the value of RAX RET ;Return this value

RAX是一个64位寄存器,最常用于返回整数参数(例如C)。通过递减1,其值从0翻转到... 2 ^ 64-1,这正是需要的。
虽然,汇编后的二进制文件包含1和4以及8,但汇编没有,但是汇编文件计入汇编中,所以计数吗?哦我的头
同样,在这种情况下,输出是返回值。


3

脑高射炮223个 193字节

-A
多亏了DJMcMayhem,其中+1达到-30

((((((((((((((((((((((((()()()){}){}()){}){}())[()()()()])[][]())[[]()()])[]))()()()())[[]()()])[][()])[()()()()])()()()())[(()()()){}()])()()()()))()()())[()])[()()]))()()()())[(()()()){}()])

在线尝试!

这只是推送的ASCII值并将其打印为字符。

作为参考,使用Integer meta golfer需要338个字节来生成实际数字。

((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()){}()){}){}()){}()){({}[()])}{}()){}()){}())){}{})){}{})()){}{})){}{})){}{})()){}{})){}{})){}{}){}){}())){}{}){}())()){}{})){}{}){}){}){}())()){}{})()){}{})){}{}){}())){}{})()){}{})){}{})){}{})){}{})()){}{})()){}{})){}{}){}())){}{}){}){}())()){}{})()){}{})){}{})

在线尝试!



另外,我觉得你可以添加一个字节-A,因为标准调用已经包括了-f,所以这只是一个过做-fA,而不是
DJMcMayhem

@DJMcMayhem我们何时开始使用+1​​作为参数?我没想到[]我会在有机会的时候看看那个。谢谢。
莱利

3

MATL,8个字节

l_5Z%EZD

这可能会得到改善,但是我还不熟悉MATL中的字符串和类型。

在matl.suever.net上尝试

说明:

l       % push 1
_       % unary minus
5       % push 5, corresponds to type 'uint64'
Z%      % convert 1 to this type
E       % double
ZD      % display as a string

它必须是YY5Z%ZD才能强制使用uint64类型,但我不知道为什么使用1 5Z%才可以工作...
B. Mehta

您不能使用
8。– xnor

@xnor糟糕,已修复。
B. Mehta

可以使用matl.suever.netmatl.tryitonline.net添加演示链接吗?
Suever

1
@LuisMendo啊,当然-我以为cast曾经用过,但是如果使用了,那是有道理的typecast。感谢您清理。
桑契斯

3

Javascript 55字节

alert(""+(590300>>5)+(59530-3>>3)+7370955+(3*59*73>>3))

该代码生成,然后使用按位运算警告字符串18446744073709551615

590300 >> 5 18446
59530-3 >> 3 7440
7370955
3 * 59 * 73 >> 3 1615


2588673709551615为我显示...
n0rd

alert(0xafebff0+'7370955'+(3*59*73>>3))工作正常
n0rd

我保留它的原样是为了保留使用的方法,而不是立即复制其他人。
fəˈnɛtɪk


2

TI基本(10字节)

9+7
Ans^Ans-0!

TI-BASIC无法精确地计算,存储或显示该数字-浮点数仅具有14位(约44位)的精度。
lirtosiast
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.