অক্টাল, দশমিক, না হেক্সাডেসিমাল?


11

কেবল অক্ষর এবং সংখ্যাযুক্ত একটি ইনপুট স্ট্রিং দেওয়া, এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা সম্ভাব্য মুদ্রণযোগ্য এএসসিআইআই অক্ষর (Hex 20-7E) মুদ্রণ করে যা বেস 8, 10 এবং 16 (যেখানে সম্ভব) এর স্ট্রিংয়ের মানের সাথে সামঞ্জস্য করে। অক্ষরগুলি অবশ্যই যে বেসগুলির সাথে মিলিত হয় তার ভিত্তিতে ক্রম বর্ধিতভাবে লিখতে হবে (বেস 8 প্রথম, ইত্যাদি)। [& . F]নমুনাগুলির মতো আউটপুট অ্যারে ফর্ম্যাটে (যেমন ) হতে পারে বা ফাঁকা জায়গা বা নিউলাইনগুলি (একটি পেছনের নতুন লাইন optionচ্ছিক) দ্বারা পৃথক হতে পারে ।

যদি কোনও মুদ্রণযোগ্য ASCII অক্ষর তৈরি করা যায় না তবে প্রোগ্রামটির অবশ্যই কোনও আউটপুট থাকতে হবে না।

নমুনা

31
==> 1

47
==> ' / G

69
==> E i

7A
==> z

100
==> @ d

156
==> n

189
==> <empty>

potaTO
==> <empty>

5G
==> <empty>

19
==> <empty>

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

উত্তর:


6

জাভাস্ক্রিপ্ট (স্পাইডারমনকি 30+), 74 বাইট

s=>[for(b of'o0x')if((c=+(0+b+s))>31&c<127)String.fromCharCode(c)].join` `

আপনি এবং আপনার ES7 মাহ ES6 o_o মারছেন
কনর ও'ব্রায়েন

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ আপনি যখন উভয় ব্যবহার করছেন mapএবং filterঅ্যারের বোঝাপড়া সত্যিই দরকারী।
নিল

@ নীল ব্যবহারের কোনও কারণ '0'+b+...কখন bসর্বদা স্ট্রিং থাকবে? 0+b+...
andlrc

@ দেব-নাল বাহ, আমি এটিকে কোডগল্ফ.স্ট্যাকেক্সেঞ্জঞ্জ . com/a/73323/17602 এ স্থির করেছি তবে এটি এখানে করতে ভুলে গিয়েছি
নিল

4

এমএটিএল , 23 24 28 বাইট

1 ডেভিডকে ধন্যবাদ 1 বাইট

8H6hhYs"G@ZA32:126m?6Mc

এটি অনলাইন চেষ্টা করুন!

8H6hhYs         % array [8,10,16]
"               % for each base
  G             %   push input. Do nothing the first time
  @             %   push base (8, 10 or 16)
  ZA            %   convert from base to decimal. Takes implicit input the first time
  32:126m       %   is result in acceptable range?
  ?             %   if so
    6M          %     push result of base conversion again
    c           %     convert to char
                %   implicitly end if
                % implicitly end for each
                % implicitly display stack contents

আমি নিশ্চিত নই যে প্রয়োজনীয় কিনা D, তাই না? ভেক্টর তৈরির উপর দুর্দান্ত কাজ, আমি আপনার মতো প্রায় একই কাজ করেছি কিন্তু ভেক্টরটি ছোট করতে পারিনি [8,10,16]
ডেভিড

@ ডেভিড ধন্যবাদ! আমি মনে করি Dস্ট্যাকটি খালি করার জন্য এই ক্ষেত্রে প্রয়োজনীয় ছিল। তবে তুমি ঠিক বলেছ, তাই না! ধন্যবাদ!
লুইস মেন্ডো

1
@ ডেভিড আমাকে ' ':'~'পরবর্তী প্রকাশের জন্য পূর্বনির্ধারিত আক্ষরিক হিসাবে অন্তর্ভুক্ত করতে হবে !
লুইস মেন্ডো

