একটি ইউটিএফ -8 বাইট অনুক্রমের দৈর্ঘ্য


15

একটি ইউটিএফ -8 বাইট অনুক্রমের প্রথম বাইট দেওয়া দৈর্ঘ্য নির্ধারণ করুন। নিম্নলিখিত টেবিলটি দেখায় যে প্রতিটি সম্ভাব্য দৈর্ঘ্যের মানচিত্রটি রয়েছে:

  Range    Length
---------  ------
0x00-0x7F    1
0xC2-0xDF    2
0xE0-0xEF    3
0xF0-0xF4    4

টেবিলের ফাঁকগুলির নোট: 0x80-0xBF ধারাবাহিকতা বাইট, 0xC0-0xC1 একটি দীর্ঘতর, অবৈধ ক্রম শুরু করবে, 0xF5-0xFF এর ফলে ইউনিকোড সর্বাধিক ছাড়িয়ে একটি কোডপয়েন্ট হবে।

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

এটি কোড গল্ফ। বাইটস মধ্যে সংক্ষিপ্ত উত্তর।

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

0x00 => 1
0x41 => 1
0x7F => 1
0xC2 => 2
0xDF => 2
0xE0 => 3
0xEF => 3
0xF0 => 4
0xF4 => 4

8 টি বিটের তালিকার একটি ইনপুট কি গ্রহণযোগ্য?
জোনাথন অ্যালান

@ জোনাথান অ্যালান নং, এটি খুব নমনীয় আই / ও বহন করবে।
nwellnhof

উত্তর:


5

চতুর্থ, 6 বাইট

x-size

দেখতে https://forth-standard.org/standard/xchar/X-SIZE

ইনপুট এবং আউটপুট একটি স্ট্যান্ডার্ড ফোর্থ মডেল অনুসরণ করে:

ইনপুট

একক বাইট UTF-8 "স্ট্রিং" এর মেমরি ঠিকানা + দৈর্ঘ্য (অর্থাত্ 1)।

আউটপুট

বাইটে UTF-8 সিকোয়েন্স দৈর্ঘ্য।

কোডের উদাহরণ

দোকানের 0xF0 একটি মেমরি সেলে এবং ডাকা এক্স-আকার:

variable v
0xF0 v !
v 1 x-size

ফলাফলটি পরীক্ষা করুন:

.s <1> 4  ok

Tio.run/#forth-gforth এ এই কাজ করে ধরে নেওয়া , আপনি একটি উদাহরণ দেখাতে পারেন? বাইট 0xF0 হলে কীভাবে আপনার একক বাইট UTF-8 স্ট্রিং থাকতে পারে তা আমি বুঝতে পারি না।
ডেনিস

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

আমি দেখি. এটি আমি ইউটিএফ -8 স্ট্রিংকে কল করব না যদিও ইউটিএফ -8 এর সাথে সম্পর্কিত কেবল F0 একটি অবৈধ বাইট অনুক্রম।
ডেনিস

> কেবল এফ 0 হ'ল একটি অবৈধ বাইট সিকোয়েন্স সত্য (এ কারণেই আমি "স্ট্রিং" শব্দটি উদ্ধৃতিতে রেখেছি) তবে এই কাজটি বিশেষত এটি প্রথম বাইট দ্বারা ক্রমটি সনাক্তকরণ সম্পর্কে এবং ফোরথটি অবৈধ হওয়ার জন্য সত্যই যত্ন নেয় না For , যার ফলে এই সমাধানটি সম্ভব হয় turn
জেপেলিন

6

দেখতে-দেখতে-সহজ উদাহরণ সহ সমাবেশের সাথে কাজ করতে বাশ টিআইও ব্যবহার করুন । লিঙ্কটিতে আপনার সমাধানটির 15-বাইট সংস্করণও রয়েছে। এখানে উন্নতি আছেন: xor 0xff -> cpl, এর কোন প্রয়োজন or a, jr nz, return -> ret nz, ld a,1 -> inc a
বুবলার

5

সি (জিসিসি) , 39 বাইট

t(char x){x=(__builtin_clz(~x)-24)%7u;}

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



@ আর .. কারণ তারা সাইন বাড়িয়েছে। উদাহরণ হিসেবে বলা যায় ~(char)0xF0 == ~(int)0xFFFFFFF0(অনুমান char = signed char, sizeof(int) == 4)
user202729

