用6乘9会得到什么?(42)


60

我爱数学。但是我找不到一个可以正确相乘的计算器。他们似乎把6 * 9以外的所有东西都弄对了(这是生命,宇宙和一切的问题!他们怎么会出错?!)。因此,我希望大家为我编写一个可以正确乘以2的函数(并且6 * 9等于42而不是54。9* 6仍等于54)。

哦,我将不得不在Minecraft中构建源代码,以便……赢得最少的字节!

概括

  • 以2个数字作为输入(类型无关紧要,但是只传递2个项目,并且顺序必须一致。因此,流和数组只要保留它们传递的顺序就可以。)无法正常运作,因为它无法保留订单)
  • 输出两个数字的倍数,除非它们分别为6和9,然后输出42(顺序很重要!)
    • PS。我从未真正擅长计数,因此我认为只有0到99的整数是实数(使用的类型无关紧要)
  • 每种语言的最少字节数获胜!

排行榜:


1
@JonathanAllan是的,为此添加了规则。
Tezra

73
巧合的是,问题ID有42两次。
暴民埃里克(Erik the Outgolfer)

1
如果只有不超过99的整数是实数,那么例如9 * 11是有效的提示,但是10 * 10不是,对吗?
黑暗的流浪者

14
@EriktheOutgolfer…,如果输入为6和9,则12代表要减去的值。
Adám17年

11
@EriktheOutgolfer即使您反向读取ID。
T. Sar-恢复莫妮卡

Answers:


65

Mathematica,15个字节

字节数假定为Windows ANSI编码(CP-1252)。

6±9=42
±n__:=1n

定义一个±解决该问题的二进制运算符。我们简单地定义6±9=42一个优先的特殊情况,然后添加一个±等于乘法的后备定义。后者使用了相当有趣的高尔夫技巧。这项工作的原因实际上很复杂,我们需要研究序列。序列与其他语言中的splat相似。它基本上是一个“列表”,周围没有任何包装。例如f[1, Sequence[2, 3, 4], 5],真的是公正的f[1, 2, 3, 4, 5]。另一个重要的概念是所有运算符都只是语法糖。特别是,±可以用作一元或二进制运算符并表示head PlusMinus。所以,±xPlusMinus[x]a±bPlusMinus[a,b]

现在我们有了定义±n__。这是定义的简写PlusMinus[n__]。但是n__代表任意参数序列。因此,这实际上也为二进制(和n元)用法添加了定义PlusMinus。此定义的值为1n。这如何乘以参数?好吧,1n通过并置使用Mathematica的隐式乘法,所以它等效于1*n。但*也只是的简写Times[1,n]。现在,n是参数序列。因此,如果我们调用a±b它,则实际上将变为Times[1,a,b]。就是这样a*b

我认为这种语法滥用使我们能够使用一元语法定义二进制运算符非常巧妙。我们现在甚至可以做PlusMinus[2,3,4]计算24(也可以写成±##&[2,3,4]or,2±Sequence[3,4]但那时候简直太疯狂了)。


我特别喜欢这基本上是我的“计算器”的补丁:3有趣的是,它也适用于*吗?:3
Tezra

3
@Tezra很好,它*是一个内置运算符,因此您必须Unprotect添加更多定义,但它Unprotect[Times];6*9=42应该可以工作(尽管现在无法测试)。
Martin Ender

1
对*运算符执行此操作是如此邪恶。...我喜欢它!>:3
Tezra

1
正好有42个其他人时,我该如何投票?这是我的“未来+1”奖,待其他人破解后再授予!:-)
Vee

1
@MartinEnder Aww; 但这是最短的Mathematica,也是我到目前为止最喜欢的。:3
Tezra


25

C,32 31 29 28字节

-2归功于Digital Trauma
-1归功于musicman523

#define f(a,b)a^6|b^9?a*b:42

很简单 声明一个f接受两个参数的宏函数,ab
如果a6b9,则返回42。否则返回ax b

在线尝试!


2
使用^代替==并调整一下逻辑:#define f(a,b)a^6||b^9?a*b:42-保存2个字节。
Digital Trauma

@DigitalTrauma干杯:D
MD XF

1
我认为您可以使用|而不是||保存另一个字节,因为它的优先级仍然低于^
musicman523

