এন্ডিয়ানেসনেস অদলবদল করুন


20

- তোমাদের অধিকাংশই হিসাবে সম্ভবত জানেন, (বাইট-Addressable) হার্ডওয়্যার স্মৃতি দুটি বিভাগ ভাগে ভাগ করা যায় অল্প endian এবং বড় endian । সামান্য-এডিয়ান স্মৃতিতে বাইটগুলি সংখ্যাটি 0 দিয়ে শুরু হয় সামান্য (অন্তত গুরুত্বপূর্ণ) শেষে এবং বিগ-এন্ডিয়ানগুলিতে অন্যভাবে।

মজাদার ঘটনা : এই পদগুলি জোনাথন সুইফটের বই গুলিভারস ট্র্যাভেলসের উপর ভিত্তি করে যেখানে লিলিপুটিয়ান রাজা তার নাগরিকদেরকে তার সামান্য প্রান্তে (এইভাবে ছোট-ছোটদের) ডিম ভাঙ্গার আদেশ দিয়েছিল এবং বিদ্রোহীরা তাদের বড় অংশটি ভেঙে ফেলবে।

অদলবদল কীভাবে কাজ করে

মনে করুন আমাদের কাছে 12648430মেমরির একটি স্বাক্ষরবিহীন পূর্ণসংখ্যা (32 বিট) রয়েছে, একটি বড়-এন্ডিয়ান মেশিনে যা নীচের মতো দেখতে পারে:

  addr: 0  1  2  3
memory: 00 C0 FF EE

বাইট-অর্ডার উল্টিয়ে আমরা হেক্সাডেসিমাল পূর্ণসংখ্যা পাই 0xEEFFC000যা 4009738240দশমিক।

তোমার কাজ

একটি প্রোগ্রাম / ফাংশন লিখুন যা দশমিকের মধ্যে একটি স্বাক্ষরবিহীন 32 বিট পূর্ণসংখ্যা প্রাপ্ত করে এবং উপরের বর্ণনার মতো শেষের দিকটি অদলবদল করার সময় ফলস্বরূপ পূর্ণসংখ্যাটি আউটপুট করে।

বিধি

  • ইনপুট সবসময় সীমার মধ্যে হতে হবে 0করার4294967295
  • আউটপুট STDOUT এ মুদ্রিত করা যাবে (নতুন লাইনের / স্থানগুলি ঠিক আছে) বা ফিরে আসতে পারে
  • ইনপুট এবং আউটপুট দশমিক হয়
  • অবৈধ ইনপুট নেভিগেশন আচরণ অপরিশোধিত বামে

পরীক্ষার মামলা

0 -> 0
1 -> 16777216
42 -> 704643072
128 -> 2147483648
12648430 -> 4009738240
16885952 -> 3232235777
704643072 -> 42
3735928559 -> 4022250974
4009738240 -> 12648430
4026531839 -> 4294967279
4294967295 -> 4294967295

একটি ফাংশন উত্তরের জন্য, "ইনপুট এবং আউটপুট দশমিক হয়" তার অর্থ হয় অঙ্কের অক্ষরের একটি স্ট্রিং বা অঙ্কের মানগুলির অ্যারে প্রয়োজন? অথবা কোনও ফাংশন উত্তরটি তার ভাষার প্রাকৃতিক পূর্ণসংখ্যার মান উপস্থাপনা ব্যবহার করতে পারে, যা বেশিরভাগ ক্ষেত্রে "দশমিক" সাথে একেবারেই কিছু করার নেই?
aschepler

1
@ এসচেপলার ভাষার পূর্ণসংখ্যা মান, যেমন। 42দশমিক ক্ষেত্রে দেওয়া হয় তবে প্রযুক্তিগতভাবে এটি সি তে বাইনারি হয়। আপনি অবশ্যই টাইপ করতে পারেন, 0x2aআমি যা আটকাতে চেয়েছিলাম তা ইনপুটটিকে স্ট্রিং "2a"বা এর মতো গ্রহণ করা।
19

সম্পর্কিত (যেহেতু এই চ্যালেঞ্জটি প্রথমে 32 বিটগুলিতে প্যাড নিশ্চিত করছে)
ফ্লিপট্যাক

