মিসি এলিয়ট, এক্সকেসিডি এবং এএসসিআইআই বাইটস


9

নিম্নলিখিত XKCD কমিক দ্বারা অনুপ্রাণিত:

এখানে চিত্র বর্ণনা লিখুন

মিসি এলিয়টের "ওয়ার্ক ইট" -তে কোরাসদের অংশটি নিম্নরূপ:

Is it worth it, let me work it

I put my thing down, flip it and reverse it

এটি মনে রেখে, আমি নিম্নলিখিত কোড গল্ফ চ্যালেঞ্জ প্রস্তাব করছি:

ক্রমযুক্ত কোড তৈরি করুন:

  1. এসটিডিএন থেকে 8-বিট এএসসিআইআই ইনপুট নেয়; উদাহরণস্বরূপ n(হেক্স 6 ই, বা বিন 01101110)
  2. 1 বিট স্তর (আমি বিশ্বাস করি একটি bitwise Shift চেপে বলা হচ্ছে) নিচে বদল প্রতিটি বাইট এর 8 বিট, যেমন 01101110হয়ে 00110111( "আমার জিনিস দমন করা");
  3. প্রতিটি বাইটের বিটগুলি উল্টায়, উদাহরণস্বরূপ 00110111হয়ে যায় 11001000("এটি ফ্লিপ করুন");
  4. প্রতিটি বাইটের জন্য বিটগুলি বিপরীত করে , যেমন 11001000হয় 00010011("এটি বিপরীত") হয়;
  5. যদি কোনও বাইটের মান 32 এর কম হয়, তবে ASCII তে ফিরে রূপান্তর করার আগে বাইটে সঞ্চালন করুন (95 + [byte value])বা অন্য কথায়, (126-(31-[byte value]))... যদি বাইট মানটি এখনও 32 এর চেয়ে কম হয় তবে 5 ধাপটি পুনরাবৃত্তি করুন
  6. যদি কোনও বাইটের মান 126 এর চেয়ে বেশি হয়, তবে ASCII তে ফিরে রূপান্তর করার আগে বাইটে সঞ্চালন করুন ([byte value] - 95)বা অন্য কথায় (32+([byte value]-127))... যদি মানটি এখনও 126 এর চেয়ে বেশি হয় তবে 6 ধাপটি পুনরাবৃত্তি করুন।
  7. নতুন রূপান্তরিত স্ট্রিংটিকে ASCII হিসাবে প্রদর্শন করুন।

ক্রিয়াকলাপে এই কোডের একটি উদাহরণ:

(ইনপুট, এটি কি মূল্য?)

workit missy ("মিসকি" ইনপুট হ'ল "ওয়ার্কিট" হ'ল ফাংশন)

পর্দার আড়ালে এখন ...

(আমাকে এটি কাজ করতে দিন ... বাইনারি মধ্যে)

01101101 01101001 01110011 01110011 01111001

(আমার জিনিস নিচে রাখুন ... বিটওয়াইস)

00110110 00110100 00111001 00111001 00111100

(...এটাকে উল্টাও...)

11001001 11001011 11000110 11000110 11000011

(... এবং এটি বিপরীত!)

10010011 11010011 01100011 01100011 11000011

(দশমিকের দিকে ফিরে রূপান্তরিত)

147 211 99 99 195

(প্রয়োজনীয় গণিত সম্পাদন করুন)

147-95 211-95 99 99 195-95 => 52 116 99 99 100

(ASCII এবং প্রদর্শন, আউটপুট এ ফিরে রূপান্তর)

4tccd

বিধি

  1. সংক্ষিপ্ততম কোড জিতেছে ... এটি সাধারণ ...
  2. ইনপুটটি ফাংশনটির মাধ্যমে, প্রম্পট দ্বারা বা যা কিছু আপনার জন্য কাজ করে তা হতে পারে, যতক্ষণ আপনি বিধি 1 আপনার জন্য "এটি কাজ করুন" করতে পারেন ...;)
  3. আমি বিপরীতমুখী হওয়ার পরে নেই, যতক্ষণ আপনি কোডটি যা করতে বলেছি তা করতে পারবেন, আমি খুশি হব ...

