আপনার সমস্ত বেস 97 আমাদের are


18

একাধিক প্রোগ্রামিং ল্যাঙ্গুয়েজ সম্পূর্ণ প্রিন্টযোগ্য এএসসিআইআই, ট্যাব এবং নিউলাইনগুলি ব্যবহার করে রচিত। এই 97 টি অক্ষরটি 8-বিট বাইটে সংরক্ষণ করা হয় (যা আসলে 256 বিভিন্ন চরিত্র ধারণ করতে সক্ষম!) যা কেবল মারাত্মকভাবে অক্ষম - বিশেষত কোড-গল্ফিংয়ে, যেখানে প্রতিটি বাইট গণনা করা হয়! এই চ্যালেঞ্জে, আপনি বেস রূপান্তরটি ব্যবহার করে আপনার স্কোর হ্রাস করতে সক্ষম হবেন।

চ্যালেঞ্জ

আপনার প্রোগ্রাম / ফাংশনটি স্ট্রিং বা চরিত্রের অ্যারেটিকে ইনপুট হিসাবে গ্রহণ করে, যা এটি পরে বেস-97 number নম্বর হিসাবে ব্যাখ্যা করে । তারপরে এটি এটিকে একটি বেস -২6 to সংখ্যায় রূপান্তর করে এবং এই সংখ্যাটি উপস্থাপনের জন্য প্রয়োজনীয় সংখ্যার চিহ্নকে (যেমন, বাইটস) গণনা করে। এই গণনাটি আপনার প্রোগ্রাম / ফাংশনের আউটপুট / রিটার্ন মান হবে।

বেস -২ এবং বেস -10 (বাইনারি এবং দশমিক) ব্যবহার করে একটি সাধারণ উদাহরণ: যদি ইনপুট হয় 10110তবে আউটপুটটি 2 হবে, যেহেতু 10110 2 = 22 10 (আউটপুট উপস্থাপনের জন্য প্রয়োজনীয় দুটি সংখ্যা)। একইভাবে, 1101 2 13 হয়ে 10 , পাশাপাশি 2 একটি আউটপুট, দান এবং 110 2 6 হয়ে 10 , অতএব আউটপুট 1 হবে।

ইনপুট স্ট্রিংটিতে সমস্ত 95 টি মুদ্রণযোগ্য এএসসিআইআই অক্ষর, পাশাপাশি নিউলাইন \nএবং আক্ষরিক ট্যাব থাকতে পারে \tযা আপনার বেস রূপান্তরের জন্য 97 চিহ্নের উত্স বর্ণমালা তৈরি করে । সঠিক বর্ণমালা এইভাবে হবে (বদলে \tএবং \nপ্রকৃত আক্ষরিক ট্যাব এবং রাখুন NEWLINE; নোট সম্পর্কে newline নিম্নলিখিত আক্ষরিক স্থান) :

\t\n !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

মনে রাখবেন, এই বর্ণমালার ক্রম গুরুত্বপূর্ণ: উদাহরণস্বরূপ, বেস-97 \tদশমিক সাথে সঙ্গতিপূর্ণ 0, এবং !দশমিক সাথে সঙ্গতিপূর্ণ 3

কিছু টেস্টকেস: (আপনাকে খালি স্ট্রিং হ্যান্ডেল করার দরকার নেই)

Input                             Output
'example@domain.com'                  15
'All your base are belong to us!'     26
'       abcd'                          9
'~      abcd'                         10
'ABCDEFGHIJK'                          9
'zyxwvutsrpq'                         10
'{".~"}.~'                             7
'\t\t\t\t\t\t\t\t'                     1 (with \t a literal tab; the result is 0, which can be represented with 1 byte)
'!\t\t\t\t\t\t\t\t'                    7 (with \t a literal tab)

স্কোরিং

  1. যদি আপনার এন্ট্রিটি কেবল প্রিন্টযোগ্য এএসসিআইআই, নিউলাইন এবং / অথবা ট্যাব ব্যবহার করে: আপনার প্রোগ্রামের স্কোরটি আপনার প্রোগ্রামের আউটপুট হবে, যখন ইনপুট হিসাবে তার নিজস্ব উত্স কোড দেওয়া হয়।

  2. আপনার এন্ট্রি যদি এমন কোনও অক্ষর ব্যবহার করে যা মুদ্রণযোগ্য ASCII, নিউলাইন বা ট্যাব নয়: আপনার প্রোগ্রামের স্কোরটি কেবল মতো বাইটের সংখ্যা ।


