Dizeyi Ters Çevirme ve Ters Çevirme


27

Dizeyi Ters Çevirme ve Ters Çevirme

Meydan okuma

Bu mücadelede. Girdiyi çıkaran veya geri döndüren, ters çevrilmiş ve ters çevrilmiş bir program yazacaksınız.

İlk olarak, her karakter kendi karakter koduna dönüştürülmelidir. Sonra, bu taban-2'ye dönüştürülmelidir. Ardından, bu dize tersine çevrilmelidir. Daha sonra dizginin ters çevrilmesi gerekir (1 -> 0 ve 0 -> 1). Son olarak, bu tekrar taban 2'ye dönüştürülmeli ve ardından bir karaktere dönüştürülmelidir. Bir karakter yazdırılamaz olarak sonuçlanırsa, isteğe bağlı olarak çıktısını alabilirsiniz ancak kaldırılması gerekmez.

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)

puanlama

Bayt cinsinden en kısa kod kazanır.

-15% Bonus: Programınız yazdırılamayan çıktılardan çıkarırsa. Bu, yeni satırlar hariç en az 32 karakterin altındaki tüm karakterlerden oluşmalıdır (karakter 10)


Simplex tercümanımı tekrar çalıştırmam gerekiyor XDGBktnkZs
Conor O'Brien

Yani dizgideki karakterler ters çevrilmez, fakat her karakterdeki bitler?
Xnor 6'15

Sadece emin olmak için: 0010000 için bit 0000100 veya 00001'in tersi mi?
Dijital Travma

@DigitalTrauma İkili kod ise 0010000, bunun 10000tersi gibi muamele görmesi gerekir00001
Downgoat

2
Sadece ASCII'yi (örnekleriniz olarak) varsayabilir miyiz, yoksa bu benim dilimdeki bir karakter için ne işe yarayacak? (Ayrıca, bir dil farklı bir karakter kodu kullanıyorsa, ASCII / Unicode yerine bunu kullanmalı mıyım)?
Paŭlo Ebermann

Yanıtlar:


4

CJam, 14

q{i2bW%:!2bc}%

Çevrimiçi deneyin

Açıklama:

Oldukça basit:

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

"Yazdırılabilir" versiyonu,% 20 - 15 = 17

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

Dangit, sen. Neredeyse bir CJam cevap D göndermek üzereydim:
anOKsquirrel

@anOKsquirrel üzgünüm ^^ benzer miydi?
aditsu

Eğer bitmiş olsaydım olurdu.
anOKsquirrel

W% nasıl çalışır? W -1, yani ...
anOKsquirrel

1
belgelere bakın @anOKsquirrel burada
aditsu

9

Pyth, 14 bayt

smCi!M_jCd2 2z

Çevrimiçi deneyin.

Nasıl çalışır

 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
