एक बाइट्स सरणी को बेस 64 में बदलें


10

आपका मिशन एक फ़ंक्शन / प्रोग्राम लिखना है जो बाइट्स की एक सरणी (यानी: 0 से 255 तक पूर्णांकों की एक सरणी) को बेस 64 में कनवर्ट करता है।

अंतर्निहित base64 एन्कोडर का उपयोग करने की अनुमति नहीं है।

आवश्यक बेस 64 कार्यान्वयन RFC 2045 है। ("+", "/" का उपयोग करके, और "=") के साथ अनिवार्य पैडिंग

सबसे छोटा कोड (बाइट्स में) जीतता है!

उदाहरण:

इनपुट (इंट सरणी): [99, 97, 102, 195, 169]

आउटपुट (स्ट्रिंग): Y2Fmw6k=


यह किस प्रकार की प्रतियोगिता है?
सीलन

क्या अंतर्निहित बेस 64 एनकोडर केवल बाइनरी-टू-टेक्स्ट एनकोडर या फ़ंक्शन को पूर्णांक के साथ जोड़ते हैं?
डेनिस

1
स्पष्ट करने के लिए: क्या मैं एक फ़ंक्शन का उपयोग कर सकता हूं 1 2जो तर्क के लिए वापस आता है 66?
डेनिस

1
कर रहे हैं 9 मानकीकृत या 4 गैर मानकीकृत बेस 64 के संस्करणों। =पैडिंग के लिए आपका संदर्भ इसे 4 से नीचे बताता है। आप किसे चाहते हैं? या क्या आप एक गैर-मानक संस्करण चाहते हैं जिसमें अधिकतम पंक्ति लंबाई नहीं है?
पीटर टेलर

मुझे लगता है कि वह RFC 4648 या MIME- प्रकार, RFC 2045 द्वारा उपयोग किए गए संस्करण द्वारा निर्दिष्ट "मानक" में से किसी एक को संदर्भित कर रहा है। ये अलग-अलग हैं, इसलिए स्पष्टीकरण बहुत उपयोगी होगा।
अर्ध-बहिर्मुखी

जवाबों:


4

जावास्क्रिप्ट, 177 187 198 पात्र

function(d){c="";for(a=e=b=0;a<4*d.length/3;f=b>>2*(++a&3)&63,c+=String.fromCharCode(f+71-(f<26?6:f<52?0:f<62?75:f^63?90:87)))a&3^3&&(b=b<<8^d[e++]);for(;a++&3;)c+="=";return c}

\r\nप्रत्येक 76 वें वर्ण के बाद लाइनब्रेक जोड़ने के लिए, कोड में 23 वर्ण जोड़ें:

function(d){c="";for(a=e=b=0;a<4*d.length/3;f=b>>2*(++a&3)&63,c+=String.fromCharCode(f+71-(f<26?6:f<52?0:f<62?75:f^63?90:87))+(75==(a-1)%76?"\r\n":""))a&3^3&&(b=b<<8^d[e++]);for(;a++&3;)c+="=";return c}

डेमो कोड:

var encode = function(d,a,e,b,c,f){c="";for(a=e=b=0;a<4*d.length/3;f=b>>2*(++a&3)&63,c+=String.fromCharCode(f+71-(f<26?6:f<52?0:f<62?75:f^63?90:87))+(75==(a-1)%76?"\r\n":""))a&3^3&&(b=b<<8^d[e++]);for(;a++&3;)c+="=";return c};

//OP test case
console.log(encode([99, 97, 102, 195, 169])); // outputs "Y2Fmw6k=".

//Quote from Hobbes' Leviathan:
console.log(
 encode(
  ("Man is distinguished, not only by his reason, but by this singular passion from " +
   "other animals, which is a lust of the mind, that by a perseverance of delight " +
   "in the continued and indefatigable generation of knowledge, exceeds the short " +
   "vehemence of any carnal pleasure.")
  .split('').map(function(i){return i.charCodeAt(0)})
 )
);


