একটি বেস-এন নম্বর থেকে ASCII শিল্প সঙ্কোচন


24

এটি ম্যাজিক অক্টোপাস উরনের একটি 05AB1E উত্তর দ্বারা অনুপ্রাণিত ।

দুটি আর্গুমেন্ট, একটি ধনাত্মক পূর্ণসংখ্যা এবং একটি স্ট্রিং / অক্ষরের তালিকা দেওয়া হয়েছে:

  1. সংখ্যাটি বেস-এন তে অনুবাদ করুন, যেখানে n স্ট্রিংয়ের দৈর্ঘ্য।
  2. প্রতিটি চরিত্রের জন্য, অক্ষরের সাথে বেস-এন সংখ্যায় character অক্ষরের সূচকের প্রতিটি উপস্থিতি প্রতিস্থাপন করুন।
  3. নতুন স্ট্রিং প্রিন্ট করুন বা ফিরে দিন।

উদাহরণ:

Input:
2740, ["|","_"]
2740 -> 101010110100 in base 2
     -> Replace 0s with "|" and 1s with "_"
Output: _|_|_|__|_||

Input:
698911, ["c","h","a","o"]
698911 ->  2222220133 in base 4
       ->  Replace 0s with "c", 1s with "h", 2s with "a", and 3s with "o"
Output -> "aaaaaachoo"

Input:
1928149325670647244912100789213626616560861130859431492905908574660758972167966, [" ","\n","|","_","-"]
Output:
    __   __    
   |  |_|  |   
___|       |___
-   -   -   -  
 - - - - - - - 
- - - - - - - -
_______________

Input: 3446503265645381015412, [':', '\n', '.', '_', '=', ' ', ')', '(', ',']
Output:
_===_
(.,.)
( : )
( : )

নিয়মাবলী:

  • আইও নমনীয়
    • আপনি যে কোনও বেসে নম্বরটি নিতে পারেন, যতক্ষণ না এটি ইনপুটগুলির মধ্যে সামঞ্জস্যপূর্ণ থাকে
    • অক্ষরের তালিকাটি 0-সূচিযুক্ত হওয়া আবশ্যক, যেখানে 0 প্রথম অক্ষর এবং এন -1 সর্বশেষ
  • সম্ভাব্য অক্ষরগুলি হ'ল স্পেস যেমন ট্যাবস এবং নিউলাইনগুলির সাথে প্রিন্টযোগ্য এএসসিআইআই হতে পারে
  • বর্ণগুলির প্রদত্ত তালিকার 2-10অন্তর্ভুক্ত ব্যাপ্তির দৈর্ঘ্য হবে। অর্থাৎ, ক্ষুদ্রতম বেসটি বাইনারি এবং বৃহত্তম হ'ল দশমিক ( এখানে কোনও উদ্বেগজনক অক্ষর নেই )
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ
  • আপনার ভাষা বৃহত্তর পরীক্ষার কেসগুলি পরিচালনা করতে না পারলেও উত্তর দিতে নির্দ্বিধায়।

এটি , প্রতিটি ভাষার জন্য সংক্ষিপ্ততম কোড জিততে পারে। ( আমি জানি যে আপনি সমস্ত গল্ফিং ভাষাগুলিতে একটি বাইট বিল্ট-ইনগুলি প্রস্তুত আছে ;)



3
দোহ, আমি সম্মানিত বোধ করছি। 05AB1E আসকি -আর্ট কিছুক্ষণ আগে আমার প্রিয় ছিল।
ম্যাজিক অক্টোপাস উরন

আপনি একটি নতুন চ্যালেঞ্জ তৈরি করতে পারেন: সংখ্যাটি কমিয়ে আনার জন্য
অ্যারেগুলিতে

উত্তর:


8

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

gв¹sèJ

যেহেতু এটি একটি 05AB1E উত্তরের দ্বারা অনুপ্রাণিত হয়েছিল, তাই 05AB1E এ দেওয়া উত্তর উপযুক্ত মনে হয়। :)

-1 বাইট ধন্যবাদ পূর্বসূচিটি সরিয়ে এবং স্পষ্টভাবে এটি করে @ ইংগাকে ধন্যবাদ ।

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

ব্যাখ্যা:

g         # `l`: Take the length of the first (string) input
 в        # And then take the second input in base `l`
          # For each digit `y` of this base-converted number:
  ¹sè     #  Push the `y`'th character of the first input
     J    # Join everything together (and output implicitly)

1
gв¹sèJএকটি বাইট সংরক্ষণ করতে।
Emigna

@ এমিগনা ধন্যবাদ বিশ্বাস করা যায় না আমি ¹sèএখন নিজের সম্পর্কে চিন্তাও করিনি .. (আমি জানতাম যে এটিকে একই ক্ষেত্রে আউটপুট পরিবর্তন ?করা Jহবে।)
কেভিন ক্রুইজসেন

6

জাভা 8, 72 50 বাইট

a->n->n.toString(a.length).chars().map(c->a[c-48])

-২২ বাইটস সরাসরি অলিভিয়ার গ্রাগোয়ারকেIntStream সরাসরি মুদ্রণের পরিবর্তে ফিরে এসে ধন্যবাদ জানায় ।

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

ব্যাখ্যা:

a->n->                  // Method with char-array and BigInteger parameters
  n.toString(a.length)  //  Convert the input-number to Base `amount_of_characters`
   .chars()             //  Loop over it's digits (as characters)
   .map(c->a[c          //   Convert each character to the `i`'th character of the input
              -48])     //   by first converting the digit-character to index-integer `i`

2
a->n->n.toString(a.length).chars().map(c->a[c-48])(50 বাইট) যেহেতু "আইও নমনীয়"
অলিভিয়ার গ্রাগোয়ার

String f(char[]a,int n){return n>0?f(a,n/a.length)+a[n%a.length]:"";}(69 বাইট) মজাদার জন্য একটি পুনরাবৃত্তি।
অলিভিয়ার গ্রাগোয়ার

6

পাইথন 3 , 49 বাইট

এখনও মন্তব্য করা যায় না, তাই আমি পাইথন ২.৫ উত্তর উত্তরকে পাইথন ৩.৫ এর সাথে অভিযোজিত করেছি।

