বড় বা ছোট এন্ডিয়ান


57

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা Lসামান্য এন্ডিয়ান আর্কিটেকচারে Bচালিত হলে বা বড় এন্ডিয়ান আর্কিটেকচারে যদি চালিত হয়। লোয়ার কেস আউটপুট lবা bএটি গ্রহণযোগ্য।

কোনও ইনপুট নেই।

স্কোরিং হ'ল কোড গল্ফ, সুতরাং কয়েকটি বাইটের সাথে কোড জিততে পারে।

সম্পাদনা করুন: নীচের মতামত অনুসারে, আমি স্পষ্ট করে বলছি যে প্রবেশটি অবশ্যই কোনও স্থাপত্যের উপর চালাতে সক্ষম হবে।

আমি বিশ্বাস করি যে কেবলমাত্র একটি উত্তর রয়েছে যা এটি প্রভাবিত করে, এবং সেই উত্তরটি স্পষ্টভাবে ইঙ্গিত দিয়েছে যে এটিই কেস।


1
বাক্সের স্মৃতি। আপনি কী বলতে চাইছেন তা আমি নিশ্চিত নই
লিয়াম

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

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

2
আমার ধারণা কোনও নির্দিষ্ট মেশিন কোডের উপর ভিত্তি করে একটি উত্তর নিষিদ্ধ? অন্যথায় B0 4C C3, যা হয় mov al, 'L' / retবা unsigned char f(){ return 'L'; }এটি একটি কার্যকর x86 উত্তর হবে।
মার্গারেট ব্লুম

5
বলিহারি! একটি কোড গল্ফ চ্যালেঞ্জের জন্য যাতে সাধারণ উদ্দেশ্যে প্রোগ্রামিং ভাষা প্রতিযোগিতামূলক হতে পারে।
পেলমেল

উত্তর:


42

পাইথন, 33 বাইট

import sys
exit(sys.byteorder[0])

sys.byteorderহয় হয় 'little'বা 'big'(এবং আপনারা যারা কোডটি না দেখে এই বাক্যটি পড়বেন, তাদের [0]অর্থ প্রথম অক্ষরটি গ্রহণ করুন)।


চ্যালেঞ্জটি বলে যে আউটপুট অবশ্যই হবে Lএবং B(বা লোয়ারকেস বৈকল্পিক), পুরো শব্দটি নয়।
ব্যবহারকারী 2428118

43
এ কারণেই এটি বলে sys.byteorder[0], এর প্রথম চর byteorder
s3lph

36

সি, 26 বাইট

a=66<<24|76;f(){puts(&a);}

32-বিট intএবং ASCII অক্ষর ধরে নেওয়া হয়। Amd64 (লিটল-এন্ডিয়ান) এবং মিপস (বিগ-এন্ডিয়ান) এ পরীক্ষিত।

জিসিসি, 23 বাইট

00000000: 613d 2742 0000 4c27 3b66 2829 7b70 7574  a='B..L';f(){put
00000010: 7328 2661 293b 7d                        s(&a);}

ফেয়ারসাম দ্বারা প্রস্তাবিত। বহু-চরিত্রের ধ্রুবকের মান বাস্তবায়ন-নির্ভর, তবে এটি জিসিসিতে কাজ করে বলে মনে হচ্ছে। একই আর্কিটেকচারে পরীক্ষিত।


7
খাটো গুলি নাল বাইট সঙ্গে প্রতিস্থাপিত হতে পারে। a='B\0\0L';\0
ফেয়ারসাম

1
@ ফেয়ারসাম বহু-চরিত্রের ধ্রুবকগুলির পরিণতি বাস্তবায়ন নির্ভর করে বলে মনে হচ্ছে। আমি সাধারণত কোড গল্ফে এতটা নিয়ে চিন্তা করব না, তবে এই চ্যালেঞ্জটি বাস্তবায়নের মধ্যে পার্থক্য সম্পর্কে।
অ্যান্ডারস কাসের্গ

এই কোডটি বর্তমানে জিসিসি ব্যতীত অন্য কিছুতে কাজ করে?
ফায়ার্সাম

1
@feersum C89 উভয় পারেন।
অ্যান্ডারস ক্যাসরগ

1
, AIX 5.2 চলমান একটি RS6000 উপর xlc (VisualAge সি ++ পেশাগত /, AIX কম্পাইলার জন্য সি, সংস্করণ 6) ব্যবহার করা 26 বাইট প্রোগ্রাম সফলভাবে "বি" ছাপে
জেরি যিরমিয়

24

ম্যাটল্যাব / অষ্টাভে, 24 বাইট

[~,~,e]=computer;disp(e)

computerফাংশন সম্পর্কে, ভাল, কম্পিউটার এটিতে চালাচ্ছে তথ্য দেয়। তৃতীয় আউটপুট হ'ল এন্ডিয়েনেস: Lবা Bযথাক্রমে অল্প- বা বড়-এন্ডিয়ান।

আইডিয়নে চেষ্টা করে দেখুন


