反转和反转字符串


27

反转和反转字符串

挑战

在这个挑战中。您将要编写一个程序,该程序将输出或返回输入(反向和反向)。

首先,每个字符都应转换为其字符代码。然后,应将其转换为base-2。接下来,该字符串应颠倒。之后,字符串应取反(1-> 0和0-> 1)。最后,应将其转换回以2为基数,然后再转换回一个字符。如果某个字符导致无法打印,则可以选择输出该字符,但不必将其删除。

H -> 72  -> 1001000 -> 0001001 -> 1110110 -> 118 -> v
e -> 101 -> 1100101 -> 1010011 -> 0101100 -> 44  -> ,
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4   -> (unprintable)
, -> 44  -> 101100  -> 001101  -> 110010  -> 50  -> 2
  -> 32  -> 100000  -> 000001  -> 111110  -> 62  -> >
W -> 87  -> 1010111 -> 1110101 -> 0001010 -> 10  -> (newline)
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4   -> (unprintable)
r -> 114 -> 1110010 -> 0100111 -> 1011000 -> 88  -> X
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
d -> 100 -> 1100100 -> 0010011 -> 1101100 -> 108 -> l
! -> 33  -> 100001  -> 100001  -> 011110  -> 30  -> (unprintable)

计分

以字节为单位的最短代码获胜。

-15%奖金:如果您的程序从输出中删除了不可打印的内容。此字符必须至少为 32以下的所有字符(换行符除外)(字符10)


我需要让我的Simplex解释器重新工作XDGBktnkZs
Conor O'Brien 2015年

因此,字符串中的字符不会反转,但每个字符中的位是否相反?
xnor

只需确定:对于0010000,位反转0000100还是00001?
Digital Trauma 2015年

@DigitalTrauma如果二进制代码为0010000,则应将其视为10000相反的代码00001
Downgoat 2015年

2
我们可以仅假设ASCII(作为您的示例),还是应该对我所用语言中的任何字符都起作用?(此外,如果语言使用其他字符代码,我应该使用它而不是ASCII / Unicode)?
圣保罗Ebermann

Answers:


4

CJam,14岁

q{i2bW%:!2bc}%

在线尝试

说明:

很简单:

q       read input
{…}%    convert each character
  i     convert to number
  2b    convert to base 2 (digit array)
  W%    reverse
  :!    invert each digit
  2b    convert from base 2
  c     convert to character

“可打印”版本,20-15%= 17