f=lambda n,s:n and f(n//len(s),s)+s[n%len(s)]or''

2
পিপিসিজিতে আপনাকে স্বাগতম! আপনার সমাধানটি প্রদর্শন করতে সহায়তার জন্য একটি টিআইও লিঙ্ক অন্তর্ভুক্ত নির্দ্বিধায় ।
জো কিং

5

জাপট, 2 বাইট

অ্যারে বা স্ট্রিং হিসাবে দ্বিতীয় ইনপুট নিতে পারে। সংখ্যাগুলি জাভাস্ক্রিপ্টের সর্বোচ্চ পূর্ণসংখ্যাকে ছাড়িয়ে যাওয়ার কারণে সর্বশেষ 2 টি পরীক্ষার ক্ষেত্রে ব্যর্থ হয়। পরিবর্তে অক্ষরের অ্যারে আউটপুট sদিয়ে প্রতিস্থাপন করুন ì

sV

চেষ্টা করে দেখুন


5

হাস্কেল , 40 39 বাইট

0!_=[]
n!l=cycle l!!n:div n(length l)!l

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

হাস্কেলের Intধরণ যেমন সীমাবদ্ধ তাই এটি 9223372036854775807বৃহত্তর সংখ্যায় ব্যর্থ।

-1 বাইট লাইকোনি ধন্যবাদ ।

Ungolfed

(!) :: Int -> [Char] -> [Char]

0 ! _ = []  -- If the number is 0, we reached the end. Base case: empty string
n ! l = 
  let newN = (n `div` length l) in   -- divide n by the base
    cycle l!!n                       -- return the char encoded by the LSD ... 
    : newN!l                         -- ... prepended to the rest of the output (computed recursively)

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


cycleপরিবর্তে ব্যবহার করার জন্য দুর্দান্ত ধারণা mod! div n(length l)একটি বাইট সংরক্ষণ করে।
লাইকনি

4

এমএটিএল , 2 বাইট

YA

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

ইনপুটগুলি একটি সংখ্যা এবং একটি স্ট্রিং।

2^53ভাসমান-পয়েন্ট যথার্থতার কারণে সংখ্যাকে অতিক্রম করতে ব্যর্থ ।

ব্যাখ্যা

কী YAজানে, একটি বিল্টিন (নির্দিষ্ট লক্ষ্য চিহ্নগুলির সাথে বেস রূপান্তর)।


4

জাভাস্ক্রিপ্ট (ES6), 48 বাইট

সিনট্যাক্স কারি করার ক্ষেত্রে ইনপুট নেয় (c)(n), যেখানে সি অক্ষরের একটি তালিকা এবং এন একটি পূর্ণসংখ্যা।

নিরাপদ কেবল এন <2 53 এর জন্য

c=>n=>n.toString(c.length).replace(/./g,i=>c[i])

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


জাভাস্ক্রিপ্ট (ES6), 99 বাইট

বড় পূর্ণসংখ্যার জন্য সমর্থন সঙ্গে

সিনট্যাক্সের কারিঙে ইনপুট নেয় (c)(a), যেখানে সি অক্ষরের একটি তালিকা এবং একটি দশমিক অঙ্কের তালিকা (পূর্ণসংখ্যা হিসাবে)।

c=>g=(a,p=0,b=c.length,r=0)=>1/a[p]?g(a.map((d,i)=>(r=d+r*10,d=r/b|0,r%=b,d|i-p||p++,d)),p)+c[r]:''

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


4

x86 32-বিট মেশিন কোড (32-বিট পূর্ণসংখ্যা): 17 বাইট।

(ডিএফ = 1 কলিং কনভেনশন সহ 32-বিট বা 64-বিটের 16 বাইট সহ নীচের অন্যান্য সংস্করণগুলিও দেখুন))

কলার আউটপুট বাফারের শেষের পয়েন্টার সহ রেজিস্টারগুলিতে অর্গগুলি পাস করে ( আমার সি উত্তরটির মতো ; এটি অ্যালগোরিদমের ন্যায়সঙ্গতকরণ এবং ব্যাখ্যা করার জন্য দেখুন gl_itoa ) গ্লিবসি অভ্যন্তরীণ এটি করে , সুতরাং এটি কেবল কোড-গল্ফের পক্ষে অনুমোদিত নয়। আরগ-পাসিং রেজিস্টারগুলি x86-64 সিস্টেম ভি এর কাছাকাছি, EDX এর পরিবর্তে EAX এ আমাদের একটি আরগ নেই।

ফিরে আসার পরে, ইডিআই আউটপুট বাফারে 0 টিমিনেটেড সি স্ট্রিংয়ের প্রথম বাইটে নির্দেশ করে। সাধারণ রিটার্ন-ভ্যালু রেজিস্ট্রার হ'ল ইএএক্স / আরএক্স, তবে সমাবেশের ভাষায় আপনি যে কোনও কলিং কনভেনশন কোনও ফাংশনের জন্য সুবিধাজনক হিসাবে ব্যবহার করতে পারেন। ( xchg eax,ediশেষে 1 বাইট যুক্ত হবে)

কলার একটি সুস্পষ্ট দৈর্ঘ্য গণনা করতে পারে যদি এটি চায়, থেকে buffer_end - edi। তবে আমি মনে করি না যে ফাংশনটি শুরু + সমাপ্তি পয়েন্টার বা পয়েন্টার + দৈর্ঘ্য উভয়ই প্রদান না করে আমরা টার্মিনেটর বাদ দিয়ে ন্যায্যতা প্রমাণ করতে পারি। এটি এই সংস্করণে 3 বাইট সাশ্রয় করবে, তবে আমি এটি ন্যায়সঙ্গত বলে মনে করি না।

  • EAX = n = ডিকোড করার জন্য সংখ্যা। (কারণ idiv। অন্যান্য আরগগুলি অন্তর্ভুক্ত অপারেশন নয়))
  • EDI = আউটপুট বাফারের শেষ ( dec edi64৪ -বিট সংস্করণ এখনও ব্যবহার করে , তাই অবশ্যই কম 4GiB এ থাকা উচিত)
  • ESI / RSI = দেখার টেবিল, ওরফে LUT। আঁটসাঁট না
  • ইসিএক্স = টেবিলের = দৈর্ঘ্যের দৈর্ঘ্য। আঁটসাঁট না

nasm -felf32 ascii-compress-base.asm -l /dev/stdout | cut -b -30,$((30+10))- (মন্তব্যগুলি সঙ্কুচিত করার জন্য হাত সম্পাদনা করা হয়েছে, লাইন নম্বরটি অদ্ভুত)

   32-bit: 17 bytes        ;  64-bit: 18 bytes
                           ; same source assembles as 32 or 64-bit
 3                         %ifidn __OUTPUT_FORMAT__, elf32
 5                         %define rdi edi
 6   address               %define rsi esi
11          machine        %endif
14          code           %define DEF(funcname) funcname: global funcname
16          bytes           
22                         ;;; returns: pointer in RDI to the start of a 0-terminated string
24                         ;;; clobbers:; EDX (tmp remainder)
25                         DEF(ascii_compress_nostring)
27 00000000 C60700             mov     BYTE [rdi], 0
28                         .loop:                    ; do{
29 00000003 99                 cdq                    ; 1 byte shorter than   xor edx,edx / div
30 00000004 F7F9               idiv    ecx            ; edx=n%B   eax=n/B
31                         
32 00000006 8A1416             mov     dl, [rsi + rdx]   ; dl = LUT[n%B]
33 00000009 4F                 dec     edi               ; --output  ; 2B in x86-64
34 0000000A 8817               mov     [rdi], dl         ; *output = dl
35                         
36 0000000C 85C0               test    eax,eax           ; div/idiv don't write flags in practice, and the manual says they're undefined.
37 0000000E 75F3               jnz     .loop         ; }while(n);
38                         
39 00000010 C3                 ret
           0x11 bytes = 17
40 00000011 11             .size: db $ - .start

অবাক করা বিষয় যে মূলত কোনও গতি / আকারের ট্রেডঅফ সহ সহজতম সংস্করণটি সবচেয়ে ছোট, তবে std/ বর্ধমান ক্রমে cld2 বাইট ব্যবহার stosbকরতে এবং এখনও সাধারণ ডিএফ = 0 কলিং কনভেনশন অনুসরণ করে। (এবং স্টোর করার পরে স্টস হ্রাস পায় , লুপের প্রস্থানে পয়েন্টারটি একটি বাইটকে খুব কম দেখায় , আমাদের চারপাশে কাজ করার জন্য অতিরিক্ত বাইট খরচ করে))

সংস্করণ:

আমি 4 টি উল্লেখযোগ্যভাবে পৃথক বাস্তবায়ন ট্রিকগুলি নিয়ে এসেছি (সাধারণ movলোড / স্টোর (উপরে) ব্যবহার করে lea/ / movsb(ঝরঝরে তবে অনুকূল নয়) ব্যবহার করে xchg/ xlatb/ stosb/ ব্যবহার করে xchgএবং একটি যা ওভারল্যাপিং-নির্দেশিকা হ্যাকের সাহায্যে লুপে প্রবেশ করে below নীচের কোডটি দেখুন) । 0আউটপুট স্ট্রিং টার্মিনেটর হিসাবে অনুলিপি করার জন্য শেষেরটির অনুসন্ধানের টেবিলটিতে একটি অনুসরণ করা দরকার , সুতরাং আমি এটিকে +1 বাইট হিসাবে গণনা করছি। 32/64-বিট (1-বাইট incবা না) উপর নির্ভর করে এবং আমরা কলার ডিএফ = 1 ( stosbঅবতরণ) নির্ধারণ করতে পারি বা যাই হোক না কেন, বিভিন্ন সংস্করণ সংক্ষিপ্ততম (এর জন্য আবদ্ধ) রয়েছে।