উত্তর:


25

x86_32 মেশিনের ভাষা, 3 বাইট

endian_swap:        # to be called with PASCAL REGISTER calling convention
0f c8    bswap eax
c3       ret

এটি কিছুটা ধোঁকাবাজি। পাস্কেল রেজিস্টার কলিং কনভেনশন ( উইকিপিডিয়া দেখুন ) কিছুটা __رفেষ্টক্লালের মতো, এটি ইੈਕਸে প্রথম প্যারামিটারটি ব্যতীত এবং ইএক্সেও ফেরতের মান থাকে। এটি কলি-ক্লিনআপও, তবে যেহেতু আমরা স্ট্যাকটি রিটার্ন পয়েন্টার ব্যতীত অন্য কোনও কিছুর জন্য ব্যবহার করি না আমাদের কিছু করার দরকার নেই। এটি আমাদের একটি মুভ বা এক্সএচজি এড়াতে এবং কেবল সরাসরি বিস্যাপ ব্যবহার করতে সহায়তা করে।


এর bswapজন্য একটি 80486 বা তার বেশি প্রয়োজন নোট করতে চাই :)
সিলিংক্যাট

@ এসিলিংক্যাটটি খুব সত্য, যদিও আমি নিশ্চিত যে সংকলক বা সরঞ্জামচেনের বিধিনিষেধের কারণে এখানে অন্য অনেকগুলি সমাধানের জন্য এটি স্পষ্টতই কেস!
বহুপদী

10

x86_64 যন্ত্রের ভাষা লিনাক্স, 5 4 বাইট

0:       0f cf                   bswap  %edi
2:       97                      xchg   %eax,%edi
3:       c3                      retq 

-1 এর জন্য @ পেটার ফেরি ধন্যবাদ

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


এটি দশমিক ফেরতের মান নয়। আমি এটা গণনা করি না। তদতিরিক্ত, আপনি xchg এডি, 4 বাইট জন্য eax করতে পারে।
পিটার ফেরি

@ পেটারফেরি বাহ আমি কেবল আপনার ওয়েবসাইটটি পিই হেডারগুলির বিষয়ে পড়ছিলাম!
সিলিংক্যাট


6

জাপট , 10 14 বাইট

sG ùT8 ò w ¬nG

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


ব্যাখ্যা

একটি বেস-16 স্ট্রিং রূপান্তর ইনপুট পূর্ণসংখ্যা ( sG), ব্যবহার 0দৈর্ঘ্য 8 (শুরু প্যাড থেকে ùT82 অক্ষর স্ট্রিং (এর একটি অ্যারের জন্য), বিভক্ত ò), বিপরীত ( w), একটি স্ট্রিং পুনরায় যুক্ত ( ¬) এবং রূপান্তর ফিরে base- করতে 10 ( nG)।


আপনি জানেন যে হ্যান্ডি বৈশিষ্ট্যটি কী হতে পারে তার মতো আরও ফাংশন থাকতে পারে y, যখন কোনও ফাংশন কোনও ফাংশন দেওয়া হয়, তখন তাদের সাধারণ রূপান্তর প্রয়োগ করে, ফাংশনটি চালান এবং তারপরে রূপান্তরটি উল্টান। এই ক্ষেত্রে আমি মনে করি এটি sG_ò w ¬8 বাইটের জন্য এটি সংক্ষিপ্ত করা যাবে । বা যদি òতাও করে থাকে তবে এটি sG_ò2_w7 এর জন্যও হতে পারে ...
ETH প্রোডাকশনগুলি

@ETH প্রোডাকশনস আমি এটি সমর্থন করি; &.জে এর আন্ডার- ক্রিয়াবিজ্ঞান এটি করে এবং এটি কখনও কখনও গল্ফের ক্ষেত্রে সত্যই সহায়ক। যদিও সমস্ত বিপরীতে কোডিং করা ক্লান্তিকর হতে পারে।
কোলে

