计算平方和平方根!


48

您必须制作一个一种输出输入的平方并用另一种语言输出输入的平方根的多色图。以字节为单位的最短答案为胜!

您必须具有至少3个小数位的精度,并且输入将始终为正浮点数。

Answers:



90

C和C ++,68 65字节

#include<math.h>
float f(float n){auto p=.5;return pow(n,2-p*3);}

原始答案:

#include<math.h>
float f(float n){return pow(n,sizeof('-')-1?2:.5);}

对于这两个版本,C生产n^2和C ++生产sqrt(n)


23
+1为“哈!” 对于所有将C和C ++视为同一事物的人。
DocMax'4

20
@ CAD97:在C中,auto表示“在堆栈上分配”。关键字是相当无用的,因为无论如何这是默认值,因此C ++将其改写为其他含义。但是,在C语言中,它对类型p(它是存储类,而不是类型)没有表达任何意见,因此int默认情况下它被视为“ 默认”(int如今不鼓励使用默认行为,并且可能仅因为C的某些前辈根本没有数据类型,但编译器仍然了解它)。当然(int)0.5

2
太好了
昆汀

1
找到了关于它的堆栈溢出问题
YSC

9
我认为可以通过编辑@ ais523解释C产生原因的注释来改善对此答案的解释n^2
布赖恩J

50

蟒2&Python 3中,23 21个字节

lambda n:n**(1/2or 2)

Python 2.x产生n^2,Python 3.x产生sqrt(n)

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


这太酷了!
njzk2

为什么?之前是否缺少空间or
chx

@chx在Py2中,/执行整数除法(1/2==0)。在PY3,它浮点除法(1/2==0.5)0是falsey。
尼克哈特利

那为什么不删除空格呢?
chx

@chx自己尝试。如果这样做,它将引发语法错误。
numbermaniac

32

2 / 果冻,2个字节

*.

2sable计算平方。在线尝试!

果冻计算平方根。在线尝试!

这个怎么运作

2貂皮

*   Read the input twice and compute the product of both copies.
    This pushes the square of the input.
 .  Unrecognized token (ignored).

果冻

 .  Numeric literal; yield 0.5.
*   Raise the input to the power 0.5.
    This yields the square root.

7
这就像创建这些语言只是这种挑战
FloatingRock

20

C(clang)Python109 107 69 53字节

#/*
lambda n:n**.5;'''*/
float a(i){return i*i;}//'''

C:在线尝试!

Python:在线尝试!

通过使用注释来通俗易懂。其余的都可以解释。

第一次使用C!

  • 感谢@Riker,节省了很多字节。
  • 通过删除不必要的空格节省了2个字节。
  • 通过使用C函数而不是STDIN / OUT保存了很多字节。
  • @Delioth通过删除顶部的import语句节省了16个字节。

@Riker会的,谢谢。
“ SparklePony同志” 17年

我相信您可以在C注释后删除一个换行符(第2行,最后一个字符),因为C不需要空格,并且它已经是python的文字字符串。由于您没有返回任何特殊代码,因此可以return 0;从末尾省略-C99 main()专门将隐式返回0 。来源
Delioth '17

@Delioth实际上,仅使用该功能并清除io更有意义。
“ SparklePony同志” 17年

哦,是的-更好。stdio.h在这种情况下,您甚至需要包括吗?
Delioth '17

@Delioth我不知道。哎呀!
“ SparklePony同志” 17年

16

欧姆果冻,3个字节

输出以欧姆为单位的平方,以果冻为单位输出平方根。

欧姆和果冻使用不同的单字节代码页,因此该程序在每种编码中的显示方式将有所不同。

程序的xxd hexdump:

00000000: fd7f 0a                                  ...

果冻

使用Jelly的代码页,它看起来像这样:

’
½

果冻将最底端的一行作为其主要链接,除非特别调用,否则忽略其他链接。因此,这里只做平方根(½)并隐式输出。

欧姆

使用欧姆的代码页(CP437),看起来像这样:

