Answers:
假设输入字符串在variable中b
。
b='0'
这并没有大多数语言所能做的...
歼比较操作仅仅是
=
(=:
和=.
是全局和局部的分配,分别)。但是,=
它不能像普通==
运算符一样工作:它逐项进行比较。请记住,数组是这样形成的:0 2 3 2 3 1 2 3 4
。2 = 0 2 3 2 3 1 2 3 4
给出0 1 0 1 0 0 1 0 0
的例子。这是一个字符串类似:'a'='abcadcadda'
不只是返回0
,返回1 0 0 1 0 0 1 0 0 1
(这可以推断是指0
用*/
,这基本上意味着all
)。在这种情况下,但是,这种行为是外观极好,因为我们要一和零的字符串,或对与错。由于J的布尔变量是1
和0
,这导致阵列1
的和0
的(它们不是字符串,除此以外的所有其他字符1
也都将导致0
此数组。)这不需要打印:J自动打印表达式的结果。我希望这是足够的解释,否则请提出一些尚不清楚的意见。这个答案也可以是'0'&=
(或=&'0'
),但是我觉得这b='0'
很清楚。
=&'0'
适用于相同数量的字节。
{1^}%
GolfScript从STDIN读取整个输入,并将其作为字符串放在堆栈中。
{}%
遍历字符串中的所有字符,并对所有字符执行代码块。
1^
计算字符ASCII码与1的异或。“ 0”对应于ASCII码48,“ 1”对应于ASCII码49。
由于48 ^ 1 = 49
和49 ^ 1 = 48
,这将0变成1,将1变成0。
完成后,GolfScript将打印修改后的字符串。
好吧,它确实又变短了!在写完一个无关紧要的挑战的解决方案之后,我注意到即使在这里也可以应用相同的技巧。所以我们开始:
00000000 b4 08 cd 21 35 01 0a 86 c2 eb f7 |...!5......|
0000000b
评论程序集:
org 100h
section .text
start:
mov ah,8 ; start with "read character with no echo"
lop:
; this loop runs twice per character read; first with ah=8,
; so "read character with no echo", then with ah=2, so
; "write character"; the switch is performed by the xor below
int 21h ; perform syscall
; ah is the syscall number; xor with 0x0a changes 8 to 2 and
; viceversa (so, switch read <=> write)
; al is the read character (when we did read); xor the low
; bit to change 0 to 1 and reverse
xor ax,0x0a01
mov dl,al ; put the read (and inverted character) in dl,
; where syscall 2 looks for the character to print
jmp lop ; loop
我认为它不会比这短得多。实际上,确实如此!感谢@ninjalj削减了一个字节。
00000000 b4 08 cd 21 34 01 92 b4 02 cd 21 eb f3 |...!4.....!..|
0000000d
该版本具有高级交互性™ -从命令行运行后,只要您输入输入数字(不回显),它就会吐出“反转”字符。要退出,只需执行Ctrl-C。
与以前的解决方案不同,在DosBox中运行会遇到一些麻烦-由于DosBox 不正确地支持Ctrl-C,如果要退出,将被迫关闭DosBox窗口。相反,在具有DOS 6.0的VM中,它将按预期运行。
NASM来源:
org 100h
section .text
start:
mov ah,8
int 21h
xor al,1
xchg dx,ax
mov ah,2
int 21h
jmp start
这从命令行接受了它的输入。作为DosBox中的.COM文件平稳运行。
00000000 bb 01 00 b4 02 8a 97 81 00 80 f2 01 cd 21 43 3a |.............!C:|
00000010 1e 80 00 7c f0 c3 |...|..|
NASM输入:
org 100h
section .text
start:
mov bx, 1
mov ah, 2
loop:
mov dl, byte[bx+81h]
xor dl, 1
int 21h
inc bx
cmp bl, byte[80h]
jl loop
exit:
ret
xchg dx,ax
比mov dl,al
tr 01 10
接受来自STDIN的输入。
要么
y/01/10/
y 01 10
tr
...
>,[>,]<[<]>[<+++++++[>-------<-]<+>>[++<]<[>]++++++++[>++++++<-]>.[-]>]
说明:
>,[>,] Read characters until there are none left.
<[<] Return to start
>[< Loop as long as there are characters to invert
+++++++[>-------<-] Subtract 49 (ASCII value of 1)
>[++<] If not 0, add 2
+++[<++++>-]<[>>++++<<-]>> Add 48
. Print
[-] Set current cell to 0
>] Loop
a
的11
。
Put this tasty pancake on top!
[]
Put this delicious pancake on top!
[#]
Put this pancake on top!
How about a hotcake?
If the pancake is tasty, go over to "#".
Eat all of the pancakes!
Put this supercalifragilisticexpialidociouseventhoughtheso pancake on top!
Flip the pancakes on top!
Take from the top pancakes!
Flip the pancakes on top!
Take from the top pancakes!
Put this supercalifragilisticexpialidociouseventhoughthes pancake on top!
Put the top pancakes together!
Show me a pancake!
If the pancake is tasty, go over to "".
假定输入以空字符终止。该策略如下:
1
从中减去其ascii值。0
(1
如果有0
,0
则为a,如果有,则为1
)0
为其添加ascii值i(char*s){while(*s)*s++^=1;}
while
的for
静态结果替换了您。
哦,这第一个吸了多少钱。非常难看,这是。63个字符。
print''.join([bin(~0)[3:] if x == '0' else bin(~1)[4:] for x in ''])
这个比较好一点,但仍然不那么花哨。44个字符。
print''.join([str(int(not(int(x)))) for x in ''])
由于int(x) and 1
回报率int(x)
,如果它不是0,否则返回False。解决方案可以进一步减少到36个字符。
print''.join([str(1-int(x)) for x in ''])
由于join()
带有发电机,因此可以卸下支架。32个字符。
print''.join(str(1-int(x))for x in'')
反引号可以代替 str()
print''.join(`1-int(x)`for x in'')
@@ Rare的指针使指针从34减少到44
在python中很难找到一个补码,因为bin(-int)
返回-0bxxx就是这样。
(int(x) and 1) == int(x)
'' == False
以及'hi' == True
''.join(`1-int(x)`for x in'')
repr(x)
因为x <maxint等于str(x)
'y/10/01/'
第9个字符是'p'标志
用法:
$ echo '10101001' | perl -pe 'y/10/01/'
alert(prompt().replace(/./g,x=>x^1))
s
,s.replace(/./g,x=>x^1)
22个字符。
p=prompt(p().replace(/./g,x=>x^1))
(p=prompt)(p().replace(/./g,x=>x^1))
并且长度是一样的。
(迷宫比这个挑战要新,所以这个答案没有竞争-并不是说它一直在赢...)
1,
.$@
该代码假定STDIN 仅包含数字(特别是没有尾随换行符)。
指令指针(IP)从右上角的左上角开始。虽然有要读取的数字,但它会在左侧的2x2块中紧密循环:1
按1,,
读取数字,将$
其与1进行XOR运算以切换最后一位,然后.
打印结果。IP进行此循环是因为堆栈的顶部在XOR之后为正,因此需要右转。当我们命中EOF时,,
返回-1
。然后,XOR将产生,-2
并且在此负值的情况下,IP向左转弯@
,程序结束。
这个解决方案应该迷宫是最理想的:你需要,
和.
一个I / O环和@
终止程序。您至少需要两个字符(此处1
和$
)来切换最后一位。并且您至少需要一个换行符来终止循环。
除非...如果我们忽略STDERR,即允许以错误终止,则可以保存,@
并且我们也不需要任何方法在两条路径之间进行切换。我们一直保持阅读和打印,直到我们不小心尝试打印负值(-2
)。这允许至少两个5字节解决方案:
1,
.$
,_1$.
print''.join(`1-int(x)`for x in raw_input())
为什么要使其复杂或使用一些欺骗性变量?
print''.join('1-int(x)'for x in'input()')
。我无法在注释代码中找到反引号,因此将其替换为'。
`a\`b`
-> a`b
。
<kbd>
标签。
此函数将二进制字符串(通过Ans
)作为输入,并按指定的反向(非反向)字符串返回输出。要获得更多帮助,您可以not(
在TI-BASIC Wiki上通读列表应用程序。我使用的是编译版本,因为它较小:
»*r>Õ¸r
十六进制:
BB 2A 72 3E D5 B8 72
说明
»*r
-将函数输入作为字符串并转换为列表
>
-将给定列表传递给下一个运算符
Õ¸r
-返回列表的倒数
»*r>Õ¸r
什么?
expr(Ans:Returnnot(Ans
;2.因为该字符串没有用逗号分隔,并且它不是以a开头{
,所以它将评估为整数,例如1000010011,而不是列表;3. Return
不符合您的编写方式;4.这将输出作为列表而不是字符串。
Methinks Python并不是最好的语言。:)
for i in input():print(1-int(i),end='')
如果您想在输出之后添加换行符,请使用以下43个字符的替代方法:
print(''.join("01"[i<"1"]for i in input()))
end=''
只是,
会做:) -除非你在乎那里是没有空间
print
功能需要调整end
参数以在每次打印结束时禁止换行。另外,根据OP的规范,我认为我确实关心没有空格。:)不过,谢谢你的评论!
J中的布尔值表示为整数0
和1
,它们当然也是数组的有效索引(在这种情况下,为2个字符的数组'01'
)
'01'{~'0'&=