1
কি. এটি স্ট্যাকওভারফ্লোটির জন্য কিছুটা, আমি এটি জানতাম না!
মস্তিষ্ক গাইড

20

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

_=>"BL"[new Int8Array(Int16Array.of(1).buffer)[0]]

আমি জানি না কে টাইপড্রাই অবজেক্টগুলির জন্য দোভাষীর নেটিভ শেষ কথাটি প্রকাশ করা ভাল ধারণা ছিল তবে আমরা এখানে আছি।


5
ওয়েবজিএল লোকেরা জিপিইউতে পাস করার সময় অন্তর্নিহিত রূপান্তরিত হওয়া এড়ানোর জন্য এটি একটি ভাল ধারণা বলে মনে করেছিল। খুব সুন্দর সবাই প্রত্যেকে এটাকে বোকা মনে করেছিল… :(
gsnedders

11

সি, 36 35 বাইট

1 অ্যালবামি @ অ্যালগমায়ার এবং @ আইওকোডারকে ধন্যবাদ।

main(a){printf(*(char*)&a?"L":"B");}
main(a){putchar(66+10**(char*)&a);}
main(a){putchar("BL"[*(char*)&a]);}

এখানে ক্রেডিট ।

আমার কাছে বিগ-এন্ডিয়ান মেশিন না থাকায় অনাকাঙ্ক্ষিত।


2
সি স্পেসটি কী কোনও এক-তর্কের mainফাংশনটির অনুমতি দেয় ?
কোডসইনচাউস

@ কোডসিংচোস হ্যাঁ এটি করে। এটি প্রদত্ত কমান্ড লাইন আর্গুমেন্টের সংখ্যা হবে। সাধারণত এখানে এটি পরিবর্তনশীল আরম্ভ করার জন্য ব্যবহৃত হয় 1কারণ কোনও ইনপুট দেওয়া হয় না (এবং প্রোগ্রামটির নাম সর্বদা প্রথম যুক্তি হিসাবে গণনা করা হয়)
লিয়াম

2
@ লিয়াম: যদি 0 বা 2 ব্যতীত অন্য কোনও কিছুর অনুমতি দেওয়া হয় তবে তা সি 11 এ বাস্তবায়িত হয় implementation

1
বা main(a){putchar("BL"[*(char*)&a]);}
owacoder

2
আপনি কল কনভেনশন এটা 31 যায় নিচে সঙ্গে জগাখিচুড়ি: main(char a){putchar("BL"[a]);}
Andrea Biondo

8

গণিত, 22

{B,L}[[$ByteOrdering]]

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


1
বিল্ট-ইনগুলি ঠিক আছে (বেশিরভাগ উত্তর
লিয়াম

2
এবং আবারও, গণিতের একটি অন্তর্নির্মিত আছে!
gcampbell

3
আমি মনে করি এটি একটি স্নিপেট, কোনও প্রোগ্রাম বা ফাংশন নয় এবং &এটিকে একটি ক্রিয়াকলাপ করার জন্য আপনার যুক্ত করা উচিত । (তবে "প্রোগ্রাম" গঠনের বিষয়ে মতভেদ থাকতে পারে))
অ্যান্ডারস ক্যাসরগ

1
@Anders আমি PCG জন্য বর্তমান মান (যদি আমি কখনো ছিল না) কিন্তু এই প্রোগ্রামটিতে একটি ব্যাখ্যা ভাষা এক সুবিধা হলো একটি স্নিপেট সঙ্গে সত্যিই পরিচিত নই হয় একটি প্রোগ্রাম। এটি গণিতের অন্য যে কোনও প্রোগ্রামের মতো এককভাবে চালানো যেতে পারে ।
মিঃ উইজার্ড

1
@ মিঃ উইজার্ড নোট করুন যে গাণিতিকের একটি "প্রোগ্রাম" বলতে একটি স্ট্যান্ডলোন স্ক্রিপ্ট বোঝায় (যার জন্য স্পষ্ট প্রিন্টিং দরকার), যেখানে এই উত্তরটি আরপিএল ব্যবহার করে।
LegionMammal978

8

সি, 27

এক বাইট দীর্ঘ, তবে এখানে এটি যাইহোক:

f(){putchar(htons(19522));}

এটি ভাল কাজ করেছে, আপনি দয়া করে আমাকে এটি ব্যাখ্যা করতে পারেন?
এবিসিডিএক্সটার

3
@ এবিসিডিএক্সটেক্সার 19522 এর বাইনারি সম্প্রসারণ 1001100 01000010(পৃথক বাইটের স্থান) এখন আপনি যদি প্রতিটি বাইট নেন, বেস 10 তে ফিরে রূপান্তর করুন এবং এএসসিআইআই টেবিলটি দেখুন, আপনি দেখতে পাবেন যে এই বাইট ক্রমটি সমান LBhtonsহবে তার জিনিস করে , এবং putcharশুধুমাত্র প্রিন্ট হবে lsb। বড় endian সিস্টেম, যে হতে হবে Bঅল্প endian মধ্যে, htonsবাইট ফ্লিপ আছে হবে, তাই lsb হয় L
ক্রোল্টন

প্রতিস্থাপন 19522সঙ্গে 'LB'কম্পাইলার সতর্কবার্তা এবং -1 বাইট জন্য।
স্টান স্ট্রাম

8

পাওয়ারপিসি মেশিন কোড - 20 বাইট

পাওয়ারপিসি দ্বি-এন্ডিয়ান (এন্ডিয়েন্সটি শুরুতে সেট আপ করা যেতে পারে), সুতরাং এই কোডটি বিই এবং এলই মেশিনে চালাতে সক্ষম হওয়ার চ্যালেঞ্জ অনুরোধের সাথে সামঞ্জস্য করা উচিত। এটি একটি ফাংশন যে ফেরৎ 1 'L' বা 'B'বর্তমানে সেট endianness উপর নির্ভর করে।

ফাংশন হিসাবে, এএএএফআইটিটি এসভিআর 4 পাওয়ারপিসি এবিআই (পিপিসি 32 তে লিনাক্স দ্বারা ব্যবহৃত), পাওয়ারপোপেন এবিআই (যেমন এআইএক্স দ্বারা ব্যবহৃত ব্যবহৃত) এবং ওএস এক্স এবিআইকে রূপান্তর করে। বিশেষত, এটি ঠিক এই সত্যের উপর নির্ভর করে যে জিপিআর 0 হ'ল একটি অস্থির স্ক্র্যাচ নিবন্ধক এবং জিপিআর 3 "ছোট" মানগুলি ফেরত দিতে ব্যবহৃত হয়।

00000000 <get_endian>:
   0:   7c 00 00 a6     mfmsr   r0
   4:   54 03 0f fe     rlwinm  r3,r0,1,31,31
   8:   1c 63 00 0a     mulli   r3,r3,10
   c:   38 63 00 42     addi    r3,r3,66
  10:   4e 80 00 20     blr

এখন, এটি এর মতো হয়:

  • MSR জিপি রেজিস্টার 0 মধ্যে পড়তে হয়; এমএসআরতে বিট 31 এন্ডিয়েননেস সেটিংস রয়েছে (0 = বড় এন্ডিয়ান; 1 = ছোট এন্ডিয়ান);
  • rlwinmঠিক সেই বিটটি বের করে: এটি জিপিআর 0-তে মান গ্রহণ করে, আর ওটেটস এল ইফিটকে 1 স্থান দ্বারা (যাতে এখন 0 পজিশনে থাকে) এবং এম এটি 1 দিয়ে জিজ্ঞাসা করে (সেই 31,31 2 দ্বারা উত্পন্ন মুখোশ ); ফলাফল জিপি রেজিস্টার 3 এ দেওয়া হয়;
  • 10 দ্বারা ফলাফলের গুন এবং 66 (যোগফল 'B') (10 মধ্যে পার্থক্য 'L'এবং 'B')
  • অবশেষে, কলারে ফিরে আসুন

নোট

  1. হ্যাঁ, প্রশ্নটি মুদ্রণ করতে বলেছে , তবে এটি কী তা স্পষ্ট নয় যে আমি কীভাবে সমাবেশে স্টেপগুলি বিভিন্ন অপারেটিং সিস্টেমগুলিতে অপরিশোধিতভাবে চালিত হতে পারে তা প্রিন্ট করা উচিত। =)
  2. আগ্রহীদের জন্য, rlwinm ডকুমেন্টেশন দেখুন; পাওয়ারপিসি সম্পর্কে কিছুই জানার পরেও, আমি এই ধরণের নির্দেশকে অত্যন্ত আকর্ষণীয় বলে মনে করি।

    2018 আপডেট : রেমন্ড চেন পাওয়ারপিসি আর্কিটেকচার সম্পর্কে একটি সিরিজ প্রকাশ করছে, আপনি এখানেrlwinm & বন্ধুদের সম্পর্কে তার দুর্দান্ত পোস্টটি পেতে পারেন ।


