স্ট্রিং টু বিট ট্রানজিশন


10

কার্য

এক বা একাধিক এএসসিআইআই অক্ষরের একটি ইনপুট স্ট্রিং দেওয়া হয়েছে যা কোডপয়েন্টগুলি 0 থেকে 128 এর মধ্যে রয়েছে (একচেটিয়া), নিম্নলিখিতটি করুন:

  1. প্রতিটি অক্ষরকে তার 7-বিট ASCII কোডে রূপান্তর করুন (যদি ASCII কোডটি 7 বিটের চেয়ে কম হয় তবে শূন্য বিট রাখুন)
  2. সমস্ত বিট প্রতিরোধ করুন (বিটের ফলাফল 7*nযেখানে nঅক্ষরের সংখ্যা রয়েছে)
  3. এই বিটস্ট্রিমের প্রতিটি বিটের জন্য, পূর্ববর্তী বিট থেকে আলাদা হলে 1 মুদ্রণ করুন এবং অন্যথায় 0 মুদ্রণ করুন। প্রথম আউটপুট বিট সর্বদা 1।

উদাহরণ

ইনপুট:

Hi

আউটপুট:

11011001011101

ব্যাখ্যা:

স্ট্রিংয়ের "হাই" এএসসিআইআই কোড রয়েছে

72 105

বিট যা হয়:

1001000 1101001

এবং রূপান্তর বিট সূচকগুলি:

11011001011101

এটি কোড গল্ফ। সর্বনিম্ন বাইট গণনা জয়।

পরীক্ষার কেস

পরীক্ষার কেস 1:

Hello World!
110110010101110011010101101010110001110000111110000110000001011101101010101100110001

পরীক্ষার কেস 2:

%% COMMENT %%
1110111111011111100001100010010100001010110101011010011101010011111110011000001101111110111

পরীক্ষার কেস 3 (লুইস মেন্ডোকে ক্রেডিট):

##
11100101110010

এমএটিএলে 9 বাইট সহ সংক্ষিপ্ততম সমাধানের জন্য লুইস মেন্ডোকে অভিনন্দন!


2
প্রস্তাবিত পরীক্ষার কেস ##(শীর্ষস্থানীয় 0বিট; কিছু উত্তর বর্তমানে এর কারণে ব্যর্থ হয়েছে)
লুইস মেন্ডো

4
এটি কীভাবে ম্যানচেস্টার এনকোডিং চ্যালেঞ্জের সদৃশ? আমি কিছু অনুপস্থিত করছি?
গ্যাস্ট্রোপনার

2
অন্য চ্যালেঞ্জটি বলছে যে বিটগুলির ইনপুট স্ট্রিমটিকে ডাবল-রেট আউটপুট প্রবাহে রূপান্তর করা হবে, প্রতিটি ইনপুট '1' কে '01' তে অনুবাদ করা হবে এবং প্রতিটি ইনপুট '0' '10' তে অনুবাদ করা হবে । সুতরাং আমার মতে দুপ না। যদি উপরে একটি বিশাল সংখ্যক মানুষ @ গ্যাস্ট্রোপনারের মন্তব্যকে উপরে তুলে ধরেন আমি আন-ডুপ করতে পারি (বা সেই ক্ষমতা সহ অন্য কোনও ব্যবহারকারী)
লুইস মেন্ডো

1
@ শেগজি: উভয় পরীক্ষার ক্ষেত্রে একটি স্থান অন্তর্ভুক্ত থাকে, যার কেবলমাত্র একটি মাত্র বিট সেট থাকে, এবং 7 তম নয়। সুতরাং আমি মনে করি না যে সমস্যা বিবৃতিটি গ্যারান্টি দিচ্ছে যে প্রতিটি আসকি কোড দৈর্ঘ্যে হুবহু 7 বিট হবে।
পুনরাবৃত্তি

