একটি স্ট্রিংয়ের বর্গমূল নিন


14

প্রেরণা

ইন এই চ্যালেঞ্জ আপনার টাস্ক দুটি স্ট্রিং গুন ছিল, এই স্বাভাবিকভাবেই একটি স্ট্রিং বর্গমূল গ্রহণ করা একটি উপায় প্রবর্তন করে।

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

একটি স্ট্রিং দেওয়া (উদাহরণস্বরূপ pub) আপনাকে প্রথমে যা করতে হবে তা হল প্রতিটি অক্ষরের জন্য ASCII কোড নির্ধারণ করা :

"pub" -> [112, 117, 98]

এরপরে আপনি প্রতিটি মানকে [0..94]বিয়োগ করে এই কোডগুলি পরিসরে ম্যাপ করুন 32:

[112, 117, 98] -> [80, 85, 66]

এখন আপনাকে প্রতিটি মানটির মূল মডিউলগুলি খুঁজে বার করতে হবে 95(উদাহরণস্বরূপ 40*40 % 95 = 80, আপনি এটিও বেছে নিতে পারেন 55):

[80, 85, 66] -> [40, 35, 16]

এবং অবশেষে আপনি এটিকে আবার ব্যাপ্তিতে মানচিত্র করবেন [32..126]এবং এটিকে আবার স্ট্রিংয়ে রূপান্তর করবেন:

[40, 35, 16] -> [72, 67, 48] -> "HC0"

প্রকৃতপক্ষে "HC0" ⊗ "HC0" = "pub"আপনি এখানে অন্যান্য চ্যালেঞ্জ থেকে একটি সমাধান সঙ্গে যাচাই করতে পারেন ।


মডুলার গাণিতিকের সাথে পরিচিত ব্যক্তিরা সম্ভবত লক্ষ্য করেছেন যে বর্গমূলের মডুলো 95সর্বদা উপস্থিত থাকে না, উদাহরণস্বরূপ এর কোনও মূল নেই 2। এরকম ক্ষেত্রে স্ট্রিংয়ের বর্গমূলের সংজ্ঞা দেওয়া হয়নি এবং আপনার প্রোগ্রাম / ফাংশনটি ক্র্যাশ হতে পারে, অনির্দিষ্টকালের জন্য লুপ করতে পারে ইত্যাদি may

আপনার সুবিধার জন্য, এখানে বর্গমূল রয়েছে এমন অক্ষরের তালিকার তালিকা (প্রথমটি একটি স্থান)

 !$%&)+03489:>CDGLMQVW]`bjlpqu

বিধি

  • আপনি একটি প্রোগ্রাম / ফাংশন লিখবেন যা একটি স্ট্রিং (বা অক্ষরের তালিকা) হিসাবে যুক্তি হিসাবে গ্রহণ করবে এবং উপস্থিত থাকলে কোনও বর্গমূল প্রদান করবে
  • আপনি ধরে নিতে পারেন ইনপুটটির সর্বদা একটি বর্গমূল থাকে
  • ইনপুটটিতে একটি খালি স্ট্রিং থাকতে পারে
  • ইনপুট মুদ্রণযোগ্য ব্যাপ্তিতে থাকবে ( [32..126])
  • আউটপুটটি হয় কনসোলে মুদ্রিত হয় বা বর্গমূল উপস্থিত থাকলে আপনি একটি স্ট্রিং ফিরিয়ে দেন
  • যদি বর্গমূলের অস্তিত্ব না থাকে তবে আপনার প্রোগ্রাম / ফাংশনের আচরণটি অপরিবর্তিত রয়েছে
  • আপনি যদি কনসোলটির মূলটি নতুন লাইনে বা হোয়াইটস্পেসে প্রিন্ট করতে চান তবে তা ভাল

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

মনে রাখবেন যে এগুলি কেবলমাত্র একমাত্র সমাধান নয়:

''              -> ''
'pub'           -> 'HC0'
'pull!'         -> 'HC33!'
'M>>M'          -> '>MM>'
'49'            -> '4%'
'64'            -> undefined
'Hello, World!' -> undefined

বর্গমূল ছাড়াই এই অক্ষরগুলিতে ত্রুটিযুক্ত অবস্থা জোর করা অপ্রয়োজনীয় বলে মনে হচ্ছে, আমি কেবল অপরিজ্ঞাত আচরণের পরামর্শ দেব।
এটাকো

@ATaco আমি চ্যালেঞ্জ আপডেট করেছি।
ბიმო

প্রদত্ত স্ট্রিংটি একাধিক স্ট্রিংয়ের বর্গক্ষেত্র হলে কী করবেন?
tsh

@tsh যে কোনও ফিরিয়ে দিন, আমি চ্যালেঞ্জটি আপডেট করব।
ბიმო

1
@ কুরিরিসনাদিনি আসলে এটির পরিধি হওয়া উচিত 0-94(এটি মুদ্রণযোগ্য ব্যাপ্তি), এটি একটি টাইপো - সে সম্পর্কে দুঃখিত।
ბიმო

উত্তর:


10

sh + coreutils, 58 বাইট

tr '$%&)+0389:>CDGLMQVW]`bjpqu' 1u.#:BFO%+M/L2Aa,795d0@H=C

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

মডুলার বর্গাকার রুট সাধারণত অনন্য নয়; আমাদের প্রতিটি চরিত্রের জন্য বাদে 2 বা 4 টি পছন্দ রয়েছে । আমরা অনুবাদ করতে প্রয়োজন হবে না , !, 4, lযেহেতু প্রতিটি ইতিমধ্যে নিজেই একটি বর্গমূল হয়। বাকী অক্ষরগুলির জন্য, আমরা এমন চিত্র চয়ন করি যা শেল বা এর জন্য পালাতে হবে না tr