ডিএফ = 1 অবতরণ ক্রমে সঞ্চয় করতে এটি xchg / stosb / xchg এ একটি জয় করে তোলে, তবে কলার প্রায়শই তা চায় না; এটি কঠোরভাবে ন্যায়সঙ্গত উপায়ে কলারের কাছে অফলোডিংয়ের কাজ মনে হচ্ছে। (কাস্টম আরগ-পাসিং এবং রিটার্ন-ভ্যালু রেজিস্টারগুলির মতো নয়, যার জন্য সাধারণত কোনও এসএম কলারের কোনও অতিরিক্ত কাজ ব্যয় হয় না But) তবে 64৪-বিট কোডে cld/ / এ scasbকাজ করে inc rdi, আউটপুট পয়েন্টারটি ৩২-বিটে ছাঁটাই করা এড়িয়ে চলে, তাই এটি কখনও কখনও 64-বিট-ক্লিন ফাংশনগুলিতে ডিএফ = 1 সংরক্ষণে অসুবিধা। । (স্ট্যাটিক কোড / ডাটাতে নির্দেশকগুলি লিনাক্সে x86-64 নন-পিআইই এক্সিকিউটেবলের 32-বিট হয় এবং সর্বদা লিনাক্স x32 এবিআইতে থাকে, তাই 32-বিট পয়েন্টার ব্যবহার করে একটি x86-64 সংস্করণ কিছু ক্ষেত্রে ব্যবহারযোগ্য is) যাইহোক, এই ইন্টারঅ্যাকশনটি প্রয়োজনীয়তার বিভিন্ন সংমিশ্রণগুলিকে দেখতে আকর্ষণীয় করে তোলে।

  • এন্ট্রি / প্রস্থান কলিং কনভেনশনে একটি ডিএফ = 0 সহ আইএ 32:: 17 বি ( nostring)
  • আইএ 32: 16 বি (একটি ডিএফ = 1 কনভেনশন সহ: stosb_edx_argবা skew) ; বা ইনকামিং ডিএফ = ডন্টকেয়ার সহ এটি সেট রেখে: 16 + 1 বিstosb_decode_overlap বা 17 বিstosb_edx_arg
  • x86-64 64৪-বিট পয়েন্টার সহ, এবং প্রবেশ / প্রস্থান কলিং কনভেনশনে একটি ডিএফ = 0: 17 + 1 বাইট ( stosb_decode_overlap) , 18 বি ( stosb_edx_argবা skew)
  • x86-64 64৪-বিট পয়েন্টার সহ, অন্যান্য ডিএফ হ্যান্ডলিং: 16 বি (ডিএফ = 1 skew) , 17 বি ( পরিবর্তে nostringডিএফ = 1 সহ ) ব্যবহার scasbকরুন dec। 18 বি ( stosb_edx_arg3 বাইট সহ ডিএফ = 1 সংরক্ষণ করা inc rdi)।

    অথবা যদি আমরা স্ট্রিংয়ের আগে 1 বাইটে পয়েন্টারটি ফেরত দেওয়ার অনুমতি দিই, 15 বি ( শেষটিstosb_edx_arg ছাড়াই inc)। সমস্ত আবার কল করতে এবং বিভিন্ন বেস / টেবিলের সাহায্যে বাফারে আরও একটি স্ট্রিং প্রসারিত করার জন্য প্রস্তুত ... তবে আমরা যদি একটি টার্মিনেটিং সংরক্ষণ না করি তবে এটি আরও অর্থপূর্ণ হবে 0এবং আপনি ফাংশন বডিটিকে একটি লুপের ভিতরে রেখে দিতে পারেন যাতে এটি সত্যিই একটি পৃথক সমস্যা

  • x86-64 সাথে 32-বিট আউটপুট পয়েন্টার, ডিএফ = 0 কলিং কনভেনশন: -৪-বিট আউটপুট পয়েন্টারের চেয়ে কোনও উন্নতি হয়নি, তবে nostringএখন 18 বি ( ) সম্পর্ক রয়েছে।

  • 32-বিট আউটপুট পয়েন্টার সহ x86-64: সেরা 64-বিট পয়েন্টার সংস্করণগুলির তুলনায় কোনও উন্নতি হয়নি, সুতরাং 16 বি (ডিএফ = 1 skew)। অথবা ডিএফ = 1 সেট এবং এটি জন্য ত্যাগ করেন, তখন 17b থেকে skewসঙ্গে stdকিন্তু cld। বা 17 + + 1B জন্য stosb_decode_overlapসঙ্গে inc ediপরিবর্তে শেষে cld/ scasb

একটি ডিএফ = 1 কলিং কনভেনশন সহ: 16 বাইট (আইএ 32 বা x86-64)

ইনপুটটিতে DF = 1 প্রয়োজন, সেট করে ছেড়ে দেয়। সবেমাত্র প্রশ্রয়যোগ্য , কমপক্ষে প্রতি-কার্য ভিত্তিতে। উপরের সংস্করণ হিসাবে একই জিনিস, কিন্তু এক্সএলএটিবি এর আগে / পরে আ.লীগের বাকী / বাইরে থাকা (বেস হিসাবে আর / ইবিএক্সের সাথে সারণী সন্ধান) এবং STOSB ( *output-- = al) পেতে xchg সহ ।

একটি স্বাভাবিক ডিএফ = 0 এন্ট্রি / প্রস্থান সম্মেলন সঙ্গে, / / সংস্করণ 32 এবং 64-বিট কোডের জন্য 18 বাইট, এবং 64-বিট পরিষ্কার (ক 64-বিট আউটপুট পয়েন্টার সাথে কাজে)।stdcldscasb

নোট করুন যে ইনপুট আরগগুলি টেবিলের জন্য (জন্য xlatb) আরবিএক্স সহ বিভিন্ন রেজিস্টারে রয়েছে । এছাড়াও লক্ষ করুন যে এই লুপটি AL সঞ্চয় করে শুরু হয় এবং শেষ চরটি এখনও সংরক্ষণ না করে শেষ হয় (অতএব movশেষে)। সুতরাং লুপটি অন্যের সাথে তুলনামূলকভাবে "স্কিউড", তাই নামটি।

                            ;DF=1 version.  Uncomment std/cld for DF=0
                            ;32-bit and 64-bit: 16B
157                         DEF(ascii_compress_skew)
158                         ;;; inputs
159                             ;; O in RDI = end of output buffer
160                             ;; I in RBX = lookup table  for xlatb
161                             ;; n in EDX = number to decode
162                             ;; B in ECX = length of table = modulus
163                         ;;; returns: pointer in RDI to the start of a 0-terminated string
164                         ;;; clobbers:; EDX=0, EAX=last char
165                         .start:
166                         ;    std
167 00000060 31C0               xor    eax,eax
168                         .loop:                    ; do{
169 00000062 AA                 stosb
170 00000063 92                 xchg    eax, edx
171                         
172 00000064 99                 cdq                    ; 1 byte shorter than   xor edx,edx / div
173 00000065 F7F9               idiv    ecx            ; edx=n%B   eax=n/B
174                         
175 00000067 92                 xchg    eax, edx       ; eax=n%B   edx=n/B
176 00000068 D7                 xlatb                  ; al = byte [rbx + al]
177                         
178 00000069 85D2               test    edx,edx
179 0000006B 75F5               jnz     .loop         ; }while(n = n/B);
180                         
181 0000006D 8807               mov     [rdi], al     ; stosb would move RDI away
182                         ;    cld
183 0000006F C3                 ret

