বাইনারি নিজেই আউটপুট


10

আপনার কাজটি যদি আপনি এটি গ্রহণ করতে চান তবে একটি প্রোগ্রাম লিখতে হবে যা বাইনারি ইউটিএফ -8 উপস্থাপনায় তার নিজস্ব উত্স কোডকে বহন করে ।

বিধি

  • উত্সটি কমপক্ষে 1 বাইট দীর্ঘ হতে হবে।

  • আপনার প্রোগ্রাম অবশ্যই ইনপুট গ্রহণ করবেন না (বা একটি অব্যক্ত, খালি ইনপুট থাকতে হবে)।

  • আউটপুটটি কোনও বিশ্বাসযোগ্য বিন্যাসে থাকতে পারে।

  • Lineচ্ছিক ট্রেলিং নতুনলাইন অনুমোদিত।

  • লক্ষ্য করুন যে একটি বাইট 8 বিট, এবং বাইনারি ইউটিএফ -8 উপস্থাপনার দৈর্ঘ্য অগত্যা 8 এর একাধিক।

  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

উদাহরণ

ধরা যাক আপনার উত্স কোডটি Aä$$€h, এটি সম্পর্কিত ইউটিএফ -8 বাইনারি উপস্থাপনা 010000011100001110100100001001000010010011100010100000101010110001101000

আমি Aä$$€hআউটপুট চালাতে হবে 010000011100001110100100001001000010010011100010100000101010110001101000

A      --> 01000001
ä      --> 1100001110100100
$      --> 00100100
$      --> 00100100
€      --> 111000101000001010101100
h      --> 01101000
Aä$$€h --> 010000011100001110100100001001000010010011100010100000101010110001101000

স্ট্রিং বাইনারি ইউটিএফ -8 রূপান্তরকারীগুলিতে


1
"বাইনারি" দ্বারা, আপনি কি বাইনারি মানগুলির একটি স্ট্রিং প্রতিনিধিত্বকে বোঝাতে চাইছেন, অর্থাত্ কেবলমাত্র 1 এবং 0 এর সমন্বিত একটি স্ট্রিং?

1
@ এমদাহমৌনে এখন এটি ইতিমধ্যে আরও ভাল। প্রশ্নটি রয়ে গেছে কীভাবে কোনও কিছুকে ইউটিএফ -8 হিসাবে উপস্থাপন করতে হয়। লক্ষ করুন যে, ইউনিকোড উপস্থাপনা প্রধানত উপর ভিত্তি করে তৈরি সৌন্দর্য (শব্দার্থিক অর্থ নিয়ে কেবল মাঝে মাঝে) একটি চরিত্রের। যদি কোনও নির্ধারিত ইউনিকোড গ্লাইফ উত্স কোডের কোনও চরিত্রের মতো না দেখায় তবে কী হবে? ইউনিকোডে অনেকগুলি লুক-অ্যালাইক (হোমোগ্লিফ) রয়েছে। কোনটি কোনটি ব্যবহার করবেন তা কীভাবে সিদ্ধান্ত নেওয়া যায়? উদাহরণস্বরূপ ডায়ালগ এপিএল এর একটি এন্ড ফাংশন রয়েছে যা ইউটিএফ -8 হিসাবে 01011110বা এনকোড করা হতে পারে 0010011100100010(তারা দেখতে বেশ একইরকম: ^বনাম )
অ্যাডাম

1
আরও ভাল উদাহরণ: 01111100এবং 0010001100100010এনকোড |এবং
অ্যাডাম

4
@ অ্যাডম আমি মনে করি যে কোনও বাইনারি সিকোয়েন্সটি একটি চিহ্নের সাথে মিলে যায় যা কোনও ভাষার নির্দিষ্ট প্রয়োগে সংকলন / চালিত হয়।
Qwr