@ ইথ প্রডাকশনস: আরও "ওভারলোডিং" তত ভাল :) আমি এটি লিখলাম লেখচিত্রগুলি টানতে এবং মূলত sG_òw...আমার জীবনের জন্য, এটি কেন কাজ করবে না তা বুঝতে পারিনি! আমি বুঝতে পারি আমার ভুল (গুলি) অবশেষে!
শেগি

2 << 24 ... এর চেয়ে কম
নীল

ধন্যবাদ, @ নীল; পরে এটি স্থির করা হবে। দেখে মনে হচ্ছে এটির জন্য আমার 4 বাইট লাগবে।
শেগি


5

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

f=lambda x,i=3:x and(x%256)<<8*i|f(x>>8,i-1)

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


আপনার সাথে একটি বাইট recursing সংরক্ষণ করতে পারবেন i*8বদলে i, থেকে শুরু i=24
xnor

এবং চারপাশের পেরেনগুলি x%256প্রয়োজনীয় নয়।
xnor

5

এপিএল + উইন 14 বাইট

256⊥⌽(4⍴256)⊤⎕

ব্যাখ্যা

⎕ prompt for screen input
(4⍴256)⊤ 4 byte representation in base 256
⌽ reverse bytes
256⊥ bytes from base 256 to integer

1
256⊥⌽⎕⊤⍨4⍴256-1 বাইট জন্য কাজ করবে ?
এরিক আউটগল্ফার 18

⍨ অপারেটরটি এপিএল + উইনে উপলভ্য নয় সুতরাং উত্তরটি নেই তবে এটি ডায়ালগ এপিএলের পক্ষে হ্যাঁ হতে পারে
গ্রাহাম

5

সি # , 70 68 বাইট

এটি সম্ভবত অনুকূল নয়।

68:

Func<uint,uint>f=n=>((n=n>>16|n<<16)&0xFF00FF00)>>8|(n&0xFF00FF)<<8;

70:

uint e(uint n){n=n>>16|n<<16;return(n&0xFF00FF00)>>8|(n&0xFF00FF)<<8;}

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


আপনি অ্যাসাইনমেন্টটি returnএক্সপ্রেশনটিতে স্থানান্তর করতে পারেন এবং তারপরে এক্সপ্রেশন-বডিয়ায় সদস্য সিনট্যাক্স: uint e(uint n)=>((n=n>>16|n<<16)&0xFF00FF00)>>8|(n&0xFF00FF)<<8;64 বাইটের জন্য ব্যবহার করতে পারেন ।
এইচডিভি

@hvd এটি আমার পক্ষে বৈধ অভিব্যক্তি-শারীরিক বাক্য গঠন হিসাবে প্রদর্শিত হচ্ছে না। আমি তবে 2 বাইট অফ শেভ শিফট পুনঃস্থাপনের কৌশলটি ব্যবহার করতে সক্ষম হয়েছি।
বহুবর্ষীয়

আমি
টিআইপি

আমি লক্ষ্য করেছি যে 0xFF00FF00 0xFF00FF এর পরিপূরক এবং আপনি যদি এর সদ্ব্যবহার করতে পারেন তবে অবাক? তবে এটিকে ভেরিয়েবল হিসাবে ঘোষণা করতে অনেকগুলি অক্ষর লাগে
প্রিন্সপলকা

উহু! গুড ধ্রুবক চেক করতে প্রকৃতপক্ষে: আপনি ব্যবহার করতে পারেন 0xFF00FFদ্বারা দুইবার >>সামনে ing &ing, এবং তারপর আপনি খাটো করতে পারেন 0xFF00FFথেকে ~0u/257: uint e(uint n)=>((n=n>>16|n<<16)>>8&~0u/257)|(n&~0u/257)<<8;60 জন্য Tio লিংক
hvd


4

05 এ বি 1 ই , 12 10 বাইট

3F₁‰R`})₁β

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

  ₁         Integer constant 256
   ‰        [Div, Mod]
    R       Reverse
     `      Flatten to stack
3F    }     Repeat 3 times
       )    Collect results
        ₁β  Convert from base 256

1
এটি কোনও কার্যকর সমাধান বলে মনে হচ্ছে না। আপনি যে "প্যাডিং" করছেন তা বাইটগুলির তালিকার দৈর্ঘ্য 4 এর পুনরাবৃত্তি করছে
এরিক দ্য আউটগল্ফার