184 00000070 10             .size: db $ - .start

একটি অনুরূপ নন-স্কিউড সংস্করণ ইডিআই / আরডিআইকে ওভারশুট করে এবং তারপরে এটি ঠিক করে দেয়।

                            ; 32-bit DF=1: 16B    64-bit: 17B (or 18B for DF=0)
70                         DEF(ascii_compress_stosb_edx_arg)  ; x86-64 SysV arg passing, but returns in RDI
71                             ;; O in RDI = end of output buffer
72                             ;; I in RBX = lookup table  for xlatb
73                             ;; n in EDX = number to decode
74                             ;; B in ECX = length of table
75                         ;;; clobbers EAX,EDX, preserves DF
76                             ; 32-bit mode: a DF=1 convention would save 2B (use inc edi instead of cld/scasb)
77                             ; 32-bit mode: call-clobbered DF would save 1B (still need STD, but INC EDI saves 1)
79                         .start:
80 00000040 31C0               xor     eax,eax
81                         ;    std
82 00000042 AA                 stosb
83                         .loop:
84 00000043 92                 xchg    eax, edx
85 00000044 99                 cdq
86 00000045 F7F9               idiv    ecx            ; edx=n%B   eax=n/B
87                         
88 00000047 92                 xchg    eax, edx       ; eax=n%B   edx=n/B
89 00000048 D7                 xlatb                  ; al = byte [rbx + al]
90 00000049 AA                 stosb                  ; *output-- = al
91                         
92 0000004A 85D2               test    edx,edx
93 0000004C 75F5               jnz     .loop
94                         
95 0000004E 47                 inc    edi
96                             ;; cld
97                             ;; scasb          ; rdi++
98 0000004F C3                 ret
99 00000050 10             .size: db $ - .start
    16 bytes for the 32-bit DF=1 version

আমি এর অভ্যন্তরীণ লুপের বডি হিসাবে lea esi, [rbx+rdx]/ এর বিকল্প সংস্করণ চেষ্টা করেছি movsb। (আরএসআই প্রতিটি পুনরাবৃত্তি পুনরায় সেট করা হয় তবে আরডিআই হ্রাস পায়)। তবে এটি টার্মিনেটরের জন্য জোর-শূন্য / স্টস ব্যবহার করতে পারে না, সুতরাং এটি 1 বাইট আরও বড়। (এবং এটি এলইএতে কোনও রেক্স উপসর্গ ব্যতিরেকে অনুসন্ধানের টেবিলের জন্য পরিষ্কার নয়))


সুস্পষ্ট দৈর্ঘ্য এবং একটি 0 টার্মিনেটর সহ LUT : 16 + 1 বাইট (32-বিট)

এই সংস্করণটি ডিএফ = 1 সেট করে এবং এটি সেভাবে ছেড়ে যায়। আমি মোট বাইট গণনার অংশ হিসাবে প্রয়োজনীয় অতিরিক্ত LUT বাইট গণনা করছি।

এখানে শীতল কৌশলটি একই বাইট দুটি ভিন্ন উপায়ে ডিকোড করছে । আমরা বাকী = বেস এবং ভাগফল = ইনপুট নম্বর সহ লুপের মাঝখানে পড়ি, এবং 0 টার্মিনেটরটিকে জায়গায় অনুলিপি করব।

ফাংশনের মাধ্যমে প্রথমবারের মতো লুপের প্রথম 3 বাইট একটি এলইএর জন্য ডিসপয়েন্ট 2 এর হাই বাইট হিসাবে গ্রাস করা হয়। এলইএটি বেস (মডুলাস) কে EDX এ অনুলিপি করে, idivপরবর্তী পুনরাবৃত্তির জন্য অবশিষ্ট উত্পাদন করে।

২ য় বাইট idiv ebpহ'ল FD, যা এই ফাংশনটিতে কাজ করা উচিত সেই stdনির্দেশের জন্য অপকড । (এটি একটি ভাগ্যবান আবিষ্কারের ছিল। আমি এই সময়ে খুঁজছি হয়েছে divআগে, যা নিজেই থেকে আলাদা idivব্যবহার /rএর 2nd বাইট ModRM মধ্যে বিট। div epbযেমন decodes cmc, যা সহায়ক কিন্তু নিরীহ নয়। কিন্তু idiv ebpআমরা আসলে অপসারণ করতে পারেন stdউপর থেকে ফাংশন।)

নোট করুন ইনপুট রেজিস্টারগুলি আবার পার্থক্য: বেসের জন্য ইবিপি।

103                         DEF(ascii_compress_stosb_decode_overlap)
104                         ;;; inputs
105                             ;; n in EAX = number to decode
106                             ;; O in RDI = end of output buffer
107                             ;; I in RBX = lookup table, 0-terminated.  (first iter copies LUT[base] as output terminator)
108                             ;; B in EBP = base = length of table
109                         ;;; returns: pointer in RDI to the start of a 0-terminated string
110                         ;;; clobbers: EDX (=0), EAX,  DF
111                             ;; Or a DF=1 convention allows idiv ecx (STC).  Or we could put xchg after stos and not run IDIV's modRM
112                         .start:
117                             ;2nd byte of div ebx = repz.  edx=repnz.
118                             ;            div ebp = cmc.   ecx=int1 = icebp (hardware-debug trap)
119                             ;2nd byte of idiv ebp = std = 0xfd.  ecx=stc
125                         
126                             ;lea    edx, [dword 0 + ebp]
127 00000040 8D9500             db  0x8d, 0x95, 0   ; opcode, modrm, 0 for lea edx, [rbp+disp32].  low byte = 0 so DL = BPL+0 = base
128                             ; skips xchg, cdq, and idiv.
129                             ; decode starts with the 2nd byte of idiv ebp, which decodes as the STD we need
130                         .loop:
131 00000043 92                 xchg    eax, edx
132 00000044 99                 cdq
133 00000045 F7FD               idiv    ebp            ; edx=n%B   eax=n/B;
134                             ;; on loop entry, 2nd byte of idiv ebp runs as STD.  n in EAX, like after idiv.  base in edx (fake remainder)
135                         
136 00000047 92                 xchg    eax, edx       ; eax=n%B   edx=n/B
137 00000048 D7                 xlatb                  ; al = byte [rbx + al]
138                         .do_stos:
139 00000049 AA                 stosb                  ; *output-- = al
140                         
141 0000004A 85D2               test    edx,edx
142 0000004C 75F5               jnz     .loop
143                         
144                         %ifidn __OUTPUT_FORMAT__, elf32
145 0000004E 47                 inc     edi         ; saves a byte in 32-bit.  Makes DF call-clobbered instead of normal DF=0
146                         %else
147                             cld
148                             scasb          ; rdi++
149                         %endif
150                         
151 0000004F C3                 ret
152 00000050 10             .size: db $ - .start
153 00000051 01                     db 1   ; +1 because we require an extra LUT byte
       # 16+1 bytes for a 32-bit version.
       # 17+1 bytes for a 64-bit version that ends with DF=0

এই ওভারল্যাপিং ডিকোড ট্রিকটি এর সাথেও ব্যবহার করা যেতে পারে cmp eax, imm32: কার্যকরভাবে 4 বাইট কার্যকরভাবে এগিয়ে যেতে কেবল 1 বাইট লাগে, কেবল ক্লাববারিং পতাকা। (সিপিইউগুলিতে পারফরম্যান্সের জন্য এটি ভয়ানক যা এল 1 আই ক্যাশে বিটিডাব্লু নির্দেশের সীমানা চিহ্নিত করে))

