문자열 반전 및 반전


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)


XDGBktnkZs
Conor O'Brien

따라서 문자열의 문자는 반전되지 않지만 각 문자의 비트는 반전됩니까?
xnor

0010000의 경우 비트 리버스 0000100 또는 00001입니까?
Digital Trauma

@DigitalTrauma 만약 이진 코드가 있다면, 반대로 0010000처리되어야 10000한다00001
Downgoat

2
우리는 ASCII로 (예를 들어) 가정 할 수 있습니까, 아니면 내 언어의 문자가 무엇이든 작동합니까? (언어가 다른 문자 코드를 사용하는 경우 ASCII / 유니 코드 대신 이것을 사용해야합니까?)
Paŭlo Ebermann

답변:


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입니다.
anOKsquirrel

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
Dennis

관심없는 / 비교를 위해 인쇄 할 수없는 것을 제거하는 버전은 어떻습니까? 아마 별도의 대답으로.
hyde

8

펄, 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/gee. unpack b8,$&보다 짧으며 sprintf'%b',ord$&추가적으로 역순으로 디코딩합니다. 불행히도 후행 0을 생성하여 제거해야합니다.
primo

@primo 감사합니다. unpack여전히 나를 위해 탐험되지 않은 지형입니다.
manatwork

42 바이트 : -p s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee. 문자를 반전, 음역하지 않아도;)
primo

7

자바 스크립트 ( ES6 ES7) 119 114 108 바이트

예상보다 길었습니다. (

5 바이트가 절약 된 @vihan 덕분에! 6 바이트를 더 절약 한 @ETHProductions 덕분에!

테스트하려면  아래 스 니펫을 실행하고 input like를 입력 한 다음 테스트를"Hello, World!" 클릭하십시오 !

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
나는이 가능 하리라 생각 못했네,하지만 난 그냥 떨어져 golfed .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

자바 스크립트 (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

@UndefinedFunction 아, 바로 답장을 보내지 못해 죄송합니다! getScore()테스트 사례 Hello, World!를 준수하는지 확인 하는 기능을 추가하고 (편리한 줄 바꿈과 인쇄 할 수없는 문자를 모두 포함 함) 결과에 따라 점수에 .85 또는 1을 곱한 값을 반환합니다. 그리고 예, 축소되지 않은 스 니펫에 액세스하는 것이 좋습니다. :)
ETHproductions

원래 스 니펫 코드를 여기에서 사용할 수있게 만들었습니다 . 즐기세요!
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은 콜백 함수 (첫 번째 매개 변수)를 모든 요소에 적용한 후 두 번째 매개 변수 (배열)의 모든 요소가 포함 된 배열을 반환합니다.

echo인쇄 할 수없는 문자는 출력하지 않지만 제거하지 않았기 때문에 15 % 할인을 받아야하는지 확실 하지 않습니다.

이것이 내가 참여한 첫 번째 도전이기 때문에 내가 끝내서 기쁘다.


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는 완전히 잊어 버렸습니다. 감사.
정의되지 않은

입력을 변수에 넣을 수는 없습니다. 함수를 작성하거나에서 입력을 읽어야합니다 STDIN. 그건 그렇고, 당신은 (문자열 따옴표를 사용할 필요가 없습니다 "chr", "bindec"...) 우리는 경고에 대해 상관하지 않기 때문이다. 12 바이트를 절약 할 수 있습니다.
블랙홀

정보에 대한 @Blackhole 감사합니다, 나는 다음에 알고 있습니다.
undefined

이 답변에 대한 수정을하는 것이 좋습니다. 그렇지 않으면 유효하지 않습니다 :). 당신이 거의 바로 대체 바이트 비용 것 str_split($s)으로 str_split(fgets(STDIN))예를 들면.
블랙홀

3

K5, 28 바이트

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