@ musicman523谢谢!编辑中。
MD XF

1
您也应该更新shortC版本以进行这些更改
musicman523

17

JavaScript(ES6),20个字节

x=>y=>x-6|y-9?x*y:42

说明:

如果f x == 6并且y == 9,x-6|y-9则将为0(伪),结果将为42。

片段:

f=

x=>y=>x-6|y-9?x*y:42

console.log(f(6)(9));
console.log(f(9)(6));


4
做得非常好;希望我能想到。+1
毛茸茸的


12

05AB1E15 11 9字节

-4个字节,感谢@Emigna

-2个字节,感谢@Adnan

P¹69SQi42

在线尝试!

这个怎么运作

P          # multiply input
 ¹         # push first number
  69       # the number 69
    S      # split per character
     Q     # equality for both inputs
       i42 # if so, print 42
           # otherwise print product

您可以使用‚D96SQi42ëP
Emigna

@Emigna嗯...为什么,一开始呢?
尼尔·A·

将2个输入配对以仅比较一次作为列表。
Emigna

我想6Qs9Q*对于相同的字节数也可以使用。
Emigna

更改输入格式可节省2个字节:P¹69SQi42
Adnan

10

Java(OpenJDK 8)24 22字节

-2个字节,感谢@OlivierGrégoire

a->b->a==6&b==9?42:a*b

在线尝试!


3
欢迎来到PPCG!我对Java不太了解,但是您可以删除System.out.println()调用并让函数返回结果吗?
ETHproductions '17

2
@LưuVĩnhPhúc不在Java中,因为我必须编写,(a^6|b^9)==0因为没有隐式的“不同于0”比较。结果代码段的长度为27个字节。无论如何,感谢您的建议,如果我给您的提示错误,请告诉我。
Bashful Beluga

1
@Riker不,它在Java中无法正常工作。例如,代码段int a = 5; if (a) do_some_stuff(); else do_other_stuff();给出了Type mismatch: cannot convert from int to boolean编译错误。必须使用布尔值显式地创建它们。参考SOORACLE
Bashful Beluga

3
您可以使用currying来保留一个字节,并且可以摆脱分号,因为它不是lambda的一部分来保留另一个字节:a->b->a==6&b==9?42:a*b
OlivierGrégoire17年

1
请注意为什么0不为假。Java是类型安全的,因此0是整数,不是布尔值,并且不允许进行不安全的类型转换,因此您不能使用伪造的值
Martin Barker

6

Ruby,24个字节

->a,b{a==6&&b==9?42:a*b}

a^6|b^9<1可能像布尔值一样工作。很难在我的智能手机上进行测试。
Eric Duminil

1
@EricDuminil不幸的是,表达式被解析为(((a^6)|b)^9),即a.^(6).|(b).^(9),因此无法正常工作。a-6|b-9==0会起作用,但这并不短。
Ventero

@Ventero:我没想到。谢谢。a,b==6,9会很好,但是也行不通。
Eric Duminil

6

脑高射炮158个 154 148 140 138 126字节

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

在线尝试!

说明

这段代码很简单。我们复制堆栈中最上面的两个项目,从其中一个减去6,从另一个减去9。然后,我们采用not两个值中的。我们将and这些值乘以结果乘以12。将输入乘以并减去两个结果。


2
您可能想大写notand(或反折)阅读您的描述,而不是使我绊倒。
MD XF

6

Factorio,661个字节,具有9个连接的6个组合器

有一个常数组合器设置为输出A和B。更改它们以设置输入。

蓝图字符串(0.15.18):