²⌂◙

²是平方函数,并且都未定义,所以程序只是正方形的隐式读取输入并隐式输出它。


真好!字节数很好。
程序员

由于这个原因,我也将答案编辑为5个字节,这很不错。
魔术章鱼缸

哇,不是我写的第一个Ohm答案!做得好!
尼克·克利福德

如果您使用Jelly代码页获取½字节,则²映射到什么?只是垃圾仍然被忽略吗?反之亦然?那么它似乎是2个字节。
AdmBorkBork'4

1
我将组成一个示例,因为我不想打扰查找实际的代码点。假设²Ohm中的代码点5。Jelly中的代码点5是%且不执行任何操作,因此第一行是什么都没有关系。假设½Jelly中的值为27,而Ohm中的代码点27为J且不执行任何操作,因此第二行是什么都无关紧要。因此,如果文件为,则为00000101<newline>000110113个字节。我猜唯一的问题是换行符是否在代码页中的其他位置。
AdmBorkBork'4

15

C89和C99,47 + 3 = 50字节

float f(float n){return n//*
/sqrt(n)//*/1*n
;}

需要-lm标志(+3)

C89生产n^2,C99生产sqrt(n)。要在C89中进行测试,请在线尝试!


使C89进行sqrt版本处理应该花费更少的代码,但是它坚持sqrt使用ints 隐式声明函数,因此这是我能做到的最好的方法。


13

八度/ MATLAB,31 29字节

 @(x)x^(2-3*any(version>60)/2)

这将在Octave中输出平方,并在MATLAB中输出平方根。

说明:

当然,语法在MATLAB和Octave中是相同的(至少对于这小段代码而言)。

这将创建一个匿名函数:

@(x)                                 % Take x as input
    x^(                     )        % Raise x to the power of ...   
               version                 % Returns the version number
                                       % 4.2.0 in Octave, 
                                       % '9.2.0.538062 (R2017a)' in MATLAB
               version>60              % 'R' is larger than 60. All others are smaller
         3*any(version>60)/2           % Checks if there is an 'R' and multiplies it by 1.5 if it is.
       2-3*any(version>60)           % 2-1.5*(is there an 'R')

12

Basic / Delphi-6个字符

sqr(x)

在Basic中取平方根,在Delphi中取平方。

您可以使用调试器检查表达式,从而满足任何输出要求!


2
这本身就可以接受输入吗?
Rɪᴋᴇʀ

不,但是其他一些提交也没有,包括C / C ++。

虽然仍然无效,但它不会改变任何内容。我也会尝试评论这些。
Rɪᴋᴇʀ

1
您可以链接任何其他链接吗?我找不到。C / C ++是一个函数,不接受输入,而是一个参数。
Rɪᴋᴇʀ

3
是的,那是x什么?您不能假定它已保存为一个值。但是您实际上可以删除(x),并将其标记为返回函数。
Rɪᴋᴇʀ

11

05AB1E / 火球,3个字节

以下字节组成程序:

FD B9 74

05AB1E计算平方根,火球平方。

说明(05AB1E- ý¹t):

ý       Pushes an empty string to the stack (not entirely sure why)
 ¹      Push first input
  t     Square root

说明(火球- ²╣t):

²       Square input
 ╣      Unassigned
  t     Unassigned

有时,使用不完整的语言会有所帮助;)


1
05AB1E和Fireball使用不同的编码。这会影响程序吗?
丹尼斯,

@丹尼斯,我没想到。因此,以不同的编码保存相同的程序不计入polygots吗?
Okx

5
Afaik,默认值是字节流必须匹配。
丹尼斯,

10

PHP7 + JavaScript,62 61 58字节

这实际上比我预期的更具挑战性!我对自己的代码多久感到惊讶。

eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);


它是如何工作的?

这是通过从数组中选择要运行的代码来实现的。
PHP和JavaScript检测是通过进行的+![]