1
@ স্মাইলঅ্যান্ডনড দ্বিতীয় ভাবার পরে, আমি মনে করি আপনার খালি স্ট্রিং পরিচালনা করার দরকার নেই।
justhalf

উত্তর:


4

এমএটিএল , 9 বাইট

Hj7&B!hdg

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

ব্যাখ্যা

H     % Push 2
j     % Read line of input, unevaluated
7&B   % Convert to binary with 7 bits. Gives a 7-column matrix
!     % Transpose
h     % Concatenate horiontally. The matrix is read in column-major order
d     % Consecutive differences
g     % Convert to logical. Implicitly display

1
এটি এখন পর্যন্ত সংক্ষিপ্ততম। +1 টি। টানা পার্থক্যের জন্য একটি বিল্ট-ইন থাকা মজাদার।
জাস্টহেল্ফ


4

জাপট -P , 11 বাইট

0গাণিতিক সঞ্চালনের চেষ্টা করার সময় জাভাস্ক্রিপ্টে ফাঁকা স্থান জোর করা যেতে পারে বা এই ক্ষেত্রে বিটওয়াইজ অপারেশনটি এই সুবিধাটি নিয়ে যায় ।

c_¤ù7Ãä^ i1

এটি ব্যবহার করে দেখুন বা সমস্ত পরীক্ষার কেস চালান

c_¤ù7Ãä^ i1     :Implicit input of string
c_              :Map codepoints
  ¤             :  Convert to binary string
   ù7           :  Left pad with spaces to length 7
     Ã          :End map
      ä^        :XOR consecutive pairs
         i1     :Prepend 1
                :Implicitly join and output

7-বিটের অর্থ হ'ল এটি যদি 32 (স্থানের অক্ষরের জন্য) হয় তবে তা হবে 0100000। এছাড়াও% চরিত্রটি (37) হবে0100101
justhalf

এটা এখন কাজ করছে. +1
জাস্টহেল্ফ

2

সিজাম , 21 বাইট

1q{i2b7Te[}%e__(;.^);

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

ব্যাখ্যা

এর নমুনা ইনপুট সহ স্ট্যাকটি দেখানো হচ্ছে 5:

1 q      e# Push 1 and then the whole input: 1 "5"
{
  i      e# Convert to its char code: 1 [53]
  2 b    e# Convert to binary: 1 [[1 1 0 1 0 1]]
  7 T e[ e# Left-pad with 0 to length 7: 1 [[0 1 1 0 1 0 1]]
} %      e# Map this block over every character in the string
e_       e# Flatten array: 1 [0 1 1 0 1 0 1]
_ ( ;    e# Duplicate array and remove its first element: 1 [0 1 1 0 1 0 1] [1 1 0 1 0 1]
. ^      e# Element-wise xor: 1 [1 0 1 1 1 1 1]
) ;      e# Remove and pop the last element of the array: 1 [1 0 1 1 1 1]
         e# Stack implicitly printed: 1101111

কিছুটা পূর্বের বিট থেকে আলাদা কিনা তা দেখতে, আমরা প্রথম উপাদান ছাড়াই বিট অ্যারে এবং বিট অ্যারের মধ্যে একটি ভেক্টর (উপাদান-ভিত্তিক) জোর করি। আমরা ফলাফলের শেষ বিটটিও সরিয়ে ফেলি, কারণ এটি সর্বদা দীর্ঘ বিন্যাসের অপরিবর্তিত থাকে।


2

এপিএল (ডায়ালগ ইউনিকোড) , 16 বাইট এসবিসিএস

পুরো প্রোগ্রাম। স্টিডিন থেকে স্ট্রিংয়ের জন্য প্রম্পট দেয়।

1,2≠/∊1↓¨11DR¨⍞

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

 ইনপুট জন্য প্রম্পট ("একটি কনসোল একটি উদ্ধৃতি")

11⎕DR¨ প্রতিটি চরিত্রকে বিট-বুলিয়ান ডি আতা আর পূর্বরূপে পরিবর্তন করুন

1↓¨ প্রতিটি থেকে প্রথম বিট ড্রপ

ε nlist (চেপ্টা)

2≠/ যুগলতর পার্থক্য

1, একটি প্রিপেন্ড করুন



2

কাঠকয়লা , 25 বাইট

⭆θ◧⍘℅鲦⁷←Wⅈ←I﹪⍘KD²←01 ²1

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

⭆θ◧⍘℅鲦⁷←

সমস্ত অক্ষরগুলিকে বাইনারি রূপান্তর করুন এবং এগুলি 7 দৈর্ঘ্যে প্যাড করুন এবং তারপরে মুদ্রণ করুন, তবে শেষ সংখ্যায় কার্সারটি রেখে দিন।

Wⅈ

কার্সার প্রথম অঙ্কের উপরে না আসা পর্যন্ত পুনরাবৃত্তি করুন।

←I﹪⍘KD²←01 ²

অঙ্কগুলি পৃথক কিনা তা গণনা করুন এবং পার্থক্য সহ প্রতিটি অঙ্কটি ওভাররাইট করুন।

1

A দিয়ে প্রথম অঙ্কটি মুছে ফেলুন 1


2

পাওয়ারশেল , 73 56 49 বাইট

$args|%{$b=+$_
6..0}|%{+($c-ne($c=($b-shr$_)%2))}

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

-17 বাইট ধন্যবাদ ম্যাজি :)



দুর্দান্ত, আপনার নিজের এটি পোস্ট করতে হবে।
আন্দ্রে ওদেগোভ

আপনার জন্য এই উত্তর। আমার রাজকন্যা অন্য দুর্গে আছে :))))
মজজি

