उल्टा और एक स्ट्रिंग पलटना


27

उल्टा और एक स्ट्रिंग पलटना

चुनौती

इस चुनौती में। आप एक प्रोग्राम लिख रहे होंगे जो इनपुट को उलट या उल्टा करके आउटपुट देगा या वापस करेगा।

सबसे पहले, प्रत्येक चरित्र को उसके चरित्र कोड में परिवर्तित किया जाना चाहिए। फिर, इसे बेस -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
कॉनर ओ'ब्रायन

तो स्ट्रिंग में वर्ण उलट नहीं हैं, लेकिन प्रत्येक वर्ण में बिट्स हैं?
xnor

बस सुनिश्चित करने के लिए: 0010000 के लिए बिट रिवर्स 0000100 या 00001 है?
डिजिटल ट्रॉमा

@DigitalTrauma बाइनरी कोड है 0010000, यह के रूप में व्यवहार किया जाना चाहिए 10000ताकि रिवर्स होगा00001
Downgoat

2
क्या हम सिर्फ ASCII (आपके उदाहरण के रूप में) मान सकते हैं, या मेरी भाषा में जो कुछ भी है उसके लिए यह काम करना चाहिए? (इसके अलावा, अगर कोई भाषा एक अलग वर्ण कोड का उपयोग करती है, तो क्या मुझे ASCII / यूनिकोड के बजाय इसका उपयोग करना चाहिए)?
पाओलो एबरमन

जवाबों:


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:
aoksquirrel

@anOKsquirrel क्षमा करें ^ ^ क्या यह समान था?
एडिट्स

यह होता अगर मैं इसे खत्म कर देता।
एओकस्क्वायरेल

W% कैसे काम करता है? डब्ल्यू -1 है, इसलिए ...
anoksquirrel

1
@anOKsquirrel यहां
ad26 6'15

9

अजगर, 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
डेनिस

कैसे एक संस्करण के बारे में जो unprintables को हटा देता है, बस ब्याज से बाहर / तुलना के लिए? शायद एक अलग जवाब के रूप में।
हाइड करें

8

पर्ल, ५ Per ५१ अक्षर

(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$&, और इसके अलावा रिवर्स ऑर्डर में डीकोड होता है। दुर्भाग्य से यह अनुगामी 0s भी उत्पन्न करता है, जिसे हटाने की आवश्यकता है।
प्रिमो

साभार @primo unpackअभी भी मेरे लिए बेरोज़गार इलाक़ा है।
मैनटवर्क

42 बाइट्स -p s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee:। चरित्र को उल्टा करें, लिप्यंतरित करने की कोई आवश्यकता नहीं है;)
प्राइमो

7

जावास्क्रिप्ट ( ईएस 6 ईएस 7), 119 114 108 बाइट्स

यह उम्मीद से अधिक लंबा रास्ता तय किया :(

@ ब्वॉय को धन्यवाद 5 बाइट्स के लिए बचाया! एक और 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 '>'जब मैं स्निपेट चलाने की कोशिश करता हूं।
पॉल आर

1
@ETHproductions: धन्यवाद - मेरे पास केवल सफारी और क्रोम हाथ में है और मुझे लगता है कि इनमें से कोई भी "ईएस 6-अनुपालन" नहीं है।
पॉल आर।

1
@PaRR ES6, या ECMAScript 6, जावास्क्रिप्ट के लिए नई सुविधाओं के नवीनतम सेटों में से एक है। अधिक जानकारी के लिए इस साइट को देखें । एक संगतता तालिका भी है जो बताती है कि कौन सी सुविधाएँ किस ब्राउज़र (और अन्य कार्यक्रमों) द्वारा समर्थित हैं। विशेष रूप से इस उत्तर के लिए "एरो फ़ंक्शंस", "स्प्रेड ऑपरेटर" और ES7 के "एरे कॉम्प्रिहेंशन" की आवश्यकता होती है।
ETHproductions

5

जावास्क्रिप्ट (ईएस 7), 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>


परीक्षण स्निपेट का बहुत बढ़िया संशोधन! ऐसा लगता है कि स्निपेट अब स्वचालित रूप से बोनस की जांच करता है, क्या मैं पूछ सकता हूं कि आपने ऐसा कैसे किया? (पीएस यदि आप मूल (एक पंक्ति पर नहीं) स्रोत चाहते हैं, तो बेझिझक पूछें, इस तरह से संशोधित करना आसान हो सकता है)
23

@UndefinedFunction ओह, तुरंत जवाब न देने के लिए खेद है! मैंने एक getScore()फ़ंक्शन जोड़ा जो Hello, World!अनुपालन के लिए परीक्षण-मामले की जांच करता है (इसमें सुविधाजनक रूप से एक नई पंक्ति और अनपेक्षित वर्ण दोनों शामिल हैं), और परिणाम के आधार पर स्कोर को .85 या 1 से गुणा किया जाता है। और हां, अन-मिनिफ़ाइड स्निपेट तक पहुँच बहुत बढ़िया होगी। :)
ETHproductions