अच्छा समाधान! आप कुछ ईएस 6 सुविधाओं का उपयोग करके और कुछ दोहराव को हटाकर कुछ बाइट्स को शेव कर सकते हैं: टिप्पणियों के साथ संक्षिप्त कोड
क्रेग आयरे

@ क्रेगएयर, रचनात्मक इनपुट के लिए धन्यवाद। ES6 को अंतिम रूप नहीं दिया गया था और यह उस समय उपलब्ध था जब यह चुनौती मूल रूप से पोस्ट की गई थी। जैसा कि codegolf.meta में सुझाया गया है , आप संक्षिप्त किए गए ES6 संस्करण को पोस्ट कर सकते हैं और इसे गैर-प्रतिस्पर्धी के रूप में चिह्नित कर सकते हैं।
टॉमस लैंगकास

कोई चिंता नहीं, मूल पोस्ट की तारीख की दोहरी जांच नहीं करने के लिए मेरी गलती! मैं आपके समाधान का प्रशंसक हूं इसलिए मैं एक और पोस्ट नहीं करने जा रहा हूं, लेकिन लिंक के लिए धन्यवाद। टेम्प्लेट शाब्दिक तर्क जिसने वर्णमाला के दोहराव को हटा दिया, उसे बाइट्स की एक ही संख्या में ES5 में बदला जा सकता है, लेकिन बहुत से हर मायने नहीं रखता है!
क्रेग आयरे

@ क्रेगएयर, फिर से टिप के लिए धन्यवाद, बेस 64 प्रतीकों को और अधिक संपीड़ित करने का एक और तरीका मिला (जिसने इसे और भी पीछे की संगत बना दिया - अब पुराने IE में भी काम करना चाहिए)।
टॉमस लैंगकास

3

32-बिट x86 असेंबली, 59 बाइट्स

बाइट-कोड:

66 B8 0D 0A 66 AB 6A 14 5A 4A 74 F4 AD 4E 45 0F C8 6A 04 59 C1 C0 06 24 3F 3C 3E 72 05 C0
E0 02 2C 0E 2C 04 3C 30 7D 08 04 45 3C 5A 76 02 04 06 AA 4D E0 E0 75 D3 B0 3D F3 AA C3

disassembly:

b64_newline:
    mov     ax, 0a0dh
    stosw
b64encode:
    push    (76 shr 2) + 1
    pop     edx
b64_outer:
    dec     edx
    je      b64_newline
    lodsd
    dec     esi
    inc     ebp
    bswap   eax
    push    4
    pop     ecx
b64_inner:
    rol     eax, 6
    and     al, 3fh
    cmp     al, 3eh
    jb      b64_testchar
    shl     al, 2     ;'+' and '/' differ by only 1 bit
    sub     al, ((3eh shl 2) + 'A' - '+') and 0ffh
b64_testchar:
    sub     al, 4
    cmp     al, '0'
    jnl     b64_store ;l not b because '/' is still < 0 here
    add     al, 'A' + 4
    cmp     al, 'Z'
    jbe     b64_store
    add     al, 'a' - 'Z' - 1
b64_store:
    stosb
    dec     ebp
    loopne  b64_inner
    jne     b64_outer
    mov     al, '='
    rep     stosb
    ret

कॉल b64encode esi को इनपुट बफर की ओर इशारा करते हुए, edi आउटपुट बफर को इंगित करते हुए।

यदि लाइन-रैपिंग का उपयोग नहीं किया जाता है तो इसे और भी छोटा बनाया जा सकता है।


1

पर्ल, 126 बाइट्स

स्टड पढ़ता है, स्टडआउट के लिए आउटपुट