K5의 decode연산자가 고정 폭 기본 ​​변환을 수행하므로 문제가 발생하기 때문에 선행 제로를 다듬어야 하기 때문에 약간 불편 합니다. 람다 {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을 시도했지만 앞에 오는 0을 제거하는 짧은 방법을 찾지 못했습니다!
kirbyfan64sos

여기에 몇 가지 관련 구조가 있습니다 .
JohnE

3

줄리아, 77 바이트-15 % = 65.45

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

문자열을 받아들이고 문자열을 반환하는 명명되지 않은 functon을 만듭니다. 인쇄 할 수없는 문자가 제거되어 보너스를받을 수 있습니다.

언 골프 드 :

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

확실히 보너스를받을 자격이 있지만 보너스 절약보다 더 많은 비용이 듭니다. 16 바이트에서 filter(isprint,)11.55 바이트 만 보너스를 통해 저장됩니다.
Glen O

필터 단계를 포기하면 문자열에서 직접 map을 사용하여 이해를 피하고 결합 할 수 있습니다. s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)(56 바이트)
Glen O

@GlenO 제안에 감사드립니다. 그러나이 접근법은 인쇄 할 수없는 것은 16 진수 코드로 남겨두고 OP는 허용되지 않습니다. filter(isprint,)두 가지를 모두 사용 하면 보너스를받을 자격이 있으며 규칙을 준수하게됩니다.
Alex A.

"문자가 인쇄 할 수없는 문자 인 경우 선택적으로 출력 할 수 있지만 제거 할 필요는 없습니다."
Glen O

그리고 관심사는 (은으로 표시되는지 그것의 반대편에있는 경우 \x04와 같이)를, 다음 print()56까지 63 가져다 줄 일곱, 비용
글렌 O

3

PowerShell을 199 175 (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 통화 / 내장 기능, 크게 코드를 bloats합니다.

설명 :

입력을 받아서 적절히 처리 할 수 ​​있도록 param(..)캐스트합니다 char[].

다음 비트 (..)-join''는 출력을 수집하고 결합합니다.

그 parens 안에서 우리 $a|%{..}는 foreach 루프로 반복 합니다.

루프 내부 :

  • 우리는 새로운 캐릭터 생성 $b, int로 우리의 입력 문자 캐스트가 +$_[convert]베이스 에드2
  • 다음에 설정하는 $c것은 까다롭기 때문에 시작해 보도록하겠습니다.
  • 우리는 문자열 $b(-join$b[$b.length..0])
  • 이전 코드를 사용 하여 이진 문자열반전 시키고 결과를 문자열로 다시 캐스팅합니다."$(..)"
  • 우리는 다른 .NET 호출에 해당 문자열을 공급 [convert]이야 ToInt32기지에서 2마지막에 있음을 저장,$c
  • 경우 $c보다 큰 31, 또는 동등 10, 우리는 문자로 캐스팅하고 그 값은 (수집됩니다 무엇 출력을위한 파이프 라인에 남아 -join''다른 것도이 특정 반복에 남아 있지 도착, 위, 함께 에드)

-15 % 보너스도받을 수 있습니다.

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




1

MATLAB, 60 바이트

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

기본적으로 각 문자는 차례로 이진 문자열로 변환됩니다 (앞에 0이 없음). 배열이 뒤집어지고 문자를 반전시키는 97 ( '0'+ '1')에서 빼집니다. 이것은 다시 십진수로 변환됩니다. 모든 문자가 처리 된 후 전체 배열은 반환되기 전에 문자로 다시 변환됩니다.


1

파이썬 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

루비, 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

자바 스크립트 123 바이트

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

1

망막 , 1,107 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선행 0의 수는, 우리가 원하는하지 않는 것이 높은 비트를 마스크 마스크를 얻을 수 있습니다. 후자의 방법의 이름이 너무 장황하다는 것을 유감스럽게 생각하지만 Java에서 골프를 즐기기 위해 얻는 것입니다.

산출:

v,dd2>
Xdl

1

apt, 25 바이트

골치 아픈 자바 스크립트 프로그램을 만들고 싶지만 가장 짧은 방법은 많은 긴 함수 이름을 포함합니까? 그것이 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

하스켈, 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

펄 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

라켓 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.

보너스 버전, 97 110 바이트 -> 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 인쇄 (줄 바꿈 및 인쇄 가능)


고장, TiO 및 가능하다면 일부 골프가 뒤따를 것입니다. 나는 지금 피곤하다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.