@ এরিকথ আউটগল্ফার বাহ, আমি আশা করি ডকুমেন্টেশনটি আসলে এটি বলবে ...
নীল

3

জাভাস্ক্রিপ্ট (ES6), 45 43 বাইট

f=(n,p=0,t=4)=>t?f(n>>>8,p*256+n%256,t-1):p

1
t=02 বাইট সাশ্রয় দিয়ে শুরু :f=(n,p=t=0)=>t++<4?f(n>>>8,p*256+n%256):p
আরনল্ড


3

এমএটিএল , 12 10 বাইট

7Y%1Z%P7Z%

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

ব্যাখ্যা

        % Implicitly input a number, read as a double
7Y%     % Cast to uint32
1Z%     % Convert to uint8 without changing underlying data. The result is 
        % an array of four uint8 numbers, each corresponding to a byte of
        % the original number's representation 
P       % Flip array
7Z%     % Convert back to uint32 without changing underlying data. The array
        % of four uint8 numbers is interpreted as one uint32 number.
        % Implicitly display

2

জাভাস্ক্রিপ্ট (ES6), 51 45 বাইট

@ নীলের সহায়তায় 6 বাইট সংরক্ষণ করা হয়েছে

n=>(n>>>24|n>>8&65280|(n&65280)<<8|n<<24)>>>0

পরীক্ষার মামলা


খুব ভাল, আমি পুনরাবৃত্তির সাথে পেতে পারি সেরা f=(n,p=0,t=4)=>t?f(n/256|0,p*256+n%256,t-1):p
ETH প্রোডাকশনগুলি

@ ইথ প্রডাকশনস ... এটাই খাটো?
এরিক আউটগল্ফার

1
পছন্দ করুন আপনার এটি পোস্ট করা উচিত।
আর্নৌল্ড

46 বাইট:n=>(n>>>24|n>>8&65280|n<<8&16711680|n<<24)>>>0
নিল

1
@hvd কোন উদ্বেগ নেই আপনি এটি বিকল্প বিকল্প হিসাবে যুক্ত করতে পারেন বা বিদ্যমানটিকে পুরোপুরি প্রতিস্থাপন করতে পারেন। আপনার উপর!
আর্নৌল্ড

2

জে, 16 বাইট