শুভকামনা করছি!


3
আমরা কি যত্ন নিই যে এটি একটি বিপরীতমুখী প্রক্রিয়া নয়? যখন বিট শিফটটি সঞ্চালিত হয় তখন সর্বনিম্ন-তাত্পর্যপূর্ণ বিটটি মূলত ফেলে দেওয়া হয়।
সম্মিত

1
আমি পেতে 0 1 1 0 1 1 0 1এবং 0 1 1 0 1 0 0 1জন্যmi
সামুদ্রিক

2
আমি সর্বদা অবাক হয়েছি যে গানটি কী সম্পর্কে ...
বুথবি

2
নিয়ম করে না, তাই না? উদাহরণস্বরূপ: Pবাইট মানে পরিণত হয় 235এবং বিয়োগ 95আপনাকে ছেড়ে দেয় 140। তবুও ছাপিয়ে যায় না। নাকি আমি ভুল বুঝি?
ড্যারেন স্টোন

2
বিধি পরিবর্তন করতে সাবধান। আপনার কাছে প্রচুর জমা দেওয়া উত্তর রয়েছে যা আপনার বর্তমান সংজ্ঞা অনুসারে।
ড্যারেন স্টোন

উত্তর:


5

এপিএল  50  45

⎕UCS n+95ׯ1++⌿126 31∘.≥n←2⊥⊖~(8/2)⊤⌊.5×⎕UCS⍞

কীবোর্ডে ইনপুট নেয়, যেমন:

      ⎕UCS n+95ׯ1++⌿126 31∘.≥n←2⊥⊖~(8/2)⊤⌊.5×⎕UCS⍞
missy
4tccd

আপনার উত্তরটি উন্নত করার স্বাধীনতা আমি 45 এ নামিয়ে এলাম (সম্পাদনা অনুমোদনের জন্য মুলতুবি)) এটি আমার নিজের হিসাবে পোস্ট করতে আপনার কাছ থেকে খুব বেশি সময় লেগেছে
টোবিয়া

4

GolfScript 43 38 35