7

জাভা 8, 96, 64 52 বাইট

()->(""+java.nio.ByteOrder.nativeOrder()).charAt(0);

এই এসও উত্তরের উপর ভিত্তি করে একটি গল্ফ । সমস্ত কৃতিত্ব @ লিক্যুন এবং @ অ্যালানটুনিংয়ে যায়। জাভা হারাতে থাকে।

96 বাইট:

 char e(){return java.nio.ByteOrder.nativeOrder().equals(java.nio.ByteOrder.BIG_ENDIAN)?'b':'l';}

64 বাইট:

char e(){return(""+java.nio.ByteOrder.nativeOrder()).charAt(0);}

স্বীকৃত বি / সি আমার কাছে বড়-এন্ডিয়ান মেশিনে অ্যাক্সেস নেই।


1
char e(){return(""+java.nio.ByteOrder.nativeOrder()).charAt(0);}
লিকি নুন

char e(){return(""+java.nio.Bits.byteOrder()).charAt(0);}
লিকি নুন

@ ল্যাকিয়ুনুন আমি জাভা এপিআই-তে বিটগুলি দেখতে পাচ্ছি না এবং এটি চালানোর সময় এটি আমাকে দেয় "বিট java.nio তে পাবলিক নয়"
নীল

ওহ, ঠিক আছে।
লিকি নুন