1
@ মমজি, আরও কিছু -7 বাইট :)
আন্দ্রে ওদেগোভ

দুর্দান্ত এবং উজ্জ্বল! 【ツ】
মজজি

2

রুবি -p , 68 57 বাইট

Xnor এর পাইথন দ্রবণ দ্বারা ব্যবহৃত পদ্ধতিটি নির্লজ্জভাবে চুরি করে -11 বাইট ।

l=1
gsub(/./){l=l<<7|$&.ord}
$_=?1+(l^l/2).to_s(2)[2..-1]

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

আসল সমাধান:

gsub(/./){'%07b'%$&.ord}
l=p
gsub(/./){b=$&.ord-48;r=l ?l^b:1;l=b;r}

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


2

অক্টাভা , 36 30 বাইট

লুইস মেন্ডোকে ধন্যবাদ স্থির করুন

সানচাইসেস -2 বাইট ধন্যবাদ

@(a)[1;~~diff(de2bi(a,7)'(:))]

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


আপনি সম্ভবত বেশ কয়েকটি বাইট দিয়ে শেভ করতে পারেন de2bi
সানচিইস

@ সানচাইজির আগে আমার জন্য কাজ করছিল না তবে আমি যখন পারব তখন অন্য চেহারাটি দেখবো
মেয়াদোত্তীর্ণ ডেটা



1

ডার্ট , 213 168 বাইট

f(s,{t,i}){t=s.runes.map((r)=>r.toRadixString(2).padLeft(7,'0')).join().split('').toList();for(i=t.length-1;i>0;i--)t[i]=t[i]==t[i-1]?'0':'1';t[0]='1';return t.join();}

আগের ওয়ান-লাইনার

f(String s)=>'1'+s.runes.map((r)=>r.toRadixString(2).padLeft(7,'0')).join().split('').toList().reversed.reduce((p,e)=>p.substring(0,p.length-1)+(p[p.length-1]==e?'0':'1')+e).split('').reversed.join().substring(1);

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

এই শব্দগুচ্ছতা এবং সহজভাবে অন্তর্নির্মিত অভাব সত্যিই এটিকে হত্যা করছে। তবুও একটি লাইনার টানতে পরিচালিত।

  • একটি লাইনার ব্যবহার না করে এবং লুপের জন্য ব্যবহার না করে -45 বাইট

1

স্ট্যাক্স , 13 12 বাইট

ìEÖâU₧(~¬8IE

এটি চালান এবং এটি ডিবাগ করুন

যদি কিছুটা উত্তর অনুমান করে যে সমস্ত ইনপুট অক্ষরগুলিতে 7th ম বিট সেট রয়েছে তা যদি নিশ্চিত হয় তবে এটি 10 বাইটে করা যেতে পারে


1

কোটলিন , 182 বাইট

var l='6'
fun f(b:String)=b.fold(""){t,i->t+"".a(i.toInt())}.map{if(l==it){l=it;0} else {l=it;1}}
fun String.a(v:Int):String=if(v<=0)"${this}0".reversed() else "${this}${v%2}".a(v/2)

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

আশা করি আমি শিগগিরই এটির উন্নতি করতে পারব, আমার মনে হচ্ছে উন্নতির জন্য কিছু দাগ থাকতে হবে তবে আমি এখনই ভাবতে পারি না




1

রুবি -p , 50 বাইট

gsub(/./){"%07b"%$&.ord}
gsub(/./){$`=~/#$&$/?0:1}

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

ব্যাখ্যা

প্রথম লাইন, মান কালিটির উত্তর হিসাবে একই :

gsub(/./){       $&    }   # Replace each character $&…
                   .ord    # …with its ASCII code…
                %          # …formatted as…
          "%07b"           # …binary digits padded to 7 places.

দ্বিতীয় লাইন:

gsub(/./){      $&      }  # Replace each character $&…
          $`               # …if the text to its left…
            =~             # …matches…
              /#  $/       # …the Regexp /c$/ where "c" is the character…
                    ?0:1   # …with 0, or 1 otherwise.

রুবিতে আপনি রেজিপ্যাক্স লিটারালগুলিতে উদাহরণস্বরূপ /Hello #{name}/, এবং যে ভেরিয়েবলগুলি দিয়ে শুরু হয় $বা @আপনি কোঁকড়া ধনুর্বন্ধনী বাদ দিতে পারেন, তাই যদি উদাহরণস্বরূপ $&হয় "0"তবে গ্রাওলিক্সিতে /#$&$/পরিণত হয় /0$/


1

কে (এনএনজি / কে) , 9 13 বাইট

সমাধান:

~=':,/(7#2)\'

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

ব্যাখ্যা:

~=':,/(7#2)\' / the solution
           \' / convert each
      (   )   / do this together
       7#2    / 2 2 2 2 2 2 2
    ,/        / flatten
 =':          / equal to each-previous?
~             / not

মন্তব্য:

  • শুধুমাত্র 6-বিট অক্ষর সমন্বয়ে থাকা স্ট্রিংগুলিকে সমর্থন করার জন্য +4 বাইট

#উদাহরণস্বরূপ ইনপুটটির জন্য এটি ব্যর্থ বলে মনে হচ্ছে (আউটপুটটিতে কেবল 6 টি বিট রয়েছে)
লুইস মেন্ডো

@ স্ট্রিস্টস্টার, আপনি কি স্থির সংস্করণটি পোস্ট করতে চান?
জাস্টহেল্ফ

1

ইমোজিকোড , 263 বাইট

🏁🍇🔤🔤➡️🖍🆕s🔂b📇🆕🔡👂🏼❗️❗️🍇🍪s🔪🔡🔢b❗️➕128 2❗️1 7❗️🍪➡️🖍s🍉🔤?🔤➡️🖍🆕p🔂b s🍇↪️b🙌p🍇👄🔤0🔤❗️🍉🙅🍇👄🔤1🔤❗️🍉b➡️🖍p🍉🍉

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

Ungolfed:

🏁 🍇  💭 Main code block
    🔤🔤 ➡️ 🖍 🆕 s  💭 Start with s as the empty string
    🔂 b 📇 🆕 🔡 👂🏼  💭 For each byte b in the input ...
    ❗️ ❗️ 🍇
        🍪 s  💭 ... append ...
           🔪 🔡 🔢 b ❗️ ➕ 128  💭 ... b + 128 (this gives the leading zero(s) in case the binary representation of b is shorter than 7 digits) ...

                 2  💭 ... in binary ...
              ❗️
              1 7  💭 ... without the leading one ...
           ❗️
        🍪
        ➡️ 🖍 s  💭 ... to s
    🍉
    🔤?🔤 ➡️ 🖍 🆕 p  💭 This will be used as the previous character, by assigning it neither 0 nor 1 we assure the first bit output is always a one
    🔂 b s 🍇  💭 For each character in s:
        ↪️ b 🙌 p 🍇  💭 If it is the same as the previous character ...
            👄 🔤0🔤 ❗️  💭 ... output a zero ...
        🍉 🙅 🍇  💭  ... else ...
            👄 🔤1🔤 ❗️ 💭 ... output a one
        🍉
        b ➡️ 🖍 p  💭 And the current character becomes the new previous character.
    🍉
🍉


1

পাইথন 3.8 , 72 বাইট

সমাধান:

lambda a:["10"[a==(a:=x)]for x in"".join(bin(ord(i)+128)[3:]for i in a)]

ব্যাখ্যা:

পাইথন ৩.৮ এর পরে অ্যাসাইনমেন্ট এক্সপ্রেশনগুলি (স্ট্যান্ডার্ড অ্যাসাইনমেন্ট স্টেটমেন্টের চেয়ে) প্রবর্তন করার পরে, আমি এগুলিকে একটি তালিকা বোঝার জন্য ব্যবহার করতে চেয়েছি যা শেষ আইটেমটি মনে রাখা দরকার remember এটি করার সর্বোত্তম উপায় নয় তবে অ্যাসাইনমেন্ট এক্সপ্রেশনটি ব্যবহারের একটি আকর্ষণীয় পদ্ধতি প্রদর্শন করে।

কোডটি একটি ল্যাম্বডা ফাংশন তৈরি করে যা প্রয়োজনীয় আর্গুমেন্ট গ্রহণ করে যা রূপান্তর করার জন্য স্ট্রিং। যখন ডাকা হয়, ফাংশন নীচে হিসাবে এগিয়ে যায়। একটিতে প্রতিটি অক্ষর তার অক্ষর কোডে রূপান্তরিত হয় যা 6 টি-বিট অক্ষরের সাথে ডিল করার জন্য 128 যোগ করা হয়েছে (বাইনারি উপস্থাপনা সর্বদা 8 বিট হবে এবং আমরা প্রথম বিটটি কেটে দিতে পারি)। এই সংখ্যাটি বাইনারিতে রূপান্তরিত হয় এবং শিরোনাম (0x) এবং 128 যোগ করা থেকে প্রাথমিক 1 টি কেটে ফেলা হয়। এই নতুন স্ট্রিংগুলি তারপরে আরও বড় স্ট্রিংয়ে যুক্ত হবে।

এই নতুন স্ট্রিংয়ের প্রতিটি অক্ষরের জন্য (এতে পাঠ্যের সংক্ষিপ্ত 7-বিট উপস্থাপনা রয়েছে), এটি অক্ষরটি পূর্ববর্তী অক্ষরের মতো একই কিনা তা পরীক্ষা করা হয়। প্রথম চরিত্রের সাথে কী ঘটে? প্রথম ফলাফলের অক্ষরটি সর্বদা "1" হওয়া উচিত তাই আমাদের কেবলমাত্র নিশ্চিত করতে হবে যে শেষ বর্ণের ভেরিয়েবলের মধ্যে যা আছে তা "1" বা "0" নয়। আমরা এখন আর এটি ব্যবহার না করে আসল প্যারামিটারটি পুনরায় ব্যবহার করে এটি করি। এটির সমস্যা হতে পারে যদি মূল স্ট্রিংটি একক "0" ছিল (একক "1" কেবলমাত্র কাজ করতে পারে) তবে আমরা এটিকে উপেক্ষা করব।

তুলনা চলাকালীন, পূর্ববর্তী অক্ষরটি প্রথমে মূল্যায়ন করা হয়েছিল সুতরাং যখন আমরা পূর্বের চরিত্রের বর্তমান অক্ষরটি পরিবর্তনশীল সেট করতে অ্যাসাইনমেন্ট এক্সপ্রেশনটি ব্যবহার করি তখন এটি তুলনা প্রকাশের মূল্যায়ণকে প্রভাবিত করে না।

তুলনাটি হয় সত্য বা মিথ্যা উত্পাদন করে যা পাইথনে যথাক্রমে 1 বা 0 হিসাবেও ব্যবহৃত হতে পারে, সুতরাং তারা স্ট্রিংয়ে "1" বা "0" সন্ধান করতে ব্যবহৃত হয়


স্ট্রিং ফর্ম্যাট bin(ord(i)+128)[3:]f"{ord(i):07b}"
লিটারাল

1

টিসিএল , 215 167 140 বাইট

{{s {B binary} {X ~$w/64}} {join [lmap c [split $s {}] {$B scan $c c w;$B scan [$B format i [expr 2*$w^$w^$X<<7]] B7 r;set X $w;set r}] ""}}

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

স্থানান্তরগুলি সনাক্ত করার জন্য শিফট বাই ওয়ান এবং একচেটিয়া-বা ব্যবহার করে। পরবর্তী অক্ষরের এমএসবিতে বর্তমান চরিত্রের এলএসবি বহন করে। Lmap দ্বারা প্রত্যাবর্তিত তালিকায় যোগদানের মাধ্যমে প্রতিটি অক্ষরের আউটপুট একত্রিত করে।

ইনিশিয়েশন এবং বারবার কমান্ডে বাইটস সংরক্ষণ করতে ডিফল্ট আর্গুমেন্ট সহ ল্যাম্বডাস ব্যবহার করে।

অপারেশনের আদেশের উপর প্রচুর নির্ভর করে। খালি স্ট্রিংয়ের জন্য কাজ করে।


1

05AB1E (উত্তরাধিকার) , 12 বাইট

Çb7jð0:¥ÄJ1ì

২০১৫ সাল থেকে, 05AB1E এর উত্তরাধিকার সংস্করণ ব্যবহার করে j পরোক্ষভাবে স্ট্রিং একসঙ্গে যোগদান করে, যা একটি সুনির্দিষ্ট প্রয়োজন Jপর j05AB1E এর নতুন সংস্করণে।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

Ç             # Convert the (implicit) input-string to a list of ASCII code-points
              #  i.e. "Hi#" → [72,105,35]
 b            # Convert each integer to a binary string
              #  → ["1001000","1101001","100011"]
  7j          # Prepend each with spaces to make them length 7,
              # and join everything together to a single string implicitly
              #  → "10010001101001 100011"
    ð0:       # Replace all those spaces with 0s
              #  → "100100011010010100011"
       ¥      # Get the deltas of each pair of 1s/0s
              #  → [-1,0,1,-1,0,0,1,0,-1,1,-1,0,1,-1,1,-1,0,0,1,0]
        Ä     # Get the absolute value of this
              #  → [1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,1,0]
         J    # Join them all together
              #  → "10110010111011110010"
          1ì  # And prepend a 1
              #  → "110110010111011110010"
              # (after which the result is output implicitly)


1

পাইথন 3 , 88 84 বাইট

l=2;s=''
for c in''.join(f'{ord(c):07b}'for c in input()):s+='01'[l!=c];l=c
print(s)

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

আমি মনে করি যে অ্যাসাইনমেন্টগুলি এড়ানো উচিত, তবে এটি করার কোনও উপায় সম্পর্কে ভাবা যায় নি।

হালনাগাদ:





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