在PHP中,[](空数组)是虚假值,而在JavaScript中,它是真实值(对象(除外null)始终是真实的,甚至new Boolean(false)是真实的!)。
但是,我需要将其转换为数值,因此,我仅使用not!)并将其转换为整数(使用+)。
现在,PHP产生值1,而JavaScript产生0
将代码放在这些索引处的数组内将使我们能够为所需的语言选择正确的代码。
可以用作[JS,PHP][+![]],以获取正确语言的代码。

在以前的polyglots上,我使用'\0'=="\0",它true在JavaScript(因为\0被解析为NULL字节)和falsePHP('\0'不会将其解析为NULL字节,将文字字符串\0和NULL字节进行比较)中使用。
很高兴能够将这张支票减少到+!'0'
我对@rckd感到更加满意,将其简化为当前版本!

从那里开始,它只是eval所需的代码。

的PHP

PHP将执行echo$argv[1]**.5(相当于echo sqrt($argv[1]);数字的平方根),从第二个参数接收值并将其显示在标准输出中。

的JavaScript

JavaScript执行alert((_=prompt())*_),并在中显示平方数alert



感谢@rckd保存1个字节,@ user59178保存3个字节!


1
![]将为您节省1个字节:-)
rckd

1
@rckd圣牛!完全忘记了空数组。谢谢!我已经对问题进行了编辑,并解释了其工作原理。
Ismael Miguel

1
您可以使用echo$argv[1]**.5而不是echo sqrt($argv[1])
user59178 '17

哇,真是太好了!谢谢!我已将其添加到答案中。
Ismael Miguel's

8

05AB1EJelly,4个字节

nqƓ½

(05AB1E) - (果冻)

nq   # Ignored by Jelly, push n**2 in 05AB1E then quit.
  Ɠ½ # Ignored by 05AB1E due to quit, push sqroot of input in Jelly.

我想其他人提出了一个很好的观点,因为UTF-8字符在代码页之间没有共享相同的操作,因此每个字符在技术上都是2字节编码。但是,从十六进制转储来看时:

6e 71 93 0a

在05AB1E的CP1252编码中,这导致:

nq“\n

意味着它将仍然输出平方并退出,而忽略其余部分。当使用Jelly的代码页对这些字节进行编码时:

nqƓ½

当执行时,原始的预期代码将导致获得输入和获得sqrt的预期结果。


2
这实际上是在UTF-8的6个字节,因为这两个Ɠ½需要两个字节来编码。但是,字节序列6e 71 93 0anqƓ½对于Jelly,nq“\n对于CP-1252)适用于两种语言。
丹尼斯,

½两个代码页上的@Dennis 不允许将其视为一个,因为它们是我假设的不同操作?我仍然对整个代码页一无所知。
魔术章鱼缸

1
以字节计分意味着计数字节流。除非解释器实际上支持在一个代码页中编码某些字符而在另一代码页中编码其他字符,否则我们出于评分目的不能这样做。
丹尼斯,

4
@carusocomputing您提交的内容是4个字节,6e 71 93 0a因此没有“理论上”关于声明4个字节的信息。只需声明4个字节即可。碰巧的是,在05AB1E的标准编码中,它读取执行所需内容的一件事,而在Jelly的标准编码中,它读取所需的内容。顺便说一句,仅仅因为两种编码可以编码相同的字符,并不意味着两个字符都相同。只需将编码想像成具有已共享的查找表的数字密码,并希望它将为您提供一个良好的入门心理模型。
戴夫

@戴夫,我一定是误解了丹尼斯。
魔术八达通Ur

6

CJam / MATL,8字节

ld_*GX^!

计算CJam中的平方(在线尝试!)和MATL中的平方根(在线尝试!)。

CJam中正方形的解释

ld    e# Read input line and interpret as a double
_     e# Duplicate
*     e# Multiply. Pops the input number twice, pushes its square
G     e# Push 16
X     e# Push 1
^     e# Bitwise XOR. Pops 16 and 1, and pushes 17
!     e# Negate. Pops 17, pushes 0
      e# Implicitly display. This prints the squared input with decimals,
      e# immediately followed by the 0 coming from the negate operation
      e# Even if the square of the input number is an integer, say 5,
      e# it is displayed as 5.0, so including an extra 0 always gives a
      e# correct result

