Перевернути і перевернути рядок


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% бонус: якщо ваша програма видаляє un-printtable з виводу. Це повинно бути принаймні всіма символами нижче 32, крім нових рядків (графік 10)


Мені потрібно змусити мого перекладача Simplex знову працювати XDGBktnkZs
Conor O'Brien

Отже, символи в рядку не перетворені, але біти в кожному символі є?
xnor

Просто для впевненості: для 0010000 це біт реверсу 0000100 або 00001?
Цифрова травма

@DigitalTrauma Якщо двійковий код є 0010000, до нього слід ставитися 10000так, як буде зворотним00001
Downgoat

2
Чи можемо ми вважати лише ASCII (як ваші приклади), чи це має працювати для того, що є моєю мовою? (Також, якщо мова використовує інший код символів, чи повинен я використовувати це замість ASCII / Unicode)?
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--}%

Dangit, ти. Я ось-ось збирався опублікувати відповідь CJam D:
anOKsquirrel

@anOKsquirrel вибачте ^^ це було схоже?
aditsu

Було б, якби я його закінчив.
anOKsquirrel

Як працює W%? W дорівнює -1, отже ...
anOKsquirrel

1
@anOKsquirrel дивіться тут
aditsu

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
Dennis

Як щодо версії, яка видаляє недруковані матеріали, просто з інтересу / для порівняння? Можливо, як окрема відповідь.
Гайд

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/gee. unpack b8,$&коротше sprintf'%b',ord$&та додатково розшифровується у зворотному порядку. На жаль, він також створює зворотні 0, які потрібно видалити.
примо

Дякую @primo unpackдля мене все ще недосліджена місцевість.
манатурка

42 байт: -p s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee. Інвертувати символ, не потрібно транслітерувати;)
прим

7

JavaScript ( ES6 ES7), 119 114 108 байт

Це виявилося набагато довше, ніж очікувалося :(

Дякуємо @vihan за 5 байт збережено! Завдяки @ETHProductions ще 6 байтів збережено!

Щоб перевірити:  Запустіть фрагмент нижче, введіть введення типу "Вхід" "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: дякую - у мене є лише Safari та Chrome, і я думаю, що жодне з них не відповідає "ES6-сумісності".
Пол Р

1
@PaulR ES6 або ECMAScript 6 - один з останніх наборів нових функцій JavaScript. Дивіться цей сайт для отримання додаткової інформації. Також є таблиця порівнянності, яка показує, які функції підтримуються браузерами (та іншими програмами). Зокрема, ця відповідь вимагає "функцій стрілок", "оператора поширення" та "розуміння масиву" ES7.
ETHproductions

5

JavaScript (ES7), 126 байт - 15% = 107,1

Я розігрувався з цією відповіддю, щоб побачити, чи варто бонус. Мабуть, так і є. Тестовий набір був викрадений з тієї ж відповіді, але я додав власний поворот: повна підтримка 15% бонусу! :)

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


Дивовижна модифікація тестового фрагмента! Здається, тепер фрагмент автоматично перевіряє бонус, я можу запитати, як ви це зробили? (ps, якщо ви хочете, щоб оригінал (не в одному рядку) джерело, не соромтеся запитати, можливо, буде простіше змінити цей спосіб)
jrich

@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 повертає масив з усіма елементами другого параметра (масиву) після застосування функції зворотного виклику (першого параметра) до всіх них.

Не впевнений, чи варто мені знімати 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

@Blackhole спасибі за інформацію, я буду про це знати наступного разу.
визначено

Вам краще зробити модифікацію в цій відповіді, яка в іншому випадку є недійсною :). Це буде коштувати вам майже немає байтів, просто замінити str_split($s)з str_split(fgets(STDIN)), наприклад.
Blackhole

3

К5, 28 байт

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

Це трохи незручно, оскільки decodeоператор K5 здійснює базову конверсію фіксованої ширини, тому для виконання завдання завдання мені доведеться обрізати провідні нулі. Лямбда {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"

Я вважаю , що природна поведінка ОК з недрукованими формами робить це придатним до -15%, даючи цей бал 28 * 0,85 = 23,8 .


+1, тому що я намагався, але не міг придумати короткий спосіб позбутися провідних нулів!
kirbyfan64sos

Кілька пов'язаних конструкції можна знайти тут .
JohnE

3

Джулія, 77 байт - 15% = 65,45

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

Це створює неназваний функтон, який приймає рядок і повертає рядок. Видаляються недруковані символи, що кваліфікує це як бонус.

Безголівки:

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

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

Хоча це, безумовно, кваліфікує це як бонус, але це також коштує більше, ніж бонус економить. 16 байт до filter(isprint,)та лише 11,55 байтів, збережених через бонус.
Glen O

І якщо ви відмовитесь від кроку фільтра, ви можете уникнути розуміння та приєднатися, використовуючи карту безпосередньо на рядку. s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)(для 56 байт)
Glen O

@GlenO Дякую за пропозиції, але такий підхід залишає недруковані у вигляді шістнадцяткових кодів, що, за словами ОП, заборонено. Використання filter(isprint,)обох кваліфікує це як бонус і робить його відповідним правилам.
Олексій А.

"Якщо символ призводить до друку, ви можете його вивести, але їх не потрібно видаляти."
Глен О

А якщо стурбованість є з іншого боку (що вона відображається як \x04подібне), тоді print()коштує сім, що призведе до 56 до 63.
Глен О

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, що значно роздуває код.

Пояснили:

Приймає вхід param(..)і передає його як такий, char[]щоб ми могли над ним працювати належним чином.

Наступний біт (..)-join''збирає та приєднується до нашого результату разом.

Всередині цих парен ми повторюємо, $a|%{..}як петля передбачення.

Всередині петлі:

  • Ми створюємо новий рядок $b, який є нашим вхідним листом, поданим у вигляді int +$_та [convert]ed до основи2
  • Наступний шматочок, встановлення $c, є складним, тож давайте почнемо всередині і вирішимо наш вихід
  • Звертаємо рядок за $bдопомогою(-join$b[$b.length..0])
  • Ми використовуємо мій попередній код для перетворення бінарного рядка і переробляємо результат у вигляді рядка"$(..)"
  • Ми годуємо цей рядок в інший .NET виклик, [convert]S ToInt32від підстави 2, який , нарешті , що зберігається , що в$c
  • Якщо $cбільша 31, або дорівнює 10, ми ставимо це як знак char, і це значення залишається на конвеєрі для виведення (це те, що збирається і -join''редагується разом вище), інакше нічого не залишається на цій конкретній ітерації

Phew.

Також кваліфікується на бонус -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()))

Безголівки:

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 (неконкурентна)

Використовує функції, додані після дати виклику. (Неявне поведінку $*, , Сортування)

У сітківки немає вбудованого для перетворення персонажа на його порядковий або задній 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
¶

Спробуйте в Інтернеті

Якщо ви ознайомтеся з підручником сітківки щодо одинарної арифметики , ви розпізнаєте декілька різних фрагментів мого коду, що надходять звідти.

Дякуємо Мартіну за те, що вони грали в сотні байтів


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.reverseтаInteger.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 (з версії 1.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 (новий рядок та друковані версії)


поломка, TiO і, якщо можливо, буде слідувати деякий гольф; Я зараз втомився

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.