3
যদি আপনার এই পুরানো মেমের চেয়ে আরও ভাল শিরোনামের পরামর্শ থাকে তবে তা বিনা দ্বিধায় মন্তব্যগুলিতে পোস্ট করুন!
সান্চাইজস

আপনি কী বুঝতে পেরেছিলেন যে এই চ্যালেঞ্জটি কেবলমাত্র ট্যাবগুলির সমন্বয়ে ল্যাঙ্গুয়েজ উত্তর দিয়ে জিততে পারে।
পিপ্পারি

@ পিপ্পেরি সত্যি কথা বলতে, এই জাতীয় উত্তরের জন্য আমার খুব সামান্য ধৈর্য রয়েছে। হ্যাঁ, আমি এটি উপলব্ধি করেছিলাম, তবে যতক্ষণ না কেউ প্রকৃতপক্ষে তাদের সিস্টেমে প্রোগ্রামটি সঞ্চয় করতে পারে, ততক্ষণ পর্যন্ত এটি আমার উত্সাহ পাবে না।
সান্চাইজস

উত্তর:


7

পাইথন 2 , স্কোর 73 72 71

সম্পাদনা: -১ @ জোনাথন অ্যালানকে ধন্যবাদ

def f(l,z=0):
	for i in map(ord,l):z+=i-[30,9][i<32];z*=97
	print(len(bin(z))-2)/8or 1

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


কেবল একটি /ঠিক করা উচিত আমি মনে করি
জোনাথন অ্যালান

or 1|1এই দৃষ্টান্তটি দিয়ে প্রতিস্থাপন করা যেতে পারে ।
জোনাথন অ্যালান

1
@ জোনাথন অ্যালান যেটি বিভিন্ন (ভুল) ফলাফল দেয়।
সানাইজাইজ

ওহ, হ্যাঁ এটি হবে।
জোনাথন অ্যালান

@ জোনাথান অ্যালান এটি বিজোড় ফলাফলের জন্য কাজ করবে, তবে এটি একটিকে এমনকি ফলাফলগুলিতে যুক্ত করবে।
সান্চাইজস

5

জাপট , স্কোর 19 (23 বাইট)

nHo127 uA9 md)sG l /2 c

এটি অনলাইন পরীক্ষা!

কাকতালীয়ভাবে, আমি মনে করি না এএসসিআইআই-এর অক্ষর দ্বারা এমনকি এটি আরও গল্ফ করা যেতে পারে ...

ব্যাখ্যা

UnHo127 uA9 md)sG l /2 c   Implicit: U = input string, A = 10, G = 16, H = 32
  Ho127                    Create the range [32, 33, ..., 126].
        uA9                Insert 9 and 10 at the beginning of this range.
            md             Map each to a character, yielding ["\t", "\n", " ", "!", ... "~"].
Un            )            Convert U to a number via this alphabet ("\t" -> 0, "~" -> 96, etc.)
               sG          Convert this number to a base-16 (hexadecimal) string.
                  l        Take the length of this string.
                    /2 c   Divide by two and round up to get the length in base-256.
                           Implicit: output result of last expression

5

জেলি ,  18  17 বাইট - স্কোর  18  17

-1 বাইট ধন্যবাদ এরিক দি আউটগল্ফারকে (অনুবাদটির জন্য তালিকার তালিকার প্রয়োজন নেই)

O“µœ½þ‘y_30ḅ97b⁹L

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

কিভাবে?

O“µœ½þ‘y_30ḅ97b⁹L - Link: list of characters
O                 - convert from characters to ordinals
 “µœ½þ‘           - code-page indices = [9,30,10,31]
       y          - translate (9->30 and 10->31)
        _30       - subtract 30
           ḅ97    - convert from base 97
               ⁹  - literal 256
              b   - convert to base
                L - length of the result

- সেরাটি আমি ASCII এর সাথে পেয়েছি শুধুমাত্র 29 এর স্কোর :

O10,31,9,30y_30Ux"J_1 97*$$$SSb256L