MATL中平方根的说明

l      % Push 1. This is a number or equivalently a 1×1 array
d      % Consecutive differences. Pops 1, pushes [] (empty array)
_      % Negate (element-wise). This leaves [] as is
*      % Implicitly input a number and push it. Multiply (element-wise): 
       % pops [] and the input number, pushes []
G      % Push input number again
X^     % Square root. Pops number, pushes its square root
!      % Transpose. For a number (1×1 array) this does nothing
       % Implicitly display. The stack contains [] and the result; but 
       % [] is not displayed at all

嘿! 不错的提交!想要像其他答案一样添加解释吗?
programmer5000

@ programmer5000我更正了一个错误并添加了解释
Luis Mendo

5

Python 2和Forth,43 33字节

( """ )
fsqrt
\ """);lambda n:n*n

在线尝试:Python 2(正方形)| 第四(sqrt)

这在Python中评估为匿名函数,fsqrt在Forth中评估为内置函数。f通过f=在lambda前面放置Python,可以将命名函数再增加2个字节。

Forth程序采用浮点文字,在Forth中必须以科学计数法编写。将Pi截断为小数点后3位(3.141)的方式如下:

3141e-3

5

JavaScript(ES6)/ JavaScript(ES7),52个字节

f=a=>eval(`try{eval("a**2")}catch(e){Math.sqrt(a)}`)

返回ES7中输入的平方和ES6中平方根。除非您使用支持ES6但不支持ES7的旧版浏览器,否则很难测试。

f=a=>eval(`try{eval("a**2")}catch(e){Math.sqrt(a)}`)

console.log(f(4));


聪明!做得好!
程序员

是否有理由退缩?似乎单引号可以胜任。
JLRishe

@JLRishe Nope,没有理由:)
Tom

5

PHP和CJam30 29 25字节

ECHO"$argv[1]"**2;#];rdmq

在PHP中计算平方,在CJam中计算平方根。必须-r在PHP中运行。

的PHP

将第一个命令行参数($argv[1])提升到幂2并输出。这$argv[1]实际上是把在一个字符串,它是做幂之前转换为数值的行内变量。这是因为这v不是CJam中的有效指令,并且在解析时会导致其出错,但是将其放在字符串中不会造成任何问题。

# 开始评论,因此之后的所有内容都将被忽略。

在线尝试!

贾姆

代码的第一部分,ECHO"$argv[1]"**2;#推入一堆值并执行一堆操作,所有这些操作都是完全无用的。唯一重要的是它们不会引起任何错误,因为紧随其后的是];,它将整个堆栈包装在一个数组中,然后将其丢弃。

之后,它从输入(rd)中读取一个double ,并获取其平方根(mq),并隐式输出它。

在线尝试!


5

C,操作Flashpoint脚本语言,52字节

;float f(float x){return sqrt(x);}char*
F="_this^2";

在OFP脚本中,在行的开头使用分号可以将该行作为注释,而C不在乎附加的分号。

C:

在线尝试!

OFP脚本语言:

另存为init.sqs任务文件夹中的,然后使用进行调用hint format["%1", 2 call F]

结果: 在此处输入图片说明


好的,这很酷。您如何考虑使用该书写语言?
Rɪᴋᴇʀ

@Riker Operation Flashpoint一直是我最喜欢的游戏之一;我曾经用它的脚本语言来做很多事情。
Steadybox

3

网状 / Befunge-98,15字节

2D语言!

/&:*.@
>in:o#p;

Befunge-98

/&:*.@

/          divide top two (no-op)
 &         read decimal input
  :        duplicate
   *       square
    .      output
     @     terminate

网状

/           mirror up, then right
>in:o#p;

 i          read line of input
  n         cast to number
   :o#      square root
      p     print
       ;    terminate