1
32:126mএকটি ভাল ধারণা !!
ডেভিড


3

পাইথ, 23 21 20 18 বাইট

@rd\m.xCizd0[8T16

একটি অ্যারে হিসাবে আউটপুট। \x80ব্যাকস্ল্যাশ এবং সি এর মধ্যে একটি আক্ষরিক রয়েছে, যা আমি একটি দ্বারা প্রতিস্থাপন করেছি

@rd\•m.xCizd0[8T16    Implicit: z=input
     m     d [8T16    Map the following lambda d over [8, 10, 16]:
      .x                try:
         izd              convert z from that base
        C                                          and convert to char
            0           except: return the number 0
@                     Filter that on presence in
 rd\•                   strings from space to \x80 (the printable ASCII characters).

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



1

বাশ + জিএনইউ ইউটিলিটিগুলি + এসকিআই , 36

asciiইউটিলিটি ব্যবহারের অনুমতি দেওয়া হয়েছে কিনা তা নিশ্চিত নয় । কমান্ডলাইন প্যারামিটার হিসাবে ইনপুট নেওয়া হয়।

ascii $1|tac|grep -Po '(?<=s as `).'

asciiসঙ্গে উবুন্টু ইনস্টল করা যেতে পারে sudo apt-get install ascii


1

জাভাস্ক্রিপ্ট ES6, 89 টি অক্ষর

s=>'0o,,0x'.split`,`.map(x=>(x+=s)>31&x<128&&String.fromCharCode(x)).filter(x=>x).join` `

টেস্ট:

f=s=>'0o,,0x'.split`,`.map(x=>(x+=s)>31&x<128&&String.fromCharCode(x)).filter(x=>x).join` `
"31,47,69,7A,100,156,189,potaTo,5G,19".split`,`.map(f) == "1,' / G,E i,z,@ d,n,,,,"

1

লুয়া, 147 বাইট

আমি মনে করি না যে আমি এটিকে আরও বেশি গল্ফ করতে পারি, আমি এটি করার জন্য অনেকগুলি পদ্ধতি পরীক্ষা করেছি এবং এখানে খুব সংক্ষিপ্তভাবে চলে আসছি। এমনকি কোনও পুরানো সংকলক ব্যবহার করে যা অবনমিত ফাংশন ধারণ করে table.foreach(table,function)কিছু বাইট বন্ধ করে দেয় না।

এই প্রোগ্রামটি আর্গুমেন্ট হিসাবে একটি স্ট্রিং নেয় এবং স্পেস দ্বারা পৃথক করা একটি সারণীর মানগুলির সংমিশ্রণটি মুদ্রণ করে।

t={}for _,i in pairs({8,10,16})do x=tonumber(arg[1],i)x=x and x or 0 t[#t+1]=127>x and 19<x and string.char(x)or nil end print(table.concat(t," "))

অবহেলিত এবং ব্যাখ্যা

t={}                        -- Initalise the array containing the chars to print
for _,i in pairs({8,10,16}) -- Iterate over the array {8,10,16}
do
  x=tonumber(arg[1],i)      -- convert the input in base i to a number in base 10
  x=x and x or 0            -- if the input wasn't a number, x is nil
                            -- use a ternary operator to set x in this case
  t[#t+1]=127>x and 19<x    -- if x is the bytecode of a printable character
    and string.char(x)or nil-- insert this character into t
end
print(table.concat(t," "))  -- concatenate the values in t with " " as separator
                            -- and print it

যদি আপনি ঘোরাফেরা করেন তবে কেন একটি ভেরিয়েবল সেট রয়েছে তবে গল্ফড কোডে ব্যবহার করা হয়নি ( _লুপের জন্য ভেরিয়েবল ), এখানে কেন:

আপনার কাছে লুয়ার একটি অ্যারের উপরে পুনরাবৃত্তি করার দুটি উপায় রয়েছে, হয় স্টাইলের জন্য:

for i=1,#table do --[[code here, use table[i] ]] end

বা পূর্বাভাস শৈলীতে:

for key,value do pairs(table) do --[[code here]] end

আমার টেবিলে থাকা মানগুলির প্রয়োজন ছিল {8,10,16}কারণ এগুলি আমার পুনরুক্ত করতে হবে বিভিন্ন ঘাঁটি। তবে একাধিক রিটার্ন সহ ফাংশনগুলি আপনাকে আসলে কোনটি ফিরিয়ে দিতে চায় তা চয়ন করতে দেয় না, তারা একটি আদেশ অনুসরণ করে। ভেরিয়েবল valueসেট করতে হলে আমার keyখুব মানও ধরতে হবে: এটাকে আমরা ডামি বলি _


1

সি (ফাংশন), 76

  • 2 বাইট সংরক্ষণ করেছেন @ অ্যান্টোলিগকে ধন্যবাদ।
  • 5 বাইট সংরক্ষিত @ লিউজারড্রোগের জন্য ধন্যবাদ।
j,c;f(char*s){for(j=8;c=strtol(s,0,j);j=j*j/6)isprint(c)?printf("%c ",c):0;}

Ideone।


আপনার লুপ "বৃদ্ধি" বিবৃতি দুর্দান্ত! যদিও এটি ছোট করা যেতে পারে।
anatolyg

j*=j,j/=6আরও স্পষ্টভাবে লিখিতj=j*j/6
anatolyg

@ অ্যান্যাটলিগ অফ কোর্স-ধন্যবাদ! আমি অপারেটরগুলিকে একত্রিত করার সাথে চালাক হওয়ার চেষ্টা করছিলাম - এরকম কিছু j*=j/6কিন্তু পূর্ণসংখ্যা বিভাগের সময় নির্ভুলতার ক্ষতি হওয়ার কারণে কাজ করে নি
ডিজিটাল ট্রমা

j<20,কমা অপারেটর এটির পুরো প্রভাবটি বাতিল করে দেয়।
লুসার droog

@ আলসারড্রোগ হ্যাঁ - ধন্যবাদ!
ডিজিটাল ট্রমা

0

জাভাস্ক্রিপ্ট ES6, 89 88 বাইট

নিলকে 1 টি বাইট সংরক্ষণ করা হয়েছে!

n=>[..."0x+"].map(t=>String.fromCharCode(eval(`0${t+n}`))).filter(k=>~k.search(/[ -~]/))

একটি অ্যারে প্রদান করে। যদি তা ঠিক না থাকে তবে এটি সম্ভাব্য ম্যাচগুলি প্রদর্শন করে অতিরিক্ত 8 বাইটের জন্য কাজ করে।

n=>[..."0x+"].map(t=>String.fromCharCode(eval(`0${t+n}`))).filter(k=>~k.search(/[ -~]/)).join` `


হুম, জাভা স্ক্রিপ্টটির কত পুরনো আপনার অংকটি হিসাবে 0 পার্স দিয়ে শুরু হবে?
নিল

@ নীল ফায়ারফক্স এটির সাথে ঠিকঠাক কাজ করছে বলে মনে হচ্ছে।
কনর ও'ব্রায়েন

কাজ করে বলে মনে হচ্ছে না 47
নিল

@ নীল আবারও কাজ করে ফিরে এওয়ালে ফিরে ...
কনর ওব্রায়েন

আহ, Number()প্রয়োজন 0oতবে ন্যায়বিচারে evalখুশি 0। বিভ্রান্তির জন্য দুঃখিত.
নিল

0

আর, 84 বাইট

function(x){s=sapply;y=s(c(8,10,16),strtoi,x=x);cat(s(y[y%in%c(32:126)],intToUtf8))}

ব্যবহারসমূহ strtoiধর্মান্তরিত ঘাঁটি প্রত্যেকটি এবং তারপর অক্ষরে রূপান্তর উপযুক্ত সীমার মধ্যে থাকে। catআমরা অক্ষরগুলির ডিফল্ট মুদ্রণের অনুমতি দিলে অপসারণ করে আরও 4 টি বাইট সংরক্ষণ করতে পারে (মোড়ানো "")

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