এএসসিআইআই চরিত্রের ঝাঁকুনি


24

এমন একটি প্রোগ্রাম লিখুন যা তার ইনপুট হিসাবে মুদ্রণযোগ্য অক্ষর (ASCII 20-7E) এবং একটি পূর্ণসংখ্যা n[2,16] এর সমন্বিত স্ট্রিং গ্রহণ করে এবং স্ট্রিংটিতে নিম্নলিখিত পরিবর্তনটি সম্পাদন করে।

  • স্ট্রিংয়ের প্রতিটি অক্ষরকে তার এএসসিআইআই কোডে রূপান্তর করা হয় (প্রদত্ত উদাহরণগুলি হেক্সাডেসিমালে রয়েছে, যদিও বেস 10 এছাড়াও গ্রহণযোগ্য)।
  • এএসসিআইআই কোডগুলি বেসে রূপান্তরিত হয় nএবং একসাথে একত্রিত হয়।
  • নতুন স্ট্রিংটি প্রতিটি অন্যান্য চরিত্রকে বিভক্ত করা হয়েছে। যদি কোনও বিজোড় সংখ্যক অক্ষর থাকে তবে শেষ অক্ষরটি পুরোপুরি মুছে ফেলা হয়।
  • মুদ্রণ ASCII কোডগুলি (বেস 16 এ) তাদের অক্ষরগুলিতে ফিরে রূপান্তরিত হয়, যেখানে অ-প্রিন্টিং ASCII কোডগুলি সরানো হয়।
  • ফলাফল স্ট্রিং মুদ্রিত হয়।

পরীক্ষা ক্ষেত্রে

ইনপুট

Hello, World!
6

ধাপ

Hello, World!
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
2002453003003031125222330331030024453
20 02 45 30 03 00 30 31 12 52 22 33 03 31 03 00 24 45

এই প্রোগ্রামের আউটপুট হয় E001R"31$E


এটি কোড গল্ফ, সুতরাং মানক বিধি প্রযোজ্য। বাইটস মধ্যে সংক্ষিপ্ত কোড।


এই এনকোডিং অ্যালগরিদম গোপন বার্তা প্রেরণের জন্য দরকারী হতে পারে!
ক্রিটসি লিথোস

একসময় এই কাজ করতে হবে!
anOKsquirrel

@ ΚριτικσιΛίθος প্রোগ্রামটি প্রতিটি সম্ভাব্য ইনপুট স্ট্রিংয়ের জন্য কাজ করে, প্রতিটি আউটপুট স্ট্রিংটি অনন্য নয়। উদাহরণ হিসেবে বলা যায়, বেস মধ্যে 7, স্ট্রিং Jপদক্ষেপের মধ্য দিয়ে যেতে হবে J> - 50-> 101-> 10-> (no output), যেমন would স্ট্রিং Kবা L
আর্কটরাস

@ ইরিডান বলেছে, এটি একটি ক্ষয়ক্ষতিযুক্ত এনক্রিপশন কারণ বিজোড় অনুক্রমগুলি শেষ চরিত্রটি লোপড হয়ে যায়। যদিও আমি অজ্ঞ পর্যবেক্ষকের কাছে নিশ্চিত যে এটি যোগাযোগের এক
চরম

1
পদক্ষেপ 1 বিভ্রান্তিকর - অক্ষরকে হেক্সাডেসিমাল রূপান্তর করার প্রয়োজন নেই - উদাহরণস্বরূপ: HASCII 72 (দশমিক) বা 48 (হেক্স), তবে আমার যা প্রয়োজন তা 200 (বেস 6)। উদাহরণের সমস্ত সারি 2 আমার মতে অকেজো এবং বিভ্রান্তিকর
edc65

উত্তর:




3

বাশ + সাধারণ লিনাক্স ইউটিস, 118

printf %s "$1"|xxd -p|sed -r "s/../\U& /g;y/ /n/;s/^/dc -e$2o16i/e;s/../& /g;s/ .$//;"|xxd -rp|sed 's/[^[:print:]]//g'

আমার মনে হয় আপনি কমান পারে printf %s "$1"মধ্যে echo -n "$1"2 বাইট সংরক্ষণ করতে
হারুন

ইনপুট স্ট্রিং না হওয়া পর্যন্ত অ্যারোন এটি কাজ করে -eচেষ্টা করুনecho -n "-e"
ডিজিটাল ট্রমা

জঘন্য, সুন্দর দাগ!
হারুন

2

সিজেম, 24 বাইট