3

> <> / Jelly,9个字节(> <>中的'-v'标志为7个字节的代码+ 2)

伙计,我真的很喜欢Jelly链接结构。

:*n;
½

计算 > <>中 的平方和Jelly中的平方根 。


您是否也可以在果冻中不使用-v?
Rɪᴋᴇʀ

使用的-v是,在我看来,与[得票最多的答案[(行codegolf.meta.stackexchange.com/a/11431/44874的间querstion处理这种情况下)。该><>解释需要一个-v,这是为此尽可能简单的调用。
steenbergh

3

Python 3 + JavaScript,101字节

0//1or exec("function=lambda a:(lambda b:a);x=0")
y=2//2/2
f=(function(x)(x**y))//1 or(lambda x:x**y)

JS中的平方根,Python中的平方。

在Firefox上运行(已在FF 52上测试),并且需要使用(function(x) x)(42) === 42有效的语法。还需要**操作员使用ES7 。


在Firefox上进行了测试,并且可以正常工作。可以x=>x**y代替使用吗?还是Python会窒息呢?
Ismael Miguel

@IsmaelMiguel python不支持箭头功能。
Rɪᴋᴇʀ

这不适用于python。函数不是关键字。
Rɪᴋᴇʀ

确实有效。由于function不是关键字,因此是有效的标识符。因此,我刚刚为其分配了一个noop函数(在exec语句内部)。
kjaquier

3

bash和sh,48个字节

更新:我必须承认失败。Digital Trauma的bash / sh答案比这个答案要优雅得多。


bc -l<<<"sqrt($1^(($(kill -l|wc -l)*3-3)/7+1))"

bash产生n^2,sh产生sqrt(n)


bc只需要这样sqrt就可以计算出来。行为的区别在于bash和sh之间。

好的,从技术上讲,我正在使用的“ sh”仍然是bash,但是bash处于“ POSIX”模式(如果您调用/bin/sh而不是/bin/bash在使用/bin/shbash别名的系统上调用,则会发生)。如果在您的系统上是这种情况,则可以使用以下方法进行测试:

/bin/bash prog.sh 4
/bin/sh prog.sh 4

这基于此处解释的差异之一:https : //www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html


1
这是如何运作的?
布赖恩·明顿

2
@BrianMinton尝试kill -lbash和中运行(列出可能的信号;不做任何更改)sh。这是您可以在这里找到的许多差异之一:gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html
Dave

3

QBIC / QBasic,26 18字节

input a
?a^2'^.25

QBasic中,它需要一个数字,并打印该数字的平方。其余代码将被忽略,因为QBasic将其视为注释(')。

QBIC使用相同的输入语句。然后继续打印相同的平方,然后提高到四分之一的幂,有效地将其除以两次。这是因为'被视为代码文字:QBIC未解析的纯QBasic代码。


2

果冻 / 点子,6个字节

编辑:反向操作要短一个字节。

RTa
²

在线尝试果冻!

Jelly在代码底部(其“主链接”)开始执行,并查看是否需要更高的东西:它看到命令平方,并隐式地处理输入和输出。

在线尝试点子!

Pip执行第一行,对(从cmd行隐式读取)var a进行平方并隐式打印。底线被忽略。


备用6次方:PRTaVS
steenbergh

2

Wolfram语言 / PHP,25字节

在Wolfram语言中获得数字的平方并在PHP中获得平方根;

n^2
echo sqrt(_GET["n"]);

第一行是Wolfram语言。首先,您是在Wolfram Alpha中的搜索栏中更改n的人,因此代码也是输入。然后按回车键会产生答案

n^2

第二行是PHP,它获取要在地址栏中输入的n的平方根(例如ppcg.php.net?n=213,其中213是n的值)

echo sqrt($_GET["n"]);

1
欢迎来到PPCG!但是,您必须以某种方式接受输入。您不能假设数字存储在变量中。对于那个很抱歉。您可以在此处查看可接受的I / O方法列表。(对答案积极分数意味着它的允许,不准消极手段)
Rɪᴋᴇʀ

得到它了。我只编辑我的答案。:)另一件事,我只解释为什么在Wolfram中添加另一个代码作为输入不适用。
Jimwel Anobong

乐意效劳!希望您坚持使用ppcg!
Rɪᴋᴇʀ


1
Wolfram语言基于mathematica,需要以非自然的方式键入数学公式。另一件事是,答复者将其清除,其网站不是语言,但Wolfram语言是支持它的语言。Wolfrsm语言和WolframAlpha与它们各自相关,但并不相同。完全不同。
Jimwel Anobong

2

PHP 5.6和PHP 7,55字节

function f($n){list($a[],$a[])=[.5,2];echo $n**$a[0];}

PHP 5.6产生n^2,PHP 7产生sqrt(n)


2

macOS Bash和sh,24个字节

p=^4 :
bc<<<"sqrt($1)$p"

在Mac上,shbash以Posix模式运行,在这种情况下,按照https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html进行操作

内建完成后,POSIX特殊内建之前的赋值语句会保留在Shell环境中

因此,对于sh,变量p^4:运行后具有值,但是对于bash,变量p仅在:运行时具有该值,之后为空。

仍然是真正bash的秘密,一些bashisms(例如<<<herestrings)仍然适用于bash和sh案件。


Bash和Dash(和GNU utils),27

在Ubuntu 16.01上,sh是的符号链接dash,不会这样做<<< herestrings。因此,我们改为:

p=^4 :
echo "sqrt($1)$p"|bc

在线尝试


很好地使用其他模式/环境!
程序员

这比我的版本好得多!
戴夫

1

八度 / 基数,28字节

该程序在Cardinal中对输入求平方,并在Octave中求平方根

 %:=t.
disp(sqrt(input("")))

在线尝试!(八度)

在线尝试!(红衣主教)

所以%是Octave中的单行注释,因此它只获取输入并打印平方根

disp(sqrt(input("")))

为了使Cardinal程序不会遇到被0除的错误而死亡,该程序

%:=t.

已经移动了一个空格,两个程序都将其忽略

基本计划的说明:

程序从%开始,
接收输入并将值存储为有效值:
将无效值设置为等于有效值= 将有效值
乘以无效值t
最后输出有效值。


1

PHP / JavaScript,43个字节

<body onload=alert(<?=$x*$x.')>'.sqrt($x)?>

输入如下:

<?php $x = 10; ?>

Kinda不解自明,但是是否符合规则?我的第一个高尔夫球场代码:-)


1
欢迎参加编码高尔夫!输入必须是浮点数或仅是浮点数的字符串。如果我理解正确,则需要单独输入。
程序员

您确定这是作为JavaScript运行的吗?看来这两个版本都需要一个PHP处理阶段(JavaScript不知道如何处理alert(<?=$x*$x.')>'.sqrt($x)?
Dave

0

CGL(CGL高尔夫语言) / JS(ES6),13字节(非竞争)

不竞争是因为:

  1. CGL在此问题之后发布。
  2. CGL不是有效的语言由于,CGL从技术上讲是一种有效的语言。

码:

 x=>x**2
//-₂

JS:

简单:返回第一个参数平方的匿名箭头函数。未命名的语言代码已被注释掉。

CGL:

非打破空间的第一行之前的行为像一个注释。在/s为空操作。的-第二行指减少当前栈号,默认情况下为0。然后将其设置为-1,其中输入被存储。在与它的平方根,也就是现在其中输入被放置在当前堆栈替换的第一项。默认情况下,将输出当前堆栈,并输出输入的平方根。


这是13个字节。我对CGL不满意,但是我可以确定JS使用ascii / utf-8。除非具有自己的代码页,否则CGL可能还会使用UTF-8。
Rɪᴋᴇʀ

@Riker现在,它使用ascii / utf-8。谢谢。
程序员
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.