1
মেশিন কোড সম্পর্কে কীভাবে? (কমোডোর সি 64 মেশিন
কোডটিকে

উত্তর:


7

ভি , 28 (বা 16?) ল্যাটিন 1 বাইট (35 ইউটিএফ -8 বাইট)

ñéÑ~"qpx!!xxd -b
ÎdW54|D
Íßó

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

হেক্সডাম্প (লাতিন ভাষায় 1):

00000000: f1e9 d17e 2271 7078 2121 7878 6420 2d62  ...~"qpx!!xxd -b
00000010: 0ace 6457 3534 7c44 0acd dff3            ..dW54|D....

আউটপুট (ইউটিএফ -8 এ একই কোডের বাইনারি উপস্থাপনা, লাতিন 1 নয়):

110000111011000111000011101010011100001110010001011111100010001001110001011100000111100000100001001000010111100001111000011001000010000000101101011000100000110111000011100011100110010001010111001101010011010001111100010001000000110111000011100011011100001110011111110000111011001100001010

ব্যাখ্যা:

ñéÑ~"qpx            " Standard quine. Anything after this doesn't affect the
                    " program's 'quine-ness' unless it modifies text in the buffer
        !!xxd -b    " Run xxd in binary mode on the text
Î                   " On every line...
 dW                 "   delete a WORD
   54|              "   Go to the 54'th character on this line
      D             "   And delete everything after the cursor
Í                   " Remove on every line...
  ó                 "   Any whitespace
 ß                  "   Including newlines

অথবা ...

ভি , 16 বাইট

ñéÑ~"qpx!!xxd -b

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

আউটপুট:

00000000: 11000011 10110001 11000011 10101001 11000011 10010001  ......
00000006: 01111110 00100010 01110001 01110000 01111000 00100001  ~"qpx!
0000000c: 00100001 01111000 01111000 01100100 00100000 00101101  !xxd -
00000012: 01100010 00001010                                      b.

ওপি বলেছেন:

আউটপুট যে কোনও সুবিধাজনক বিন্যাসে হতে পারে।

এটি ভি: পি এর জন্য আরও সুবিধাজনক বিন্যাসে আউটপুট দেয় (তবে আমি নিশ্চিত নই যে এটি নিয়মগুলি প্রসারিত করছে কিনা)



4

05 এ বি 1 ই , 105 বাইট

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 রূপান্তর বিল্টিন নেই, তাই আমাকে নিজেই সবকিছু করতে হবে ..

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

ব্যাখ্যা:

:

সবচেয়ে কম : 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 এ রূপান্তর সংক্রান্ত একটি সংক্ষিপ্তসার এখানে:

  1. ইউনিকোড অক্ষরগুলিকে তাদের ইউনিকোড মানগুলিতে রূপান্তর করুন (যেমন "dЖ丽"হয়ে ওঠে [100,1046,20029])
  2. এই ইউনিকোড মানগুলিকে বাইনারি রূপান্তর করুন (যেমন [100,1046,20029]হয় ["1100100","10000010110","100111000111101"])
  3. নিম্নলিখিত রেঞ্জগুলির মধ্যে কোনটি অক্ষরগুলি তা পরীক্ষা করে দেখুন:
    1. 0x00000000 - 0x0000007F (0-127): 0xxxxxxx
    2. 0x00000080 - 0x000007FF (128-2047): 110xxxxx 10xxxxxx
    3. 0x00000800 - 0x0000FFFF (2048-65535): 1110xxxx 10xxxxxx 10xxxxxx
    4. 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]


3

জাভাস্ক্রিপ্ট (নোড.জেএস) , 60 বাইট

@ নীল এবং @ শেগি থেকে -15 বাইট

f=_=>[...Buffer(`f=`+f)].map(x=>x.toString(2).padStart(8,0))

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


padStart(8,0)2 বাইট সঞ্চয়
নিল

অনুমানটি আউটপুটটিকে কোনও সুবিধাজনক বিন্যাসে রাখার অনুমতি দেয় যাতে আপনি বিটগুলির একটি অ্যারে আউটপুট রাখতে mapএবং খাঁজ করতে joinপারেন
শেগি

বাইটের অ্যারে হিসাবে আউটপুট সহ 60 বাইট
শেগি

ধন্যবাদ @ নীল এবং @ শেগি !!
লুইস ফিলিপ দে জেসুস মুনোজ


2

পার্ল 6 , 46 বাইট

<say "<$_>~~.EVAL".ords.fmt("%08b",'')>~~.EVAL

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

স্ট্যান্ডার্ড কুইন .fmt("%08b",'')8 টি বাইনারি দৈর্ঘ্যের অর্ডিনাল মানগুলির তালিকা ফর্ম্যাট করে এবং একটি খালি স্ট্রিংয়ের সাথে যোগ দেয়।



2

জাভা 10, 339 308 265 227 225 186 184 বাইট

v->{var s="v->{var s=%c%s%1$c;return 0+new java.math.BigInteger(s.format(s,34,s).getBytes()).toString(2);}";return 0+new java.math.BigInteger(s.format(s,34,s).getBytes()).toString(2);}

-8 বাইটস @ নাহুয়েলফিউইলকে অপ্রয়োজনীয় &255(এবং একটি অতিরিক্ত -35 আমার নজরে আনার জন্য যে চ্যালেঞ্জের পুরো প্রোগ্রাম স্পেসগুলি বাতিল করে দেওয়া হয়েছিল এবং এখন একটি ফাংশনও অনুমোদিত হয়েছে তা মুছে ফেলার জন্য
ধন্যবাদ ) -অলিভিয়ারগ্রোয়ারকে -১৪ বাইট ধন্যবাদ ।

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

ব্যাখ্যা:

:

  • var s স্ট্রিংগুলিতে অপরঠিত সোর্স কোড রয়েছে
  • %s এই স্ট্রিংটি নিজের মধ্যে রাখার জন্য ব্যবহৃত হয় s.format(...)
  • %c, %1$cএবং 34ডাবল-কোটগুলি ফর্ম্যাট করতে ব্যবহৃত হয় ( ")
  • s.format(s,34,s) সব একসাথে রাখে

চ্যালেঞ্জ অংশ:

v->{                         //  Method with empty unused parameter and String return-type
  var s="...";               //   Unformatted source code String
  return 0+                  //   Return, with a leading "0":
   new java.math.BigInteger( //    A BigInteger of:
     s.format(s,34,s)        //     The actual source code String
      .getBytes())           //     Converted to a list of bytes (UTF-8 by default)
   .toString(2);}            //    And convert this BigInteger to a binary-String      

1
ল্যাম্বডা ব্যবহার করে 265 বাইট , কারণ সমস্ত উত্সটি c&255
অসি

@ নাহুয়েলফুয়েলুল আসল প্রশ্নটিতে বলেছে " আপনাকে অবশ্যই একটি সম্পূর্ণ প্রোগ্রাম তৈরি করতে হবে। " এবং " আপনার আউটপুটটি STDOUT এ মুদ্রণ করতে হবে। ", সুতরাং একটি স্ট্রিং ফেরানো ল্যাম্বডা ফাংশনের পরিবর্তে আমার কাছে ভার্বোজ বর্ডার-প্লেট কোড রয়েছে। প্রয়োজন নেই এমন বিষয়ে ভাল বিষয় &255যেহেতু আমরা কোনও অ-এসসিআইআই অক্ষর ব্যবহার করি না, ধন্যবাদ!
কেভিন ক্রুইজসেন

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

1
ঠিক আছে, আমি এখানেই হারিয়েছি। তবে আমি চেষ্টা করেছি এবং 184 বাইটের জন্য এখানে নতুন প্রার্থী রয়েছি । আমি কোথাও ভুল হলে আমাকে বলুন;)
অলিভিয়ার গ্রাগোয়ার

1
@ অলিভিয়ার গ্রাগোওরে আহ, চমৎকার পদ্ধতির! BigIntegerবাইনারি-স্ট্রিংগুলিতে রূপান্তরিত করার জন্য পুরোপুরি সংক্ষিপ্ত হওয়া সম্পর্কে সম্পূর্ণরূপে ভুলে গেছি । আর পরিবর্তন করে 2 আরও বেশি বাইট return'0'+থেকে return 0+। হুম, কেন এটি 0প্রয়োজনীয় বিটিডব্লিউ? এটি আমাকে বিভ্রান্ত 0করে BigInteger.toString(2)
তোলে

2

পাইথন 2 , 68 67 বাইট

_="print''.join(bin(256|ord(i))[3:]for i in'_=%r;exec _'%_)";exec _

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

এই উত্তরের একটি পরিবর্তন

'ইন' এর পরে স্থানটি সরিয়ে -1 বাইট (ধন্যবাদ @ এমদাহমৌনে)


-1 বাইট: আপনি স্থান বাদ দিতে পারেনin
mdahmoune

আপনি আপনার টিআইও লিঙ্কটি আপডেট করেননি। এছাড়াও, আমি '%08b'%ord(i)পরিবর্তে করার চেষ্টা করেছি bin(256|ord(i))[3:], তবে এটি কোনও কারণে কার্যকর হয়নি
জো কিং

2

আর , 138 114 বাইট

x=function(){rev(rawToBits(rev(charToRaw(sprintf("x=%s;x()",gsub("\\s","",paste(deparse(x),collapse="")))))))};x()

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

আর এর দক্ষতা উপস্থাপনে ফাংশন বিচ্ছিন্ন করার ক্ষমতা ব্যবহার করে। revগুলি কারণ প্রয়োজন হয় rawToBitsরাখে অন্তত গুরুত্বপূর্ণ বিট প্রথম। as.integerপ্রয়োজনীয় কারণ অন্যথায় বিটগুলি একটি নেতৃস্থানীয় শূন্যের সাথে প্রদর্শিত হয়।

সম্পাদিত একবার বুঝতে পারলাম যে কোনও সুবিধাজনক আউটপুট অনুমোদিত ছিল। আসল বাইট গণনায় একের পর এক আউটও ছিল।


1

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 221 বাইট

var s="var s={0}{1}{0};Write(string.Concat(string.Format(s,(char)34,s).Select(z=>Convert.ToString(z,2).PadLeft(8,'0'))));";Write(string.Concat(string.Format(s,(char)34,s).Select(z=>Convert.ToString(z,2).PadLeft(8,'0'))));

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

পতাকা #/u:System.String 193 বাইট সহ সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক)

var s="var s={0}{1}{0};Write(Concat(Format(s,(char)34,s).Select(z=>Convert.ToString(z,2).PadLeft(8,'0'))));";Write(Concat(Format(s,(char)34,s).Select(z=>Convert.ToString(z,2).PadLeft(8,'0'))));

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


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