$/=$\;print map{$l=y///c/2%3;[A..Z,a..z,0..9,"+","/"]->[oct"0b".substr$_.0 x4,0,6],$l?"="x(3-$l):""}unpack("B*",<>)=~/.{1,6}/g

ungolfed:

my @x = ('A'..'Z','a'..'z',0..9,'+','/');
my $in = join '', <>;
my $bits = unpack 'B*', $in;
my @six_bit_groups = $bits =~ /.{1,6}/g;
for my $sixbits (@six_bit_groups) {
  next unless defined $sixbits;
  $l=length($sixbits)/2%3;
  my $zero_padded = $sixbits . ( "0" x 4 );
  my $padded_bits = substr( $zero_padded, 0, 6 );
  my $six_bit_int = oct "0b" . $padded_bits;
  print $x[$six_bit_int];
  print "=" x (3 - $l)  if  $l;
}

प्रश्न को RFC 2045 की आवश्यकता के लिए स्पष्ट किया गया है, इसलिए आपको आउटपुट को 76-char विखंडू में विभाजित करने और साथ जुड़ने के लिए थोड़ा सा कोड जोड़ने की आवश्यकता है \r\n
पीटर टेलर

1

पर्ल, 147 बाइट्स

sub b{$f=(3-($#_+1)%3)%3;$_=unpack'B*',pack'C*',@_;@r=map{(A..Z,a..z,0..9,'+','/')[oct"0b$_"]}/.{1,6}/g;$"='';join"\r\n",("@r".'='x$f)=~/.{1,76}/g}

फ़ंक्शन इनपुट के रूप में पूर्णांक की एक सूची लेता है और स्ट्रिंग, बेस 64 एनकोडेड आउटपुट करता है।

उदाहरण:

print b(99, 97, 102, 195, 169)

प्रिंट

Y2Fmw6kA

Ungolfed:

संस्करण जो मध्यवर्ती चरणों की कल्पना करता है:

sub b {
    # input array: @_
    # number of elements: $#_ + 1 ($#_ is zero-based index of last element in 
    $fillbytes = (3 - ($#_ + 1) % 3) % 3;
      # calculate the number for the needed fill bytes
      print "fillbytes:       $fillbytes\n";
    $byte_string = pack 'C*', @_;
      # the numbers are packed as octets to a binary string
      # (binary string not printed)
    $bit_string = unpack 'B*', $byte_string;
      # the binary string is converted to its bit representation, a string wit
      print "bit string:      \"$bit_string\"\n";
    @six_bit_strings = $bit_string =~ /.{1,6}/g;
      # group in blocks of 6 bit
      print "6-bit strings:   [@six_bit_strings]\n";
    @index_positions = map { oct"0b$_" } @six_bit_strings;
      # convert bit string to number
      print "index positions: [@index_positions]\n";
    @alphabet = (A..Z,a..z,0..9,'+','/');
      # the alphabet for base64
    @output_chars = map { $alphabet[$_] } @index_positions;
      # output characters with wrong last characters that entirely derived fro
      print "output chars:    [@output_chars]\n";
    local $" = ''; #"
    $output_string = "@output_chars";
      # array to string without space between elements ($")
      print "output string:   \"$output_string\"\n";
    $result = $output_string .= '=' x $fillbytes;
      # add padding with trailing '=' characters
      print "result:          \"$result\"\n";
    $formatted_result = join "\r\n", $result =~ /.{1,76}/g;
      # maximum line length is 76 and line ends are "\r\n" according to RFC 2045
      print "formatted result:\n$formatted_result\n";
    return $formatted_result;
}

आउटपुट:

fillbytes:       1
bit string:      "0110001101100001011001101100001110101001"
6-bit strings:   [011000 110110 000101 100110 110000 111010 1001]
index positions: [24 54 5 38 48 58 9]
output chars:    [Y 2 F m w 6 J]
output string:   "Y2Fmw6J"
result:          "Y2Fmw6J="
formatted result:
Y2Fmw6J=

टेस्ट:

बेस 64 के लिए विकिपीडिया लेख में उदाहरण में परीक्षण के तार उदाहरण से आते हैं ।

sub b{$f=(3-($#_+1)%3)%3;$_=unpack'B*',pack'C*',@_;@r=map{(A..Z,a..z,0..9,'+','/')[oct"0b$_"]}/.{1,6}/g;$"='';join"\r\n",("@r".'='x$f)=~/.{1,76}/g}

sub test ($) {
   print b(map {ord($_)} $_[0] =~ /./sg), "\n\n";
}

my $str = <<'END_STR';
Man is distinguished, not only by his reason, but by this singular passion from
other animals, which is a lust of the mind, that by a perseverance of delight
in the continued and indefatigable generation of knowledge, exceeds the short
vehemence of any carnal pleasure.
END_STR
chomp $str;

test "\143\141\146\303\251";
test $str;
test "any carnal pleasure.";
test "any carnal pleasure";
test "any carnal pleasur";
test "any carnal pleasu";
test "any carnal pleas";
test "pleasure.";
test "leasure.";
test "easure.";
test "asure.";
test "sure.";

परीक्षण उत्पादन:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
IHNpbmd1bGFyIHBhc3Npb24gZnJvbQpvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodAppbiB0aGUgY29udGlu
dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
ZSBzaG9ydAp2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZSO=

YW55IGNhcm5hbCBwbGVhc3VyZSO=

YW55IGNhcm5hbCBwbGVhc3VyZB==

YW55IGNhcm5hbCBwbGVhc3Vy

YW55IGNhcm5hbCBwbGVhc3F=

YW55IGNhcm5hbCBwbGVhcD==

cGxlYXN1cmUu

bGVhc3VyZSO=

ZWFzdXJlLC==

YXN1cmUu

c3VyZSO=

प्रश्न को RFC 2045 की आवश्यकता के लिए स्पष्ट किया गया है, इसलिए आपको आउटपुट को 76-char विखंडू में विभाजित करने और साथ जुड़ने के लिए थोड़ा सा कोड जोड़ने की आवश्यकता है \r\n
पीटर टेलर

@PeterTaylor: धन्यवाद, मैंने RFC 2045 के उत्तर को अपडेट कर दिया है।
हेइको ओबर्डिएक

ब्रावो इस बहुत ही पूर्ण जवाब के लिए। अनिवार्य लाइन-ब्रेक सहित (ओपी में "आरएफसी 2045" निर्दिष्ट करके) वास्तव में एक त्रुटि थी, आप वास्तव में उस हिस्से को अनदेखा कर सकते हैं। क्षमा करें :)
xem

1

पायथन, 234 वर्ण

def F(s):
 R=range;A=R(65,91)+R(97,123)+R(48,58)+[43,47];n=len(s);s+=[0,0];r='';i=0
 while i<n:
  if i%57<1:r+='\r\n'
  for j in R(4):r+=chr(A[s[i]*65536+s[i+1]*256+s[i+2]>>18-6*j&63])
  i+=3
 k=-n%3
 if k:r=r[:-k]+'='*k
 return r[2:]

प्रश्न को RFC 2045 की आवश्यकता के लिए स्पष्ट किया गया है, इसलिए आपको आउटपुट को 76-char विखंडू में विभाजित करने और साथ जुड़ने के लिए थोड़ा सा कोड जोड़ने की आवश्यकता है \r\n
पीटर टेलर

@PeterTaylor: निश्चित।
कीथ रान्डेल

1

गोल्फस्क्रिप्ट, 80 (77) बाइट्स

~.,~)3%:P[0]*+[4]3*\+256base 64base{'+/''A[a{:0'{,^}/=}/{;}P*'='P*]4>76/"\r
":n*

ऊपर एक पंक्ति में ठीक 76 वर्ण फिट होंगे, अंतिम पंक्ति को छोड़कर। सभी लाइनें CRLF द्वारा समाप्त की जाती हैं।

ध्यान दें कि RFC 2045 एक चर, 76 वर्णों की अधिकतम लंबाई निर्दिष्ट करता है , इसलिए सुंदर आउटपुट की कीमत पर, हम 3 अतिरिक्त बाइट्स बचा सकते हैं।

~.,~)3%:P[0]*+[4]3*\+256base 64base{'+/''A[a{:0'{,^}/=}/{;}P*'='P*]4>{13]n+}/

ऊपर प्रति पंक्ति एक वर्ण मुद्रित होगा, अंतिम पंक्ति को छोड़कर, जिसमें 0, 1 या 2 =वर्ण हो सकते हैं । GolfScript भी एक अंतिम LF को जोड़ देगा, जो RFC 2045 के अनुसार, डिकोडिंग सॉफ़्टवेयर द्वारा अनदेखा किया जाना चाहिए।

उदाहरण

$ echo '[99 97 102 195 169]' | golfscript base64.gs | cat -A
Y2Fmw6k=^M$
$ echo [ {0..142} ] | golfscript base64.gs | cat -A
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4^M$
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx^M$
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY4=^M$
$ echo '[99 97 102 195 169]' | golfscript base64-sneaky.gs | cat -A
Y^M$
2^M$
F^M$
m^M$
w^M$
6^M$
k^M$
=^M$
$

यह काम किस प्रकार करता है

~          # Interpret the input string.
.,~)3%:P   # Calculate the number of bytes missing to yield a multiple of 3 and save in “P”.
[0]*+      # Append that many zero bytes to the input array.
[4]3*\+    # Prepend 3 bytes to the input array to avoid issues with leading zeros.
256base    # Convert the input array into an integer.
64base     # Convert that integer to base 64.
{          # For each digit:
  '+/'     # Push '+/'.
  'A[a{:0' # Push 'A[a{:0'.
  {        # For each byte in 'A[a{:0':
    ,      # Push the array of all bytes up to that byte.
    ^      # Take the symmetric difference with the array below it.
  }/       # Result: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
  =        # Retrieve the character corresponding to the digit.
}/         #
{;}P*'='P* # Replace the last “P” characters with a string containing that many “=” chars.
]          # Collect all bytes on the stack into an array.
4>         # Remove the first four, which correspond to the 3 prepended bytes.
76/        # Collect all bytes on the stack into an array and split into 76-byte chunks.
"\r\n":n*  # Join the chunks with separator CRLF and save CRLF as the new line terminator.

1

पीएचपी , 200 बाइट्स

<?foreach($g=$_GET as$k=>$v)$b[$k/3^0]+=256**(2-$k%3)*$v;for(;$i<62;)$s.=chr($i%26+[65,97,48][$i++/26]);foreach($b as$k=>$v)for($i=4;$i--;$p++)$r.=("$s+/=")[count($g)*4/3<$p?64:($v/64**$i)%64];echo$r;

इसे ऑनलाइन आज़माएं!

आप स्ट्रिंग ("$s+/=")को एक सरणी से बदल सकते हैंarray_merge(range(A,Z),range(a,z),range(0,9),["+","/","="])

केवल तुलना करने के लिए कि कौन सी बाइट काउंट बिल्ट-इन की अनुमति नहीं है

PHP , 45 बाइट्स

<?=base64_encode(join(array_map(chr,$_GET)));

इसे ऑनलाइन आज़माएं!


0

जावास्क्रिप्ट (ईएस 6), 220 बी

f=a=>{for(s=a.map(e=>('0000000'+e.toString(2)).slice(-8)).join(p='');s.length%6;p+='=')s+='00';return s.match(/.{6}/g).map(e=>'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'[parseInt(e,2)]).join('')+p}

यदि आपका ब्राउज़र ES6 का समर्थन नहीं करता है, तो आप इस संस्करण (262B) के साथ प्रयास कर सकते हैं:

function f(a){for(s=a.map(function(e){return ('0000000'+e.toString(2)).slice(-8)}).join(p='');s.length%6;p+='=')s+='00';return s.match(/.{6}/g).map(function(e){return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'[parseInt(e,2)]}).join('')+p}

f([99, 97, 102, 195, 169])लौटता है "Y2Fmw6k="


76-चार विखंडू में इसे विभाजित करने के लिए कोड कहां से जुड़ गया \r\n?
पीटर टेलर

0

अजगर - 310, 333

def e(b):
  l=len;c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";r=p="";d=l(b)%3
  if d>0:d=abs(d-3);p+="="*d;b+=[0]*d
  for i in range(0,l(b)-1,3):
    if l(r)%76==0:r+="\r\n"
    n=(b[i]<<16)+(b[i+1]<<8)+b[i+2];x=(n>>18)&63,(n>>12)&63,(n>>6)&63,n&63;r+=c[x[0]]+c[x[1]]+c[x[2]]+c[x[3]]
  return r[:l(r)-l(p)]+p

कुछ हद तक असंयमी:

def e( b ):
    c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    r = p = ""
    d = len( b ) % 3

    if d > 0:
        d = abs( d - 3 )
        p = "=" * d
        b + = [0] * d

    for i in range( 0, len( b ) - 1, 3 ):
        if len( r ) % 76 == 0:
            r += "\r\n"

        n = ( b[i] << 16 ) + ( b[i + 1] << 8 ) + b[i + 2]
        x = ( n >> 18 ) & 63, ( n >> 12 ) & 63, ( n >> 6) & 63, n & 63
        r += c[x[0]] + c[x[1]] + c[x[2]] + c[x[3]]

    return r[:len( r ) - len( p )] + p

उदाहरण :

पायथन का अंतर्निहित बेस 64 मॉड्यूल केवल इस उदाहरण में उपयोग किया जाता है ताकि यह सुनिश्चित हो सके कि eफ़ंक्शन का सही आउटपुट है, eफ़ंक्शन स्वयं इसका उपयोग नहीं कर रहा है।

from base64 import encodestring as enc

test = [ 99, 97, 102, 195, 169 ]
str  = "".join( chr( x ) for x in test )

control = enc( str ).strip()
output = e( test )

print output            # => Y2Fmw6k=
print control == output # => True

प्रश्न को RFC 2045 की आवश्यकता के लिए स्पष्ट किया गया है, इसलिए आपको आउटपुट को 76-char विखंडू में विभाजित करने और साथ जुड़ने के लिए थोड़ा सा कोड जोड़ने की आवश्यकता है \r\n
पीटर टेलर

@PeterTaylor तय किया गया।
टोनी एलिस

0

जेली , 38 बाइट्स

s3z0Zµḅ⁹b64‘ịØb)FṖ³LN%3¤¡s4z”=Z;€“ƽ‘Ọ

इसे ऑनलाइन आज़माएं!

के रूप में (लगभग) हर दूसरे उत्तर में RFC2045 की आवश्यकता होती है "लाइन खत्म होने के साथ प्रति लाइन अधिकतम 76 चार्ट्स पर" \r\n , मैंने इसका पालन किया।

यह काम किस प्रकार करता है

s3z0Zµḅ⁹b64‘ịØb)FṖ³LN%3¤¡s4z”=Z;€“ƽ‘Ọ    Monadic main link. Input: list of bytes

s3z0Z    Slice into 3-item chunks, transpose with 0 padding, transpose back
         Equivalent to "pad to length 3n, then slice into chunks"

µḅ⁹b64‘ịØb)    Convert each chunk to base64
 ḅ⁹b64         Convert base 256 to integer, then to base 64
      ‘ịØb     Increment (Jelly is 1-based) and index into base64 digits

FṖ³LN%3¤¡s4z”=Z    Add correct "=" padding
F                  Flatten the list of strings to single string
 Ṗ      ¡          Repeat "remove last" n times, where
  ³LN%3¤             n = (- input length) % 3
         s4z”=Z    Pad "=" to length 4n, then slice into 4-item chunks

;€“ƽ‘Ọ    Add "\r\n" line separator
;€         Append to each line:
  “ƽ‘       Codepage-encoded list [13,10]
      Ọ    Apply `chr` to numbers; effectively add "\r\n"

बेस अपघटन का उपयोग यहां किया जा सकता है, लेकिन ṃØbṙ1¤एक साधारण ऑपरेशन के लिए बहुत लंबा है।
user202729

यह ध्यान देने योग्य हो सकता है कि डेनिस को घुमाया-आधार-अपघटन परमाणु बनाने के लिए कहा जाए।
user202729

के लिए विफल है 0,0,0
user202729
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.