给定一个整数,请创建一个表达式,该表达式0
使用一元求反-
和按位补码~
(~n
= -n-1
)生成,并将运算符从右向左应用。
...
-3 = ~-~-~0
-2 = ~-~0
-1 = ~0
0 = 0
1 = -~0
2 = -~-~0
3 = -~-~-~0
...
您的表达式必须是尽可能地短,这意味着没有冗余部分~~
,--
,-0
,或00
。将表达式输出或打印为字符串或字符序列。
给定一个整数,请创建一个表达式,该表达式0
使用一元求反-
和按位补码~
(~n
= -n-1
)生成,并将运算符从右向左应用。
...
-3 = ~-~-~0
-2 = ~-~0
-1 = ~0
0 = 0
1 = -~0
2 = -~-~0
3 = -~-~-~0
...
您的表达式必须是尽可能地短,这意味着没有冗余部分~~
,--
,-0
,或00
。将表达式输出或打印为字符串或字符序列。
Answers:
lambda x:("-~"*abs(x))[x<0:]+"0"
匿名lambda函数。给定一个整数x,它写“-〜” abs(x)次,如果x为负,则删除第一个字符,然后在末尾加一个零。
n
在的地方x
,并'
在的地方"
:)
_<>0Q+0sm"~-
-2字节感谢@StevenH。
决定尝试Pyth,因此我翻译了python答案。任何帮助欢迎!
_<>0Q+0sm"~-
m"~- # Map "~-" onto the input (= a list of n times "~-").
s # Join the list to a string.
+0 # Add "0" in front.
<>0Q # Slice off the last char if the input is negative.
_ # Reverse the whole thing.
>0
而不是<Q0
tW>0Q_+0sm"~-
_<>0Q+0sm"~-
我希望您可以将其添加到我的解决方案中。
s/\d+/"-~"x$&.0/e;s;--;
-13感谢Dada
-p
不是-r
。您也可以摆脱那些最后的括号和分号:if$h<0
就足够了。
$h<0&&s;.;
代替来节省2个字节s/.// if $h<0
。(在代码末尾-p
添加a ;
,因此不需要末尾;
的s;.;;
。并且a if b
大致等效于b && a
,但是在这种情况下,它可以节省一个字节,因为您可以删除空格)
;
。
'0',⍨0∘>↓'-~'⍴⍨2×|
'0',⍨
字符零附加到
0∘>
负数(即1表示0以下的数字; 0表示零以上的数字)
↓
从
'-~'⍴⍨
字符串“〜-”循环调整为长度
2×
两次
|
绝对值
+
加
0∘<
积极性(即大于0的数字为1)
f n=['-'|n>0]++(tail$[1..abs n]>>"-~")++"0"
f n|n<0=tail$f(-n)|x<-[1..n]>>"-~"=x++"0"
感谢nimi 3个字节
tail
失败n=0
。您可以drop 1
改用。
f n|n<0=tail.f$abs n|x<-[1..n]>>"-~"=x++"0"
。
...|n<0=tail$f(-n)|...
。
/ä
é
D@"ña-~ñá0kgJó--
V的数字支持非常有限,实际上它没有负数的概念。这意味着为了支持负数(甚至是0),我们必须使用一些棘手的解决方法。
说明:
/ä "Move forward to the first digit
é "And enter a newline
D "Delete this number, into register '"'
@" "That number times:
ñ ñ "Repeat the following:
a " Append the string:
-~ " '-~'
á0 "Append a 0
k "Move up a line
gJ "And join these two lines together
ó-- "Remove the text '--', if it exists
A⁾-~ẋḊẋ¡N0
这是一个完整程序。在线尝试!
A⁾-~ẋḊẋ¡N0 Main link. Argument: n
A Take the absolute value of n.
⁾-~ẋ Repeat the string "-~" that many times. Result: s
¡ Conditional application:
Ḋ Dequeue; remove the first element of s...
ẋ N if s, repeated -n times, is non-empty.
0 Print the previous return value. Set the return value to 0.
(implicit) Print the final return value.
79个字节:
String s(int x){String t=x<0?"~":"";while((x<0?++x:x--)!=0)t+="-~";return t+0;}
取消高尔夫:
String s(int x) {
String t = x<0 ? "~" : "";
while((x<0 ? ++x : x--) != 0)
t += "-~";
return t+0;
}
旧版本(95字节):
String s(int x){return new String(new char[x<0?-x:x]).replace("\0","-~").substring(x<0?1:0)+0;}
用法:
class A {
public static void main(String[]a) {
System.out.println(s(-3));
System.out.println(s(-2));
System.out.println(s(-1));
System.out.println(s(0));
System.out.println(s(1));
System.out.println(s(2));
System.out.println(s(3));
}
static String s(int x){String t=x<0?"~":"";while((x<0?++x:x--)!=0)t+="-~";return t+0;}
}
输出:
~-~-~0
~-~0
~0
0
-~0
-~-~0
-~-~-~0
=REPT("-~",IF(A1>0,A1,ABS(A1)-1))&"0"
输入形式是在A1单元格中输入数字。公式可以去A1以外的任何地方。
select substring(replicate('-~',abs(x)),case when x<0then 2 else 1 end,x*x+1)+'0'from #
x*x+1
子字符串中的条件就足够了,因为x^2+1>=2*abs(x)
对于所有x
。
与通常在SQL中一样,输入存储在表中:
create table # (x int)
insert into # values (0)
insert into # values (1)
insert into # values (-1)
insert into # values (2)
insert into # values (-2)
从Emigna的答案中得到一些启发,以节省4个字节。
li_z"-~"*\0<>0
在线尝试!(作为换行分隔的测试套件。)
li e# Read input and convert to integer N.
_z e# Duplicate and get |N|.
"-~"* e# Repeat this string |N| times.
\0< e# Use the other copy of N to check if it's negative.
> e# If so, discard the first '-'.
0 e# Put a 0 at the end.
第一次参加高尔夫运动,就错过了很多东西。
`i-~<esc>:s/-\~-/\~-/dwp<left>ii<esc><left>d$@"<esc>a0`
:s/^-
的,而不是:s/-\~/\~-
和D
替代d$
<C-a>
,然后在末尾删除两个字符来解决这个问题。
0i
行不通吗?
0
将光标移动到当前行的第一个字符。您可以使用0作为V中的计数。
{substr '-~'x.abs~0,0>$_}
{
substr
# string repeat 「-~」 by the absolute value of the input
'-~' x .abs
# concatenate 0 to that
~ 0
,
# ignore the first character of the string if it is negative
0 > $_
}
@Dennis表示-2个字节(返回0而不是连接“ 0”,仅使它成为完整程序。)
0>‘
A⁾-~ẋṫÇ0
怎么样?
0>‘ - link 1 takes an argument, the input
0> - greater than 0? 1 if true 0 if false
‘ - increment
A⁾-~ẋṫÇ0 - main link takes an argument, the input
Ç - y = result of previous link as a monad
A - x = absolute value of input
⁾-~ - the string "-~"
ẋ - repeat the sting x times
ṫ - tail repeatedString[y:] (y will be 1 or 2, Jelly lists are 1-based)
0 - implicit print then return 0
:?!n0$-:0):1go-
-~
在线尝试!+3个字节的 -v
标志用于使用输入初始化堆栈。如果假设STDIN为空是可以的,那么以下内容要短一个字节:
:?!ni*:0):1go-
-~
程序会n
根据需要不断翻转输入,直到达到0,然后输出错误。
[Loop]
:?!n If n is 0, output it as a num. If this happens then the stack is now
empty, and the next subtraction fails
0$- Subtract n from 0
:0) Push (n > 0)
:1go Output the char at (n>0, 1) which is a char from the second line
- Subtract, overall updating n -> -n-(n>0)
utilizar mate.pseudo
utilizar entsal.pseudo
adquirir n
adquirir a
adquirir r
adquirir i
fijar n a llamar LeerPalabra finargs
si son iguales n y CERO
escribir {0}
salir
fin
fijar a a llamar ValorAbsoluto n finargs
fijar i a CERO
si comparar Importar.Ent.Comparar n < CERO
fijar r a {~}
sino
fijar r a {-}
fin
mientras comparar Importar.Ent.Comparar i < a
escribir r finargs
si son iguales r y {~}
fijar r a {-}
Importar.Ent.Sumar i UNO i
sino
fijar r a {~}
fin
finbucle
si son iguales r y {~}
escribir {~}
fin
escribir {0}
说明:
Read a number from STDIN;
If the number is zero (0); Then:
Writes 0 to STDOUT and exits;
End If;
If the number is less than zero (0); Then:
Set the fill character to "~";
Else:
Set the fill character to "-";
End If;
For i = 0; While i is less than abs(number); do:
Write the fill character to STDOUT;
If the fill character is "~":
Set the fill character to "-"
Increment i by one
Else:
Set the fill character to "~"
End if;
End for;
If the fill character is "~"; Then:
Write "~" to STDOUT;
End If;
Write "0" to STDOUT
adquirir e``fijar p a Escribir
)分配功能吗?
`?+#~.
. ; 6
54_"#2
@!
我真的很喜欢这一节中的控制流程。IP在代码中以数字8(或者我想实际上是∞)运行,以0
在打印相应字符时将输入缓慢减小。
代码从右上角的左上角开始。目前`
不执行任何操作。?
读取输入+
并将其添加到下面的隐式零。当然,这也不做任何事情,但是当我们再次运行此代码时,?
将推零(因为我们处于EOF),然后+
将其除掉。
接下来,#
推动堆栈深度,只是为了确保堆栈上有一个正值,以使IP向南移动,然后;
再次将其丢弃。
的"
是一个空操作,并作为代码的主分支。可以区分三种情况:
如果当前值为正,则IP向右转(向西)并完成一圈左循环:
_45.`?+
_45 Push 45.
. Print as character '-'.
` Negate the current value (thereby applying the unary minus).
?+ Does nothing.
如果当前值为负,则IP向左转(向东),并运行以下代码:
#26.~
# Push stack depth, 1.
26 Turn it into a 126.
. Print as character '~'.
~ Bitwise NOT of the current value (applying the ~).
请注意,这两个值将交替变化(因为两者都更改输入的符号),直到输入值减小为零为止。在那时候...
!
,然后向西转到@
。!
打印0
和@
终止程序。~."-~"\abs*\0<{(;}*0
输入: -5
输出: -5 = ~-~-~-~-~0
~. # Input to integer and duplicate
"-~" # We shall output a repetition of this string
\abs # Move the input onto the stack and computes abs
* # Multiply "-~" for abs(input) times
\ # Copy onto the stack the input
0< # Is it less than 0?
{(;}* # Yes: remove first '-' from the output
0 # Push 0
2 =
,而只需打印-~-~0
。
{(;}*0
代替{(;}{}if 0
。