文字列の反転と反転


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未満のすべての文字である必要があります(char 10)


シンプレックスインタープリターを再び動作させる必要があるXDGBktnkZs
コナーオブライエン

それで、文字列の文字は逆にされませんが、各文字のビットは逆ですか?
xnor

念のため:0010000の場合、ビットリバースは0000100または00001ですか?
デジタル外傷

@DigitalTraumaバイナリコードがの場合、逆の0010000ように扱われる必要があります1000000001
-Downgoat

2
ASCII(例として)だけを想定できますか、またはこれは私の言語の文字が何であっても動作しますか?(また、言語が異なる文字コードを使用する場合、ASCII / Unicodeの代わりにこれを使用する必要がありますか?)
パエロエベルマン

回答:


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
デニス

興味のない/比較のために、印刷できないものを削除するバージョンはどうですか?おそらく別の答えとして。
ハイド

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も生成されるため、削除する必要があります。
プリモ

@primoありがとう。unpack私にとってはまだ未踏の地形です。
マナトワーク

42バイト:-p s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee。文字を反転、音訳する必要はありません;)
primo

7

JavaScript(ES6 ES7)、 119の 114 108バイト

これは予想よりずっと長いことが判明しました:(

5バイト節約された@vihanに感謝します!さらに6バイトを節約してくれた@ETHProductionsに感謝します!

テストするには:  以下のスニペットを実行し、などの入力を入力して"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
私はこれが可能だとは思っていなかったでしょうが、私は.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 '>'スニペットを実行しようとすると取得します。
ポールR

1
@ETHproductions:ありがとう-SafariとChromeしか手元にないので、どちらも「ES6準拠」ではないと思います。
ポールR

1
@PaulR ES6、またはECMAScript 6は、JavaScriptの最新機能の最新セットの1つです。詳細については、このサイトを参照してください。また、どのブラウザ(および他のプログラム)でどの機能がサポートされているかを示す互換性テーブルもあります。特にこの答えには、「矢印関数」、「スプレッド演算子」、および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元の(1行ではなく)ソースが必要な場合は、お気軽にお問い合わせください。そのように変更する方が簡単かもしれません)
-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は、コールバック関数(最初のパラメーター)をすべての要素に適用した後、2番目のパラメーターのすべての要素(配列)を含む配列を返します。

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はそのことを完全に忘れていました。ありがとう。
未定義

入力を変数に入れることはできません。関数を作成するか、から入力を読み取る必要がありますSTDIN。ところで、あなたは(文字列の前後に引用符を使用する必要はありません"chr""bindec"我々は警告を気にしないので...)。これにより、12バイト節約できます。
ブラックホール

@Blackholeは情報をありがとう、次回はそのことに気づくでしょう。
未定義

この回答は修正する必要がありますが、それ以外は無効です:)。それはあなたにほとんどバイトの費用がかからないでしょう、例えば、単に置き換え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 unprintablesとの自然な行動はこの28 * 0.85 =のスコア与え、-15%のため、この資格を作る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バイトです。
グレンO

また、フィルターステップを放棄すると、文字列で直接mapを使用して、理解と結合を回避できます。s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)(56バイト)
グレンO

@GlenO提案に感謝しますが、そのアプローチでは、16進コードとして印刷できないものが残ります。filter(isprint,)両方を使用すると、ボーナスの対象となり、ルールに準拠するようになります。
アレックスA.

「文字が印刷不能になる場合、オプションで出力できますが、削除する必要はありません。」
グレンO

そして、の懸念は、(それがとして表示されていること、それの反対側にある場合\x04など)、その後、print()56までの63にもたらすだろう7、コスト
グレンO

3

パワーシェル、 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''は、出力を収集して結合します。

これらの括弧内で、私たちは $a|%{..}、foreachループとしてます。

ループ内:

  • 私たちは、新しい文字列を作成$bintとして私たちの入力文字のキャストで、+$_そして[convert]ベースに編2
  • この次の設定$cである「トリッキー」は難しいので、まずは内部から始めて解決しましょう
  • 私たちは、文字列を逆に$bして(-join$b[$b.length..0])
  • 以前のコードを活用してバイナリ文字列反転し、結果を文字列として再キャストします"$(..)"
  • 我々は、さまざまな.NETの呼び出しにその文字列を養う[convert]ToInt32ベースから2最終的にその保存され、$c
  • 場合$cよりも大きい31、または等しい10、私たちが収集する内容である(charとしてそれをキャストし、その値を出力するためのパイプラインの上に残され、-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) '']

基本的に、各文字は順番にバイナリ文字列に変換されます(先行ゼロなし)。配列は反転され、97( '0' + '1')から減算され、文字が反転されます。これは10進数に変換されます。すべての文字が処理された後、配列全体が返される前に文字に変換されます。


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

ルビー、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の単項算術のチュートリアルをチェックすると、コードのいくつかの異なる部分がそこから来ていることがわかります。

数百バイトのゴルフをしてくれたマーティンに感謝


1

Java、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バイト

ゴルフのような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

ラケット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(改行および印刷可能)を印刷します。


breakdown, TiO and if possible some golfing will follow; I´m tired right now.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.