0eNrNVm2O2jAQvcv8rEKFvSHLRuqPtrfYCkUhGWAkYkfOGDVCOUBv0bP1JLWTLQuB3U0QbfcPYvzxZt68eYr3sNxaLA0phngPlGlVQfxtDxWtVbr1a1yXCDEQYwEBqLTwUY4Z5WgmmS6WpFLWBpoASOX4HWLRBG8C+EScKr6MIJtFAKiYmLCrpw3qRNliicaleK2SAEpduata+fQObiI+zgKo/R+XIyeDWbcrA18IG71NlrhJd+RuuytPmInby1ucyq+uyFScnPHakWHrVg4VdScmnz2fPzQhjnxQlKlpS4zhk7ugLZd2BCTu0NS8IbXusMvalWgVJyuji4SUA4OYjcWmS606nm31wv8YzI+7SS66axbusHxh1zeITGaJ21C4w41XtyeHHCXH9D+o8eVUjYd3qoY47bc86rWPo158/yze2iCqPtxsmHx3r9ry3E6ylU9cTUv0aITDygwPZaaGeFMgUzbM99NBg/aMegPnV+gxRg6oLtFNZFsjfLhiJB+huZn1B87O7Crr/0Pnfz11vug5/9ePn+/E+2Hf++4beNHV8uzgRWWica6ejnDKiraM5oWXwhtC2CcVDo+FxfAWDfwc3Y9jLv4288cj5qG8IXU3Ie2zKj56xgXgZrNqOURhKGfR/GE6nzfNb7OMaxo=

输出为信号Z,并从顶部和底部决定器获取。

屏幕截图


waaa ...第一次我在ppcg xD中看到阶乘答案
V. Courtois


6

果冻8 7字节

Vf96SạP

输入是由两个整数组成的数组:第一个是右操作数,然后是左一个。

在线尝试!

这个怎么运作

Vf96SạP  Main link. Argument: [b, a]

V        Cast [b, a] to string, then eval the resulting string.
         For [b, a] = [9, 6], this yields 96.
 f96     Filter with 96, yielding [96] if V returned 96, [] otherwise.
    S    Take the sum, yielding either 96 or 0.
      P  Compute the product of [b, a], yielding ba = ab.
     ạ   Compute the absolute difference of the results to both sides.
         When the sum is 0, this simply yields the product.
         However, when [b, a] = [9, 6], this yields 96 - 54 = 42.

这具有-1自由度。这些巧合如何发生在您身上?
lirtosiast

5

Factorio,581字节,具有4个连接的3个组合器

蓝图字符串(0.16.36):

0eNqllNtu4jAQht9lLldmldNCFWkvto/RCkUhGWAkYkfOGDVCefeOnV1Km7ACemPJ9vibf04+webgsLWkGfITUGV0B/nrCTra6fLgz7hvEXIgxgYU6LLxO2/HpeZFZZoN6ZKNhUEB6RrfII+HtQLUTEw44sKmL7RrNmjF4AyqsaIa7SVHQWs6eWq0dy+46OcvBT3ki1hc1GSxGi8T5XWwNYdig/vySPJYXvxFFnJXB0znT7dkOy4mYR3JspOTs6DRYoFHtD3vSe98XP/CFZ9xtsqe0mW29KdNW9qgOYffgjCOW3eHk+eR3fai1WkuttY0BWlhQM7W4TC61mPAIYzYLxbry6yS7FKxJFs54rANFdhZRP3VMBnWQk08ZvZ+ChpExqSCyX9bYVLCRfxRwbmabenAaK+03rX0/RnT5z7VJbroQnUH7HkGlq7OsDFtc8WYzWJ8WxbTs4rSEu8bZKpuGoXopkn4gH5vGEKiO/SMO5vbtCgDEjTCjwcm5AWGO4ZgknX16Tq7OhRfHiZXypU91PTRd6ZYdIjo8PnmF3+1AvmfuuBq+bRKYmnWKM2G4R1hAPnz

左下常数组合器应设置为输出A和B作为输入。输出是来自右下角算术组合器的信号Z。

在此处输入图片说明

Top left: 2147483640 A, 2147483637 B
Top right: If everything = 2147483646 output B, input count
Bottom left: (input) A, (input) B
Bottom right: A * B -> Z

5

MATL,11个字节

[BE]=?42}Gp

输入是具有两个数字的数组。

在线尝试!

说明

[BE]    % Push array [6, 9]
=       % Implicit input: array of two numbers. Compare with [6, 9] element-wise
?       % If the two entries are true
  42    %   Push 42
}       % Else
  G     %   Push input
  p     %   Product of array
        % Implicit end. Implicit display

4

GW-BASIC,55字节

1INPUT A:INPUT B
2IF A=6THEN IF B=9THEN ?"42":END
3?A*B

输出:

输出