q{i2bW%:!2bc' ,N--}%

丹吉特,你。我正要发布CJam答案D:
anOKsquirrel

@anOKsquirrel对不起^^类似吗?
aditsu

如果我没有完成的话。
anOKsquirrel

W%如何工作?W是-1,所以……
ansquisrel 2015年

1
@anOKsquirrel请参阅此处
aditsu

9

Pyth,14个字节

smCi!M_jCd2 2z

在线尝试。

怎么运行的

 m           z  Map over the input with lambda d:
        Cd        Cast d to character.
       j  2       Convert to base 2.
      _           Reverse the resulting array.
    !M            Mapped logical NOT.
   i        2     Convert back to integer.
  C               Cast to character.
s               Concatenate the resulting characters.

2
替代解决方案(全部14个字节):smCi!MvM_.Bd2z smCi.r_.Bd`T2z smCiqR\0_.Bd2z
丹尼斯

出于兴趣/比较而删除无法打印的版本的怎么样?可能是一个单独的答案。
海德2015年

8

Perl,57个 51个字符

(50个字符的代码+ 1个字符的命令行选项。)

s/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/gee

样品运行:

bash-4.3$ perl -pe 's/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/gee' <<< 'Hello, World!'
v,dd2>
Xdl

bash-4.3$ perl -pe 's/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/gee' <<< 'Hello, World!' | od -tad1
0000000    v    ,    d    d  eot    2    >   nl  eot    X    d    l   rs   nl
         118   44  100  100    4   50   62   10    4   88  100  108   30   10
0000016

1
51个字节:-p s/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/geeunpack b8,$&比短sprintf'%b',ord$&,并且以相反的顺序解码。不幸的是,它还会产生尾随0,需要将其删除。
2015年

谢谢@primo。unpack对我来说仍然是未知的地形。
manatwork

42个字节:-p s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee。反转字符,无需音译;)
primo

7

的JavaScript(ES6 ES7),119 114 108个字节

结果比预期的更长:(

感谢@vihan节省了5个字节!感谢@ETHProductions节省了另外6个字节!

要测试:  运行以下代码段,输入类似的输入"Hello, World!",然后单击Test!

x=>String.fromCharCode(...[for(y of x)+('0b'+[...y.charCodeAt().toString(2)].reverse().map(z=>z^1).join``)])
<!--                               Try the test suite below!                              --><strong id="bytecount" style="display:inline; font-size:32px; font-family:Helvetica"></strong><strong id="bytediff" style="display:inline; margin-left:10px; font-size:32px; font-family:Helvetica; color:lightgray"></strong><br><br><pre style="margin:0">Code:</pre><textarea id="textbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><pre style="margin:0">Input:</pre><textarea id="inputbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><button id="testbtn">Test!</button><button id="resetbtn">Reset</button><br><p><strong id="origheader" style="font-family:Helvetica; display:none">Original Code Output:</strong><p><div id="origoutput" style="margin-left:15px"></div><p><strong id="newheader" style="font-family:Helvetica; display:none">New Code Output:</strong><p><div id="newoutput" style="margin-left:15px"></div><script type="text/javascript" id="golfsnippet">var bytecount=document.getElementById("bytecount");var bytediff=document.getElementById("bytediff");var textbox=document.getElementById("textbox");var inputbox=document.getElementById("inputbox");var testbtn=document.getElementById("testbtn");var resetbtn=document.getElementById("resetbtn");var origheader=document.getElementById("origheader");var newheader=document.getElementById("newheader");var origoutput=document.getElementById("origoutput");var newoutput=document.getElementById("newoutput");textbox.style.width=inputbox.style.width=window.innerWidth-50+"px";var _originalCode=null;function getOriginalCode(){if(_originalCode!=null)return _originalCode;var allScripts=document.getElementsByTagName("script");for(var i=0;i<allScripts.length;i++){var script=allScripts[i];if(script.id!="golfsnippet"){originalCode=script.textContent.trim();return originalCode}}}function getNewCode(){return textbox.value.trim()}function getInput(){try{var inputText=inputbox.value.trim();var input=eval("["+inputText+"]");return input}catch(e){return null}}function setTextbox(s){textbox.value=s;onTextboxChange()}function setOutput(output,s){output.innerHTML=s}function addOutput(output,data){output.innerHTML+='<pre style="background-color:'+(data.type=="err"?"lightcoral":"lightgray")+'">'+escape(data.content)+"</pre>"}function getByteCount(s){return(new Blob([s],{encoding:"UTF-8",type:"text/plain;charset=UTF-8"})).size}function onTextboxChange(){var newLength=getByteCount(getNewCode());var oldLength=getByteCount(getOriginalCode());bytecount.innerHTML=newLength+" bytes";var diff=newLength-oldLength;if(diff>0){bytediff.innerHTML="(+"+diff+")";bytediff.style.color="lightcoral"}else if(diff<0){bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgreen"}else{bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgray"}}function onTestBtn(evt){origheader.style.display="inline";newheader.style.display="inline";setOutput(newoutput,"");setOutput(origoutput,"");var input=getInput();if(input===null){addOutput(origoutput,{type:"err",content:"Input is malformed. Using no input."});addOutput(newoutput,{type:"err",content:"Input is malformed. Using no input."});input=[]}doInterpret(getNewCode(),input,function(data){addOutput(newoutput,data)});doInterpret(getOriginalCode(),input,function(data){addOutput(origoutput,data)});evt.stopPropagation();return false}function onResetBtn(evt){setTextbox(getOriginalCode());origheader.style.display="none";newheader.style.display="none";setOutput(origoutput,"");setOutput(newoutput,"")}function escape(s){return s.toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}window.alert=function(){};window.prompt=function(){};function doInterpret(code,input,cb){var workerCode=interpret.toString()+";function stdout(s){ self.postMessage( {'type': 'out', 'content': s} ); }"+" function stderr(s){ self.postMessage( {'type': 'err', 'content': s} ); }"+" function kill(){ self.close(); }"+" self.addEventListener('message', function(msg){ interpret(msg.data.code, msg.data.input); });";var interpreter=new Worker(URL.createObjectURL(new Blob([workerCode])));interpreter.addEventListener("message",function(msg){cb(msg.data)});interpreter.postMessage({"code":code,"input":input});setTimeout(function(){interpreter.terminate()},1E4)}setTimeout(function(){getOriginalCode();textbox.addEventListener("input",onTextboxChange);testbtn.addEventListener("click",onTestBtn);resetbtn.addEventListener("click",onResetBtn);setTextbox(getOriginalCode())},100);function interpret(code,input){window={};alert=function(s){stdout(s)};window.alert=alert;console.log=alert;prompt=function(s){if(input.length<1)stderr("not enough input");else{var nextInput=input[0];input=input.slice(1);return nextInput.toString()}};window.prompt=prompt;(function(){try{var evalResult=eval(code);if(typeof evalResult=="function"){var callResult=evalResult.apply(this,input);if(typeof callResult!="undefined")stdout(callResult)}}catch(e){stderr(e.message)}})()};</script>


我想你可以节省4个字节替换parseInt+('0b'+<code>)所描述这里通过,另一种w^1代替+!+w
Downgoat

2
我从来没有想过这是可能的,但是我只打了0.05字节x=>String.fromCharCode(...[for(y of x)if((c=+('0b'+[...y.charCodeAt().toString(2)].reverse().map(z=>z^1).join``)) >31||c==10)c])(127-15%= 107.95),但这也许是不合法的。它只能处理10 == \n,不能13 == \r。@Vɪʜᴀɴ您有何看法?
ETHproductions

1
Unexpected token '>'当我尝试运行该代码段时,我明白了。
Paul R

1
@ETHproductions:谢谢-我只有Safari和Chrome,我想它们都不符合“ ES6”。
Paul R

1
@PaulR ES6或ECMAScript 6是JavaScript的最新一组新功能之一。有关更多信息,请参见此网站。还有一个兼容性表,显示哪些浏览器(和其他程序)支持哪些功能。这个答案特别需要“箭头函数”,“扩展运算符”和ES7的“数组推导”。
ETHproductions

5

JavaScript(ES7),126字节-15%= 107.1

我在玩这个答案,看看奖金是否值得。显然是。测试套件从同一答案中被盗,但我添加了自己的想法:完全支持15%的奖励!:)

x=>String.fromCharCode(...[for(y of x)if((c=+('0b'+[...y.charCodeAt().toString(2)].reverse().map(z=>z^1).join``))>31|c==10)c])
<!--                               Try the test suite below!                              --><strong id="bytecount" style="display:inline; font-size:32px; font-family:Helvetica"></strong><strong id="bytediff" style="display:inline; margin-left:10px; font-size:32px; font-family:Helvetica; color:lightgray"></strong><br><strong id="score" style="display:inline; font-size:32px; font-family:Helvetica">Score:</strong><strong id="scorediff" style="display:inline; margin-left:10px; font-size:32px; font-family:Helvetica; color:lightgray"></strong><br><br><pre style="margin:0">Code:</pre><textarea id="textbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><pre style="margin:0">Input:</pre><textarea id="inputbox" style="margin-top:5px; margin-bottom:5px">"Hello, World!"</textarea><br><button id="testbtn">Test!</button><button id="resetbtn">Reset</button><br><p><strong id="origheader" style="font-family:Helvetica; display:none">Original Code Output:</strong><p><div id="origoutput" style="margin-left:15px"></div><p><strong id="newheader" style="font-family:Helvetica; display:none">New Code Output:</strong><p><div id="newoutput" style="margin-left:15px"></div><script type="text/javascript" id="golfsnippet">var bytecount=document.getElementById("bytecount");var bytediff=document.getElementById("bytediff");var score=document.getElementById("score");var scorediff=document.getElementById("scorediff");var textbox=document.getElementById("textbox");var inputbox=document.getElementById("inputbox");var testbtn=document.getElementById("testbtn");var resetbtn=document.getElementById("resetbtn");var origheader=document.getElementById("origheader");var newheader=document.getElementById("newheader");var origoutput=document.getElementById("origoutput");var newoutput=document.getElementById("newoutput");textbox.style.width=inputbox.style.width=window.innerWidth-50+"px";var _originalCode=null;function getOriginalCode(){if(_originalCode!=null)return _originalCode;var allScripts=document.getElementsByTagName("script");for(var i=0;i<allScripts.length;i++){var script=allScripts[i];if(script.id!="golfsnippet"){originalCode=script.textContent.trim();return originalCode}}}function getNewCode(){return textbox.value.trim()}function getInput(){try{var inputText=inputbox.value.trim();var input=eval("["+inputText+"]");return input}catch(e){return null}}function setTextbox(s){textbox.value=s;onTextboxChange()}function setOutput(output,s){output.innerHTML=s}function addOutput(output,data){output.innerHTML+='<pre style="background-color:'+(data.type=="err"?"lightcoral":"lightgray")+'">'+escape(data.content)+"</pre>"}function getByteCount(s){return(new Blob([s],{encoding:"UTF-8",type:"text/plain;charset=UTF-8"})).size}function getScore(s){var a=1;try{b=eval('('+s+')("Hello, World!")');if(b=="v,dd2>\nXdl")a=.85}catch(e){};return getByteCount(s)*a}function onTextboxChange(){var newLength=getByteCount(getNewCode());var oldLength=getByteCount(getOriginalCode());bytecount.innerHTML=newLength+" bytes";var diff=newLength-oldLength;if(diff>0){bytediff.innerHTML="(+"+diff+")";bytediff.style.color="lightcoral"}else if(diff<0){bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgreen"}else{bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgray"}newLength=getScore(getNewCode());var oldLength=getScore(getOriginalCode());score.innerHTML="Score: "+newLength;var diff=Math.round((newLength-oldLength)*100)/100;if(diff>0){scorediff.innerHTML="(+"+diff+")";scorediff.style.color="lightcoral"}else if(diff<0){scorediff.innerHTML="("+diff+")";scorediff.style.color="lightgreen"}else{scorediff.innerHTML="("+diff+")";scorediff.style.color="lightgray"}}function onTestBtn(evt){origheader.style.display="inline";newheader.style.display="inline";setOutput(newoutput,"");setOutput(origoutput,"");var input=getInput();if(input===null){addOutput(origoutput,{type:"err",content:"Input is malformed. Using no input."});addOutput(newoutput,{type:"err",content:"Input is malformed. Using no input."});input=[]}doInterpret(getNewCode(),input,function(data){addOutput(newoutput,data)});doInterpret(getOriginalCode(),input,function(data){addOutput(origoutput,data)});evt.stopPropagation();return false}function onResetBtn(evt){setTextbox(getOriginalCode());origheader.style.display="none";newheader.style.display="none";setOutput(origoutput,"");setOutput(newoutput,"")}function escape(s){return s.toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}window.alert=function(){};window.prompt=function(){};function doInterpret(code,input,cb){var workerCode=interpret.toString()+";function stdout(s){ self.postMessage( {'type': 'out', 'content': s} ); }"+" function stderr(s){ self.postMessage( {'type': 'err', 'content': s} ); }"+" function kill(){ self.close(); }"+" self.addEventListener('message', function(msg){ interpret(msg.data.code, msg.data.input); });";var interpreter=new Worker(URL.createObjectURL(new Blob([workerCode])));interpreter.addEventListener("message",function(msg){cb(msg.data)});interpreter.postMessage({"code":code,"input":input});setTimeout(function(){interpreter.terminate()},1E4)}setTimeout(function(){getOriginalCode();textbox.addEventListener("input",onTextboxChange);testbtn.addEventListener("click",onTestBtn);resetbtn.addEventListener("click",onResetBtn);setTextbox(getOriginalCode())},100);function interpret(code,input){window={};alert=function(s){stdout(s)};window.alert=alert;console.log=alert;prompt=function(s){if(input.length<1)stderr("not enough input");else{var nextInput=input[0];input=input.slice(1);return nextInput.toString()}};window.prompt=prompt;(function(){try{var evalResult=eval(code);if(typeof evalResult=="function"){var callResult=evalResult.apply(this,input);if(typeof callResult!="undefined")stdout(callResult)}}catch(e){stderr(e.message)}})()};</script>


很棒的测试片段修改!似乎该代码段现在会自动检查奖金,请问您是如何做到的?(ps,如果您想要原始的(不是一行的)资源,可以随时询问,可能更容易修改)
jrich,2015年

@UndefinedFunction哦,很抱歉没有立即回复!我添加了一个getScore()检查测试用例Hello, World!是否符合要求的函数(它方便地包含换行符和不可打印的字符),并根据结果返回分数乘以0.85或1。是的,访问未压缩的摘录将是很棒的。:)
ETHproductions 2015年

我已经在此处提供了原始代码段代码。玩得开心!
jrich

4

PHP - 187个 182 163字节

<?php $s=$_GET["s"];$m="array_map";echo join($m("chr",$m("bindec",$m(function($v){return strtr($v,[1,0]);},$m("strrev",$m("decbin",$m("ord",str_split($s))))))));?>

将值传递为GET["s"]

将回调函数(第一个参数)应用于所有元素后,array_map将返回包含第二个参数的所有元素(数组)的数组。

不知道我是否应该减15%,因为echo它不会输出无法打印的字符,但是我没有删除它们。

很高兴我完成了比赛,因为这是我参加的第一个挑战。


1
较短,如果你没有声明这些功能:$m='array_map';echo join($m("chr",$m("bindec",$m(function($v){return strtr($v,[1,0]);},$m("strrev",$m("decbin",$m("ord",str_split($s))))))));
manatwork

@manatwork完全忘记了这一点。谢谢。
2015年

您不能只是将输入放入变量中。您应该创建一个函数或从中读取输入STDIN。顺便说一句,你不需要使用引号的字符串("chr""bindec",...),因为我们不关心的警告。那应该节省您12个字节。
Blackhole,2015年

@Blackhole感谢您的信息,下次我会知道的。
2015年

您最好对此答案进行修改,否则将无效:)。这将花费你几乎没有字节,只需更换str_split($s)str_split(fgets(STDIN))的实例。
Blackhole,2015年

3

K5,28个字节

`c${b/~|{x@&|\x}@(b:8#2)\x}'

这有点不方便,因为K5的decode运算符执行固定宽度的基数转换,因此,为了符合问题陈述,我必须修剪前导零。Lambda {x@&|\x}完成此步骤。

涂抹:

  |\0 0 1 0 1 1 0 1
0 0 1 1 1 1 1 1

收集:

  &|\0 0 1 0 1 1 0 1
2 3 4 5 6 7

选择:

  {x@&|\x}0 0 1 0 1 1 0 1
1 0 1 1 0 1

整个程序正在执行:

  `c${b/~|{x@&|\x}@(b:8#2)\x}'"Hello, World"
"v,dd2>\nXdl"

我相信oK具有不可打印内容的自然行为使它有资格获得-15%的评分,给它的分数为28 * 0.85 = 23.8


+1是因为我尝试过但无法找出一种摆脱前导零的短方法!
kirbyfan64sos

一些相关的构造可以在这里找到。
JohnE

3

朱莉娅77字节-15%= 65.45

s->join(filter(isprint,[Char(parse(Int,join(1-digits(Int(c),2)),2))for c=s]))

这将创建一个未命名的函数,该函数接受一个字符串并返回一个字符串。无法打印的字符将被删除,这有资格获得奖金。

取消高尔夫:

function f(s::AbstractString)
    # digits() returns the digits in reverse order, so no explicit
    # reverse() is needed
    x = [Char(parse(Int, join(1 - digits(Int(c), 2)), 2)) for c = s]

    # Remove unprintables, join into a string
    return join(filter(isprint, x))
end

虽然它肯定有资格获得奖金,但它的成本也比奖金节省的成本高。filter(isprint,)赠金节省了16个字节,而仅节省了11.55个字节。
Glen O

而且,如果您放弃过滤步骤,则可以通过直接在字符串上使用map来避免理解和加入。s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)(用于56个字节)
Glen O

@GlenO感谢您的建议,但是这种方法会留下不可打印的十六进制代码,OP禁止这样做。filter(isprint,)两者同时使用有资格获得奖金并使其符合规则。
Alex A.

“如果一个字符导致无法打印,您可以选择输出它,但不必删除它们。”
Glen O

而如果关注的是它的另一侧(它显示为\x04等),然后print()花费七,这将带来56多达63
格伦Ø

3

PowerShell,199175(171-15%)= 145.35

param([char[]]$a)($a|%{$b=[convert]::ToString(+$_,2);$c=[convert]::ToInt32("$((-join$b[$b.Length..0])-split0-replace1,0-join1)",2);if($c-gt31-or$c-eq10){[char]$c}})-join''

使用一个不幸的金额一些.NET来电/内置插件,这显著腌的代码。

解释:

接受输入param(..)并将其转换为a,char[]以便我们可以适当地处理它。

下一位(..)-join''收集并连接我们的输出。

在这些括号内,我们$a|%{..}作为一个foreach循环进行迭代。

循环内:

  • 我们创建一个新字符串$b,它是我们输入的字母,转换为int +$_[convert] ed为底2
  • 下一位,设置 $c很棘手,所以让我们从内部开始并逐步解决问题
  • 我们反转字符串 $b(-join$b[$b.length..0])
  • 我们利用我之前的代码来反转二进制字符串然后将结果重新转换为字符串"$(..)"
  • 我们养活这个字符串变成一个不同的.NET呼叫[convert]Š ToInt32从基地2,最后将其存储在成$c
  • 如果$c大于31或等于10,我们将其强制转换为char,并将该值保留在输出管道上(这是-join''上面收集和编辑的内容),否则在此特定迭代中什么也没留下

ew

也有资格获得-15%的奖金。

PS C:\Tools\Scripts\golfing> .\reverse-and-invert-a-string.ps1 "Hello, World!"
v,dd2>
Xdl

3

C函数,63

o;f(o,char *s){for(;*s;*s=o,s++)for(o=0;*s;*s/=2)o+=o+!(*s%2);}


1

Minkolang 0.11,26个字节

od?.(d2%,$r2:d)xrI1-[2*+]O

在这里尝试。

说明

od?.            Takes input as character, halting if empty
(d2%,$r2:d)x    Converts to binary, inverting digits on the way
r               Reverses stack
I1-[2*+]        Converts to decimal
O               Outputs as character (if printable)

1

MATLAB,60个字节

@(y)[arrayfun(@(x)bin2dec([97-fliplr(dec2bin(x)) '']),y) '']

基本上每个字符依次转换为二进制字符串(无前导零)。该数组被翻转并从97('0'+'1')中减去,从而反转字符。这将转换回十进制。在处理完所有字符之后,整个数组将被转换回字符,然后返回。


1

Python 3、95 91

简单实施。

print(''.join(chr(int(''.join('10'[j>'0']for j in bin(ord(i))[:1:-1]),2))for i in input()))

取消高尔夫:

inp = input()
ints = (ord(i) for i in inp)
bins = (bin(i) for i in ints)
revs = (i[2:][::-1] for i in bins) #without leading '0b'
invs = (''.join('0' if j == '1' else '1' for j in i) for i in revs)
newInts = (int(i, 2) for i in invs)
newChars = (chr(i) for i in newInts)
newStr = ''.join(newChars)
print(newStr)

1

Ruby,62个字符

gets.bytes{|b|$><<b.to_s(2).reverse.tr("01","10").to_i(2).chr}

试运行:

bash-4.3$ ruby -e 'gets.bytes{|b|$><<b.to_s(2).reverse.tr("01","10").to_i(2).chr}' <<< 'Hello, World!'
v,dd2>
Xdl

bash-4.3$ ruby -e 'gets.bytes{|b|$><<b.to_s(2).reverse.tr("01","10").to_i(2).chr}' <<< 'Hello, World!' | od -tad1
0000000    v    ,    d    d  eot    2    >   nl  eot    X    d    l   rs   nl
         118   44  100  100    4   50   62   10    4   88  100  108   30   10
0000016

1

C#,156个字节-15%= 132.6

class P{static void Main(string[]a){try{for(int i=0,b,c;;){for(b=a[0][i++],c=0;b>0;b/=2)c=c<<1|1-b%2;if(c==10|c>31)System.Console.Write((char)c);}}catch{}}}

缩进和换行说明:

class P{
    static void Main(string[]a){
        try{
            for(int i=0,b,c;;){
                for(b=a[0][i++],c=0;b>0;b/=2)
                    c=c<<1|1-b%2;
                if(c==10|c>31)
                    System.Console.Write((char)c);
            }
        }
        catch{}
    }
}

1

Javascript 123字节

s=>[].map.call(s,s=>String.fromCharCode("0b"+s.charCodeAt().toString(2).split('').reverse().map(s=>s^1).join(''))).join('')

1

视网膜1107 629字节-15%= 534.65(非竞争)

使用在挑战日期之后添加的功能。(隐行为$*,排序)

Retina没有内置的功能可将字符转换为ASCII序数或反序...因此请注意其光泽长度。这处理可打印的ASCII,并删除不可打印的内容和换行符。字节数假定为ISO 8859-1编码。

该代码包含不可打印的字符。


¶
±
S_`
%(S`±
{2`
$`
}T01`-`_o
)Ms`.
\d+
$*
+`(1+)\1
${1}0
01
1
%O$^`.

T`01`10
1
01
+`10
011
0

m`^1{1,31}$

M%`1
m`^0¶?

126
~
125
}
124
|
123
{
122
z
121
y
120
x
119
w
118
v
117
u
116
t
115
s
114
r
113
q
112
p
111
o
110
n
109
m
108
l
107
k
106
j
105
i
104
h
103
g
102
f
101
e
100
d
99
c
98
b
97
a
96
`
95
_
94
^
93
]
92
\
91
[
90
Z
89
Y
88
X
87
W
86
V
85
U
84
T
83
S
82
R
81
Q
80
P
79
O
78
N
77
M
76
L
75
K
74
J
73
I
72
H
71
G
70
F
69
E
68
D
67
C
66
B
65
A
64
@
63
?
62
>
61
=
60
<
59
;
58
:
57
9
56
8
55
7
54
6
32

33
!
34
"
35
#
36
$
37
%
38
&
39
'
40
(
41
)
42
*
43
+
44
,
45
-
46
.
47
/
48
0
49
1
50
2
51
3
52
4
53
5
¶

在线尝试

如果您查看Retina教程中的一元算术,您将认识到我的代码中的不同部分。

感谢Martin打高尔夫球的数百个字节


1

爪哇,205-15%= 174.2

interface F{static void main(String[]a){for(int i=0,c,s;i<a[0].length();++i){c=a[0].charAt(i);s=Integer.numberOfLeadingZeros(c);c=~(Integer.reverse(c)>>s)&-1>>>s;if(c==10|c>31)System.out.print((char)c);}}}

取消高尔夫:

interface F {
    static void main(String[] a) {
        for (int i = 0, c, s; i < a[0].length(); ++i) {
            c = a[0].charAt(i);
            s = Integer.numberOfLeadingZeros(c);
            c = ~(Integer.reverse(c) >> s) & -1 >>> s;
            if (c == 10 | c > 31) System.out.print((char)c);
        }
    }
}

我认为此解决方案在使用Integer方法Integer.reverseInteger.numberOfLeadingZeros听起来像什么以及在-1 >>> s何处转移方面颇有意思s的前导零的数目,让面膜屏蔽掉高位,我们不想要的。我只是遗憾地感到后一种方法的名称太冗长,但这就是我在Java中打高尔夫球所得到的。

输出:

v,dd2>
Xdl

1

Japt,25个字节

是否想创建一个golfy JavaScript程序,但最短的方法涉及许多长函数名?这就是Japt的目的。:)

UmX=>Xc s2 w mY=>Y^1 n2 d

在线解释器中尝试一下!

怎么运行的

         // Implicit: U = first item in input
UmX=>    // for each character X in U:
Xc s2 w  //  take the char-code of X, convert to binary, and reverse
mY=>     //  for each character Y in this:
Y^1      //   take Y XOR 1 (converts 1 to 0 and 0 to 1)
n2 d     //  convert the result back to decimal, then to a character
         // Implicit: output last expression

使用当前版本的Japt(从v1.4.4开始),字节数可以减少到14:

®c ¤w m^1 n2 d

在线测试!


0

Haskell,167个字节

import Data.Char
import Numeric
r '0'='1'
r '1'='0'
s=map (chr.fst.head.(readInt 2 (`elem` "01") digitToInt).(map r).reverse.flip (showIntAtBase 2 intToDigit . ord)"")

不幸的是,Haskell在需要阅读/打印另一个基础时变得非常冗长……


0

Perl 6,66位元组

通过删除非打印控制字符来全力以赴,使我达到(83 + 1)-15%= 71.4

perl6 -ne 'print grep /<-:C+[\n]>/,.ords».base(2)».flip.map({chr :2([~] $_.comb.map(+!+*))})'

如果我删除去除控制字符的代码,则可以节省65 + 1 = 66

perl6 -ne 'print .ords».base(2)».flip.map({chr :2([~] $_.comb.map(+!+*))})'

(我用»而不是>>为了清楚)


0

果冻,6 个字节(无竞争)

OBU¬ḄỌ

在线尝试!

说明:

OBU¬ḄỌ Main link: z
O      Convert z to a list of character codes.
 B     Convert the codes to bit lists.
  U    Reverse the bits (not the lists).
   ¬   Invert the bits.
    Ḅ  Convert back to decimal.
     Ọ Convert back to string.

0

球拍250 15%奖励= 212字节

(λ(s)(list->string(map integer->char(filter(λ(x)(or(> x 31)(= x 10)))(for/list((i(string->list s)))(string->number(string-append
"#b"(list->string(map(λ(i)(if(equal? #\0 i)#\1 #\0))(reverse(string->list(number->string(char->integer i)2))))))))))))

取消高尔夫:

(define (f s)
    (list->string 
     (map 
      integer->char
      (filter
       (λ(x)(or(> x 31)(= x 10)))

       (for/list ((i (string->list s)))
         (string->number
          (string-append
           "#b"
           (list->string
            (map
             (λ(i)(if(equal? #\0 i) #\1 #\0))
             (reverse
              (string->list
               (number->string
                (char->integer i) 2)
               )))))))))))

测试:

(f "Hello, World!")

输出:

"v,dd2>\nXdl"

0

PHP,80字节

while(a&$c=$argn[$i++])echo chr(bindec(strtr(strrev(decbin(ord($c))),10,"01")));

接收来自STDIN的输入;与运行-R

奖励版本97110字节-> 93.5得分

while(a&$c=$argn[$i++])ctype_print($c=chr(bindec(strtr(strrev(decbin(ord($c))),10,"01"))))||"
"==$c?print$c:0;

打印ASCII 10和32至126(换行符和可打印的字符)


击穿,二氧化钛,如有可能,还会打高尔夫球;我现在很累。

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.