- এটি অত্যন্ত চূড়ান্তও নয়। এটি উপরের মতো অধ্যাদেশগুলি অনুবাদ করে, তবে বেস 97 থেকে রূপান্তরটি সরাসরি গুণকের পরিবর্তে মানগুলি পুনরাবৃত্তি করে এবং সংমিশ্রণ দ্বারা অর্জন করা হয় - এটি রূপান্তর {".~"}.~করতে অ্যাডজাস্টেড সূচকগুলি [93,4,16,96,4,95,16,96]পরে বিপরীত হয় ( U) এবং সেগুলি তৈরি করতে পুনরাবৃত্তি করে [[96,96,..., 97⁷ times ...,96],[16,16,... 97⁶ times ...16],[95,95,... 97⁵ times ...95],[4,4,... 97⁴ times ...4],[96,96,... 97³ times ...96],,[16,16,... 97² times ...,16],[4,4,... 97 times ...4],[93]]এবং তারপরে যোগফল, 256 বেসে রূপান্তর করে এবং দৈর্ঘ্য পায় (এটি যদি মেমরির বাইরে চলে না যায়: p)।


3

জে , 36 বাইট, স্কোর = 30

256#@(#.inv)97x#.(u:9,10,32+i.95)&i.

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

জে তার আদিমতার জন্য মাত্র 7-বিট ASCII অক্ষর ব্যবহার করে।

ব্যাখ্যা

256#@(#.inv)97x#.(u:9,10,32+i.95)&i.  Input: string S
                 (              )     Form 7-bit ASCII alphabet
                            i.95        Range [0, 95)
                         32+            Add 32
                    9,10,               Prepend 9 and 10
                  u:                    Convert to characters
                                 &i.  Index of each char in S in that alphabet
            97x#.                     Convert from base 97 to decimal
256   #.inv                           Convert to base 256
   #@                                 Length

3

গাইয়া , 14 বাইট, স্কোর 14

9c₸c₵R]$;B₵rBl

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

ব্যাখ্যা

9c              Push a tab character. (done like this since tab isn't in the codepage)
  ₸c            Push a linefeed character.
    ₵R          Push all printable ASCII characters.
      ]$        Concatenate everything together.
        ;       Copy second-from-top, implicitly push input. Stack is now [ASCII input ASCII]
         B      Convert input from the base where the ASCII string is the digits.
          ₵rB   Convert that to the base where the code page is the digits (base 256).
             l  Get the length of the result.
                Implicitly output top of stack.

কেবলমাত্র ASCII

এটিই সেরা যেটি কেবল মাত্র ASCII ব্যবহার করে আমি আসতে পেরেছি, ১৯ টি স্কোর দিয়েছি:

9c10c8373c'R+e]$;B256Bl

অসুবিধা ইনপুট রূপান্তর মধ্যে। বেস -99 সিস্টেম থেকে রূপান্তর করার একমাত্র যুক্তিসঙ্গত উপায়টি হ'ল Bম্যাপিংয়ের জন্য নন-এসএসআইআই প্রয়োজন ¦। অতিরিক্তভাবে, বর্তমানে cএকটি সংখ্যা সীমার উপরে ম্যাপিং ছাড়াই একটি অক্ষর পরিসর করার কোনও উপায় নেই , যা একই সমস্যা ভোগ করে। আমি দেখতে পেলাম সেরা সমাধানটি ছিল স্ট্রিংটি তৈরি করা ₵Rএবং এটি সন্ধান করা।


আপনি কি এএসসিআইআইয়ের একমাত্র সংস্করণ চেষ্টা করে দেখেছেন? এটি আপনার স্কোরের উন্নতি নাও করতে পারে (আমি মনে করি ₵Rএবং ₵rএটি প্রতিস্থাপন করা সহজ নয় যদিও স্পষ্টতই) তবে এটি কীভাবে তুলনা করে তা দেখতে আকর্ষণীয় হতে পারে।
সান্চাইজস

@ সাঞ্চাইজস আমি করেছিলাম, তবে সংক্ষিপ্ততম আমি শেষ হয়েছি ১৯ বছর বয়সী, যেহেতু কোড পয়েন্ট 73৩73 is এবং আমি কেবলমাত্র এএসসিআইআই-তে চরিত্র রেঞ্জগুলি করতে পারি না, যা এই প্রোগ্রামটির বেশিরভাগ এএসসিআইআই হওয়ায় কিছুটা হতাশাই হয় is
বিড়াল বিড়াল

হ্যাঁ, এটি কেবলমাত্র ASCII হওয়ার কাছাকাছি। তাত্ক্ষণিক প্রশ্ন: আমি গাইয়াকে চিনি না তবে এখনই এটি নিয়ে কিছুটা খেলেছি, তবে সংখ্যার তালিকায় রূপান্তর করার কোনও উপায় আছে কি? ( cপ্রতিটি চরিত্রের মতো তবে প্রয়োগ হয়েছে, $কেবল সমস্ত সংখ্যা দেখায়)
সানচাইজস