pcjs上的第一台机器具有IBM BASIC,实际上是同一件事。要对此进行测试,请转至那里,敲击Run计算机,按Enter- Enter并输入BASICA以进入BASIC模式。然后输入源代码(它将自动为您打印漂亮内容),键入RUN,输入两个整数,然后完成!


3
您确定字节数正确吗?GW-BASIC使用一种编码,其中某些单词(如INPUT)的编码字节数少于组成它们的字符所建议的字节数。因此,对我来说,这个数字似乎很高。

@ ais523好吧,我运行了它wc,然后得到55 ...复制粘贴到我的模拟器中,它具有预期的行为。
MD XF

3
是的,我的意思是,您对提交的评分可能高于实际需要。获取GW-BASIC以保存文件,然后查看生成的文件在磁盘上的大小;它应该更小。

@ ais523另存为OUT.BASi.stack.imgur.com/32eH1.png字节数是中间值。
MD XF

好的,我没想到这一点,但是我想在这种情况下这是洗头。(或者也许有不止一种保存格式?)


4

检查34 33字节

.:+&>#v
#>42#v#9-!\>6-!*?
 d* ##p

支票是我的新esolang。它结合了2D和1D语义。

输入是通过命令行参数传递的两个数字。

说明

堆栈以其上的命令行参数开头。我们将参数称为ab

第一部分.:+&本质上是复制堆栈,而将其保留为a, b, a, b>将0压入堆栈(它是由组成的数字文字的一部分9)。

#切换到2D语义,并将vIP向下重定向。IP立即进入#,再次切换回1D语义。

9-!检查是否b等于9(通过减去9并采用逻辑非)。\>6-!然后检查是否a等于6。现在,堆栈包含a, b, 1, 1且仅当b==9和时a==6。与乘以*这两个值的逻辑与,给出a, b, 1输入是否为6and 9a, b, 0否则为。

此后,该IP会遇到?。如果顶部堆栈的值不为零,它将切换到2D模式,否则将以1D模式继续。

如果顶部堆栈值为1,则表示其他堆栈值为69,因此我们将42推入到堆栈,>42然后向下移动到#最后一行的第二个。

如果最高堆栈值为0,则执行将移至下一行。d删除0(因为?不这样做),然后将两个输入与相乘*。该##开关进出2D模式,无所事事。

分支机构现在又加入了。堆栈包含6, 9, 1, 42a*bp打印顶部堆栈值,然后程序结束,丢弃其余堆栈。


这看起来像是一种漂亮的语言!
不是一棵树


3

Python 3中36个 33字节

lambda x,y:42if x==6==y-3else x*y

在线尝试!


1
替代版本,相同大小:lambda x:x[0]*x[1]if x!=(6,9)else 42。唯一的区别是输入类型。
musicman523

没关系-您编辑的版本较短:)
musicman523

您发布的代码实际上不起作用,因此我将其切换为您链接到的TIO上的工作版本。
ETHproductions '17

它对我有用:在[1]中:f = lambda x,y:42if 6 == x == y-3else x * y在[2]中:f(6,9)Out [2]:42在[3 ]:f(9,6)Out [3]:54 @ETHproductions
Martmists

@Martmists您当时错过了一个空格,因为您的代码是f=lambda x,y:42if6==x==y-3else x*y
ETHproductions

3

APL(Dyalog),10字节

×-12×6 9≡,

在线尝试!

× (自变量的)乘积

- 减去

12× 十二次

6 9≡ (6,9)是否等于

, (参数的)串联


哦,我刚刚看到了,我的J答案与此完全一样://除了一个字节长
Conor O'Brien

@ ConorO'Brien很有道理。J和默认APL几乎是等效的,除了J的多字符原语(并且需要Cap作为最后的顶部)。
亚当

3

R,41我想我不知道如何计算字节数我是新手:D

function(a,b){

if(a==6&b==9){42} else {a*b}

}

我定义一个函数,该函数的参数依次为a和b 。如果a等于6,b等于9,则返回42,否则,乘以b


欢迎光临本站!:)
DJMcMayhem

欢迎。考虑到换行和空格也很重要。就您而言,如果您删除了换行符和空格(可以),则只有41个
。– Masclins

1
您可以使用ifelse(a==6&b==9,42,a*b)
Masclins