6

পাইথন 3, 57 56 বাইট

lambda s:s.translate({k*k%95+32:k+32for k in range(95)})

translate"ইউনিকোড অর্ডিনাল থেকে ইউনিকোড অধ্যাদেশগুলিতে" একটি ম্যাপিং ব্যবহার করে। সুতরাং, আমাদের chr/ ordরূপান্তর প্রয়োজন হয় না । দ্রষ্টব্য: চরের কোনও শিকড় না থাকলে এটি ক্রাশ হয় না।

@ জোনাথন-অ্যালানকে 1 বাইট সংরক্ষণ করা হয়েছে

ম্যাপিংয়ের মানটি কী এর 0,94 পরিসরে সর্বাধিক মূল। সর্বনিম্ন মূলের (উদাহরণ হিসাবে) থাকতে, ব্যবহার করুন:

lambda s:s.translate({k*k%95+32:k+32for k in range(95,0,-1)})

(By১ বাইট)

>>> [s.translate({k*k%95+32:k+32for k in range(95,0,-1)}) for s in ['','pub','pull!','M>>M','49','64','Hello, World!']]
['', 'HC0', 'HC33!', '>MM>', '4%', '64', 'He33o,\x7f9or3d!']

স্বাগত! সুন্দর প্রথম পোস্ট। আপনি 32এবং এর মধ্যে স্থান সরাতে পারেন for
জোনাথন অ্যালান

... এছাড়াও, এখানে একটি অনলাইন ইন্টারপ্রেটার টেস্ট স্যুটের লিঙ্ক।
জোনাথন অ্যালান


3

জাপট , 16 15 বাইট

c@H+LDz%95+HÃbX

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

05AB1E উত্তর (এর Lপরিবর্তে = 100 ব্যবহার করে 95) দেখে বাইট সংরক্ষণ করেছেন । এখন জাপট হ'ল সংক্ষিপ্ততম, একটি বিরল ঘটনা :- ডি

ব্যাখ্যা

 c@ H+LÇ   ²  %95+HÃ bX
UcX{H+LoZ{Zp2 %95+H} bX}   Ungolfed
                           Implicit: U = input string, H = 32, L = 100
UcX{                   }   Map each charcode X in the input to the following:
      Lo                     Create the array [0, 1, ..., 98, 99]
        Z{         }         and map each item Z to
          Zp2                  Z ** 2
              %95              mod 95
                 +H            plus 32.
                     bX      Find the first index of X in this array. This gives the
                             smallest square root (mod 95) of (X - 32).
    H+                       Add 32 to map this back into the printable range.
                           Implicit: output result of last expression


2

জেলি , 18 17 16 বাইট

95Ḷ²%95+32żØṖFyO

এটি অনলাইন চেষ্টা করুন! (টেস্ট-স্যুট ফুটারের সাথে আসে)

সম্পূর্ণ পুনর্লিখন করে 2 বাইট সংরক্ষণ করা হয়েছে। এছাড়াও আমি প্রথমবারের জন্য ব্যবহারটি খুঁজে পেয়েছি }

ব্যাখ্যা

কোডটি প্রথমে সমস্ত বর্গক্ষেত্রের অক্ষর গণনা করে এবং তারপরে তাদের নিজ নিজ বর্গীয় শিকড়গুলিতে মানচিত্র করে।

95Ḷ²%95+32żØṖFyO    Main link. Argument: S (string)
95                    Take 95.
  Ḷ                   Get the array [0, 1, ..., 94].
   ²                  Square each to get [0, 1, ..., 8836].
    %95               Get each square modulo 95 to get [0, 1, ..., 1].
       +32            Add 32 to get [32, 33, ..., 33].
           ØṖ         Get the list of printables [" ", "!", ..., "~"].
          ż           Interleave with printables to get [[32, " "], ..., [33, "~"]].
             F        Flatten the mapping to [32, " ", ..., 33, "~"].
               O      Get the code point of each character in input.
              y       Map the code points to the correct output characters using the map.

95Ḷ²%95+32iЀO+31Ọআমার Japt উত্তর, না যদিও আপনার সমাধান দুই বাইট খাটো ... মূলত
ETHproductions

2

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

@ETH প্রোডাকশনগুলির সাথে সহযোগিতা করেছেন

s=>s.map(x=>(g=z=>z*z%95==x.charCodeAt(0)-32?String.fromCharCode(z+32):g(z+1))(0))

ইনপুট এবং আউটপুট একটি চর অ্যারের আকারে।

পরীক্ষার স্নিপেট


2

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

vтLn95%žQykk33+ç?

অ্যালগরিদম জেলি এবং জাপ্ট উত্তরের সাথে খুব মিল (ইতিপূর্বে অন্য কিছু ছিল তবে এটি আমাকে 19 বাইটে পেয়েছে)

ব্যাখ্যা

vтLn95%žQykk33+ç?
v                 # For each character of the input...
 тL                # Push [1..100]
   n               # Square every element of the list
    95%            # And take it modulo 95
       žQyk        # Push the index of the current character in the printable ascii range
           k       # Push the index of that in the list created earlier
            33+    # Add 33 to the result
               ç   # And convert it back to a character
                ?  # Print the character

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


1

গণিত, 60 বাইট

FromCharacterCode[PowerMod[ToCharacterCode@#-32,1/2,95]+32]&

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



1

গণিতের 82 বাইট

FromCharacterCode[Solve[x^2==#,Modulus->95][[1,1,2]]+32&/@(ToCharacterCode@#-32)]&

সলভের মডুলার পাটিগণিত করার ক্ষমতা ব্যবহার করে।

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