@ সাঞ্চাইজস আপনাকে cতালিকাটির উপরে মানচিত্র তৈরি করতে হবে, যা হবে
বিজনেস বিড়াল

প্রকৃতপক্ষে ₵rপ্রতিস্থাপন করা সহজ যেহেতু আমি কেবল 256পরিবর্তে ব্যবহার করতে পারি , আমি কেবল এটি ব্যবহার করেছি কারণ এটি 1 বাইট ছোট এবং প্রোগ্রামটি কেবল যাইহোক ASCII ছিল না।
বিড়াল বিড়াল

3

পাইথন 2 , স্কোর 60

lambda s:len(bin(reduce(lambda a,c:a*97+ord(c)-[30,9][c<' '],s,0)))+5>>3

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

বেস -99 এ ম্যাপিং

একটি অক্ষরের মান প্রাপ্ত হয় ord(c)-[30,9][c<' ']: এর এএসসিআইআই কোড, ট্যাব এবং নিউলাইনগুলির জন্য বিয়োগ 9, (যা ডিক্সিকোগ্রাফিকভাবে পূর্ববর্তী ' ') বা অন্য কিছুর জন্য বিয়োগ 30 30

একটি সংখ্যায় রূপান্তর করা

আমরা reduceস্ট্রিংটিকে একটি সংখ্যায় রূপান্তর করতে ব্যবহার করি । এটি গণনার সমান

a = 0
for c in s: a = a*97+ord(c)-[30,9][c<' ']
return a

গণনা বেস 256 দৈর্ঘ্য

এর রিটার্ন মানটি binএকটি স্ট্রিং, যা দেখতে কিছুটা এইরকম:

"0b10101100111100001101"

তার দৈর্ঘ্য কল করুন L। একটি- nবিট বাইনারি উপস্থাপনা সহ একটি মান ceil(n/8)-বিট বেস -২ 256 উপস্থাপনা রয়েছে। আমরা nহিসাবে গণনা করতে পারেন L-2; এছাড়াও, = ceil(n/8)হিসাবে লেখা যেতে পারে , সুতরাং আমাদের উত্তর = ।floor((n+7)/8)n+7>>3L-2+7>>3L+5>>3

ইনপুট স্ট্রিংয়ের মান 0 হ'ল কেসটি সঠিকভাবে হ্যান্ডেল করা হয়, binরিটার্ন হিসাবে "0b0", তাই আমরা ফিরে 3+5>>3আসি = 1।



@ হালভারহামহ্মেল মোটামুটি নিশ্চিত যে এটি হওয়া উচিত c>=' 'বা অন্যথায় আপনি স্থানটি ২ এর পরিবর্তে ২৩ এর স্থানে ম্যাপ করবেন ordinary সাধারণ কোড গল্ফের c>'\x1f'(একটি কাঁচা বাইট) আমাকে সাহায্য করতে পারত, তবে সেটি
লিন

আপনি ঠিক বলেছেন, আমার খারাপ
হল্ভার্ড হুমেল

2

এপিএল, স্কোর 24 (বাইট *)

⌈256⍟97⊥97|118|¯31+⎕AV⍳⍞

ডিফল্ট ধরে নেয় ⎕IO←1, অন্যথায় কেবল ¯31 থেকে ¯30 এ পরিবর্তন করুন।

ব্যাখ্যা:

                   ⎕AV⍳⍞  Read a string and convert it to ASCII codepoints + 1
               ¯31+       Subtract 31, so that space = 2, bang = 3, etc.
           118|           Modulo 118, so that tab = 97, newline = 98
        97|               Modulo 97, so that tab = 0, newline = 1
     97⊥                  Decode number from base 97
⌈256⍟                     Ceiling of log base 256, to count number of digits

উদাহরণ:

      ⌈256⍟97⊥97|118|¯31+⎕AV⍳⍞
example@domain.com
15
      ⌈256⍟97⊥97|118|¯31+⎕AV⍳⍞
All your base are belong to us!
26
      ⌈256⍟97⊥97|118|¯31+⎕AV⍳⍞
       abcd
9
      ⌈256⍟97⊥97|118|¯31+⎕AV⍳⍞
~      abcd
10