ল্যাম্বডা ব্যবহার করলে 52 বাইট! ()->(""+java.nio.ByteOrder.nativeOrder()).charAt(0);
শান ওয়াইল্ড

6

পার্ল, 38 36 বাইট

say+(pack"L",1 eq pack"V",1)?"L":"B"

সিস্টেমের ডিফল্ট বাইট ক্রমে একটি নম্বর প্যাক করে এবং লিটল এন্ডিয়ান বাইট ক্রমে প্যাক করা একটি সংখ্যার সাথে তুলনা করে কাজ করে।


6

(ছ) ফোর্থ, 24 বাইট

here $4200004C , c@ emit

ধরে নেওয়া হয় যে কোষগুলি 32 বিট (এবং আপনার ফোর্থ ইন্টারপ্রেটার গফ্ফের বেস উপসর্গগুলি সমর্থন করে )। এটি মেমরিতে কেবল 0x4200004C নম্বর সঞ্চয় করে এবং তারপরে নিম্ন প্রান্তে বাইট প্রদর্শন করে।


5

সি, 34 বাইট

এটি ASCII চরিত্রের এনকোডিং অনুমান করে

main(a){putchar(66+10**(char*)a);}

যুক্তি ছাড়াই কল করুন।

ব্যাখ্যা:

কল তারিখে a1. হবে *(char*)aপ্রথম বাইট ব্যবহারের a, যা অল্প endian প্ল্যাটফর্মের উপর 1 হতে হবে, উপর বড় endian প্ল্যাটফর্মের 0 হতে হবে।

বড়-এন্ডিয়ান প্ল্যাটফর্মে, এই কোডটি তাই 66 + 10 * 0 = 66 থেকে পাস করবে putchar। 66 জন্য হওয়া ASCII কোড B। লিটল-এন্ডিয়ান প্ল্যাটফর্মগুলিতে, এটি 66 + 10 * 1 = 76 কেটে যাবে, এটির জন্য ASCII কোড L


5

সি #, 60 52 বাইট

সি # এটির মধ্যে আশ্চর্যজনকভাবে প্রতিযোগিতামূলক।

char e=>System.BitConverter.IsLittleEndian?'L':'B';

সি # 6 সিনট্যাক্সের জন্য গ্রোকে ক্রেডিট।

60 বাইট:

char e(){return System.BitConverter.IsLittleEndian?'L':'B';}

সি # 6 সিনট্যাক্সের সাহায্যে আপনি এটি কিছুটা ছোট করতে পারেন: char e=>System.BitConverter.IsLittleEndian?'L':'B';অবশ্যই এটি (পাশাপাশি জাভা উত্তর) আসলে মানটি মুদ্রণ করে না।
গ্রো

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! এটি একটি সুন্দর প্রথম উত্তর।
অ্যালেক্স এ।

5

জুলিয়া, 24 19 বাইট

()->ntoh(5)>>55+'B'

এটি একটি বেনামে ফাংশন যা কোনও ইনপুট নেয় না এবং একটি প্রদান করে Char। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন। এটি ধরে নেওয়া হয় যে পূর্ণসংখ্যাগুলি 64-বিট হয়।

ntohফাংশন হোস্ট কম্পিউটার দ্বারা ব্যবহৃত যে মান নেটওয়ার্কের বাইট অর্ডার (বড় endian) থেকে এটি গৃহীত endianness পরিবর্তন করে। বড় এন্ডিয়ান মেশিনগুলিতে, ntohপরিচয়ের কাজটি হ'ল যেহেতু কোনও রূপান্তরকরণ করা যায় না। সামান্য এন্ডিয়ান মেশিনে, বাইটগুলি অদলবদল করা হয়, তাই ntoh(5) == 3602879701896396800000010100000000000000000000000000000000000000000000000000000000বাইনারি মধ্যে , যা সম্ভবত আরও পাঠযোগ্য, সমান:

আমরা যদি ntoh(5)55 এর ফলাফলকে ডানদিকে সরিয়ে ফেলি , আমরা বড় এন্ডিয়ান মেশিনে 0 এবং সামান্য এন্ডিয়ান মেশিনে 10 পেয়ে যাব। যোগ করা হচ্ছে যে চরিত্র ধ্রুবক থেকে 'B', আমরা কিনবো 'B'বা 'L'বড় বা সামান্য endian মেশিনের জন্য যথাক্রমে।

FryAmTheEggman এবং ডেনিসকে 5 বাইট সংরক্ষণ করা!