l:irifbe_2/{Gbc',32>&}/

মনে রাখবেন যে DEL অক্ষর মধ্যে (0x7F) যে 'এবং ,সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

l:i                     Read a line from STDIN and cast each char to integer. 
   ri                   Read another integer (base) from STDIN.
     fb                 Convert each integer from line 1 to that base.
       e_2/             Flatten and split into chunks of length 2.
                        If the last chunk has only one element, it will get
                        converted into a control character, which will be
                        removed later.
          {         }/  For each digit pair:
           Gb             Convert the pair from base 16 to integer.
             c            Cast to character.
              ',          Push the string of ASCII characters up to '~'.
                32>       Remove the first 32 (control characters).
                   &      Intersect.

ডেল চরিত্রের কী ...? দেখে মনে হচ্ছে আপনি এর চারপাশে কাজ করেছেন, তবে আমি আপনার ব্যাখ্যায় দেখতে পাচ্ছি না!
wizzwizz4

স্ট্যাক এক্সচেঞ্জ অচিহ্নিত অক্ষর ফিল্টার করে। ডেল চরিত্রটি কেবল থ্রিম পারমালিঙ্কে উপস্থিত এবং সেখানে অদৃশ্য।
ডেনিস

মানে ... মুছে ফেলা একটি নিয়ন্ত্রণ চরিত্র, তবে এটি প্রথম 32 টির মধ্যে একটি নয়। এটি ASCII এর সাথে পরিচিত নয় এমন লোকদের জন্য এটি নম্বর 127, 0x7F।
wizzwizz4

আমি নিশ্চিত না যে আমি আপনার প্রশ্নটি বুঝতে পেরেছি। আপনি কী আউটপুট থেকে ফিল্টার করবেন তা ভাবছেন?
ডেনিস

হ্যাঁ। আপনার কোড ব্যাখ্যায় আপনি DELআউটপুট থেকে চরিত্রটি কীভাবে ফিল্টার করবেন তা বলে মনে হচ্ছে না ।
wizzwizz4

2

জাভাস্ক্রিপ্ট (ES6), 137 147

জাভাস্ক্রিপ্টে উপলব্ধ সর্বাধিক ভার্বোস ফাংশন ব্যবহার করে

f=(s,b)=>alert(s.replace(/./g,x=>x.charCodeAt().toString(b)).match(/../g).map(x=>(x=String.fromCharCode('0x'+x))<='~'&x>' '?x:'').join``)

// Just for test purpose, redefine alert()
alert=x=>document.write('<pre>'+x+'</pre>')

f('Hello, World!',6)
f('PORK',3)


+1 এর জন্যx=>x>=
Ypnypn

আমার মনে হয় আপনি ব্যবহার করে কিছু বাইট সংরক্ষণ করতে পারবেন [for(z of ...)if(...)...]পরিবর্তেmap(...).filter(...)
Ypnypn

@Ypnypn আমি আপনার ইঙ্গিতটি ব্যবহার করার কোনও উপায় খুঁজে পাইনি (অ্যারে বোঝাপড়াটি যা ES7 ব্যবহার করা বাদে) তবে আপনি আমাকে এই সমস্তটি নিয়ে পুনর্বিবেচনা করতে চাপ দিয়েছিলেন। ধন্যবাদ. আমি আশা করি আপনি x=>x>=চলে গেলেও আপনার +1 রাখবেন
edc65

1
ES7 ব্যবহার করে কী দোষ হয়েছে?
Ypnypn

1
@Ypnypn আমি এমন একটি উত্তর পছন্দ করি যা সাব্পার জাভাস্ক্রিপ্ট ইঞ্জিন <
ট্রোল

1

জুলিয়া, 118 বাইট

f(s,n)=join(map(i->(c=string(Char(parse(Int,i,16))))^isprint(c),matchall(r"..",join(map(i->base(n,Int(i)),[s...])))))

Ungolfed:

function f(s::AbstractString, n::Integer)
    # Construct an array of ASCII codes in base n
    v = map(i -> base(n, Int(i)), [s...])

    # Join into a string and get all pairs, truncating
    # to an even length
    m = matchall(r"..", join(v))

    # Parse each pair as an integer in base 16, get the
    # character associated with that code point, convert
    # to a string, and include if it's printable
    x = map(i -> (c = string(Char(parse(Int, i, 16)))^isprint(c), m)

    # Join as a string and return
    return join(x)
end

1

গণিত, 134 বাইট

Print@FromCharacterCode@Select[#~FromDigits~16&/@StringPartition[""<>ToCharacterCode@InputString[]~IntegerString~Input[],2],31<#<127&]

যদি কোনও ফাংশন অনুমোদিত হয়:

গণিত, 112 বাইট

FromCharacterCode@Select[#~FromDigits~16&/@StringPartition[""<>ToCharacterCode@#~IntegerString~#2,2],31<#<127&]&

1

টিস্ক্রিপ্ট, 23 বাইট

চা স্ক্রিপ্টটি গল্ফ করার জন্য জাভাস্ক্রিপ্ট

£lc¡T(y©K(2)ßC(P(l,16±µ

তুলনামূলকভাবে সোজা-এগিয়ে কিন্তু আনন্দদায়ক সংক্ষিপ্ত। আমি সম্ভবত আরও কিছু অপারেটর দিয়ে আরও কয়েকটি চরিত্র গল্ফ করতে পারি। কিছু অন্যান্য নতুন বৈশিষ্ট্য কিছু বাইট হ্রাস করতে ব্যবহৃত হতে পারে।

অবহেলিত ও & ব্যাখ্যা

x.l(#
    l.c().T(y)
).K(2)
.m(#
    C(
      P(l,16)
    )
).j``

1
আমি বিশ্বাস করি এটি 23 টি চর (29 বাইট ) দীর্ঘ।
ক্রিশ্চিয়ান লুপাস্কু

@ w0lf এটি ইউটিএফ -8 এনকোডিংয়ের সাথে হবে তবে সমস্ত অক্ষর 256 এর চেয়ে কম হওয়ার কারণে আমরা সেগুলি নিরাপদে একটি বাইট হিসাবে গণনা করতে পারি
ডাউনওয়েট


1

পাইথন 2, 174 বাইট

def J(a,b,i=0):
 h=r=''
 B=lambda n,b:n*'x'and B(n/b,b)+chr(48+n%b+7*(n%b>9))
 for c in a:h+=B(ord(c),b)
 while i<len(h):v=int(h[i:i+2],16);r+=chr(v)*(31<v<127);i+=2
 print r

এখানে চেষ্টা করুন

কাজের জন্য সর্বোত্তম সরঞ্জাম নয়। পাইথনের যেহেতু কোনও রূপান্তর-থেকে-সালিসি-বেস ফাংশন নেই, তাই আমাকে নিজের প্রয়োগ করতে হয়েছিল। এটি মজাদার ছিল, কমপক্ষে - বিশেষত অঙ্কগুলির চেয়ে একটি [প্রান্তিক] সংক্ষিপ্ত অভিব্যক্তি খুঁজে পাওয়া "0123456789ABCDEF"[n%b]। একবারে দুটি চরিত্রের উপরে পুনরাবৃত্তি করার জন্য, আমি দেখতে পেলাম whileএকটি কার্যকারিতা পদ্ধতির চেয়ে লুপটি সামান্য খাটো।

সম্পূর্ণ প্রোগ্রাম হিসাবে 181 বাইট:

B=lambda n,b:n*'x'and B(n/b,b)+chr(48+n%b+7*(n%b>9))
a=raw_input()
b=input()
h=r=''
for c in a:h+=B(ord(c),b)
i=0
while i<len(h):v=int(h[i:i+2],16);r+=chr(v)*(31<v<127);i+=2
print r

0

ম্যাটল্যাব, 103 বাইট

function k(s,n),b=dec2base(s,n)';b(~cumsum(b-'0',1))='';c=base2dec(textscan(b,'%2c'),16)';char(c(c>31))

আমি একটি ফাংশন লিখেছি যে একটি স্ট্রিং লাগে গুলি এবং একটি পূর্ণসংখ্যা এন ইনপুট হিসাবে। উদাহরণ:

k('Hello, World!',6)

দেয়

 E001R"31$E

আমাকে প্রায় বিরক্তিকর কাজ করতে হয়েছিল বেসে রূপান্তরিত করার সময় শূন্যগুলি প্রদর্শন করা এনতে । এটিকে অ্যারে থেকে বের করে আনার জন্য প্রতি ২ য় অক্ষরের পরে বিভক্ত হওয়ার দরকার পড়ে অনেকটা বাইটের দাম। এই পদ্ধতির সাহায্যে আরও কোনও বাইট সংরক্ষণ করা সম্ভব কিনা তা নিশ্চিত নয়।


0

পিএইচপি - 286 বাইট

স্ট্রিংটি $sএবং পূর্ণসংখ্যাটি ভিতরে রাখুন$b

<?php $s=$_GET["s"];$b;$m="array_map";echo implode($m(function($v){return ctype_print($v)?$v:"";},$m("chr",$m("hexdec",str_split(strlen(implode($a=$m(function($v){global$b;return base_convert($v,16,$b);},$m("dechex",$m("ord",str_split($s))))))%2==1?substr(implode($a),0,-1):$a,2)))));?>

মানটি পাস করুন GET["s"]

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.