{2/~512+2base(;-1%2base-32+95%32+}%

ব্যাখ্যা: স্ট্রিংয়ের প্রতিটি চরিত্রের জন্য, আমরা নিম্নলিখিতটি করব:

2/ # "Put your thing down": do integer division (accomplishing a bit shift).
~ # "Flip it": negate the bits of the integer.
512+ #make sure the binary form will have sufficient initial 0s (the extra initial 1 will be removed).
2base #convert string to value in base 2 (as an array)
(; #remove the initial 1 added by the 512 addition
-1% # "Reverse it": reverse the array
2base #convert back to base 10
-32+95%32+ #this does the equivalent of the subtraction/addition logic

ব্যবহার:

echo 'missy' | ruby golfscript.rb workit.gs
> 4tccd

পিটারটেলর থেকে সাহায্য করার জন্য ধন্যবাদ।


চালাক, এবং এখনও পর্যন্ত আপনি নেতৃত্বে রয়েছেন!
ওয়েলওয়েস্ট

আমি সাধারণত দেখতে পাই যে আমি যখন বেস রূপান্তর করি তখন গ্যারান্টিযুক্ত সংখ্যার সবচেয়ে ভাল উপায় হ'ল আগেই উপযুক্ত মান যুক্ত করা। অর্থাৎ এর পরিবর্তে 2base{0\+.,9<}doহবে 512+2base(;। আরও মনে রাখবেন যে অভিপ্রায়টি যদি কেবলমাত্র সঠিক আউটপুট পেতে হয় তবে আপনি ক্রিয়াকলাপগুলি পুনরায় অর্ডার করতে পারেন, তার পরিবর্তে {!}%আপনার কেবল ~বেস রূপান্তরকরণের আগে ইনপুটটি প্রয়োজন (এবং তারপরে এর 512+সাথে প্রতিস্থাপন করুন 511&)।
পিটার টেলর

ধন্যবাদ @ পিটারটেলর - 512 কৌশলটি নিখুঁত! যদিও প্রশ্নের চেতনায় আমি মনে করি অবহেলা করার আগে আমাদের কিছুটা পরিবর্তন করা উচিত।
বেন রিচ

আপনি যদি 2/কিছুটা শিফট হিসাবে গণনা করেন তবে আপনি এখনও কিছুটা শিফট করতে পারেন, তারপরে ~, বেস রূপান্তর করুন ...
পিটার টেলর

পছন্দ করুন সাহায্যের জন্য ধন্যবাদ.
বেন রেইচ

3

কে, 68 58

{"c"${$[a<32;95;a>126;-95;0]+a:6h$0b/:|~8#0b,0b\:x}'4h$'x}

k){"c"${$[a<32;95;a>126;-95;0]+a:6h$0b/:|~8#0b,0b\:x}'4h$'x}"missy"
"4tccd"



1

রুবি, 115

এই এন্ট্রিটি আপত্তিহীনভাবে দীর্ঘ। সুতরাং আমি সাথে যাব, "তবে আপনি এটি পড়তে পারেন!" :-P

$><<gets.chars.map{|c|c=(c.ord.to_s(2)[0..-2].tr('01','10').reverse+'11').to_i(2)
(c+(c<32?95:c>126?-95:0)).chr}*''

থেকে পড়া stdin:

missy
4tccd

1

পাইথন 2.7, 106

আর একটি দীর্ঘ উত্তর, কিন্তু ওহে এটা আমার প্রথম চেষ্টা:

for c in raw_input():x=sum(1<<7-i for i in range(8)if~ord(c)>>1+i&1);print'\b%c'%(x+95*((x<32)-(x>126))),

ড্যারেন স্টোন এবং গ্র্যাকের নীচে দেওয়া মন্তব্যের ভিত্তিতে পরিবর্তিত ...


আপনি পরে স্থান ড্রপ করতে পারেন a:
ড্যারেন স্টোন

তুমি তোমার চূড়ান্ত প্রতিস্থাপন করতে পারেন chrঅন্য 1-গৃহস্থালির কাজ সঞ্চয় জন্য এই সঙ্গে অভিব্যক্তি: chr(x-(95,(-95,0)[x>32])[x<126])
ড্যারেন স্টোন

কিছুটা খাটো:print'\b%c'%(x+95*((x<32)-(x>126))),
grc

1

পাইথন 2.7 - 73 86

নিয়মে পরিবর্তনের জন্য ধন্যবাদ আমি বাইনারি এবং পূর্ণসংখ্যার হেরফের ব্যবহার করে এগুলি করার অনেক সহজ উপায় খুঁজে পেয়েছি। এটি অস্থায়ী ভেরিয়েবলের প্রয়োজন না হয়ে কুইরিলিওমের উপর স্থান বাঁচায়:

for i in input():print chr((int(bin(ord(i)>>1^255)[:1:-1],2)-32)%95+32),

> python workit.py
"missy"
4 t c c d
> python workit.py
"P Diddy"
- 9 \ t T T d

এবং ব্যাখ্যা আকারে:

for i in input():  # Take an input, better quote it
                   # Is it worth it? Let me work it
  print chr(
    int(bin(
        ord(i)>>1  # Put my thing down by bitshifting it
             ^255  # XOR it with 255 to flip the bits and pad to 8 bits
        )[:1:-1]   # Then reverse it (but don't take the cruft
                   # python puts at the start of binary strings)
    ,2) 
    )-32)%95+32    # This pulls everything into the 32-126 range
  ),
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.