मैंने यहां मूल स्निपेट कोड उपलब्ध कराया है । मज़े करो!
22

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 पूरी तरह से उस बारे में भूल गया। धन्यवाद।
अपरिभाषित

आप इनपुट को केवल एक चर में नहीं रख सकते। आपको एक फ़ंक्शन बनाना चाहिए या इनपुट से पढ़ना चाहिए 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"

मेरा मानना ​​है कि unprintables के साथ OK का स्वाभाविक व्यवहार इसे -15% योग्य बनाता है, जिससे यह 28 * 0.85 = 23.8 का स्कोर होता है ।


+1 क्योंकि मैंने कोशिश की लेकिन अग्रणी शून्य से छुटकारा पाने के लिए एक छोटा रास्ता नहीं बना सका!
kirbyfan64sos

कुछ संबंधित निर्माण यहां देखे जा सकते हैं
जॉनी

3

जूलिया, 77 बाइट्स - 15% = 65.45

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

यह एक अनाम फंक्शनलन बनाता है जो एक स्ट्रिंग को स्वीकार करता है और एक स्ट्रिंग लौटाता है। अनपेक्षित वर्ण हटा दिए जाते हैं, जो बोनस के लिए इसे योग्य बनाता है।

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

जबकि यह निश्चित रूप से इसे बोनस के लिए योग्य बनाता है, यह बोनस की बचत से अधिक खर्च भी करता है। filter(isprint,)बोनस के माध्यम से 16 बाइट्स और केवल 11.55 बाइट्स बचाए गए।
ग्लेन ओ

और यदि आप फ़िल्टर कदम छोड़ देते हैं, तो आप समझ से बच सकते हैं और सीधे स्ट्रिंग पर मानचित्र का उपयोग करके शामिल हो सकते हैं। s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)(56 बाइट्स के लिए)
Glen O

@GlenO सुझाव के लिए धन्यवाद, लेकिन यह दृष्टिकोण हेक्स कोड के रूप में unprintables में निकल जाता है, जिसे ओपी ने कहा कि अनुमति नहीं है। filter(isprint,)दोनों का उपयोग करना इसे बोनस के लिए योग्य बनाता है और इसे नियमों के अनुरूप बनाता है।
एलेक्स ए।

"यदि कोई चरित्र अप्रतिबंधित होता है, तो आप वैकल्पिक रूप से इसका उत्पादन कर सकते हैं, लेकिन उन्हें हटाया नहीं जाना चाहिए।"
ग्लेन ओ

और अगर चिंता इसके दूसरी तरफ है (कि यह जैसा है \x04और जैसा दिखाता है ), तो print()सात की लागत होती है, जो 56 तक 63 लाएगा।
Glen 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 कॉल / बिल्ट-इन की दुर्भाग्यपूर्ण राशि का उपयोग करता है , जो कोड को महत्वपूर्ण रूप से ब्लॉट करता है।

व्याख्या की:

इनपुट लेता है param(..)और इसे कास्ट करता है char[]ताकि हम इसके माध्यम से उचित तरीके से काम कर सकें।

अगला बिट (..)-join''इकट्ठा होता है और हमारे आउटपुट को एक साथ जोड़ता है।

उन परनों के अंदर, हम $a|%{..}एक फॉरेस्ट लूप के रूप में पुनरावृति करते हैं ।

लूप के अंदर:

  • हम एक नया स्ट्रिंग बनाते हैं $b, जो हमारे इनपुट पत्र को एक इंट +$_और [convert]एड टू बेस के रूप में रखा जाता है2
  • यह अगला बिट, सेटिंग $c, मुश्किल है, तो चलिए अंदर शुरू करते हैं और अपने तरीके से काम करते हैं
  • हम स्ट्रिंग $bको उल्टा करते हैं(-join$b[$b.length..0])
  • हम अपने पिछले कोड का लाभ उठाने के लिए एक द्विआधारी स्ट्रिंग को सम्मिलित करते हैं और परिणाम को एक स्ट्रिंग के रूप में पुनः प्राप्त करते हैं"$(..)"
  • हम एक अलग नेट कॉल कि में कि स्ट्रिंग को खिलाने के [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) '']

मूल रूप से प्रत्येक वर्ण बदले में एक बाइनरी स्ट्रिंग (बिना किसी अग्रणी शून्य के) में परिवर्तित हो जाता है। सरणी को फ़्लिप किया जाता है और 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()))

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

रूबी, 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

सी #, 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

रेटिना , 1107 629 बाइट्स - 15% = 534.65 (गैर-प्रतिस्पर्धात्मक)

चुनौती की तारीख के बाद जोड़ा सुविधाओं का उपयोग करता है। (की अंतर्निहित व्यवहार $*, , छंटाई)

रेटिना के पास अपने ASCII अध्यादेश या पीठ के लिए एक चरित्र को परिवर्तित करने के लिए एक अंतर्निहित नहीं है ... इसलिए अपनी चमकदार लंबाई को निहारना। यह मुद्रण योग्य ASCII संभालता है, और unprintables के साथ ही newlines निकालता है। बाइट गिनती आईएसओ 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
¶

इसे ऑनलाइन आज़माएं

यदि आप एक अंकगणितीय अंक के लिए रेटिना ट्यूटोरियल की जाँच करते हैं , तो आप वहाँ से आते ही मेरे कोड के कई अलग-अलग हिस्सों को पहचान लेंगे।

बाइट के सौ से अधिक गोल्फ के लिए मार्टिन को धन्यवाद


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

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

मुझे लगता है कि यह समाधान इसके Integerतरीकों के उपयोग में थोड़ा दिलचस्प है Integer.reverseऔर Integer.numberOfLeadingZerosजो वे करते हैं, वे ध्वनि करते हैं, और -1 >>> sजहां sप्रमुख जीरो की संख्या है, वहां उच्च बिट्स से मास्क को प्राप्त करने के लिए जो हम नहीं चाहते हैं। मुझे सिर्फ इस बात का अफ़सोस है कि बाद के तरीके का नाम बहुत लानत-मलामत है, लेकिन मुझे जावा में गोल्फिंग के लिए यही मिलता है।

आउटपुट:

v,dd2>
Xdl

1

जाप, 25 बाइट्स

एक गोल्फ जावास्क्रिप्ट प्रोग्राम बनाना चाहते हैं, लेकिन सबसे छोटी विधि में कई लंबे फ़ंक्शन नाम शामिल हैं? यही तो जाप के लिए बनाया गया था। :)

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

दुर्भाग्य से जब हास्केल को पढ़ने की जरूरत होती है, तो उसे दूसरे आधार पर पढ़ने / प्रिंट करने की आवश्यकता होती है ...


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

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

परिक्षण:

(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 (नई रूपरेखा और प्रिंटबेल) प्रिंट करता है


टूटने, तिवारी और यदि संभव हो तो कुछ गोल्फ का पालन करेंगे; मैं अभी थक गया हूँ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.