|.&.((4#256)#:])

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

ডান হাতের অভিব্যক্তি সংক্ষিপ্তকরণের উপর কাজ করা। আমি মনে করি আমি একটি বিটা জে সংস্করণ দিয়ে এই কাজটি করে কিছু বাইট শেভ করতে পারি। আমি শপথ করছি আমি এখানে দেখেছি যে আপনি একটি নতুন বিটা সংস্করণে একটি বিশেষ্য দিয়ে একটি ট্রেন শেষ করতে পারেন ...

ব্যাখ্যা

|.&.((4#256)#:])
    ((4#256)#:])  Convert to 4 two-byte blocks
            #:      Debase to
      4#256         4 digits base 256
  &.              Apply right function, left function, then inverse of right
|.                Reverse digits

4 অঙ্কের বেস 256 এ রূপান্তর করুন, অঙ্কগুলি বিপরীত করুন, তারপরে দশমিকের দিকে ফিরে রূপান্তর করুন। মূলত, ওপিতে প্রদত্ত অ্যালগরিদমটি সম্পাদন করুন। এটি সম্ভবত এটিই এক সময় কার্যকর যা জে মিশ্রিত বেস রূপান্তরটির জন্য আপনাকে অঙ্কের সংখ্যা নির্দিষ্ট করতে হবে, যদিও আমি যদি কোনও বিশেষ্য ( (#:~4#256)পরিবর্তে) ট্রেনটি শেষ করতে পারি তবে এটি 2 কম বাইট হবে।


2

এক্সেল ভিবিএ, 103 92 বাইট

বেনামে VBE অবিলম্বে উইন্ডো ফাংশন যা পরিসীমা থেকে ইনপুট নেয় [A1] রূপান্তর করে, বাইটগুলি বিপরীত করে এবং VBE তাত্ক্ষণিক উইন্ডোতে আউটপুট নেয়

h=[Right(Rept(0,8)&Dec2Hex(A1),8)]:For i=0To 3:s=s+Mid(h,7-2*i,2):Next:[B1]=s:?[Hex2Dec(B1)]

আমি কি এটি কোথাও পরীক্ষা করতে পারি? আপনি কি কোনও অনলাইন দোভাষী যোগ করতে পারেন?
ბიმო

2
@ ব্রুসফোর্ড নো, দুর্ভাগ্যক্রমে ভিবিএর কোনও রূপের জন্য কোনও অনলাইন অনুবাদক নেই, তবে আপনার কম্পিউটারে যদি এক্সেলের একটি অনুলিপি থাকে তবে আপনি Alt + F11 চেপে VBE অ্যাক্সেস করতে পারবেন এবং তারপরে Ctrl টিপে তাত্ক্ষণিক উইন্ডোতে প্রবেশ করতে পারবেন + জি। এই বেনামে ফাংশনটির জন্য আপনি নিজের ইনপুটটি সেল এ 1 এবং উপরের কোডটি তাত্ক্ষণিক উইন্ডোতে পেস্ট করবেন এবং এন্টার টিপুন
টেলর স্কট

ওহ - এবং কখনও কখনও ভিবিএ কিছুটা মজাদার (এবং ম্যাক সংস্করণটি উইন্ডোজ সংস্করণের চেয়ে নিখুঁতভাবে খারাপ) এবং এটি অন্যথায় সমস্ত বিবরণ না দেওয়া পর্যন্ত, ভিবিএ সমাধানগুলি ডিফল্ট 32-বিট উইন্ডোজ সংস্করণটি ধরে নেয়
টেলর স্কট

2

পিপিসি অ্যাসেম্বলি (32-বিট), 8 বাইট

endian_swap:    # WORD endian_swap(WORD)
7c 60 1c 2c     LWBRX 3,0,3
4e 80 00 20     BLR

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

  • পিপিসি কলিং কনভেনশনটি প্রথম 32-বিট শব্দের প্যারামিটারকে এসপি + 24 তে রাখে এবং সেই ঠিকানাটি জিপিআর 3 এ ছায়া দেয়।
  • এলডাব্লুবিআরএক্স জিপিআর 3 (তৃতীয় অপারেন্ড) নেয় এবং এটি শূন্য-প্রসারিত করে (দ্বিতীয় অপারেন্ড) ইএতে, তারপরে বিপরীত ক্রমে 4 বাইট পড়ে এবং জিপিআর 3 (প্রথম অপারেন্ড) এ সঞ্চয় করে।
  • জিপিআর 3 রিটার্ন মান রাখে।
  • বিএলআর ফাংশন থেকে ফিরে আসে (এলআর রেজিস্ট্রারে ঠিকানায় শাখা)

দুর্ভাগ্যক্রমে এমন কোনও অনলাইন পিপিসি অ্যাসেমুলেটর নেই যা আমি প্রদর্শনের জন্য খুঁজে পেতে পারি। দুঃখিত!


2

বেফুঞ্জ, 62 61 বা 49 বাইট

0&0v!p22:/3g22/*:*82\+%*:*82+<
@.$_:28*:*%00p\28*:**00g28*:*^

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

এটি রেফারেন্স ইন্টারপ্রেটারে স্ট্যান্ডার্ড বেফঞ্জ ব্যবহার করছে, এবং আমাদের এইভাবে মেমরি কোষগুলি 8-বিট স্বাক্ষরিত এবং সম্ভাব্য স্বাক্ষরিত ওভারফ্লোয়ের জন্য সঠিক তা প্রমাণ করার জন্য আমাদের অ্যাকাউন্ট করতে হবে।

স্বাক্ষরবিহীন মেমোরি সেল (যেমন পিআইফুঞ্জ) সহ বাস্তবায়ন বা যেখানে পরিসীমা 8 টি বিট (যেমন এফবিবিআই) এর চেয়ে বেশি রয়েছে, আমরা 12 টি বাইট সংরক্ষণ করে সেই চেকগুলি ছাড়াই চলে যেতে পারি।

0&0v!p22:/3g22/*:*82\+g<
@.$_:28*:*%00p\28*:**00^

অনলাইনে এফবিবিআই চেষ্টা করুন!
অনলাইনে পাইফুঞ্জ চেষ্টা করুন!

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


2

অক্টোটা , 10 বাইট

@swapbytes

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

এটি প্রথমবারের মতো হতে পারে যে অলতাভের গল্ফিং ডেরিভেটিভ, এমএটিএল হিসাবে ঠিক একই স্কোর রয়েছে। অবশ্যই, এক্ষেত্রে, এটি অটকেভ যা এমএটিএল এর চেয়ে বিল্ট-ইন রয়েছে, এটি অনেক সহজ করে তুলেছে।

অন্তর্নির্মিতটিতে একটি হ্যান্ডেল সংজ্ঞায়িত করে swapbytes, যা কোনও ডেটা ধরণের গ্রহণ করে, শেষের দিকটি অদলবদল করে এবং ফলাফলকে আউটপুট করে। এই ক্ষেত্রে, ইনপুটটি একটি 32-বিট স্বাক্ষরযুক্ত পূর্ণসংখ্যা।


2

সি #,  44  36 বাইট

n=>n>>24|n>>8&65280|n&65280<<8|n<<24

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

এটি মূলত পলিনোমিয়ালের সি # উত্তরের উপর ভিত্তি করে তৈরি হয়েছিল , যিনি পরামর্শ দিয়েছিলেন যে আমি এটিতে আমার উন্নতি নিয়ে একটি নতুন উত্তর পোস্ট করব, তবে আর্নল্ডের জাভাস্ক্রিপ্ট উত্তরের গৃহীত পদ্ধতিটি সি # তে আরও ছোট হয়ে উঠল।


2

আর , 86 বাইট

আমি ভেবেছিলাম যে এই প্রশ্নের জন্য আরে ইতিমধ্যে একটি উত্তর (বা দুটি) ছিল, তবে আমার অবশ্যই ভুল হয়েছে বা তাদের আমার একই সমস্যা ছিল যা আমি আর সাইন ইনটগুলি না করে দিয়েছিলাম। এই সমস্যাটি যে কোনও বিল্টিনগুলি সাহায্য করতে পারে took আমি 256 বেস রূপান্তর চেষ্টা করেছিলাম, তবে এটি দীর্ঘস্থায়ীভাবে শেষ হয়েছিল, তবে আমি মনে করি আমার চেয়ে চতুর কারও পক্ষে এখনও আরও কিছু করার সুযোগ রয়েছে। তারপরে আমি নিম্নলিখিতটি দিয়ে শেষ করেছি যা এটি একটি বেস 2 রূপান্তরটি পুনরাবৃত্তির ক্রিয়ায় অর্ডার অদলবদল করে।

f=function(x,y=0,i=31)'if'(i+1,f(x-(2^i*z),y+(2^((3-i%/%8)*8+i%%8)*(z=2^i<=x)),i-1),y)

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

f=function(x,y=0,i=31)       # set up the function and initial values
  'if'(i+1,                  # test for i >= 0
    f(                       # recursively call the function
      x-(2^i*z),             # remove 2^i from x when 2^i <= x
      y+(2^                  # add to y 2 to the power of
        ((3-i%/%8)*8+i%%8)   # calc to swap the order of the bytes
        *(z=2^i<=x)),        # when 2^i <= x
      i-1),                  # decrement i
   y)                        # return y

আপনি 256 বেস সংক্ষিপ্ত হচ্ছে সম্পর্কে ঠিক ছিল !
জিউসেপ

@ জিউস্পেপ, আপনি টুপি রাখবেন আপনি নন
মিকিটি

2

আর , 41 বাইট

function(n)n%/%256^(0:3)%%256%*%256^(3:0)

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

সমস্ত পরীক্ষার কেস যাচাই করুন!

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

সংখ্যা 4 সদ্ব্যবহার এই ডগা একাউন্টে গ্রহণ যে আমরা কখনোই মত বৃহৎ একটি সংখ্যা পেয়ে থাকেন 256^4

n%/%256^(0:3)%%256বাইটগুলি উত্তোলন করে এবং %*%ম্যাট্রিক্স পণ্যটি 256^(3:0)বাইটের বিপরীত ক্রমকে কার্যকর করে এই পরিস্থিতিতে ডট পণ্য । এন্ডিয়ান-বিপরীত মানযুক্ত %*%1x1 প্রদান করবে matrix


1

সিপি-1610 বিধানসভা, 6 টি ডেস্কলিজ = 8 বাইট

এই কোড একটি অন চালানো যাবে দেয়ার উদ্দেশ্যে করা হচ্ছে Intellivision

একটি সিপি -11010 অপকোডটি 10-বিট মান সহ এনকোড করা হয়েছে, যা একটি 'ডিসেল' হিসাবে পরিচিত। এই ফাংশনটি 6 টি ডিসিএল দীর্ঘ,, 480 সি থেকে শুরু হয়ে $ 4811 এ শেষ।

সিপি -1610-এ 16-বিট রেজিস্টার রয়েছে, সুতরাং আমরা 32-বিট মান সংরক্ষণ করতে এর মধ্যে দুটি (আর 0 এবং আর 1) ব্যবহার করছি।

                               ROMW  10           ; use 10-bit ROM

                               ORG   $4800        ; start program at address $4800

                               ;; example call
4800  0001                     SDBD               ; load 0xDEAD into R0
4801  02B8 00AD 00DE           MVII  #$DEAD, R0
4804  0001                     SDBD               ; load 0xBEEF into R1
4805  02B9 00EF 00BE           MVII  #$BEEF, R1

4808  0004 0148 000C           CALL  swap32       ; call our function

480B  0017                     DECR  PC           ; loop forever

                               ;; swap32 function
                       swap32  PROC

480C  0040                     SWAP  R0           ; 16-bit SWAP of R0
480D  0041                     SWAP  R1           ; 16-bit SWAP of R1

480E  01C1                     XORR  R0, R1       ; exchange R0 and R1
480F  01C8                     XORR  R1, R0       ; using 3 consecutive eXclusive OR
4810  01C1                     XORR  R0, R1

4811  00AF                     JR    R5           ; return

                               ENDP

এক্সিকিউশন ডাম্প

 R0   R1   R2   R3   R4   R5   R6   R7    CPU flags  instruction
 ------------------------------------------------------------------
 0000 4800 0000 0000 01FE 1041 02F1 4800  ------iq   SDBD
 0000 4800 0000 0000 01FE 1041 02F1 4801  -----D-q   MVII #$DEAD,R0
 DEAD 4800 0000 0000 01FE 1041 02F1 4804  ------iq   SDBD
 DEAD 4800 0000 0000 01FE 1041 02F1 4805  -----D-q   MVII #$BEEF,R1
[DEAD BEEF]0000 0000 01FE 1041 02F1 4808  ------iq   JSR  R5,$480C

 DEAD BEEF 0000 0000 01FE 480B 02F1 480C  ------iq   SWAP R0
 ADDE BEEF 0000 0000 01FE 480B 02F1 480D  S------q   SWAP R1
 ADDE EFBE 0000 0000 01FE 480B 02F1 480E  S------q   XORR R0,R1
 ADDE 4260 0000 0000 01FE 480B 02F1 480F  ------iq   XORR R1,R0
 EFBE 4260 0000 0000 01FE 480B 02F1 4810  S-----iq   XORR R0,R1
[EFBE ADDE]0000 0000 01FE 480B 02F1 4811  S-----iq   MOVR R5,R7

 EFBE ADDE 0000 0000 01FE 480B 02F1 480B  ------iq   DECR R7

কেন এই 7.5 বাইট? আমার মনে হয় এটি 8 বাইট হওয়া উচিত।
এরিক দি আউটগল্ফার

@ এরিকথ আউটগল্ফার ফেয়ার যথেষ্ট। সেই অনুযায়ী আপডেট হয়েছে।
আর্নল্ড

@ এরিকথ আউটগলফার কারণ 60 বিটস 7.5 বাইট সমান?
জেপ্পে স্টিগ নীলসেন

@ জেপ্পস্টিগনিয়েলসন এটি সত্য, তবে কোনও ফাইল কখনও 7.৫ বাইট দীর্ঘ হতে পারে না, এটি প্রি-বা পোস্ট প্যাডযুক্ত 0 সে।
এরিক দ্য আউটগল্ফার

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

1

সি # (.নেট কোর) , 72 + 31 = 103 বাইট

m=>BitConverter.ToUInt32(BitConverter.GetBytes(m).Reverse().ToArray(),0)

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

+31 এর জন্য using System;using System.Linq;

আমি Array.Reverseইনলাইনটি ব্যবহার করার আশা করছিলাম , তবে এটি হচ্ছিল না (নীচে বিকল্পটি দেখুন)।

সি # (.নেট কোর) , 87 + 13 = 100 বাইট

m=>{var a=BitConverter.GetBytes(m);Array.Reverse(a);return BitConverter.ToUInt32(a,0);}

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

+13 এর জন্য using System;

@ জেপ্পস্টিগনিয়েলসনের এই সমাধানের যত্ন; ইনলাইনটিতে 3 বাইট সংরক্ষণের সমস্ত সীমাবদ্ধতা সরিয়ে দেওয়া।


কারণ আপনি সংরক্ষণ করতে পারবেন using System.Linq;, এটা এখনও ব্যবহার করতে সস্তা হতে পারে x=>{var a=BitConverter.GetBytes(x);Array.Reverse(a);return BitConverter.ToUInt32(a,0);}
জেপ্পে স্টিগ নীলসেন



1

এআরএম মেশিন ভাষা লিনাক্স, 8 বাইট

0:       e6bf0f30       rev     r0, r0
4:       e12fff1e       bx      lr

এটি নিজে চেষ্টা করার জন্য, জিএসএনরোট চলমান একটি রাস্পবেরি পাই বা অ্যান্ড্রয়েড ডিভাইসে নিম্নলিখিতগুলি সংকলন করুন এবং চালনা করুন

#include<stdio.h>
#define f(x) ((unsigned int(*)(unsigned int))"0\xf\xbf\xe6\x1e\xff/\xe1")(x)
int main(){
  printf( "%u %u\n", 0, f(0) );
  printf( "%u %u\n", 1, f(1) );
  printf( "%u %u\n", 42, f(42) );
  printf( "%u %u\n", 128, f(128) );
  printf( "%u %u\n", 16885952, f(16885952) );
  printf( "%u %u\n", 704643072, f(704643072) );
  printf( "%u %u\n", 3735928559U, f(3735928559U) );
  printf( "%u %u\n", 4009738240U, f(4009738240U) );
  printf( "%u %u\n", 4026531839U, f(4026531839U) );
  printf( "%u %u\n", 4294967295U, f(4294967295U) );
}



1

K4 , 18 বাইট

সমাধান:

0b/:,/8#|12 8#0b\:

উদাহরণ:

q)\
  0b/:,/8#|12 8#0b\:0
0
  0b/:,/8#|12 8#0b\:1
16777216
  0b/:,/8#|12 8#0b\:42
704643072
  0b/:,/8#|12 8#0b\:4294967295
4294967295
  0b/:,/8#|12 8#0b\:4026531839
4294967279

ব্যাখ্যা:

কোনও স্বাক্ষরবিহীন ints নেই, তাই দীর্ঘ হিসাবে ইনপুট নেয়।

বুলিয়ান অ্যারে (bits৪ বিট) রূপান্তর করুন, পুনরায় আকার দিন, বিপরীত করুন, প্রথম ৮ বাইট নিন, দীর্ঘতে ফিরে রূপান্তর করুন।

0b/:,/8#|12 8#0b\: / the solution
              0b\: / convert to bits
         12 8#     / reshape into 12x8 grid (wraps)
        |          / reverse
      8#           / take first 8
    ,/             / flatten
0b/:               / convert to long

বোনাস:

ওকে 19 বাইট সংস্করণ যা আপনি অনলাইনে চেষ্টা করতে পারেন !

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