您可以将整个内容缩减为33个字节function(a,b)`if`(a-6|b-9,a*b,42)
rturnbull17年

删除了不需要的空格后,这只有41个字节,直到47个字节。
Pavel

3

SPL,356字节

a.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]Ajax:Listen to your heart!Puck:Listen to your heart!Are you as big as the sum of a big big big cat and a cat?If so, am I as big as the sum of a big big cat and a big cat?If so, you are as big as the product of I and the sum of I and a cat.If not, you are as big as the product of you and I.Open your heart

使用换行符和空格:

a.                       *Title*
Ajax,.                   *Declare variable Ajax*
Puck,.                   *Declare variable Puck*
Act I:.
Scene I:.
[Enter Ajax and Puck]
Ajax: Listen to your heart!                  *Set Puck's value to user input*
Puck: Listen to your heart!                  *Set Ajax's value to user input*
      Are you as big as the sum of a big 
       big big cat and a cat?                *Is Ajax=9?* 
      If so, am I as big as the sum of a 
       big big cat and a big cat?            *Is Puck=6?* 
      If so, you are as big as the product 
       of I and the sum of I and a cat.      *If so, set Ajax=42* 
      If not, you are as big as the product 
       of you and I.                         *If not set Ajax=(Ajax)(Puck)*
      Open your heart                        *Print Ajax's value*


3

标准ML(MLton)22 20字节

感谢@Laikoni,节省了2个字节!

fun$6 $9=42| $x y=x*y

在线尝试!

这就是SML的目的,这就是为什么它击败shortC和Python。

旧版本看起来更好。:P


20个字节:在线尝试!
Laikoni

@Laikoni Wow,我不知道您可以$用作标识符!为什么此编译如果删除之间的空间|$
musicman523

SML区分字母数字符号标识符,这对于打高尔夫球非常方便。|$被解析为单个符号标识符,因此一切都中断了。我计划很快为SML编写提示问题,并添加关于这两种标识符的答案。
Laikoni

2

Pyth,12个字节

-*FQ*12q(6 9

在线尝试

说明

 -*FQ*12q(6 9
  *FQ             Take the product
        q(6 9)Q   Check if the (implicit) input is (6, 9)
 -   *12          If so, subtract 12

聪明的解决方案。我在15中用三元语句尝试过:AQ?&q6Gq9G42*GH
Tornado547


2

果冻,10 字节

⁼6,9ȧ42ȯ⁸P

单子链接,列出两个数字。

在线尝试!

怎么样?

⁼6,9ȧ42ȯ⁸P - Link: list of numbers [a,b]
 6,9       - 6 paired with 9, [6,9]
⁼          - equals? (non-vectorising) (1 or 0)
     42    - literal answer, 42
    ȧ      - logical and               (42 or 0)
        ⁸  - link's left argument, [a,b]
       ȯ   - logical or                (42 or [a,b])
         P - product                   (42 or a*b)

您可以?像我一样使用。;)
Erik the Outgolfer

啊,因为,它是文字正则表达式模式的一部分,所以很特别,因此6,9被解析为单个标记,而快速对象$可以将其与结合。您是这样做的原因,还是只是尝试一下并注意到它有效?
乔纳森·艾伦,

1
我有这个理由。
暴民埃里克(Erik the Outgolfer)


2

SILOS81 67字节

readIO
J=i
readIO
a=(J-6)^2+(i-9)^2
a/a
a-1
a*12
x=J*i+a
printInt x

在线尝试!

从某种意义上说,附加功能在SILOS中充当了有趣的“与非”门。

-14字节感谢@Leaky Nun

本质上,我们创建一个数字“ a”,当j等于6且i = 9时,它是0(虚假),然后我们将其除以1,再乘以12,以添加到我们的乘积中。

如果将“ a”减去1并相乘后为1,则它变为无操作,但是在a为0的情况下,0/0会默默地抛出一个错误(被自动魔术捕获),a变为0,然后变为-1,我们最终将乘积减去12。




@LeakyNun哦,这很聪明。
Rohan Jhunjhunwala

实际上,0/0变为0
Leaky Nun

我要说的@LeakyNun变为0,然后递减。定影。
Rohan Jhunjhunwala


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.