Alternatif çözümler (14 baytın tümü):smCi!MvM_.Bd2z smCi.r_.Bd`T2z smCiqR\0_.Bd2z
Dennis

Mukayese edilemez / kıyaslanamayacak şekilde yazdırılamayanları kaldıran bir versiyona ne dersiniz? Muhtemelen ayrı bir cevap olarak.
Hyde

8

Perl, 57 51 karakter

(50 karakter kod + 1 karakter komut satırı seçeneği.)

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

Örnek çalışma:

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 bayt: -p s/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/gee. unpack b8,$&daha kısadır sprintf'%b',ord$&ve ayrıca ters sıra ile deşifre eder. Ne yazık ki, aynı zamanda kaldırılması gereken takip eden 0lar üretir.
primo,

Teşekkürler @primo. unpackhala benim için keşfedilmemiş bir arazi.
Manat çalışması

42 bayt: -p s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee. Karakteri ters çevirin, çevirmeye gerek yok;)
primo

7

JavaScript ( ES6 ES7), 119 114 108 bayt

Bu beklenenden daha uzun sürdü :(

@Vihan'a 5 bayt için teşekkürler! @ETHProductions'a bir başka 6 bayt daha kazandırdı!

Test etmek için:  Aşağıdaki pasajı çalıştırın, benzeri bir giriş yapın "Hello, World!"ve Test Et!

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>


Ben değiştirmekte 4 bayt kurtarabilecek düşünmek parseIntile +('0b'+<code>)açıklandığı gibi burada kullanarak ve başka bir w^1yerine+!+w
Downgoat

2
Bunun mümkün olacağını hiç düşünmezdim, ancak daha yeni golf oynadım .05 bayt : 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) Belki de bu yasal değildir; sadece işe yarar 10 == \n, değil 13 == \r. @ Vɪʜᴀɴ senin fikrin nedir?
ETHproductions

1
Ben olsun Unexpected token '>'ben pasajını çalıştırmayı denediğinizde.
Paul R

1
@ETHproductions: teşekkürler - Elimde sadece Safari ve Chrome var ve bunların hiçbiri "ES6 uyumlu" değil.
Paul R

1
@PaulR ES6 veya ECMAScript 6, JavaScript'in en yeni özelliklerinden biridir. Daha fazla bilgi için bu siteye bakın . Hangi özelliklerin hangi tarayıcıların (ve diğer programların) desteklendiğini gösteren bir uyumluluk tablosu da vardır . Bu cevap özellikle "ok fonksiyonlarını", "spread operatörünü" ve ES7'nin "dizi anlamalarını" gerektirir.
ETHProductions

5

JavaScript (ES7), 126 bayt -% 15 = 107.1

Bonusun buna değip değmediğini görmek için bu cevabı kullanarak oynuyordum . Görünüşe göre öyle. Test paketi aynı cevaptan çalındı, ancak kendi bükümümü ekledim:% 15 bonus tam destek! :)

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>


Test snippet'inin harika modifikasyonu! Görünüşe göre pasajı otomatik olarak bonusu kontrol ediyor, nasıl yaptığını sorabilir miyim? (orjinali (tek bir satırda değil) kaynağını istiyorsanız, sormaktan çekinmeyin, bu şekilde değişiklik yapmak daha kolay olabilir)
jrich

@UndefinedFunction Oh, hemen cevap veremediğim için üzgünüm! getScore()Test Hello, World!senaryosunu uygunluk açısından kontrol eden bir fonksiyon ekledim (uygun bir şekilde hem yeni satır hem de yazdırılamayan karakterleri içerir) ve sonucu bağlı olarak .85 veya 1 ile çarpılan puanı döndürür. Ve evet, küçültülmemiş snippet'e erişim harika olurdu. :)
ETHproductions,

Orijinal snippet kodunu burada kullanıma sundum . İyi eğlenceler!
Jrich

4

PHP - 187 182 163 bayt

<?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))))))));?>

Değeri olarak iletin GET["s"].

array_map, geri arama işlevini (ilk parametre) hepsine uyguladıktan sonra ikinci parametrenin tüm öğelerini (bir dizi) içeren bir dizi döndürür.

% 15 indirim yapmam gerekip gerekmediğinden emin değilim, çünkü echoyazdırılamaz karakterler çıkarmıyor, ancak bunları kaldırmadım.

Katıldığım ilk meydan okuma olduğu için bitirdiğim için memnunum.


1
Eğer değil bu işlevleri ilan etmeleri halinde daha kısa mı: $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 bunu tamamen unuttu. Teşekkürler.
tanımlanmamış

Girdiyi sadece bir değişkene koyamazsınız. Bir işlev oluşturmalı veya girişi okumalısınız STDIN. Bu arada, (dize tırnak içinde kullanılır gerekmez "chr", "bindec"...) biz uyarıları hakkında umurumda değil çünkü. Bu size 12 bayt kurtarmalı.
Karadelik

@Blackhole bilgi için teşekkürler, bir dahaki sefere bunun farkında olacağım.
tanımlanmamış

Bu cevabı değiştirdiyseniz, aksi takdirde geçersiz olur :). Neredeyse hiçbir bayta mal olmaz, sadece örneğin str_split($s)ile değiştirin str_split(fgets(STDIN)).
Karadelik

3

K5, 28 bayt

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

Bu biraz sakıncalıdır, çünkü K5'in decodeoperatörü sabit genişlikte bir temel dönüşüm gerçekleştiriyor, bu yüzden sorunlu ifadeye uymak için baştaki sıfırları düzeltmem gerekiyor. Lambda {x@&|\x}bu adımı gerçekleştirir.

yayma:

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

toplayın:

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

belirleyin:

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

Uygulamadaki tüm program:

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

OK'un doğal davranışın yazdırılamaz davranışlarıyla% -15 için uygun hale getirdiğine inanıyorum , buna 28 * 0.85 = 23.8 puan verdim .


+1 çünkü denedim ama baştaki sıfırlardan kurtulmak için kısa bir yol bulamadım!
kirbyfan64sos

Birkaç ilgili yapı burada bulunabilir .
JohnE

3

Julia, 77 bayt -% 15 = 65,45

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

Bu, bir dizeyi kabul eden ve bir dize döndüren adsız bir işlev oluşturur. Yazdırılamaz karakterler kaldırılır, bu bonus için bunu hak eder.

Ungolfed:

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

Bonus için kesinlikle hak kazanmasına rağmen, aynı zamanda bonus kazancından daha pahalı. 16 byte'a filter(isprint,)ve sadece 11.55 byte, bonusa kaydedildi.
Glen Ç

Ve filtre adımından vazgeçerseniz, haritayı doğrudan ipte kullanarak anlama ve birleştirmeyi önleyebilirsiniz. s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)(56 bayt için)
Glen O

@GlenO Önerileriniz için teşekkürler, ancak bu yaklaşım OP’ye izin verilmediğini belirten hex kodu olarak yazdırılamaz olarak bırakılıyor. filter(isprint,)Her ikisini de kullanmak bonus için onu nitelendirir ve kurallara uygun hale getirir.
Alex A.

"Bir karakter yazdırılamaz hale gelirse, isteğe bağlı olarak çıktısını alabilirsiniz ancak kaldırılması gerekmez."
Glen O

Ve endişe (o kadar görüntüler bunun diğer tarafında ise \x04ve benzeri), sonra print()56 kadar 63. getireceği yedi, maliyeti
Glen 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''

Kodu önemli ölçüde şişiren, bazı .NET çağrılarının / yerleşiklerinin talihsiz bir miktarını kullanır .

Açıklaması:

Girdiyi alır param(..)ve doğru şekilde çalıştırabilmemiz için atar char[].

Bir sonraki bit, (..)-join''çıktımızı toplar ve birleştirir.

Bu ebeveynlerin içinde $a|%{..}bir foreach döngüsü olarak yineliyoruz.

Döngünün içinde:

  • $bGiriş mektubu int +$_ve [convert]ed-base olarak değiştirilen yeni bir dize yaratıyoruz2
  • Bu bir sonraki bit, ayar $c, zor, bu yüzden içeri girelim ve yolumuza gidelim
  • Biz dize ters $bile(-join$b[$b.length..0])
  • İkili bir dizgeyi ters çevirmek için önceki kodumdan yararlanıyoruz ve sonucu bir dizge olarak yeniliyoruz"$(..)"
  • Biz farklı bir .NET çağrısı içine dize beslemek [convert]s ToInt32tabanından 2nihayet içine saklanır,$c
  • Eğer $cdaha büyükse 31veya ona eşitse 10, onu bir karakter olarak atarız ve bu değer çıktı için boru hattında bırakılır (bu, -join''birlikte toplanan ve birlikte sıralanan şeydir ), bu belirli yinelemede başka hiçbir şey kalmaz

Uf.

Ayrıca% -15 bonus almaya hak kazanıyor.

Örnek

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



1

Minkolang 0.11 , 26 bayt

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

Burada dene.

açıklama

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 bayt

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

Temel olarak sırayla her karakter bir ikili dizeye dönüştürülür (başında sıfır olmadan). Dizi ters çevrilir ve karakteri ters çeviren 97'den ('0' + '1') çıkarılır. Bu, ondalık basamağa dönüştürülür. Tüm karakterler işlendikten sonra, tüm dizi döndürülmeden önce karakterlere geri dönüştürülür.


1

Python 3, 95 91

Basit uygulama.

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

Ungolfed:

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

Yakut, 62 karakter

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

Örnek çalışma:

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 bayt -% 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{}}}

Girinti ve netlik için yeni çizgiler:

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 bayt

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

1

Retina , 1107 629 bayt -% 15 = 534.65 (rekabet etmeyen)

Meydan okuma tarihinden sonra eklenen özellikleri kullanır. (Örtük davranışı $*, , Sıralama)

Retina, bir karakteri ASCII sıralarına veya sırtına dönüştürecek yerleşik bir donanıma sahip değildir ... bu yüzden parlak uzunluğuna bakın. Bu, yazdırılabilir ASCII'yi işler ve yazdırılamayan satırların yanı sıra yeni satırları da kaldırır. Bayt sayısı, ISO 8859-1 kodlamasını varsayar.

Kod yazdırılamayan karakterler içeriyor.


¶
±
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
¶

Çevrimiçi deneyin

Eğer check out tekli aritmetik için Retina öğretici , oradan geliyormuş gibi benim kod birkaç farklı parçaları tanırsınız.

Martin'e yüzlerce bayt golf attığı için teşekkürler


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);}}}

Ungolfed:

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);
        }
    }
}

Bu çözümün, maskenin istemediğimiz yüksek bitleri maskelemesini sağlamak için Integeryöntemleri kullanması Integer.reverseve Integer.numberOfLeadingZeroskulağa ne gibi geldiğini ve önde gelen sıfır sayısının -1 >>> solduğu yerin kaymasıyla biraz ilginç olduğunu düşünüyorum s. Sadece son yöntemin isminin çok ayrıntılı olduğu için pişmanım, fakat Java'da golf oynamak için elde ettiğim şey bu.

Çıktı:

v,dd2>
Xdl

1

Japt, 25 bayt

Bir golfyüzlü JavaScript programı oluşturmak ister misiniz, ancak en kısa yöntem birçok uzun işlev adı içerir mi? Japt bunun için yapıldı. :)

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

Çevrimiçi tercümanda deneyin !

Nasıl çalışır

         // 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'in mevcut sürümünü kullanarak (v1.4.4'ten itibaren), bayt sayısı 14'e düşürülebilir:

®c ¤w m^1 n2 d

Çevrimiçi test edin!


0

Haskell, 167 bayt

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)"")

Maalesef Haskell başka bir yerde okumak / yazdırmak gerektiğinde oldukça ayrıntılı bir şekilde…


0

Perl 6, 66 bayt

Yazdırılmayan kontrol karakterlerini kaldırarak tümüyle dışarı çıkmak beni (83 + 1) -15% = 71.4

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

Kontrol karakterlerini çıkaran kodu kaldırırsam, biraz tasarruf ediyorum 65 + 1 = 66

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

( Netlik »yerine kullandım >>)


0

Jöle , 6 bayt (yarışmaz)

OBU¬ḄỌ

Çevrimiçi deneyin!

Açıklama:

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

Raket 250% 15 bonus = 212 bayt

(λ(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))))))))))))

Ungolfed:

(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)
               )))))))))))

Test yapmak:

(f "Hello, World!")

Çıktı:

"v,dd2>\nXdl"

0

PHP, 80 bayt

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

STDIN'den girdi alır; ile koş -R.

bonus sürümü, 97 110 bayt -> 93,5 puan

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

ASCII 10 ve 32 - 126 yazdırır (yeni satır ve yazdırılabilir)


arıza, TiO ve mümkünse bazı golf izleyecektir; Şu an yorgunum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.