তবে এখানে, আমরা একটি রেজিস্টার অনুলিপি করতে এবং লুপটিতে লাফাতে 3 বাইট ব্যবহার করছি। এটি সাধারণত 2 + 2 (মুভি + জেএমপি) নেবে এবং XLATB এর পরিবর্তে STOS এর আগে ডানদিকে লুপ করতে দেয়। তবে তারপরে আমাদের একটি আলাদা এসটিডি দরকার, এবং এটি খুব আকর্ষণীয় হবে না।

এটি অনলাইন চেষ্টা করুন! (একটি _startকলার যা ফলাফলটিতে ব্যবহার sys_writeকরে)

এটি ডিবাগিংয়ের অধীনে চালনা করা straceবা আউটপুট হেক্সডাম্পের পক্ষে সবচেয়ে ভাল, যাতে আপনি যাচাই করতে পারেন যে \0সঠিক জায়গায় কোনও টার্মিনেটর রয়েছে এবং এই জাতীয় কিছু। তবে আপনি এটি আসলে কাজ করতে পারবেন এবং এর ইনপুটটির AAAAAACHOOজন্য উত্পাদন করতে পারেন

num  equ 698911
table:  db "CHAO"
%endif
    tablen equ $ - table
    db 0  ; "terminator" needed by ascii_compress_stosb_decode_overlap

(আসলে xxAAAAAACHOO\0x\0\0..., কারণ আমরা আগেই 2 বাইট থেকে ডাম্পিং করছি আউট একটি নির্দিষ্ট দৈর্ঘ্যের বাফার। সুতরাং আমরা দেখতে পারি ফাংশন লিখেছেন বাইট এটা অনুমিত ছিল না কোনো বাইট এটা থাকা উচিত নয় উপর ধাপ। দ্য ফাংশনটিতে প্রারম্ভিক-নির্দেশকটি ছিল দ্বিতীয়-শেষ xচরিত্রটি, যা জেরো অনুসরণ করেছিল)


3

জেলি , 4 বাইট

ṙ1ṃ@

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

আক্ষরিকভাবে এটির জন্য একটি অন্তর্নির্মিত। অন্য তিনটি বাইট জেলির এক-ভিত্তিক সূচকের জন্য।


কৌতূহলের বাইরে, জেলি এমনকি বিল্টইন কেন " বেজ ডিকম্প্রেশন; এক্সকে বেস দৈর্ঘ্যে (y) রূপান্তর করে তারপরে সূচককে y তে রূপান্তরিত করে ?" এটি কি খুব ব্যতিক্রমী মামলার জন্য যেখানে আপনি পিঁপড়াটি কোনও স্ট্রিং / সংখ্যার / তালিকার দৈর্ঘ্যে রূপান্তর করতে চান এবং সমান হয়? আমি যখন এটি অনুসন্ধান করি তখন আমি এটি ব্যবহার করে কেবল তিনটি উত্তর পেতে পারি: 1 ; 2 ; । প্রতি দিন কোড-গল্ফ চ্যালেঞ্জের মধ্যে একটি অদ্ভুত বিল্টিন কিন্ডা o : এস
কেভিন ক্রুইজসেন

3
@ কেভিন ক্রুজসেন এটি খুব কার্যকর যখন আপনি চান উদাহরণস্বরূপ, সংখ্যার তালিকার পরিবর্তে এনকে হেক্সাডেসিমেল রূপান্তর করতে।
মিঃ এক্সকডার

@ কেভিন ক্রুজসেন এটি স্ট্রিংয়ের জন্য একটি সংক্ষেপণ পদ্ধতি। প্রথম উদাহরণে স্ট্রিংটি পছন্দসই “sspspdspdspfdspfdsp”, তবে আপনার সাথে “çƥ÷£ḟ’ṃ“spdf”¤ছয়টি বাইট সংরক্ষণ করুন। এটি জেলির বেস 250 সংখ্যাগুলির সাথে বিশেষত কার্যকর
ডিলানান

3

পাইথন 2 , 49 48 বাইট

-1 বাইট জো কিংকে ধন্যবাদ

f=lambda n,s:n and f(n/len(s),s)+s[n%len(s)]or''

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

বিকল্প সংস্করণ (বড় সংখ্যার জন্য শেষ হবে না), 45 43 বাইট

-2 বাইট জো কিংকে ধন্যবাদ জানায়

f=lambda n,s:s*n and f(n/len(s),s)+(s*n)[n]

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


3

কাঠকয়লা , 3 1 বাইট

θη

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সম্পাদনা করুন: কেবলমাত্র ASCII- এর জন্য 2 বাইট সংরক্ষণ করা হয়েছে পূর্ববর্তী সংস্করণটি 8 টি বাইট যুক্ত হওয়ার আগে যুক্ত হয়েছিল:

⭆↨θLη§ηι

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

    η       Second input
   L        Length
  θ         First input
 ↨          Base convert to array
⭆           Map over values and join
      η     Second input
       ι    Current value
     §      Index into list
            Implicitly print result

আসলে এটি ইতিমধ্যে কাজ করার কথা রয়েছে তবে স্পষ্টতই আমি আবার গণ্ডগোল করেছি> _>
এএসসিআই-কেবল

এছাড়াও, এটি আসলে 1 বাইট হবে : পি (এটি যদিও এখন ভেঙে গেছে, সুতরাং আমি সংখ্যা এবং স্ট্রিং অ্যারেটি যুক্তি হিসাবে ব্যবহার করছি না) (এছাড়াও, আমি আশ্চর্য হয়েছি কীভাবে (আন) কার্যকর অন্তর্নিহিত ইনপুটটি রয়েছে)
এএসসিআই-কেবল

@ এএসসিআইআই-কেবল আপনার অর্থ "1 বাইট" নয় (আপনার -vl আউটপুট দেখুন ;-) এছাড়াও, অন্তর্নিহিত ইনপুট চারকোলের মতো চ্যালেঞ্জগুলি বাদে প্রায় অকেজো বলে মনে হবে।
নিল

1
@ এএসসিআইআই-কেবলমাত্র বহুবচন "বাইটস" এর পরিবর্তে একক শব্দ "বাইট" হ'ল নীল মানে। ;) আপনার 1-বাইট উত্তর, কেন ক্রস আউট θη? দেখতে কিছুটা বিভ্রান্তিকর টিবিএইচ। কেন শুধু এটি পুরোপুরি সরিয়ে ছেড়ে চলে যাবেন না ?
কেভিন ক্রুইজসেন

1
@ না আমি ডাবল-চেক করেছি এবং বিল্ট-ইনটি প্রশ্ন জিজ্ঞাসার আগেই যুক্ত করা হয়েছিল, তবে আমি বুঝতে পারি নি কারণ এটিতে একটি বাগ রয়েছে।
নিল

3

ডি , 112 বাইট

import std.conv;C u(C,I)(I n,C b){C t;for(I l=b.length;n;n/=l)t=to!C(n%l)~t;foreach(ref c;t)c=b[c-48];return t;}

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

এটি হ্যাটসুপয়েন্টারকুনের সি ++ উত্তরের একটি বন্দর

কলিং স্টাইলটি u(ulong(n), to!(char[])(b))কোথায় nএবং bবাম এবং ডান আর্গুমেন্ট

ডি নির্দিষ্ট জিনিস

দুঃখের বিষয়, খুব বেসিক ধরণের রূপান্তরের std.convউপরে আমাদের যে কোনও ধরণের রূপান্তর করতে আমদানি করতে হবে ।

গোলফি টেম্পলেট সিস্টেমটি ব্যবহার করে এবং ফাংশনটিকে প্রয়োজনীয় প্রকারগুলি প্রদান করা (যার কারণে এটি কল করা কেবল নয় u(n,b)), ফাংশনের অভ্যন্তরে আমরা প্রতিটি ঘটনাকে ছোট করে char[]এবং বাইট করতে পারি ulongto1