আহ, ধরে নিলাম চরটি স্বাক্ষরিত।
আর .. গিথহাব বন্ধ হেল্পিং আইসিসি

4

জেলি ,  8  7 বাইট

+⁹BIITḢ

একটি মোনাডিক লিঙ্কটি বাইটটিকে পূর্ণসংখ্যা হিসাবে স্বীকার করে।

এটি অনলাইন চেষ্টা করুন! বা মূল্যায়ন সমস্ত ইনপুট দেখুন।

যদি 8 টি বিটের তালিকার একটি ইনপুট গ্রহণযোগ্য হয় তবে পদ্ধতিটি কেবল 6 বাইট: 1;IITḢতবে এটি একেবারে I / O এর সাথে কথা বলার মতো বলে মনে করা হয়।

কিভাবে?

+⁹BIITḢ - Link: integer       e.g.: 127 (7f)            223 (df)            239 (ef)            244 (f4)
 ⁹      - literal 256
+       - add                       383                 479                 495                 500
  B     - to a list of bits         [1,0,1,1,1,1,1,1,1] [1,1,1,0,1,1,1,1,1] [1,1,1,1,0,1,1,1,1] [1,1,1,1,1,0,1,0,0]
   I    - increments                [-1,1,0,0,0,0,0,0]  [0,0,-1,1,0,0,0,0]  [0,0,0,-1,1,0,0,0]  [0,0,0,0,-1,1,-1,0]
    I   - increments                [2,-1,0,0,0,0,0]    [0,-1,2,-1,0,0,0]   [0,0,-1,2,-1,0,0]   [0,0,0,-1,2,-2,1]
     T  - truthy indices            [1,2]               [2,3,4]             [3,4,5]             [4,5,6,7]
      Ḣ - head                      1                   2                   3                   4







1

জেলি , 7 বাইট

»Ø⁷Bi0’

আমার 05AB1E উত্তরের পোর্ট

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

ব্যাখ্যা:

 Ø⁷        # Push 128
»          # Take the max of 128 and the input
   B       # Convert it to binary
    i0     # Get the 1-indexed first index of a 0
          # Decrease it by 1 to make it 0-indexed (and output it implicitly)


1

x86 সমাবেশ, 11 বাইট by

00000000 <f>:
   0:   f6 d1                   not    %cl
   2:   0f bd c1                bsr    %ecx,%eax
   5:   34 07                   xor    $0x7,%al
   7:   75 01                   jne    a <l1>
   9:   40                      inc    %eax
0000000a <l1>:
   a:   c3                      ret

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

ব্যবহারকারী 202729 এর জাভাস্ক্রিপ্ট উত্তর পোর্ট। ফাস্টকল কনভেনশন ব্যবহার করে।



1

05 এ বি 1 ই , 8 7 বাইট

žy‚àb0k

@ নীল এর কাঠকয়লা উত্তর বন্দর ।
-১ বাইট @ গ্রিমিকে ধন্যবাদ ।

পূর্ণসংখ্যা হিসাবে ইনপুট।

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

ব্যাখ্যা:

žy       # Push 128
        # Pair it with the (implicit) input-integer
   à     # Take the maximum of this pair (128 and input)
    b    # Convert it to a binary-string
     0k  # Get the 0-based first index of a "0" in this binary-string
         # (and output it implicitly as result)

1
s)থেকে 7. পোর্টিং জন্য অন্যান্য জেলি উত্তর আরেকটি 8 দেয়:₁+b¥η€ËO
Grimmy

@ গ্রিমি জানিনা কেন আমি প্রথম স্থান পেলাম না ..: এস তবে -১ এর জন্য ধন্যবাদ।
কেভিন ক্রুইজসেন

0

সি, 31 বাইট

f(x){return(x-160>>20-x/16)+2;}

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

জিসিসি (-O0) সহ 27 বাইট

f(x){x=(x-160>>20-x/16)+2;}

বিকল্প, 31 এবং 33 বাইট

f(x){return(10>>15-x/16)+7>>2;}
f(x){return x/128-(-3>>15-x/16);}

আহের সাথে চারপাশে খেলতে গিয়ে এই অভিব্যক্তিগুলি খুঁজে পেয়েছি! সুপারপটিমাইজার কয়েক বছর আগে

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