বিক্রয়শক্তি 15-অক্ষর আইডি 18-অক্ষরে রূপান্তর করুন


20

ইন Salesforce CRM এর , প্রত্যেক বস্তুর 15 অক্ষরের আলফানিউমেরিক আইডি, যা কেস সংবেদনশীল আছে। যদি কারও কৌতূহল হয় তবে এটি বেস -২২ সংখ্যা । তবে ডেটা মাইগ্রেশন এবং সংহতকরণের জন্য ব্যবহৃত সরঞ্জামগুলি কেস সংবেদনশীলতা সমর্থন করতে পারে বা নাও করতে পারে। এটি অতিক্রম করতে, আইডিগুলি নিরাপদে 18-অক্ষরের কেস-সংবেদনশীল আলফানিউমারিক আইডিতে রূপান্তর করা যায়। এই প্রক্রিয়াতে 3-অক্ষরের বর্ণমালা চেকসাম আইডিতে সংযুক্ত করা হয়। রূপান্তর অ্যালগরিদম হ'ল:

উদাহরণ :

a0RE000000IJmcN
  1. তিনটি 5-অক্ষরের অংশগুলিতে আইডি বিভক্ত করুন।

    a0RE0  00000  IJmcN
    
  2. প্রতিটি অংশ বিপরীত।

    0ER0a  00000  NcmJI
    
  3. প্রতিটি অংশের প্রতিটি অক্ষর 1যদি এটি বড় হয় বা 0অন্যথায় হয় তা দ্বারা প্রতিস্থাপন করুন ।

    01100  00000  10011
    
  4. প্রতিটি 5-সংখ্যার বাইনারি সংখ্যার জন্য i, iবড় হাতের বর্ণমালা এবং 0-5 ( ABCDEFGHIJKLMNOPQRSTUVWXYZ012345) অঙ্কের সংমিশ্রণে অবস্থানের অক্ষর পান ।

    00000 -> A,
    00001 -> B,
    00010 -> C, ..., 
    11010 -> Z, 
    11011 -> 0, ...,
    11111 -> 5`
    

    ফলনশীল:

    M  A  T
    
  5. এই অক্ষরগুলি, চেকসামটি মূল আইডিতে যুক্ত করুন।

আউটপুট :

a0RE000000IJmcNMAT

প্রোগ্রাম বা ফাংশন লিখুন যা ইনপুট হিসাবে 15-অক্ষরের আলফানিউমিক (ASCII) স্ট্রিং নেয় এবং 18-অক্ষর আইডি ফেরত দেয়।

ইনপুট বৈধতা এই প্রশ্নের সুযোগের বাইরে। প্রোগ্রামগুলি অবৈধ ইনপুটটিতে কোনও মান বা ক্র্যাশ দিতে পারে।

দয়া করে বিক্রয় চক্রের স্বতন্ত্র ভাষার বৈশিষ্ট্যগুলি ব্যবহার করবেন না যা এই চ্যালেঞ্জকে তুচ্ছ করে তোলে (যেমন সূত্র CASESAFEID(), এপেক্স এবং সি তে রূপান্তর Idকরে String))

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

a01M00000062mPg    -> a01M00000062mPgIAI
001M000000qfPyS    -> 001M000000qfPySIAU
a0FE000000D6r3F    -> a0FE000000D6r3FMAR
0F9E000000092w2    -> 0F9E000000092w2KAA
aaaaaaaaaaaaaaa    -> aaaaaaaaaaaaaaaAAA
AbCdEfGhIjKlMnO    -> AbCdEfGhIjKlMnOVKV
aBcDEfgHIJKLMNO    -> aBcDEfgHIJKLMNO025

3
দুঃখের বিষয়, এপেক্স কোডে একটি স্ট্রিং আইডিতে রূপান্তর করা এখনও এখানে সরবরাহ করা কিছু উত্তরগুলির চেয়ে কম হবে না, বিশেষত যদি কোডটি স্ব-অন্তর্ভুক্ত থাকে। অ্যাপেক্স কোড গল্ফ করার পক্ষে উপযুক্ত নয়।
ফিরফক্স

2
প্রাক্তন বিক্রয় বাহিনী হিসাবে ফাইফফক্স @ অ্যাপেক্স খুব বেশি উপযোগী নয় ...
মাইক ম্যাকমাহন

2
Apex, 56 বাইট: public class X{public X(Id i){System.debug((String)i);}}। যদিও কেবল বৈধ বিক্রয়কেন্দ্র আইডি দিয়ে কাজ করে।
ট্রাং ওউল

আমি এখানে আসলে গল্ফ নয়, কাজের জন্য ( सक्সেস.জিটারবিট / ডিসপ্লে / ডোক / )) করার জন্য এসেছিলাম, তবে আমি অ্যালগরিদমের বিবরণ দেখে কিছুটা বিভ্রান্ত হয়েছি। আপনি বলছেন যে চতুর্থ ধাপে প্রতিটি বিপরীত ও স্যানিটাইজড খণ্ডটি একটি "বাইনারি সংখ্যা" হবে তবে আপনি কখনও 2-8 অঙ্কগুলি 0 এবং 1 এর সাথে প্রতিস্থাপন করবেন না। "62mPg" এর মতো অংশের 1-3 টি পদক্ষেপের পরে "01026" এর মতো সংখ্যার ফলস্বরূপ আমি 4 তম পদক্ষেপের জন্য ঠিক কী করব?
কে ..

উত্তর:


6

রুবি, 97 বাইট

->s{s+s.scan(/.{5}/).map{|x|[*?A..?Z,*?0..?5][x.reverse.gsub(/./){|y|y=~/[^A-Z]/||1}.to_i 2]}*''}
->s{               # define an anonymous lambda
s+                 # the original string plus...
s.scan(/.{5}/)     # get every group of 5 chars
.map{|x|           # map over each group of 5 chars...
[*?A..?Z,*?0..?5]  # build the array of A-Z0-5
[                  # index over it with...
x.reverse          # the 5-char group, reversed...
.gsub(/./){|y|     # ... with each character replaced with...
y=~/[^A-Z]/||1     # ... whether it's uppercase (0/1)...
}.to_i 2           # ... converted to binary
]                  # (end index)
}*''               # end map, join into a string
}                  # end lambda

এটির কিছু সত্যই ঝরঝরে কৌশল got

স্ট্রিংটিকে পাঁচটি গ্রুপে বিভক্ত করার জন্য আমার মূল প্রবৃত্তিটি ছিল each_slice:

irb(main):001:0> [*1..20].each_slice(5).to_a
=> [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]

সরল রেজেক্স ( x.chars.each_slice(5)বনাম x.scan(/.{5}/)) এর সাথে তুলনায় এটি বেশ দীর্ঘ দীর্ঘ হয়েছে । এটি অন্ধকারের দৃষ্টিতে স্পষ্ট বলে মনে হয়, তবে আমি কখনই এটি সম্পর্কে সত্যই ভাবিনি ... সম্ভবত আমি আমার পুরানো কিছু রুবি উত্তর এখানে অনুকূলিত করতে পারি।

এই উত্তরে আমি যে জিনিসটি নিয়ে সবচেয়ে বেশি গর্বিত তা হ'ল কোডের এই অংশ:

y=~/[^A-Z]/||1

ঠিক আছে, তাই নন-রুবিবাদীদের জন্য এখানে কিছু ব্যাকগ্রাউন্ড। রুবি বুুলিয়ানসকে ( TrueClass, FalseClass) পুরোপুরি / সংখ্যা () থেকে সম্পূর্ণ আলাদা করে দেয় Numeric- এর অর্থ সত্য থেকে 1 এবং মিথ্যা 0 থেকে কোনও স্বয়ংক্রিয় রূপান্তর নেই। গল্ফ করার সময় এটি বিরক্তিকর (তবে একটি ভাল জিনিস ... অন্য সমস্ত উদ্দেশ্যে)।

একটি একক অক্ষর বড় হাতের (এবং ফিরে 1 বা 0) কিনা তা যাচাই করার নির্দোষ পন্থা

y.upcase==y?1:0

আমরা এটিকে আরও কিছুটা নামিয়ে আনতে পারি (আবার, একটি রেজেক্স সহ):

y=~/[A-Z]/?1:0

তবে তখন আমি সত্যিই ভাবতে শুরু করি। হুম ... =~একটি ম্যাচের সূচক ফেরত দেয় (সুতরাং, আমাদের একক চরিত্রের জন্য, সবসময় 0যদি কোনও ম্যাচ থাকে তবে) বা nilম্যাচ ব্যর্থতার কারণে, একটি মিথ্যা মান ( FalseClassরুবি বাদে অন্য সব কিছুই সত্যবাদী)। ||যদি এটা truthy, এবং তার দ্বিতীয় প্রতীক অন্যথায় অপারেটর তার প্রথম প্রতীক লাগে। অতএব, আমরা এটিকে গল্ফ করতে পারি

y=~/[^A-Z]/||1

ঠিক আছে, আসুন এখানে কি ঘটছে তা দেখুন। যদি yবড় হাতের অক্ষর হয় তবে [^A-Z]এটি মেলতে ব্যর্থ হবে , তাই রেজেক্স অংশটি ফিরে আসবে nilnil || 1তাই 1, বড় হাতের অক্ষর হয়ে যায় 1। যদি yবড় হাতের অক্ষর ব্যতীত অন্য কিছু থাকে তবে রেজেক্স অংশটি ফিরে আসবে 0(কারণ সূচীতে একটি ম্যাচ আছে 0), এবং যেহেতু 0সত্যবাদী, 0 || 1তাই 0

... এবং কেবল এই সমস্ত লেখার পরে আমি বুঝতে পারি যে এটি আসলে একই দৈর্ঘ্য y=~/[A-Z]/?1:0। হাহা, ওহ ভাল।


6

পাইথ, 23 22 বাইট

FryAmTheEggman দ্বারা 1 বাইট সংরক্ষণ করা হয়েছে

sm@s+JrG1U6i}RJ_d2c3pz

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

pগল্ফিংয়ের সময় এই প্রথমবারের মতো নির্দেশ ব্যবহার করেছি ।

ব্যাখ্যা

     JrG1                   save uppercase alphabet in J
                     z      input string
                    p       print it without newline
                  c3        split into 3 parts
 m              d           for each part:
               _              reverse
            }R                map characters to being in
              J                 uppercase alphabet (saved in J)
           i     2            parse list of bools as binary
  @                           get correct item of
     J                          uppercase alphabet (saved in J)
   s+    U6                     add nums 0-5 to it
s                           concatenate and print

4

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

j1Y24Y2hG5IePtk=~!XB1+)h

ব্যবহার বর্তমান সংস্করণ (9.1.0) ভাষা / কম্পাইলার করুন।

উদাহরণ

>> matl
 > j1Y24Y2hG5IePtk=~!XB1+)h
 >
> a0RE000000IJmcN
a0RE000000IJmcNMAT

>> matl
 > j1Y24Y2hG5IePtk=~!XB1+)h
 >
> a01M00000062mPg
a01M00000062mPgIAI

ব্যাখ্যা

j            % input string
1Y2          % predefined literal: 'ABC...Z'
4Y2          % predefined literal; '012...9'
h            % concatenate into string 'ABC...Z012...9'
G            % push input string
5Ie          % reshape into 5x3 matrix, column-major order
P            % flip vertically
tk=~         % 1 if uppercase, 0 if lowercase
!XB1+        % convert each column to binary number and add 1
)            % index 'ABC...Z012...9' with resulting numbers
h            % concatenate result with original string

3

জাভাস্ক্রিপ্ট (ES6), 108

x=>x.replace(/[A-Z]/g,(x,i)=>t|=1<<i,t=0)+[0,5,10].map(n=>x+='ABCDEFGHIJKLMNOPQRSTUVWXYZ012345'[t>>n&31])&&x

পরীক্ষা

f=x=>x.replace(/[A-Z]/g,(x,i)=>t|=1<<i,t=0)+[0,5,10].map(n=>x+='ABCDEFGHIJKLMNOPQRSTUVWXYZ012345'[t>>n&31])&&x

// Less golfed

U=x=>{
  x.replace(/[A-Z]/g,(x,i)=>t|=1<<i,t=0); // build a 15 bit number (no need to explicit reverse)
  // convert 't' to 3 number of 5 bits each, then to the right char A..Z 0..5
  [0,5,10].forEach(n=> // 3 value for shifting
    x += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345' // to convert value to char
     [ t>>n&31 ] // shift and mask
  );
  return x
}

console.log=x=>O.innerHTML+=x+'\n';

;[
  ['a01M00000062mPg','a01M00000062mPgIAI']
, ['001M000000qfPyS','001M000000qfPySIAU']
, ['a0FE000000D6r3F','a0FE000000D6r3FMAR']
, ['0F9E000000092w2','0F9E000000092w2KAA']
, ['aaaaaaaaaaaaaaa','aaaaaaaaaaaaaaaAAA']
, ['AbCdEfGhIjKlMnO','AbCdEfGhIjKlMnOVKV']
, ['aBcDEfgHIJKLMNO','aBcDEfgHIJKLMNO025']
].forEach(t=>{
  var i=t[0],x=t[1],r=f(i);
  console.log(i+'->'+r+(r==x?' OK':' Fail (expected '+x+')'));
})
<pre id=O></pre>


2

সিজেম, 27 বাইট

l_5/{W%{_el=!}%2bH+43%'0+}%

সমস্ত পরীক্ষার কেস চালান।

অনুমানটির মোটামুটি সরল বাস্তবায়ন। সবচেয়ে আকর্ষণীয় অংশটি চেকসামের অক্ষরগুলিতে রূপান্তর। আমরা প্রতিটি অংশের ফলাফলগুলিতে 17 যুক্ত করি। যে মডুলো 43 নিন এবং এর ফলাফলটি চরিত্রটিতে যুক্ত করুন '0



2

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

s=>s+s.replace(/./g,c=>c>"9"&c<"a").match(/.{5}/g).map(n=>"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"[0|"0b"+[...n].reverse().join``]).join``

4 ՊՓԼՃՐՊՃՈԲՍԼ বাইট সংরক্ষিত হয়েছে @ to এর জন্য ধন্যবাদ !

ব্যাখ্যা

এই চ্যালেঞ্জটি জাভাস্ক্রিপ্টের জন্য মোটেই উপযুক্ত নয়। স্ট্রিংটিকে বিপরীত করার কোনও সংক্ষিপ্ত উপায় নেই এবং এটি মনে হয় সংখ্যাকে একটি চরিত্রে রূপান্তর করার সবচেয়ে সংক্ষিপ্ততম উপায়টি প্রতিটি সম্ভাব্য অক্ষরকে হার্ড-কোড করা।

s=>
  s+                                   // prepend the original ID
  s.replace(/./g,c=>c>"9"&c<"a")       // convert each upper-case character to 1
  .match(/.{5}/g).map(n=>              // for each group of 5 digits
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"
    [0|"0b"+                            // convert from binary
      [...n].reverse().join``]          // reverse the string
  ).join``

যদি চেকসামের অঙ্কগুলিকে লো-কেস করার অনুমতি দেওয়া হয় তবে এটি 124 বাইটে এভাবে করা যেতে পারে:

s=>s+s.replace(/./g,c=>c>"9"&c<"a").match(/.{5}/g).map(n=>((parseInt([...n].reverse().join``,2)+10)%36).toString(36)).join``

পরীক্ষা


যদি আমার ভুল না হয় তবে parseInt([...n].reverse().join``,2)এটিকে পরিবর্তন করা যেতে পারে +`0b${[...n].reverse().join``}`
মামা ফান রোল

@ ՊՓԼՃՐՊՃՈԲՍԼ ঠিক আছেন আপনি! আমি এর উপরেও অন্য একটি বাইট সংরক্ষণ করেছি, ধন্যবাদ।
ব্যবহারকারী 81655

ব্যবহার করে 10 টি পুরো বাইট সংরক্ষণ করুন .replace(/.{5}/g,n=>/*stuff*/)
নীল

2

ম্যাটল্যাব, 100 98 বাইট

s=input('');a=flip(reshape(s,5,3))';e=['A':'Z',48:53];disp([s,e(bin2dec(num2str(a~=lower(a)))+1)])

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

ব্যাখ্যা

আমি সম্ভবত এখানে সর্বাধিক সোজা-এগিয়ে ব্যবহার করছি:

  • অনুরোধ ইনপুট
  • 5 (সারি) x 3 (কলাম) এ পুনরায় আকার দিন
  • সারি ক্রম ফ্লিপ করুন
  • বাইনারি হিসাবে পড়ার জন্য এটি প্রস্তুত করার জন্য ম্যাট্রিক্স স্থানান্তর করুন
  • এবিসি ... XYZ012345 অ্যারে বরাদ্দ করুন
  • ট্রান্সপোজড ম্যাট্রিক্সের অক্ষর সূচকগুলি তার নিম্ন-আকারের সমতুল্যে তুলনা করুন এবং বুলিয়ানদের স্ট্রিংয়ে রূপান্তর করুন, যা পরে বাইনারি হিসাবে পড়ে এবং দশমিক হিসাবে রূপান্তরিত হয়।
  • এই দশমিকগুলি (1 দ্বারা বর্ধিত) বরাদ্দ করা অ্যারের সূচক হিসাবে ব্যাখ্যা করুন।
  • অতিরিক্ত 3 টি অক্ষর দিয়ে ইনপুট প্রদর্শন করুন

এখন লুইস মেন্ডোকে 100 বাইটের নিচে ধন্যবাদ!


1
আপনি কিছুটা ব্যবহার করে সঞ্চয় করতে পারবেনe=['A':'Z',48:53]
লুইস মেন্ডো

আমি দেখতে পাচ্ছি আমার পদ্ধতির প্রায় আপনার মতো :-)
লুইস মেন্ডো

2

পিএইচপি, 186 181 বাইট

<?$z=$argv[1];$x=str_split($z,5);$l="ABCDEFGHIJKLMNOPQRSTUVWXYZ012345";foreach($x as$y){foreach(str_split(strrev($y))as$a=>$w)$y[$a]=ctype_upper($w)?1:0;$z.=$l[bindec($y)];}echo $z;

Unglofed

<?php
$z = $argv[1];
$x = str_split($z,5);
$l = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345";
foreach($x as $y) {
    foreach( str_split( strrev($y) ) as $a => $w) {
        $y[$a] = ctype_upper($w) ? 1 : 0;
    }
    $z .= $l[bindec($y)];
}
echo $z;

আমি এটির চেয়ে আরও ছোট করে তুলতে পারি এই ভেবে আমি শুরু করেছিলাম, তবে এটি সংক্ষিপ্ত করার জন্য আমি ধারণার বাইরে চলে এসেছি।


1

পাইথন 2, 97 বাইট

lambda i:i+''.join(chr(48+(17+sum((2**j)*i[x+j].isupper()for j in range(5)))%43)for x in[0,5,10])

1

পাওয়ারশেল, 162 বাইট

function f{param($f)-join([char[]](65..90)+(0..5))[[convert]::ToInt32(-join($f|%{+($_-cmatch'[A-Z]')}),2)]}
($a=$args[0])+(f $a[4..0])+(f $a[9..5])+(f $a[14..10])

ঠিক আছে, এটিতে প্রচুর ঝরঝরে জিনিস। আমি দ্বিতীয় লাইন দিয়ে শুরু করব।

আমরা স্ট্রিং হিসাবে ইনপুটটি গ্রহণ করি $args[0]এবং এটি $aপরে ব্যবহারের জন্য সেট করি । এটি এম্প্যাপসুলেটেড ()যাতে এটি কার্যকর করা হয় এবং ফলাফলটি ফিরে আসে (অর্থাত্ $a) তাই আমরা তত্ক্ষণাত তিনটি ফাংশন কলের ফলাফলের সাথে স্ট্রিং-কনটেটেট করতে পারি (f ...)। প্রতিটি ফাংশন কল একটি আর্গুমেন্ট হিসাবে পাস হয় ইনপুট স্ট্রিংটিকে বিপরীত ক্রমে সূচিত করে একটি চার-অ্যারের হিসাবে বোঝায় - উদাহরণস্বরূপ, ইনপুটটির জন্য, প্রতিটি এন্ট্রি চর হিসাবে নয়, স্ট্রিং নয় $a[4..0]equal@('0','E','R','0','a')

এখন কর্মক্ষেত্রে, যেখানে প্রোগ্রামটির আসল মাংস। আমরা ইনপুট হিসাবে গ্রহণ করি $f, তবে এটি কেবল শেষের দিকে ব্যবহৃত হয়, তাই প্রথমে সেখানে ফোকাস করা যাক। যেহেতু এটি একটি চর-অ্যারে হিসাবে পাস হয়েছে (আমাদের পূর্ববর্তী সূচকের জন্য ধন্যবাদ), আমরা তত্ক্ষণাত এটিকে একটি লুপে পাইপ করতে পারি $f|%{...}। লুপের অভ্যন্তরে, আমরা প্রতিটি চরিত্র গ্রহণ করি এবং কেস-সংবেদনশীল রেজেক্স ম্যাচটি সম্পাদন করি -cmatchযা ফলস্বরূপ / অন্যথায় যদি সত্য / মিথ্যা হয়ে থাকে। আমরা এনক্যাপসুলেটিংয়ের সাথে পূর্ণসংখ্যা হিসাবে নিক্ষেপ করি +(), তারপরে 1 এবং 0 এর অ্যারের -joinস্ট্রিং গঠনের জন্য এড হয়। যে তারপর .NET প্রথম প্যারামিটার হিসাবে পাস করা হয়েছে [convert]::ToInt32()কল বাইনারি (বেস পরিবর্তন করতে 2দশমিক মধ্যে)। আমরা সেই ফলাফল দশমিক সংখ্যাটি স্ট্রিংয়ের সূচকগুলিতে ব্যবহার করি (-join(...)[...])। স্ট্রিংটি প্রথমে একটি ব্যাপ্তি হিসাবে তৈরি করা (65..90)হয় যা চর-অ্যারে হিসাবে কাস্ট করা হয়, তারপরে পরিসীমা (0..5)(যেমন, স্ট্রিংটি "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345") এর সাথে সংমিশ্রিত হয় । এগুলি সবই স্ট্রিং থেকে উপযুক্ত চরিত্রটি ফিরিয়ে দেওয়া।



1

পাইথন 3, 201 174 138 বাইট

ট্র্যাং অউলকে একটি ক্রিয়াকলাপের ঘোষণার প্রতিশ্রুতি দেওয়ার জন্য ধন্যবাদ, যেটির আর অস্তিত্ব নেই। পাইথন টেরিনারি অপারেটররা। এবং কিছু ভুল আউটপুট। শুধু ... শুধু তাকে উপার্জন দিন।

i=input();n='';c=l=15;
while c:c-=1;n+=('0','1')[i[c].isupper()]
while l:v=int(n[l-5:l],2);l-=5;i+=(chr(v+65),str(v-26))[v>25]
print(i)

আপনি z()একবার ফাংশন ব্যবহার করেন , আপনি এর কলটি প্রতিস্থাপন করতে পারেন এবং 25 বাইট সংরক্ষণ করতে পারেন। এছাড়াও, আপনার কোড [পরিবর্তে ভুলভাবে বরাদ্দ করে 0
ট্রাং ওল

ঠিক আছে, এটি আমার পক্ষ থেকে বিব্রতকর নজরদারি ছিল। ধন্যবাদ।
স্টিভ একার্ট

1
আপনিই প্রথম প্রতিস্থাপন আরও বেশি সঞ্চয় করতে পারেন if elseসঙ্গে এই নির্মাণ এবং তিন অপারেটর সঙ্গে দ্বিতীয়।
ট্রাং ওল


1

সি, 120 118 বাইট

n,j;main(c,v,s)char**v,*s;{for(printf(s=v[1]);*s;s+=5){for(n=0,j=5;j--;)n=n*2+!!isupper(s[j]);putchar(n+65-n/26*17);}}

যে কোনও ইনপুটটির দৈর্ঘ্য 5 :) এর একাধিকের জন্য কাজ করে

Ungolfed

n,j;

main(c,v,s) char **v, *s;
{
    for(printf(s = v[1]); *s; s+=5)
    {
        for(n=0, j=5; j--;)
            n=n*2+!!isupper(s[j]);

        putchar(n+65-n/26*17);
    }
}

কয়েকটি বাইট সংরক্ষণ করতে আপনি বিশ্বব্যাপী নেমস্পেস থেকে এন সরিয়ে ফেলতে পারেন, যদি আপনি অন্যথায় আরগসি ব্যবহার না করে থাকেন তবে আপনার স্বাক্ষরের জন্য প্রধান (এন, ভি, গুলি) ব্যবহার করতে পারেন।
ক্লাব্ল্যাঙ্ক

এছাড়াও প্লেইন পুরাতন 442 এর সাথে 26 * 17 প্রতিস্থাপন করুন অন্য বাইট সংরক্ষণ করুন
ক্লাব্ল্যাঙ্ক

আরও কয়েকটি সম্পাদনা সহ আমি আপনার সংস্করণটি 110 বাইটে নামিয়ে আনলাম। ইস্প্পার () যখন আমার পক্ষে ভাল কাজ করছে বলে মনে হচ্ছে তখন কেন আপনি ছিলেন! এছাড়াও আমি আপনার লুপগুলি অপ্রয়োজনীয় কিছু অপসারণের জন্য রিফ্যাক্টর করেছি{} j;main(n,v,s)char**v,*s;{for(printf(s=v[1]);*s;s+=5,putchar(n+65-n/442))for(n=0,j=5;j--;n=n*2+isupper(s[j]));}
ক্লাব্ল্যাঙ্ক

@ ক্লেব্ল্যাঙ্ক দুর্দান্ত পরামর্শ, অনেক অনেক ধন্যবাদ। ক্রিয়াকলাপ n/26*17ক্রমটি এক্সপ্রেশনটিতে খুব গুরুত্বপূর্ণ তাই 442 এর সাথে প্রতিস্থাপন করা কোনও বিকল্প নয়। যতদূর !!isupper, এই ফাংশনটি আমার সিস্টেমে সত্যের জন্য 1 প্রদান করে না, এটি 256 ফেরত !!দেয় what এটিকে 0/1 রিটার্ন মানতে রূপান্তর করার একটি ছোট উপায় হ'ল যাই হোক না কেন। YMMV।
কোল ক্যামেরন

1

সি #, 171 বাইট

আমি গল্ফিং সি # তে আসলেই ভাল অনুশীলন করি না, তবে এখানে একটি শট।

s=>{for(var u=s;u.Length>0;u=u.Substring(5)){int p=0,n=u.Substring(0,5).Select(t=>char.IsUpper(t)?1:0).Sum(i=>(int)(i*Math.Pow(2,p++)));s+=(char)(n+65-n/26*17);}return s;}

পরামর্শ: এর char.IsUpper(t)সাথে প্রতিস্থাপন করা যেতে পারে t>=65&t<=90(& সি # এর বুলে মূলত &&শর্ট সার্কিট ছাড়া একটি গল্ফ-খাটো )। 447তুলনায় খাটো 26*17। আপনার আলাদা করার দরকার নেই Select: আপনি সরাসরি টার্নারিটি এর মধ্যে অন্তর্ভুক্ত করতে পারেন Sum। সেই সব ব্যবহারগুলির প্রতিস্থাপন বিবেচনা করুন Substringএকটি লুপ উপর ভিত্তি করে দিয়ে Takeপরিবর্তে, যেমন for(int i=0;i<3;i++)s.Skip(i*5).Take(5)। ভবিষ্যতের রেফারেন্সের জন্য, এর u!=""চেয়ে কম হবে u.Length>0(তবে আপনি যদি ব্যবহার করছেন তবে এটি আর প্রয়োজন হবে না Take)।
বব

মত প্রকাশের n/26*17সমতুল্য নয় n/442, তবে এর বাইরে, পরামর্শগুলির জন্য ধন্যবাদ। যেমনটি বলা হয়েছে, আমি সি # তে গল্ফ করার ক্ষেত্রে খুব বেশি অভিজ্ঞ নই তাই ভবিষ্যতে আমার বিবেচনার জন্য এটি সমস্ত দুর্দান্ত জিনিস।
কোল ক্যামেরন

আহ, দুঃখিত - আমি এটি ভুলভাবে পড়েছি।
বব

1

সি # 334

string g(string c){string[]b=new string[]{c.Substring(0,5),c.Substring(5, 5),c.Substring(10)};string o="",w="";for(int i=0,j=0;i<3;i++){char[]t=b[i].ToCharArray();Array.Reverse(t);b[i]=new string(t);o="";for(j=0;j<5;j++){o+=Char.IsUpper(b[i][j])?1:0;}int R=Convert.ToInt32(o,2);char U=R>26?(char)(R+22):(char)(R+65);w+=U;}return c+w;}

যদি অনুরোধ করা হয়, আমি আমার কোডটি পাঠযোগ্য এবং আবার পোস্ট করার জন্য ফিরে করব।


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