ডি আমাদের জন্য আমাদের প্রকারের সূচনা করে, তাই C t;এটির জন্যও সংক্ষিপ্তC t=cast(char[])([])

to!Cপূর্ণসংখ্যাকে n%lএকটি অক্ষরের অ্যারেতে রূপান্তর করে (কোডপয়েন্ট ব্যবহার করে), এবং ~সংমিশ্রণ হয়

foreach(ref c;t)এটি সি ++ এর for(... : ...)লুপের মতো তবে কিছুটা দীর্ঘ। এটির refমতো &, এটি cঅনুলিপি-সহ-রেফারেন্স হিসাবে গণ্য করে (যেমন, আমরা সংশোধন করতে পারি t)। ভাগ্যক্রমে, ডি কোনও কীওয়ার্ড ডোনোটিং প্রকার cছাড়াই প্রকারের অনুমান করে ।



3

সি ++, 150 144 বাইট, uint64ইনপুট

-6 বাইট জ্যাকারিকে ধন্যবাদ ý

#include<string>
using s=std::string;s u(uint64_t n,s b){s t;for(;n;n/=b.size())t=std::to_string(n%b.size())+t;for(auto&a:t)a=b[a-48];return t;}

আকার সংরক্ষণ করার জন্য একটি ভেরিয়েবল ব্যবহার করা হলে বাইটোকন্টকে 1 দ্বারা বাড়িয়ে তুলত

ফাংশনটি কল করতে:

u(2740, "|_")

প্রথম সংখ্যাটি, দ্বিতীয়টি হল স্ট্রিং (চর অ্যারে)

পরীক্ষার কেস:

std::cout << u(2740, "|_") << '\n' << u(698911, "chao") << '\n';
return 0;

1
শেভ অফ 3 বাইট: আপনার পরে আর জায়গার দরকার নেই #include, আপনি ;;ঠিক বদলে যেতে পারেন ;, এবং '0'ঠিক হতে পারেন48
জাকারিয়া

1
এছাড়াও, যখন লুপটি একটি লুপ হতে পারে for:for(;n;n/=b.size())t=std::to_string(n%b.size())+t;
জাকারিয়া

@ সেলিংক্যাট, আমি ভুলে গিয়েছিলাম b.size()যে লুপটি পরিবর্তন হয় না।
জাকারি

@ সাইলিংক্যাট যা বাইকাউন্টকে কমিয়ে না দিয়ে 1 টি বাড়িয়ে দেবে
হাটসুপয়েন্টারকুন

2

টুইগ, 66 বাইট

macroএমন একটি তৈরি করেছে যা অবশ্যই importকোনও টেম্পলেটে সম্পাদনা করা উচিত ।

{%macro d(n,c)%}{%for N in n|split%}{{c[N]}}{%endfor%}{%endmacro%}

মূল্যবোধ প্রত্যাশিত:

প্রথম যুক্তিগুলির জন্য ( n):

  • সংখ্যা
  • দড়ি

দ্বিতীয় যুক্তির জন্য ( c):

  • সংখ্যার অ্যারে
  • স্ট্রিংগুলির অ্যারে

ব্যবহারবিধি:

  • একটি .twigফাইল তৈরি করুন
  • যোগ {% import 'file.twig' as uncompress %}
  • ম্যাক্রো কল করুন uncompress.d()

অব্যক্ত (অ-কার্যকরী):

{% macro d(numbers, chars) %}
    {% for number in numbers|split %}
        {{ chars[number] }}
    {% endfor %}
{% endmacro %}


আপনি এই কোডটি এখানে পরীক্ষা করতে পারবেন: https://twigfiddle.com/54a0i9


2

পাইথ, 9 8 7 বাইট

s@LQjEl

হ্যাকআর 14 এর একটি বাইট ধন্যবাদ এবং মিঃ এক্সকোডারকে আরও একটি ধন্যবাদ সংরক্ষণ করা হয়েছে।
এখানে চেষ্টা করুন

ব্যাখ্যা

s@LQjEl
    jElQ      Convert the second input (the number) to the appropriate base.
 @LQ          Look up each digit in the list of strings.
s             Add them all together.

প্রতিস্থাপন দ্বারা একটি বাইট সংরক্ষণ m@Qdসঙ্গে@LQ
hakr14

প্রতিস্থাপন দ্বারা একটি বাইট সংরক্ষণ vzসঙ্গে E
মিঃ এক্সকোডার

2

C89, সীমাবদ্ধ সীমা স্বাক্ষরিত int n, 64 53 বাইট

  • চেঞ্জলগ: এ char **outনেওয়ার এবং ফিরিয়ে দেওয়ার পরিবর্তে একটি নিন এবং এটিকে সংশোধন করুনchar *

হিসাবে একটি সংখ্যা নেয় int, অ্যারে + দৈর্ঘ্য হিসাবে সারণী।
আউটপুট এ লেখা হয় char *outbuf। কলার বাফারের শেষের দিকে একটি পয়েন্টার (রেফারেন্স দ্বারা) পাস করে। ফাংশন সেই পয়েন্টারটি পরিবর্তিত করে ফেরতের সময় স্ট্রিংয়ের প্রথম বাইটকে নির্দেশ করে।

g(n,I,B,O)char*I,**O;{for(**O=0;n;n/=B)*--*O=I[n%B];}

এটি বৈধ C89, এবং এমনকি অপ্টিমাইজেশান সক্ষম থাকলেও সঠিকভাবে কাজ করে। অর্থাত্ কোনও শূন্য -O0ফাংশন শেষে বা অন্য কোনও ইউবি থাকাকালীন সময়ে জিসিসি আচরণের উপর নির্ভর করে না ।

বাফারের শেষের দিকে একটি পয়েন্টার পাস করা একটি অপ্টিমাইজড ইন-> স্ট্রিং ফাংশন যেমন গ্লিবির অভ্যন্তরীণ_itoa হিসাবে স্বাভাবিক । ডি / মড লুপের সাহায্যে ডিজিটের সাথে পূর্ণসংখ্যা ভাঙ্গার বিশদ ব্যাখ্যার জন্য এই উত্তরটি দেখুন যেমন আমরা এখানে সি, এক্স এর মধ্যে x86-64 এএসএম করছি doing যদি বেসটি 2 এর শক্তি হয় তবে আপনি প্রথমে এমএসডি অঙ্কগুলি সরাতে / স্থানান্তর করতে পারেন, তবে অন্যথায় একমাত্র ভাল বিকল্পটি সর্বনিম্ন-উল্লেখযোগ্য-অঙ্কিত প্রথম (মডুলোর সাথে) first

এটি অনলাইন চেষ্টা করুন! । অবরুদ্ধ সংস্করণ:

/* int n = the number
 * int B = size of I = base
 * char I[] = input table
 * char **O = input/output arg passed by ref:
 *    on entry: pointer to the last byte of output buffer.
 *    on exit:  pointer to the first byte of the 0-terminated string in output buffer
 */
void ungolfed_g(n,I,B,O)char*I,**O;
{
    char *outpos = *O;     /* Golfed version uses *O everywhere we use outpos */
    *outpos = 0;           /* terminate the output string */
    for(;n;n/=B)
        *--outpos = I[n%B]; /* produce 1 char at a time, decrementing the output pointer */
    *O = outpos;
}