32 বিটের জন্য আপনাকে 55 থেকে 23 পরিবর্তন করতে হবে (16 বিটের মধ্যে 5 টিও 7 হওয়া উচিত ছিল, আমার ভুল)। আমি মনে করি ডেনিস ভালো কিছু বোঝানো: ()->ntoh(5)>>55+'B'?
FryAmTheEggman

1
f()='L'-ntoh(10)%16এবং f()='L'-ntoh(10)&10সমস্ত প্ল্যাটফর্মগুলিতে কাজ করা উচিত।
ডেনিস

5

পিএইচপি 5.6, 41 31 বাইট (thx থেকে isertusernamehere)

<?=unpack(S,"\x01\x00")[1]-1?B:L;

পিএইচপি 7, 41 বাইট

echo unpack('S',"\x01\x00")[1]-1?'B':'L';

আইডিয়া চুরি হয়েছে: https://stackoverflow.com/a/24785578/2496717


আপনি সংরক্ষণ করতে পারবেন 10 বাইট : <?=unpack(S,"\x01\x00")[1]-1?B:L;
সন্নিবেশকারীর নাম এখানে

5

কমন লিস্প, 27 বাইট

এসবিসিএল এবং ইসিএলে পরীক্ষিত। পোর্টেবল পদ্ধতির জন্য, একজনের তুচ্ছ বৈশিষ্ট্য ব্যবহার করা উচিত ।

(lambda()'L #+big-endian'B)

#+স্বরলিপি একটি হল পঠিত সময় শর্ত , যে সার্চ পরবর্তী ফর্ম শুধুমাত্র যদি শর্তাধীন অভিব্যক্তি সত্য মূল্যায়ন করে। এখানে শর্তটি পুরো #+big-endianপাঠ্য যার অর্থ :big-endianকীওয়ার্ড *FEATURES*তালিকার সাথে থাকলে (অন্যান্য বিষয়গুলির মধ্যে প্ল্যাটফর্ম-নির্দিষ্ট তথ্য রয়েছে এমন একটি তালিকা) পরীক্ষাটি সন্তুষ্ট is নিম্নলিখিত এক্সপ্রেশনটি হ'ল 'B, যা হয় পরীক্ষার ফলাফল অনুযায়ী পড়া বা এড়িয়ে যায়। আপনার প্ল্যাটফর্মটি যদি বিগ-এন্ডিয়ান হয় এবং আপনি উপরের ফর্মটি আরপিএলটিতে লিখেন তবে ঠিক এমনটি মনে হয় যেমন আপনি নিম্নলিখিতটি লিখেছেন:

CL-USER>(lambda()'L 'B)

(এনবি। CL-USER>প্রম্পট হয়)

একটি ফাংশন এর শরীর একটি অন্তর্নিহিত PROGN, যার অর্থ শুধুমাত্র শেষ প্রকাশের মূল্যায়ন ফিরে আসে returned সুতরাং উপরে আসলে প্রতীক ফেরৎ B। তবে পড়ার সময় শর্তটি যদি মিথ্যা হিসাবে মূল্যায়ন করে তবে ফর্মটি এমনভাবে পড়ে যা আপনি লিখেছেন:

CL-USER>(lambda()'L)

... যা কেবল প্রতীক প্রত্যাবর্তন করে L


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

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ আপডেট হয়েছে, ধন্যবাদ
coredump

দ্রষ্টব্য: স্নিপেটগুলি কেবলমাত্র ওপি-র দ্বারা সুস্পষ্টভাবে অনুমোদিত হলে অনুমোদিত।
এরিক আউটগল্ফার

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ আপনি কি এর জন্য একটি রেফারেন্স সরবরাহ করতে পারেন? এখানে আরএইপিএলের আরও উত্তর রয়েছে এবং / অথবা শেল স্নিপেট রয়েছে এবং এই মেটা পোস্টটি সুপারিশ করবে যে ডিইপিএল উত্তরগুলি ডিফল্টরূপে ঠিক আছে। ধন্যবাদ।
coredump

5

এআরএমভি 6 এবং তার পরে: 20 বাইট মেশিন কোড

0xE10F1000 : MRS   r0,CPSR        ; read current status register
0xE3110C02 : TST   r0,#1<<9       ; set Z flag if bit 9 set
0x03A0004C : MOVEQ r0,#'L'        ; return 'L' if Z clear
0x13A00042 : MOVNE r0,#'B'        ; return 'B' if Z set
0xEBxxxxxx : BL    putchar        ; print it (relative branch)

স্বাক্ষরিত, যেহেতু আমার হাতে কোনও উপযুক্ত মেশিন নেই। সিপিএসআর-এর বিট 9 বর্তমান লোড / স্টোরের আধ্যাত্মিকতা দেয়।


আপনি BX lrপরিবর্তে ফাংশন (( এটি কি?)) থেকে কোনও রিটার্ন ব্যবহার করতে পারেন putchar, কারণ r0প্রত্যাবর্তিত ফলাফলের জন্য উপযুক্ত রেজিস্টার।
অ্যানাটলিগ

প্রকৃতপক্ষে, এটি (আসলে এমওভ পিসি, এলআর) আমার আগের সম্পাদনাগুলির একটিতে ছিল। তবে এটি কেবল চিঠিটি মুদ্রণের জন্য নির্দিষ্টকরণটি পূরণ করে ।
ব্যবহারকারী1908704

আমি হয়ত রেফারেন্সটি ভুল করে পড়ছি, তবে আমি মনে করি এটি "থাম্ব 2" নির্দেশের এনকোডিংয়ে করা যেতে পারে। এর অর্থ হ'ল প্রথম নির্দেশটি 32 বিট অবধি থাকবে (এআরএম ভি 8 রেফারেন্স ম্যানুয়ালটির F7-2720 পৃষ্ঠায় "এনকোডিং টি 1", যা এটি 0xF3EF_8000 করে দেবে); দ্বিতীয়টিও 32 টি বিট (অপরেন্ডটি এনকোডিংটি কিছুটা উদ্ভট, তবে "i: im33" সেট করা যাবে 0010 এবং "ইমি 8" থেকে 00000010, যা 0xF010_2F02 এর সামগ্রিক নির্দেশ দেয়)। তৃতীয় নির্দেশের আগে, আমাদের পরবর্তী দুটি এমওভি নির্দেশাবলীর শর্তাদি নিয়ন্ত্রণের জন্য "আইটিইউ ইকিউ" (0xBF0C) needোকানো দরকার যা 0x204 সি হয়ে যায় ...
জুলাই

... 0x2042 (সামগ্রিকভাবে 2 বাইট সংরক্ষণ করা)। তারপরে চূড়ান্ত বিএল নির্দেশকে উপস্থাপন করা কিছুটা কঠিন কারণ কারণ আমরা জানি না এমন ঠিকানার বিটগুলি আমাদের জানা নির্দেশের বিটগুলির মধ্যে ছড়িয়ে ছিটিয়ে থাকে তবে এটি একটি 32-বিট এনকোডিংও হয়, ফলে ফলাফলটি ঘটে মোট 18 বাইট হতে হবে (F3 EF 80 00 F0 10 2F 02 BF 0C 20 4C 20 42 F? ?? ?? ??)। আমি বিশ্বাস করি এটি আর্কিটেকচারকে এআরএমভি 8 এবং পরে পরিবর্তিত করে, যদিও এটি এআরএমভি 7 (?) এ কাজ করতে পারে।
জুলাইস

4

পার্ল 5, 21 + 1 = 22 বাইট

সাথে চালাও perl -E

say ord pack(S,1)?L:B

Amd64 (লিটল-এন্ডিয়ান) এবং মিপস (বিগ-এন্ডিয়ান) এ পরীক্ষিত।


Is -Eপতাকা সত্যিই বাইট গণনা প্রয়োজনীয়? আপনি কেবল পার্ল ৫.১০ ব্যবহার করার কথা বলতে পারেন (যেহেতু sayকমান্ডটি এই সংস্করণে পাওয়া যায়)
পল পিকার্ড

1
@ পলপিকার্ড তবে use 5.10.0;আরও অনেকগুলি বাইট!
অ্যান্ডারস কাসেরগ 21

1
@ পলপিকার্ড আপনার বক্তব্য ভুল। পার্ল 5.10 এর জন্য -Eস্যুইচ বা useবিবৃতি প্রয়োজন say
অ্যান্ডারস কাসের্গ 21

3
-Eপিপিসি-তে "ফ্রি"। কিছু যুক্ত করার দরকার নেই।
ভেন

1
(তবে -nএবং -pতা নয়)
ভেন

4

আর, 28 23 বাইট

substr(.Platform$endian,1,1)

.Platform$endianbigবড় এন্ডিয়ান এবং littleযদি কিছুটা চালায় তবে ফিরে আসে । এখানে, ব্যবহার করে substr, এটি আউটপুটটির প্রথম অক্ষরটি দেয়, তাই হয় bবা হয় l

endianঅবজেক্টের eঅন্তর্ভুক্ত থাকা একমাত্র অবজেক্ট হিসাবে .Platformআমরা নিম্নলিখিত 23 বাইট কোডের সাথে আংশিক মিলের জন্য ধন্যবাদ এটি হ্রাস করতে পারি:

substr(.Platform$e,1,1)

3

ক্লোজার, 46 44 বাইট

#(nth(str(java.nio.ByteOrder/nativeOrder))0)

এটি এমন একটি ফাংশন যা জাভা বিল্টিনটি মেশিনের অন্তর্নিহিতা পেতে ব্যবহার করে। তারপর যা হয় হবে তা স্ট্রিং উপস্থাপনা পেতে "LITTLE_ENDIAN"বা "BIG_ENDIAN"প্রথম অক্ষর যেটা এর স্ট্রিং নির্বাচিত গ্রহণ করা এবং আসতে পারে।

@ ক্লিফরোটের জন্য 2 বাইট সংরক্ষণ করা হয়েছে


সত্যিই ক্লোজার কি, এটি লিস্প বা জাভা?
লিকি নুন

@ লেকিউন সম্ভবত একটি ব্যবহারিক এলআইএসপি ব্যবহার করবে যা জাভার সাথে কাজ করে? এটা বলা কঠিন.
মাইল

#(nth(str(java.nio.ByteOrder/nativeOrder))0)2 বাইট সংক্ষিপ্ত
ক্লিফ্রুট

3

রুবি, 3130 অক্ষর।

puts [1].pack("s")>"\01"??L:?B

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


যদি আমি সঠিকভাবে মনে রাখি, রুবি ১.৯-এর পরে, আপনি ব্যবহার করতে পারেন ?Lএবং তার ?Bজায়গায় puts :Lএবংputs "B"
শার্লক ৯

আমি মনে করি puts [76,66].pack("s")[0]কাজ করবে।
ওয়েইন কনরাড

@ শার্লক ৯, ধন্যবাদ, একটি চর কম। @ ওয়াইনকনরড, সম্ভবত আপনার উত্তরটি যুক্ত করুন, আমার কাছে পরীক্ষার জন্য হাতে একটি বড় এন্ডিয়ান মেশিন নেই তবে সামান্য এন্ডিয়ানে এটি কাজ করে। কিন্তু এই মত পরিবর্তন কাজ করে না: puts [76,66].pack("s>")[0]। এর অর্থ এটি সম্ভব যে কোনও কারণে আমি ভাল বুঝতে পারছি না বলে বড় এডিয়ান নিয়ে কাজ করা সম্ভব নয়। তবে এটি এক হিসাবে কাজ করে বলে মনে হচ্ছে (আপনার সমাধান থেকে প্রাপ্ত) puts [19522].pack("s>")[0]। WDYT? আমি বিস্মিত হই যদি বড় এডিয়ান নিয়ে মূল্যায়ন করার জন্য আমি কোনও জায়গা খুঁজে পাই।
akostadinov

হায়রে, আমার পরীক্ষা করার মতো একটি বড় এন্ডিয়ান মেশিনও নেই।
ওয়েইন কনরাড

3

বাশ (এবং অন্যান্য ইউনিক্স শেল), 32 (33) বাইট

প্রথম এবং দ্বিতীয় প্রচেষ্টা:

case `echo|od` in *5*)echo B;;*)echo L;;esac # portable
[[ `echo|od` =~ 5 ]]&&echo B||echo L         # non-portable