________________
*: এপিএল ⎕AVইউনিকোডের পরিবর্তে নিজস্ব লেগ্যাসি অক্ষরে (সংজ্ঞায়িত ) লেখা যেতে পারে ; সুতরাং একটি এপিএল প্রোগ্রাম যা কেবলমাত্র এসকিআইআই অক্ষর এবং এপিএল প্রতীক ব্যবহার করে 1 চর = 1 বাইট হিসাবে স্কোর করা যায়।


না সব APL চিহ্ন রয়েছে ⎕AVযেমন, (অন্তত Dyalog জন্য) । যদিও আপনার সমস্ত চিহ্ন প্রতিটি এক বাইট হিসাবে গণনা করা হয়। সুতরাং আপনার মতো প্রতিটি এপিএল প্রতীক = 1 বাইট পাদটীকাতে লেখা নেই। (কেবল ভেবেছি আমি আপনাকে এটি জানাতে পারি।) এছাড়াও, আপনি কোন এপিএল উপভাষাটি ব্যবহার করছেন?
জাকারি

2

পার্ল 5 , 76 + 1 (-F) = 77 বাইট

}{$d+=97**(@F+--$i)*((ord)-(/	|
/?9:30))for@F;say!$d||1+int((log$d)/log 256)

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

কিভাবে?

স্পষ্টতই, ইনপুট ( -F) এর অক্ষরগুলি পৃথক করুন, এটি সমস্ত কিছু @F এ সঞ্চয় করে। অন্তর্নিহিত whileলুপটি বন্ধ করুন এবং একটি নতুন ব্লক শুরু করুন ( }{) ( ধন্যবাদ, @ ডম হেস্টিংস! )। প্রতিটি চরিত্রের জন্য, এর মানটি যথাযথ পাওয়ারকে 97 দিয়ে গুণ করুন। লগারিদম ব্যবহার করে বেস 256 এর যোগফলের আকার খুঁজে বের করে অক্ষরের সংখ্যা গণনা করুন।




1

এমএটিএল (19 বাইট), স্কোর 16

9=?1}G9tQ6Y2hh8WZan

ইনপুট স্ট্রিং-এ অন-প্রিন্টযোগ্য অক্ষর (ট্যাব, নিউলাইন) বাকী স্ট্রিংয়ের সাথে তাদের এএসসিআইআই কোডগুলি ( 9, 10) সংযুক্ত করে প্রবেশ করা হয় ।

প্রাথমিক অংশটি 9=?1}Gকেবলমাত্র Za(বেস রূপান্তর) ফাংশনে একটি বাগের কারণে প্রয়োজনীয় হয়, যা ইনপুটটিতে কেবল "জিরোস" (এখানে ট্যাবগুলি) থাকে তখন এটি ব্যর্থ হয়। এটি ভাষার পরবর্তী প্রকাশে স্থির করা হবে।

ব্যাখ্যা

9=      % Implicitly input a string. Compare each entry with 9 (tab)
?       % If all entries were 9
  1     %   Push 1. this will be the ouput
}       % Else
  G     %   Push input string again
  9     %   Push 9 (tab)
  tQ    %   Duplicate, add 1: pushes 10 (newline)
  6Y2   %   Push string of all printable ASCII chars
  hh    %   Concatenate twice. This gives the input alphabet of 97 chars
  8W    %   Push 2 raised to 8, that is, 256. This represents the output
        %   alphabet, interpreted as a range, for base conversion
  Za    %   Base conversion. Gives a vector of byte numbers
  n     %   Length of that vector
        % End (implicit). Display (implicit)

1

বেফুঞ্জ -৩৩, 83 79 বাইট, স্কোর 74 65

<v_v#-*52:_v#-9:_v#`0:~
 5v$
^6>>1>\"a"* +
 >*- ^   0$<
0_v#:/*4*88\+1\ $<
.@>$

এখানে চেষ্টা করুন!

প্রোগ্রামটি প্রথমে ইনপুটটিকে বেস--97 সংখ্যাতে রূপান্তর করে এবং তারপরে একটি বেস -২ 256 সংখ্যার জন্য কতগুলি অঙ্কের প্রয়োজন তা গণনা করে। যেমন, বেস-97 number সংখ্যাটি বিশাল, এত বড় যে টিআইও বড় মানের জন্য সর্বাধিক 8 টি আউটপুট দেয়; তবে, জেএস ইন্টারপ্রেটারের যত্ন নেই এবং সঠিক মান আউটপুট দেবে।

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