সুস্পষ্ট দৈর্ঘ্যের এই সংস্করণে ইনপুটটি এমন একটি char table[]যা সমাপ্ত 0 বাইটের প্রয়োজন হয় না , কারণ আমরা কখনই এটি স্ট্রিং হিসাবে বিবেচনা করি না। এটি int table[]আমাদের যত্ন নেওয়া সবার জন্য একটি হতে পারে । সিতে এমন পাত্রে নেই যা তাদের নিজস্ব দৈর্ঘ্য জানে, সুতরাং পয়েন্টার + দৈর্ঘ্য একটি আকার সহ একটি অ্যারে পাস করার স্বাভাবিক উপায়। সুতরাং আমরা প্রয়োজন পরিবর্তে যে চয়ন strlen

সর্বাধিক বাফার আকার আনুমানিক sizeof(int)*CHAR_BIT + 1, তাই এটি ছোট এবং সংকলন-সময় ধ্রুবক। (আমরা বেস = 2 এবং সমস্ত বিট 1 তে সেট করা দিয়ে এই অনেক জায়গা ব্যবহার করি) উদাহরণস্বরূপ, 0টার্মিনেটর সহ 32 বিট ইন্টিজারের জন্য 33 বাইট ।


C89, স্বাক্ষরিত int, একটি অন্তর্নির্মিত দৈর্ঘ্যের সি স্ট্রিং হিসাবে টেবিল, 65 বাইট

B;f(n,I,O)char*I,**O;{B=strlen(I);for(**O=0;n;n/=B)*--*O=I[n%B];}

এটি একই জিনিস তবে ইনপুটটি অন্তর্নিহিত দৈর্ঘ্যের স্ট্রিং তাই আমাদের দৈর্ঘ্যটি নিজেরাই সন্ধান করতে হবে।


2

বাশ + মূল ইউটিলিটিস , 49 বাইট

dc -e`echo -en $2|wc -c`o$1p|tr -dc 0-9|tr 0-9 $2

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

মন্তব্য / ব্যাখ্যা

এটি ইনপুট হিসাবে কমান্ড-লাইন আর্গুমেন্ট গ্রহণ করে (বেস 10 এর সংখ্যা, তারপরে অক্ষরের তালিকার একটি একক স্ট্রিং) এবং স্টডআউটে আউটপুট। স্থান, NEWLINE, ইত্যাদি মত বিশেষ অক্ষর (উদাহরণস্বরূপ, অকট্যাল স্বরলিপি প্রবেশ হতে পারে \040একটি স্থান জন্য), অথবা \nএকটি newline জন্য, \tট্যাব, বা অন্য কোন পালাবার ক্রম যে জন্য echo -eএবং trঅভিন্নরুপে ব্যাখ্যা।

এখানে প্রচুর বাইট হ'ল বিশেষ অক্ষর এবং বৃহত্তর পরীক্ষার কেসগুলি হ্যান্ডেল করা। যদি আমাকে কেবল অ-ভয়ঙ্কর চরিত্রগুলি পরিচালনা করতে হয় এবং সংখ্যাগুলি খুব কম হয় (উদাহরণস্বরূপ, প্রথম পরীক্ষার ক্ষেত্রে), নিম্নলিখিত 24 বাইটগুলি এটি করবে:

dc -e${#2}o$1p|tr 0-9 $2

এটি ${#2}স্ট্রিংয়ে অক্ষরের সংখ্যা পেতে প্যারামিটার সম্প্রসারণ ব্যবহার করে, বেস রূপান্তরটি করার জন্য একটি ডিসি প্রোগ্রাম তৈরি করে এবং তারপরে রূপান্তরিত নম্বরটি প্রেরণ করে tr

এটি নিউলাইন বা স্পেস বা ট্যাবগুলি পরিচালনা করবে না, যদিও, বেসকে প্রভাবিত না করে পালানোর ক্রমগুলি মোকাবেলা করার জন্য, আমি wc -cপালিয়ে যাওয়া ব্যক্তির সাথে ব্যাখ্যা করার পরে একটি চরিত্র গণনা করি echo -en। এটি প্রোগ্রামটি 38 বাইটে প্রসারিত করে:

dc -e`echo -en $2|wc -c`o$1p|tr 0-9 $2

দুর্ভাগ্যক্রমে, ডিসির একটি বিরক্তিকর "বৈশিষ্ট্য" রয়েছে যেখানে এটি যদি একটি বৃহত সংখ্যার আউটপুট দেয় তবে এটি এটি স্ল্যাশ + নিউলাইন ক্রম দিয়ে মুড়িয়ে দেবে, সুতরাং বৃহত্তর পরীক্ষার ক্ষেত্রে এই অতিরিক্ত আউটপুট থাকে। এটি অপসারণ করতে, আমি tr -dc 0-9অ-সংখ্যাসূচক অক্ষরগুলি সরাতে ডিসির আউটপুটটি পাইপ করি । এবং আমরা সেখানে।


আমি dc -e${#2}o$1p|tr 0-9 "$2""পালানো ফর্ম" এর পরিবর্তে ইনপুটটি আক্ষরিক অর্থে নেওয়ার পরামর্শ দিতে যাচ্ছিলাম যাতে এটি স্পেসগুলি পরিচালনা করতে পারে তবে উদাহরণস্বরূপ, একটি পরিসীমা চরিত্র হিসাবে trবিবেচনা না করার বিকল্প নেই -। যদি -ইনপুটটির স্ট্রিংয়ের এক প্রান্তে না থাকে তবে এটি ভেঙে যায়। সম্ভবত আপনি ব্যবহার করতে পারেন sed "y/0123456789/$2/"। না, আমি অনুমান করি না, জিএনইউ sedউভয় আর্গুমেন্ট yএকই দৈর্ঘ্যের প্রয়োজন, এবং এটি নতুন লাইনে দম বন্ধ হয়ে গেছে বলে মনে হয়।
পিটার কর্ডেস

2

এপিএল (ডায়ালগ ইউনিকোড) , 14 13 12 বাইট

⊢⌷⍨∘⊂⊥⍣¯1⍨∘≢

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

ইনফিক্স ট্যাসিট ফাংশন; ভাসমান পয়েন্ট উপস্থাপনের কারণে বৃহত্তম পরীক্ষার কেস পরিচালনা করতে পারে না।

সংরক্ষিত 1 2 @ আদম ধন্যবাদ বাইট!

শিরোনামগুলির জন্য 13 বাইট যুক্ত করা হয়েছে ⎕IO←0:: আমি নেডেক্স হে রিগিন = 0 এবং ⎕FR←1287: এফ লোট আর এর উপস্থাপনা = 128 বিট। (আমি ভুলে গিয়েছিলাম যে এটি প্রয়োগ হয় না ))

কিভাবে?

⊢⌷⍨∘⊂⊥⍣¯1⍨∘≢    Tacit function, infix.
               Tally (number of elements in) the right argument.
         ⍨∘     Then swap the arguments of
     ⊥⍣¯1       Base conversion (to base ≢<r_arg>)
               Enclose (convert to an array)
  ⍨∘            Then swap the arguments of
               Index
               (Into) the right argument.


1

ক্যানভাস , 7 বাইট

L┬{╵⁸@p

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

সরাসরি এগিয়ে বাস্তবায়ন:

L┬{╵⁸@p
L      get the length of the input (popping the item)
 ┬     base decode the other input
  {    for each number there
   ╵     increment
    ⁸@   in the 1st input get that numbered item
      p  and output that

ইনপুট অক্ষর সেটটি ততক্ষণ স্ট্রিং হতে পারে যতক্ষণ না এতে কোনও নতুন লাইন থাকে না, কারণ ক্যানভাসে একটি নতুন লাইন অক্ষর নেই এবং স্বয়ংক্রিয়ভাবে এটিকে 2 ডি অবজেক্টে রূপান্তরিত করে।



1

এসওজিএল ভি0.12 , 10 বাইট

l;A─{IaWp}

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

বেশ দীর্ঘ, ধারণাটি বিবেচনা করে ভাষাতে বেশ কার্যকর করা হয়েছে : এখানে , প্রবেশ করানো

¶    __   __    ¶   |  |_|  |   ¶___|       |___¶-   -   -   -  ¶ - - - - - - - ¶- - - - - - - -¶_______________¶

এই পদ্ধতিটি ব্যবহার করে একটি সংকুচিত স্ট্রিং দেয়।



1

স্ট্যাক্স , 2 বাইট

:B

এটি চালান এবং এটি ডিবাগ করুন

:Bএটি স্ট্যাক্সের একটি নির্দেশ যা এটি করে। এটি সাধারণত "স্ট্রিং" এর অ্যারের পরিবর্তে "স্ট্রিং" * এ কাজ করবে। শেষ পর্যন্ত, এর অর্থ এই যে আউটপুটটি একক অক্ষরের অ্যারেগুলির একটি অ্যারে। তবে আউটপুট সুস্পষ্টভাবে যাইহোক চ্যাপ্টা করে।

* স্টেক্সের আসলে স্ট্রিং টাইপ থাকে না। কোড কোডপয়েন্টগুলির পূর্ণসংখ্য অ্যারে দ্বারা প্রতিনিধিত্ব করা হয়।


হু, আমি কখনই এই আদেশটি লক্ষ্য করিনি ...
wastl

প্রচুর পরিমানে. আমি একবার স্ট্যাক্সে একটি নির্দেশ যুক্ত করেছি যা ইতিমধ্যে বিদ্যমান ছিল এবং আমি ভুলে গিয়েছিলাম forgotten (অ্যারেটি অবরোহীণ?)
পুনরাবৃত্ত



1

সি (জিসিসি) , ১১০ বাইট

char s[99],S[99];i;f(x,_)char*_;{i=strlen(_);*s=*S=0;while(x)sprintf(S,"%c%s",_[x%i],s),strcpy(s,S),x/=i;x=s;}

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

বর্ণনা:

char s[99],S[99];           // Two strings, s and S (capacity 99)
i;                          // A variable to store the length of the string
f(x,_)char*_;{              // f takes x and string _
    i=strlen(_);            // set i to the length of _
    *s=*S=0;                // empty s and S
    while(x)                // loop until x is zero
        sprintf(S,"%c%s",   // print into S a character, then a string
                _[x%i],s),  // character is the x%i'th character of _, the string is s
        strcpy(s,S),        // copy S into s
        x/=i;               // divide x by the length of the string (and loop)
    x=s;}                   // return the string in s

1
আপনি যদি একটি বাফার শেষে শুরু করেন এবং পিছনের দিকে কাজ করেন তবে আপনি এড়াতে পারবেন sprintfআমার সি সংস্করণটি 53 বাইট , কলার সরবরাহকারী আউটপুট বাফার সহ। আপনি strcpyযদি একটি বাফার শুরুতে বাইটগুলি অনুলিপি করতে চান তবে আপনি একটি শেষে করতে পারেন।
পিটার কর্ডস

উজ্জ্বল। এটি কোনও বিশ্রী I / O ফর্ম্যাট কিনা তা আমি পাত্তা দিই না। বিশ্রী I / O খ্যাত দাবি! ভাল হয়েছে, আমি এটি সি টিপস পোস্টে রাখার পরামর্শ দেব।
লাম্বদাবেটা

সিটিতে গল্ফ করার কৌশলগুলির ব্যাখ্যা ও ন্যায্যতার জন্য টিপসের উপর একটি উত্তর পোস্ট করুন ।
পিটার কর্ডস

1

সিজেম , 11 বাইট

liq_,@\b\f=

এটি অনলাইন চেষ্টা করুন! নম্বর হিসাবে ইনপুট নেয়, তারপরে একটি নতুন লাইন, তারপরে ASCII শিল্পের অক্ষর।

ব্যাখ্যা

li           e# Read the first line and convert it to an integer
  q_,        e# Read the rest of the input and push its length n
     @\b     e# Convert the number to its base-n equivalent, as an array of numbers
        \f=  e# Map over the array, taking each element's index from the string

যেহেতু "আইও ফ্লেক্সিবল", আমি মনে করি আপনি liqশুরুতে মুক্তি পেতে পারেন , এবং এটি আপনাকে 3 বাইট সাশ্রয় করে!
ক্রোমিয়াম

1

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

রডের পাইথন সমাধানের বন্দর ।

s=>g=n=>n?g(n/(l=s.length)|0)+s[n%l]:""

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


শুধুমাত্র n64-বিট পর্যন্ত কাজ করে , তাই না? (পাইথনের মধ্যে নির্বিচারে-নির্ভুলতা পূর্ণসংখ্যার অন্তর্নির্মিত থাকে তবে জেএস সংখ্যাগুলি প্রাকৃতিকভাবে doubleপ্রাক-প্রিভিশন ফ্লোট যা পূর্ণসংখ্যায় রূপান্তরিত হতে পারে)। 1928149325670647244912100789213626616560861130859431492905908574660758972167966 এর মতো প্রশ্নটিতে বৃহত্তর পরীক্ষার কেসগুলির জন্য কাজ করছে বলে মনে হচ্ছে না Oh ওহ, তবে প্রশ্নটি উত্তরটির মতো করে দেয়। তবুও, লক্ষ করা উচিত।
পিটার কর্ডস

1

সিম্পিপেম্পলেট , 86 বাইট

বাহ, এটি ছিল বিশাল চ্যালেঞ্জ!

সূচকটি পরিবর্তনশীল হলে নির্দিষ্ট সূচকগুলিতে সরাসরি অ্যাক্সেসের অভাবের কারণে এটি কঠোর হয়েছিল।
কোনও বাগ একটি ভেরিয়েবলের মধ্যে মানগুলি সংরক্ষণ করার জন্য এটি আরও দীর্ঘ করে তোলে।

{@setA argv.1}{@eachargv.0}{@setC C,"{@echoA.",_,"}"}{@calljoin intoC"",C}{@/}{@evalC}

মূল্যবোধ প্রত্যাশিত:

প্রথম যুক্তি ( argv.0) হতে পারে:

  • একটি পূর্ণসংখ্যা
  • সংখ্যা সহ একটি স্ট্রিং
  • পূর্ণসংখ্যার একটি অ্যারে

দ্বিতীয় যুক্তি ( argv.1) হতে পারে:

  • একটি স্ট্রিং
  • একটি অ্যারের

এটি কিভাবে কাজ করে?

এটি এইভাবে কাজ করে:

  • সংখ্যা / স্ট্রিংয়ের মধ্য দিয়ে চক্র প্রথম আর্গুমেন্ট হিসাবে পাস করেছে
  • চলকটিকে Cএকটি অ্যারেযুক্ত অ্যারে হিসাবে সেট করে :
    • পূর্ববর্তী মান C
    • স্ট্রিং "{@echoA."
    • লুপের মান
    • স্ট্রিং "}"
  • সমস্ত কিছু একসাথে যোগদান করে (পিএইচপি এর joinফাংশন ব্যবহার করে)
    এর ফলাফল, উদাহরণস্বরূপ, Cধারণ করে"{@echoA.0}{@echoA.1}..."
  • এর ফলাফল মূল্যায়ন করে C

Ungolfed:

{@set args argv.1}
{@each argv.0 as number}
    {@set code code, "{@echo args.", number , "}"}
    {@call join into code "", code}
{@/}
{@eval code}

আপনি এই কোডটি এখানে চেষ্টা করতে পারেন: https://ideone.com/NEKl2q


অনুকূল ফলাফল

বাগগুলি না থাকলে এই সীমাবদ্ধতার জন্য অ্যাকাউন্টিং (77 বাইট) সেরা ফলাফল হবে:

{@eachargv.0}{@setC C,"{@echoargv.1.",_,"}"}{@calljoin intoC"",C}{@/}{@evalC}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.