ডেনিসকে ধন্যবাদ, সংক্ষিপ্ত সংস্করণ:

od<<<a|grep -q 5&&echo L||echo B  # non-portable
echo|od|grep -q 5&&echo B||echo L # portable

echoউপযোগ হেক্স মান একটি newline আউটপুট, 0Aএবং অন্য কোন আউটপুট। জন্য <<<aএটা 61 0A

odউপযোগ, ডিফল্ট অনুসারে, ইনপুট দুই-বাইট শব্দ হিসাবে, ব্যাখ্যা করে শূন্য প্যাডেড যদি বাইটের সংখ্যা বিজোড় হয়, এবং অকট্যালে পরিবর্তন করে। এর ফলে প্রতিধ্বনির ফলাফলটি ইন্টারপ্রেড হয়ে যায় 0A 00, যা 005000বিগ-এন্ডিয়ান বা 000012লিটল-এডিয়ানতে রূপান্তরিত হয় । 61 0Aহয়ে 005141অল্প endian এবং 060412বড় endian হবে। আদ্যাশক্তি পূর্ণ আউটপুট এছাড়াও অর্থ আমরা ব্যবহার করতে পারবেন না ঠিকানা ও আকার ডেটা অন্তর্ভুক্ত থাকে 0, 1অথবা 2পরীক্ষার জন্য।

কমান্ডটি সিস্টেমের শেষতা প্রকাশ করতে ভালভাবে সংজ্ঞায়িত করা হয়েছে। মান থেকে :

সংখ্যার মানগুলির ব্যাখ্যার সময় ব্যবহৃত বাইট ক্রমটি বাস্তবায়ন-সংজ্ঞায়িত হয় তবে এটি সেই ক্রমের সাথে মিলিত হয় যেখানে সিস্টেমে সম্পর্কিত ধরণের ধ্রুবক স্মৃতিতে সংরক্ষণ করা হয়।

সামঞ্জস্য নোট

echo|odচারপাশে কোনও ডাবল উদ্ধৃতি না রেখে ব্যাককোটগুলি রাখলে [যা একটি তিন-শব্দ যুক্তির ফলস্বরূপ case] সমস্ত সিস্টেমে সমর্থিত তা আমি নিশ্চিত নই । আমি নিশ্চিত নই যে সমস্ত সিস্টেমগুলি শূন্য স্ক্রিপ্টগুলিকে সমর্থন করে না যদি কোনও অবসান হওয়া নিউলাইন থাকে না। আমি বেশিরভাগ ক্ষেত্রেই নিশ্চিত তবে বিগ-এন্ডিয়ান সিস্টেমে প্যাডিং বাইট যুক্ত করার সাথে 100% বাজে আচরণের নয়। প্রয়োজনে echo aবহনযোগ্য সংস্করণগুলির জন্য ব্যবহার করা যেতে পারে। সমস্ত স্ক্রিপ্টগুলি ব্যাশ, ksh, এবং zsh এ কাজ করে এবং পোর্টেবলগুলি ড্যাশ-এ কাজ করে।


