0"D34çýÇbεDg•Xó•18в@ƶà©i7j0ìëR6ôRíć7®-jšTìJ1®<×ì]ð0:J"D34çýÇbεDg•Xó•18в@ƶà©i7j0ìëR6ôRíć7®-jšTìJ1®<×ì]ð0:J
05AB1E এর কোনও ইউটিএফ -8 রূপান্তর বিল্টিন নেই, তাই আমাকে নিজেই সবকিছু করতে হবে ..
এটি অনলাইনে চেষ্টা করে দেখুন বা এটি একটি কুইন যাচাই করুন ।
ব্যাখ্যা:
কুইন পার্ট :
সবচেয়ে কম quine : 05AB1E এই এক 0"D34çý"D34çý
( 14 বাইট ) দ্বারা উপলব্ধ @OliverNi । আমার উত্তর এ যোগ করে যে quine একটি পরিমার্জিত সংস্করণ ব্যবহার ...
এখানে: 0"D34çý..."D34çý...
। এই কুইনের একটি সংক্ষিপ্ত ব্যাখ্যা:
0 # Push a 0 to the stack (can be any digit)
"D34çý" # Push the string "D34çý" to the stack
D # Duplicate this string
34ç # Push 34 converted to an ASCII character to the stack: '"'
ý # Join everything on the stack (the 0 and both strings) by '"'
# (output the result implicitly)
চ্যালেঞ্জ অংশ:
কোডটির চ্যালেঞ্জ অংশের জন্য এখন। আমি উপরে যেমন উল্লেখ করেছি, 05AB1E এর কোনও ইউটিএফ -8 রূপান্তর বিল্টইন নেই, তাই আমাকে এই জিনিসগুলি ম্যানুয়ালি করতে হবে। আমি কীভাবে এটি করতে পারি তার উত্স হিসাবে এই উত্সটি ব্যবহার করেছি: ইউনিকোড কোডপয়েন্টগুলিকে ম্যানুয়ালি ইউটিএফ -8 এবং ইউটিএফ -16 এ রূপান্তর করা । ইউনিকোডের অক্ষরকে ইউটিএফ -8 এ রূপান্তর সংক্রান্ত একটি সংক্ষিপ্তসার এখানে:
- ইউনিকোড অক্ষরগুলিকে তাদের ইউনিকোড মানগুলিতে রূপান্তর করুন (যেমন
"dЖ丽"
হয়ে ওঠে [100,1046,20029]
)
- এই ইউনিকোড মানগুলিকে বাইনারি রূপান্তর করুন (যেমন
[100,1046,20029]
হয় ["1100100","10000010110","100111000111101"]
)
- নিম্নলিখিত রেঞ্জগুলির মধ্যে কোনটি অক্ষরগুলি তা পরীক্ষা করে দেখুন:
0x00000000 - 0x0000007F
(0-127): 0xxxxxxx
0x00000080 - 0x000007FF
(128-2047): 110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF
(2048-65535): 1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF
(65536-2097151): 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5 বা 6 বাইটের জন্যও সীমা রয়েছে, তবে আসুন আপাতত তাদের ছেড়ে দিন।
চরিত্রটি d
প্রথম পরিসরে থাকবে, সুতরাং ইউটিএফ -8 এ 1 বাইট; চরিত্রটি Ж
দ্বিতীয় পরিসরে, সুতরাং ইউটিএফ -8 এ 2 বাইট; এবং চরিত্রটি 丽
তৃতীয় সীমার মধ্যে, সুতরাং ইউটিএফ -8 এ 3 বাইট।
এর x
পেছনের প্যাটার্নটিতে ডান থেকে বামে এই অক্ষরগুলির বাইনারি দিয়ে পূর্ণ হয়। সুতরাং d
( 1100100
) প্যাটার্নযুক্ত 0xxxxxxx
হয় 01100100
; Ж
( 10000010110
) প্যাটার্ন সঙ্গে 110xxxxx 10xxxxxx
হয়ে 11010000 10010110
; এবং 丽
( 100111000111101
) প্যাটার্ন সঙ্গে 1110xxxx 10xxxxxx 10xxxxxx
হয়ে 1110x100 10111000 10111101
, যার পরে অবশিষ্ট x
সঙ্গে প্রতিস্থাপিত হয় 0
: 11100100 10111000 10111101
।
সুতরাং, যে পদ্ধতির আমি আমার কোড ব্যবহার করেছি। প্রকৃত ব্যাপ্তিগুলি পরীক্ষা করার পরিবর্তে, আমি কেবল বাইনারিটির দৈর্ঘ্যটি দেখি x
এবং এটি প্যাটার্নগুলির পরিমাণের সাথে তুলনা করি , যেহেতু এটি কয়েকটি বাইট সংরক্ষণ করে।
Ç # Convert each character in the string to its unicode value
b # Convert each value to binary
ε # Map over these binary strings:
Dg # Duplicate the string, and get its length
•Xó• # Push compressed integer 8657
18в # Converted to Base-18 as list: [1,8,12,17]
@ # Check for each if the length is >= to this value
# (1 if truthy; 0 if falsey)
ƶ # Multiply each by their 1-based index
à # Pop and get its maximum
© # Store it in the register (without popping)
i # If it is exactly 1 (first range):
7j # Add leading spaces to the binary to make it of length 7
0ì # And prepend a "0"
ë # Else (any of the other ranges):
R # Reverse the binary
6ô # Split it into parts of size 6
Rí # Reverse it (and each individual part) back
ć # Pop, and push the remainder and the head separated to the stack
7®- # Calculate 7 minus the value from the register
j # Add leading spaces to the head binary to make it of that length
š # Add it at the start of the remainder-list again
Tì # Prepend "10" before each part
J # Join the list together
1®<× # Repeat "1" the value from the register - 1 amount of times
ì # Prepend that at the front
] # Close both the if-else statement and map
ð0: # Replace all spaces with "0"
J # And join all modified binary strings together
# (which is output implicitly - with trailing newline)
আমার এই 05AB1E উত্তরটি দেখুন (বিভাগগুলি কীভাবে বড় পূর্ণসংখ্যাগুলি সংকুচিত করতে হয়? এবং পূর্ণসংখ্যা তালিকাগুলি কীভাবে সংহত করতে হয়? ) কেন •Xó•18в
তা বোঝার জন্য [1,8,12,17]
।