কোনটি পরিবর্তন প্রয়োজন; এটি একটি শেল রাখুন এটি ভাষা শিরোনামে কাজ করে এবং আপনি সেট হয়ে আছেন।
ডেনিস

1
@Dennis আমি বিশ্লেষণ যে ধরনের করছেন মত ... যদিও এটা আরো মজা যদি আমি না এটি কিছু অ-মানক যে ব্যাশ বা অন্যদের তুলনায় zsh একটি খাটো উত্তর পায়। সম্ভবত আমি কী করব তা দেখব[[
র্যান্ডম 832

1
বিশ্লেষণে কিছু ভুল হয়নি। শেষ অনুচ্ছেদটি ঠিক এরকমই মনে হয়েছিল যে শেল-নির্দিষ্ট উত্তরটি বৈধ ... od<<<a|grep -q 5&&echo L||echo Bবাশ এবং অন্যদের মধ্যে কাজ করা উচিত তবে আপনি অনিশ্চিত হয়ে পড়েছিলেন।
ডেনিস

আমি এটি একটি বড়-এন্ডিয়ান ভিএম-তে পরীক্ষা করেছি এবং আপনার প্রত্যাশা অনুযায়ী echo|odমুদ্রণ করেছে 0000000\n005000\n0000001
ডেনিস

@ user17752 কারন পরিণতি আউটপুটকে প্রভাবিত করে না od -a
র্যান্ডম 832

3

পিএইচপি, 16 বাইট

<?=pack(S,14)^B;

এটি দুটি বিদ্যমান পিএইচপি উত্তরে ব্যবহৃত হয় না এমন দুটি কৌশল ব্যবহার করে:

  1. প্যাক () বা আনপ্যাক () আনতে পাস করা মানটি কেবল 0 বা 1 নয়, কিছু হতে পারে।
  2. বিটওয়াইজ এক্সওআর অপারেটর ( ^) স্ট্রিংগুলিতে কাজ করে এবং ফলাফলটি কেবল ছোট স্ট্রিংয়ের মতো দীর্ঘ হয়, স্ট্রিং ইনডেক্সিং বা টের্নারি অপারেটরের প্রয়োজনীয়তা এড়ানো যায়।

2

নোড, 42 বাইট

n=>require('os').endianness()[0]

প্রো: একটি বিল্টিন আছে। কন: সম্পত্তির নামগুলি খুব দীর্ঘ


2

পাওয়ারশেল, 44 বাইট

[char](66+10*[BitConverter]::IsLittleEndian)

অক্ষর 66 B, এবং 10 টি অক্ষর পরে সংখ্যা 76 L,। 1একটি সংখ্যায় কাস্ট করা হলে "সত্য" এর একটি বুলিয়ান মান হয় । BitConverterএকটি স্ট্যান্ডার্ড। নেট ক্লাস।


1

র‌্যাকেট, 35 28 বাইট

(if(system-big-endian?)'B'L)

'Bবা 'Lযথাক্রমে এটি যথেষ্ট নির্দিষ্ট না হলে আমাকে জানতে দিন :)



1

হাস্কেল (জিএইচসি-কেবল আকার-সীমাবদ্ধ সংখ্যার প্রকারগুলি ব্যবহার করে), 75 বাইট

import Unsafe.Coerce
import GHC.Int
f="BL"!!fromEnum(unsafeCoerce 1::Int8)

(বড়-এন্ডিয়ান আর্কিটেকচারে পরীক্ষিত নয়, তবে এটি কাজ করা উচিত বলে মনে হচ্ছে!)


1

কে, 15 বাইট

    ("bl")@*6h$-8!`
    ,"l"

ব্যাখ্যা;

    From right to left;
    -8!`       /serialises the back tick and returns (0x010000000a000000f500)
    6h$-8!`    /This casts the result to `int which is type 6h(could have used `int$-8!`) - the result is (1 0 0 0 10 0 0 0 245 0i)
    *6h$-8!`   /* means first, we take the first item which is 1. Since it will be either 1 or 0, we can use it to index (@) into the two element list on the left i.e. ("bl")1 returns "l" and ("bl")0 returns b

1

বাশ, 27 বাইট

iconv -tucs2<<<䉌|head -c1

( U + এ 424C ) তিন হল UTF-8 বাইট হিসাবে এনকোডেড হয়: E4 89 8C

ধারণা করা হয় যে iconvগ্লিবসি থেকে ফাংশনটি ব্যবহার করে এবং একটি ইউটিএফ -8 লোকেল ব্যবহৃত হয়।

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