রূপান্তর না করে স্ট্রিংয়ের যোগফল


9

আপনি 2 স্ট্রিং ইনপুট নিতে এবং আউটপুট এইসব দুটি স্ট্রিং এর সমষ্টি আছে ছাড়া তাদের int- এ রূপান্তর বা কোনো সাংখ্যিক ডাটা টাইপ ব্যবহার করে।

প্রাক্তন।

string one = "123";
string two = "456";    
string sum = "579";

ধরুন স্ট্রিংগুলি 10 সংখ্যার বেশি হবে না।

এটি কোড গল্ফ এবং অক্ষরের জয়ের সংক্ষিপ্ত উত্তর। সি # তে উত্তরের একটি সম্পাদনা আমাকে হাসিয়ে দেবে :)

সম্পাদনা: ইন্টে রূপান্তরকে এই প্রকৃতির যে কোনও কিছু হিসাবে সংজ্ঞায়িত করা যেতে পারে

Int.TryParse, (int), Convert.ToIntইত্যাদি


2
স্ট্রিংগুলিকে সংখ্যায় রূপান্তর না করা আমরা কি আমাদের কোডটিতে অন্য কোথাও নম্বর ব্যবহার করতে পারি?
অপটিমাইজার

5
তাদের ইনট হিসাবে রূপান্তর হিসাবে সংজ্ঞা হিসাবে ব্যাখ্যা করা হয়, যেমন তাদের অন্তর্নিহিত হিসাবে ব্যাখ্যা?
কমপাস

4
আমি এখনও সম্পূর্ণরূপে পরিষ্কার নই যে আমরা অক্ষর কোডগুলি দিয়ে কতটা করতে পারি? আমরা কি অক্ষর কোডগুলি বিয়োগ করতে পারি? আমরা কি পৃথক অঙ্কগুলি তাদের অক্ষর কোডগুলিতে রূপান্তর করতে পারি?
মার্টিন এন্ডার

5
@ user15681218 অবশ্যই তা পারেন। তবে সঠিকভাবে আমরা কী করতে পারি এবং কী করতে পারি না তা আপনার বিধি থেকে সম্পূর্ণ পরিষ্কার নয়।
মার্টিন ইন্ডার

2
আমি মনে করি না যে এই প্রশ্নটি সংযোজন ছাড়াই অ্যাডের (বা 4 বেসিক পাটিগণিত অপারেটরগুলির মধ্যে একটি) এর এক ধাপ । আসলে, যোগ প্রশ্ন ছাড়াই সংখ্যার প্রশ্ন ছাড়াই এই প্রশ্নটি এই গুণটির সাথে আরও বেশি মিল । গুণগত প্রশ্নটি প্রথমে সংযোজন ছাড়াই অ্যাডের একটি ধূপ হিসাবে বিবেচিত হত।
অপ্টিমাইজার

উত্তর:


16

80836 বিধানসভা ( 57 53 বাইট)

53 55 89 E5 8B 4D 0C 8B 55 10 B0 0A 30 DB 88 CF 00 C1 00 C2 49 4A 8A 01 8A 22 00 E0 00 D8 2C 30 30 DB 3C 39 7E 04 B3 01 2C 0A 88 01 88 22 38 CF 75 E2 5D 5B C3

এটি সংখ্যায় অঙ্ক করে, ডান থেকে বামে, ascii ডিজিটকে '0'-'9'পূর্ণসংখ্যায় রূপান্তর না করে 0-9এবং প্রয়োজনীয় হিসাবে বহন করে। বাইটকোড একটি ফাংশনের কোড, যা সিতে ডাকা হতে পারে (নীচে দেখুন)।

উপরের বাইটকোডটি নিম্নের সমাবেশ থেকে হাতে লেখা হয়েছিল (এনএএসএম-স্টাইল, মন্তব্য করেছে):

; save ebx, ebp
push ebx        ; 53
push ebp        ; 55
; copy esp
mov ebp, esp    ; 8B EC
; load arguments
mov ecx, [ebp+0x0C] ; 8B 4D 0C
mov edx, [ebp+0x10] ; 8B 55 10
; initialize stuff
mov al, 10      ; B0 0A
xor bl, bl      ; 30 DB
mov bh, cl      ; 88 CF
; send edx, ecx to end of string
add cl, al     ; 00 C1
add dl, al     ; 00 C2

; decrement everything
dec ecx         ; 49
dec edx         ; 4A

; get rightmost unprocessed digit of each number
mov al, [ecx]   ; 8A 01
mov ah, [edx]   ; 8A 22

; add two ascii digits
add al, ah      ; 00 E0
; add carry if needed
add al, bl      ; 00 D8
; subtract 0x30 ('0') to get the resulting ascii digit
sub al, 0x30    ; 2C 30

; set bl to 0
xor bl, bl      ; 30 DB

; if greater than '9': must carry over to next place
cmp al, 0x39    ; 3C 39
jle $+6         ; 7E 04
; set bl to 1 if carrying over
mov bl, 1       ; B3 01
; subtract 10 from ascii digit if carrying over
sub al, 0x0A    ; 2C 0A

mov [ecx], al   ; 88 01
mov [edx], ah   ; 88 22


; check if loop has ended
cmp bh, cl      ; 38 CF
jne $-28        ; 75 E2

; restore ebx, ebp
pop ebp         ; 5D
pop ebx         ; 5B
; return
ret             ; C3

এটি সি (জিসিসি, লিনাক্স, ইন্টেল প্রসেসর) এ চেষ্টা করতে:

#include <stdio.h>
#include <string.h>
#include <sys/mman.h>

int main(){
    // bytecode from earlier
    char code[] = {
        0x53, 0x55, 0x8B, 0xEC, 0x8B, 0x4D, 0x0C, 0x8B, 
        0x55, 0x10, 0x31, 0xC0, 0xB0, 0x09, 0x30, 0xDB, 
        0x01, 0xC1, 0x01, 0xC2, 0x40, 0x50, 0x8A, 0x01,
        0x8A, 0x22, 0x00, 0xE0, 0x00, 0xD8, 0x2C, 0x30,
        0x30, 0xDB, 0x3C, 0x39, 0x7E, 0x04, 0xB3, 0x01,
        0x2C, 0x0A, 0x88, 0x01, 0x88, 0x22, 0x58, 0x48,
        0x49, 0x4A, 0x85, 0xC0, 0x75, 0xDF, 0x5D, 0x5B,
        0xC3,
    };
    // allocate executable memory to a function pointer called 'add'
    void __attribute__( (__cdecl__) ) (*add)(char*,char*) = mmap(0,sizeof code,PROT_WRITE|PROT_EXEC,MAP_ANON|MAP_PRIVATE,-1,0);
    memcpy(add, code, sizeof code);

    // test inputs
    char number1[] = "0878295272", number2[] = "8184206821";

    puts(number1);
    puts(number2);

    // call the bytecode as a c function
    add(number1, number2);

    // output is in the first argument
    puts(number1);

    // release allocated memory
    munmap(add, sizeof code);

    return 0;
}

14

রুবি, 109 71

গোলগাল। আপনি যদি মোহাম্মদকে পাহাড়ে আনতে না পারেন ...।

j=$*
r=n=d=0
(d+=x=j.count{|v|n.to_s==v}
r+=x*n
n+=1)until d>1
p r.to_s

অ্যালগরিদম:

  1. ইনপুট 1 এবং ইনপুট 2 এর জন্য কোনও ইন্টের স্ট্রিং প্রতিনিধিত্বের তুলনা করুন।
  2. প্রতি ম্যাচের ফলাফলের সাথে সেই অন্তর্ভুক্ত করুন।
  3. যতক্ষণ না আপনি এটি দুটিবার করেছেন ততক্ষণ বৃদ্ধি এবং পুনরাবৃত্তি করুন।
  4. নিজের উপর বমি করুন

পরিবর্তণের

অ্যারে হিসাবে 71 টি খাটো।

85 অপসারণ পদ্ধতি ঘোষণা এবং একত্রীকরণ কল n.to_s

92 কিছু টিপস প্রয়োগ করেছে

101 একটি চর সংরক্ষণ করুন

102 ইনক্রিমেন্টিংয়ের জন্য এক্স ব্যবহার করুন

109 প্রাথমিক প্রতিশ্রুতি


2
@ ডিজিটাল ট্রামুমা ওহ, আমি মনে করি এটি একটি ভয়াবহ উত্তর, তবে এটি অবশ্যই মাপদণ্ড পূরণ করে।
চার্লস

1
@ ডিজিটাল ট্রামুমা আমার এমনকি চিজিয়ার উত্তরগুলি ব্যবহার করে succবা prev.... তবে গল্ফ করা এমনকি মজাদার নয়।
চার্লস

1
"... এগুলিকে ইনটে রূপান্তর করা বা কোনও সংখ্যক ডেটা টাইপ ব্যবহার না করেই ।" আপনার উত্তরে, r, n, d এবং x সবগুলি সংখ্যাসূচক। এছাড়াও, প্রতিটি পূর্ণসংখ্যা পরীক্ষা করে দেখতে পারা যায় যে এর স্ট্রিং প্রতিনিধিত্ব প্রবেশ করা স্ট্রিংয়ের সাথে মেলে কিনা মূলত ইন-তে রূপান্তরিত করার জন্য কেবল ধীর ব্রুট-ফোর্স উপায়।
ট্রে থমাস


1
@ ট্রে থমাস: আমি মনে করি যে কোনও উপায়ে পরিমাণ নির্ধারণ না করে দুটি পরিমাণকে একত্রিত করা অসম্ভব। এই প্রশ্নের উত্তর দেওয়ার জন্য যে কোনও কোডে i + j গণনা করতে হবে এবং জানতে হবে কখন এটি বন্ধ করার সঠিক উত্তর রয়েছে, সুতরাং কোনও সঠিক উত্তরটি কোনও উপায়ে ছদ্মবেশে রূপান্তরিত করার জন্য একটি ধীরে ধীরে জোর-বলের উপায় way
টেসেল্ল্যাটিংহেকলার 21

10

সেড, 359 বাইট (অভিনব বিন্যাস ছাড়াই)

আমি এখনও নিশ্চিত নই যে এটি সংযোজন ছাড়াই অ্যাডের (বা 4 বেসিক পাটিগণিত অপারেটরগুলির মধ্যে একটি) কিনা । ইতিমধ্যে, আমাকে এই প্রশ্নের জন্য আমার উত্তরটি ক্রস করতে দিন। এটি কোনও গল্ফিং জিততে পারে না, তবে এটির একটি সূচনা এবং আমি মনে করি সহজেই অনুমানটি পূরণ করে:

                       s/([^ ]+) ([^ ]+)/\1:0::\2:/
                       :d /^([^:]+):\1::([^:]+):/tx
                       s/(:[^:]*)9([_:])/\1_\2/g;td
s/(:[^:]*)8(_*:)/\19\2/g;s/(:[^:]*)7(_*:)/\18\2/g;s/(:[^:]*)6(_*:)/\17\2/g
s/(:[^:]*)5(_*:)/\16\2/g;s/(:[^:]*)4(_*:)/\15\2/g;s/(:[^:]*)3(_*:)/\14\2/g
s/(:[^:]*)2(_*:)/\13\2/g;s/(:[^:]*)1(_*:)/\12\2/g;s/(:[^:]*)0(_*:)/\11\2/g
                       s/:(_+:)/:1\1/g; y/_/0/; # #
                       bd;  :x  s/.*::([^:]+):/\1/;
                       # # # # # # #  # # # # # # #

"X y" আকারে এসটিডিএন থেকে ইনপুট নেওয়া হয়। এটি প্রথমে "x: 0 :: y:" এ রূপান্তরিত হয়েছে। তারপরে আমরা "x: x: :( x + y):" না পাওয়া পর্যন্ত ":" অক্ষরের পরে আসা সমস্ত সংখ্যা বৃদ্ধি করি। তারপরে আমরা শেষ পর্যন্ত (x + y) ফিরে আসি।

আউটপুট

$ printf "%s\n" "0 0" "0 1" "1 0" "9 999" "999 9" "12345 67890" "123 1000000000000000000000"  | sed -rf add.sed
0
1
1
1008
1008
80235
1000000000000000000123
$

নোট করুন যে এটি কেবল প্রাকৃতিক সংখ্যার জন্যই কাজ করে। তবে (তত্ত্বের ক্ষেত্রে কমপক্ষে) এটি নির্বিচারে বড় পূর্ণসংখ্যার জন্য কাজ করে। যেহেতু আমরা y তে এক্স ইনক্রিমেন্ট অপারেশন করছি, অর্ডার করা গতিতে বড় পার্থক্য আনতে পারে: x <y এক্স x> y এর চেয়ে দ্রুত হবে।


নিশ্চিত নয়, তবে আপনি কীভাবে জানবেন কখন ইনক্রিমেন্টিং বন্ধ করবেন? যেহেতু আপনি এক্স হিসাবে কোনও int হিসাবে পড়তে পারবেন না
অপটিমাইজার

@ অপ্টিমাইজার ইনগ্রিমেন্ট অ্যালগরিদম এর ভিত্তিতে তৈরি হয়েছে: কোডগল্ফ.স্ট্যাকেক্সেঞ্জার / প্রশ্নস / ৩৮০৩৩/২ যা নিখুঁতভাবে রেজেক্সের বিকল্প এবং কোনও পাটিগণিত নয়। আমরা একটি ট্রিপল {x, 0, y} দিয়ে শুরু করি, তারপরে ইনক্রিমেন্ট এলিমেন্ট 2 এবং 3 উপাদান 1 এবং 2 সমান না হওয়া অবধি (আবার রেজেক্স-পরীক্ষিত)। এই সময়ে তৃতীয় উপাদানটি প্রয়োজনীয় যোগফল হবে।
ডিজিটাল ট্রমা

2
উহু! সুতরাং শুধু regex ব্যবহার করে yরূপান্তরিত হয় y+1? এবং কোন প্রকৃত সংযোজন? নিস!
অপটিমাইজার

9

রুবি - 485 432 265

আপনি প্রশ্নটিতে যা খুঁজছিলেন তার চেতনায় এটি আরও বেশি মনে হয়।

এটি মূলত সমস্যাটি সমাধান করে যে কীভাবে একজন মানুষ কাগজে থাকবে - সমস্ত একক সংখ্যার সংযোজন ফলাফলগুলি "মুখস্ত" করে, প্রতিটি কলাম যুক্ত করে, এবং প্রয়োজনে কীভাবে "সেটিকে বহন করবে" তা বোঝার মাধ্যমে।

এটি একটি "সাংখ্যিক ডেটা টাইপ" (ভেরিয়েবল আই )ও ব্যবহার করছে যা প্রশ্ন দ্বারা নিষিদ্ধ, তবে এটি কেবল স্ট্রিং ইন্ডেক্সিংয়ের জন্য। আমি এটি মুছে ফেলার চেষ্টা করব এবং আমার উত্তরটি সম্পাদনা করব।

def s p
(y=(?0..?9).to_a).product(y).map{|x|/#{x.join}/}.zip((?0..'18').to_a.each_cons(10).to_a.flatten).each{|k,v|return v if k=~p.sort.join}
end
a,b=$*.map{|n|n.rjust(10,?0).reverse}
r=?0
c=''
(0..9).each{|i|d=s [a[i],b[i]]
c=s([d[-1],r])+c
r=d[-2]||?0}
puts r+c

কিছুটা নাড়িত:

def s p
  y = (?0..?9).to_a
  y.product(y).map{ |x|
    /#{x.join}/
  }.zip(
    (?0..'18').to_a.each_cons(10).to_a.flatten
  ).each{ |k,v|
    return v if k =~ p.sort.join
  }
end

a,b=$*.map{ |n| n.rjust(10,?0).reverse }

r = ?0
c = ''

(0..9).each { |i|
  d = s [ a[i], b[i] ]
  c = s([ d[-1], r ]) + c
  r = d[-2] || '0'
}

puts r+c

সম্পাদনা: "হার্ডডকোডিংয়ের পরিবর্তে" মুখস্থ "ম্যাপিং টেবিল তৈরি করতে মন্তব্যগুলি থেকে কিছু ধারণা ব্যবহার করা হয়েছে।


1
আপনি সম্ভবত আপনার "সংযোজন মানচিত্র" কোনওভাবে গণনা করতে পারেন ... সম্ভবত[?1..?9].zip([?1..?9]).map{|x,y| Regex.new(x+y)}.map{/*something based on the order of results*/}
চার্লস

productএর চেয়ে ভালzip
চার্লস

1
/#{x+y}/তুলনায় খাটো Regexp.new(x+y)। ;)
জর্দান

1
i=-1;(s=(?0..?9).to_a).product(s).map{|x,y|i+=1;/#{x+y}/=>(?0..'18').each_cons(10).to_a[i/10][i%10]}আপনাকে আপনার রেজেক্স অ্যারে দেয়।
চার্লস

আহ ... তবে এটি একটি সংখ্যাসূচক ( i) ব্যবহার করে ... এর বাইরে আরও একটি উপায় থাকতে হবে ... সম্ভবত কেবল each_cons(10)একটি গণক হিসাবে ব্যবহার করতে হবে এবং nextসেটের মধ্য দিয়ে?
চার্লস

4

সিজেম, 95 92 80 72 70 44 টি অক্ষর

"Ǻᨌ⹝瀶噄頼୅籌◳ॶ騥箄덮庸匕帯標ឭ⹞➻䗧㩱砡࣍㤬醻孹꽬"2G#b127b:c~

যা অনুবাদ

lW%'0A*+S/zW%{{A,__m*{_1b\saa*~}%\{_saa*~}%+\aa/,(s_,({(@+\}*}%_Wf<s}g

এটি অবশ্যই অনেক গল্ফ করা যেতে পারে। আমার দৃষ্টিভঙ্গি সর্বোত্তম কিনা তা আমি সত্যিই জানি না।

আপডেট - বাইটগুলি সংরক্ষণের জন্য যোগফলের যোগফলকে ইনলাইন করুন। এর কারণে, প্রোগ্রামটি এখন 10 গুণ ধীর গতিতে চলেছে তবে এখনও কোনও ধরণের ইনপুট দেওয়ার জন্য ধ্রুবক সময়।

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

স্ট্রিং হিসাবে STDIN থেকে দুটি সংখ্যাযুক্ত লাইনটি পড়ে এবং অক্ষরের অ্যারে হিসাবে আউটপুটগুলি যা নিজেই একটি স্ট্রিং Read

উদাহরণ স্বরূপ:

123 4567

আউটপুট পূর্ববর্তী থাকে 0। যদি এটি কোনও সমস্যা হয় তবে আমাকে জানান।


4

সি # - 128 108 104

উন্নতির পরামর্শ দেওয়ার জন্য কমপাস, বিম্যাক এবং শনকে ধন্যবাদ।

কোড গল্ফে প্রথমে চেষ্টা করুন, এবং সি # ব্যবহার করা এখানে একটি প্রতিবন্ধক বলে মনে হচ্ছে ...

ব্যবহার করে .Compute()আপনি স্ট্রিংয়ের মানগুলি ব্যবহার করতে পারেন এবং তাদের সরাসরি যোগ করতে পারেন। বোনাস হিসাবে এটি অন্যান্য অপারেটরদের জন্য কেবল "+" বাদ দিয়ে কাজ করে।

Golfed:

static void t(string a,string b){System.Console.Write(new System.Data.DataTable().Compute(a+"+"+b,""));}

Ungolfed:

static void t(string a, string b)
{
    System.Console.Write(new System.Data.DataTable().Compute(a+"+"+b,""));
}

কলিং t("123","456");আপনার 579 পেয়ে যায়।


7
ভাল চেষ্টা করুন, এবং পিপিসিগুলিতে স্বাগতম। ইন কোড-গলফ , আমরা সব অপ্রয়োজনীয় সাদা স্থান মুছে ফেলুন এবং বলেন কয় বাইট আমরা ব্যবহৃত।

2
আপনি যদি মনে করেন যে সি # হ'ল প্রতিবন্ধকতা, আপনি জাভা দিয়ে ঝাঁকুনি না দেওয়া পর্যন্ত অপেক্ষা করুন ...
রোডলফো ডায়াস

1
আপনি একটি কম্পিউটার "+" + বি সরানো এবং ঘোষণা অগ্রাহ্য করে লাইনে সংরক্ষণ করতে পারেন।
কম্পাস

1
নেমস্পেসগুলি 'ব্যবহার না করে' এর পরিবর্তে আপনি আরও বাঁচাতে পারবেনSystem.Console.WriteLine(new System.Data.DataTable()...
বিএমাক

1
কিছুই বলে না আউটপুটটি নতুন লাইনের সাথে শেষ হওয়া দরকার, Console.Write4 বাইট সংরক্ষণের জন্য বিবেচনা করুন
SLuck49

3

জিএনইউ সেড, 266 বাইট

ডিজিটালট্রামার সমাধানের চেয়ে আলাদা পদ্ধতির ব্যবহার করে। এর প্রভাব হিসাবে এটি ও (এম + এন) ব্যবহার করে আরও দরিদ্র করে । উভয় অপারেন্ডকে অনাড়ি, কনটেনেটেট, ডেসিমেলে ফিরে রূপান্তর করুন (অবশ্যই রেজেক্স ব্যবহার করে — সেডের একটি পূর্ণসংখ্যার ধারণা নেই)।

একটি বোনাস হিসাবে, এই প্রোগ্রামটি স্টিডিনে দেওয়া সমস্ত প্রাকৃতিক পূর্ণসংখ্যার সমষ্টি করে (প্রথম লাইনে), যার অর্থ আপনি এটিকে কোনও কিছুই, একটি নম্বর বা দশ নম্বর খাওয়াতে পারবেন না এবং এটি নির্বিশেষে সঠিক কাজটি করবে।

এই কোডের পিছনে ধারণাটি আমার পুরানো পিপিসি সেড সাবমিশন দ্বারা অস্পষ্টভাবে অনুপ্রাণিত, যদিও এটি কোন প্রশ্নের উত্তর কিনা তা আমার মনে নেই।

ডিজিটালট্রামা থেকে অন্য ধারণা ধার করার জন্য এটি আপনার "সুবিধার জন্য" প্রিন্টেড। : ডি

                s/9/x8/g;
                s/8/x7/g;
                s/7/x6/g;
                s/6/x5/g;
                s/5/x4/g;
                s/4/x3/g;
  s/3/x2/g;s/2/x1/g;s/1/x0/g;s/0\b//g;;
  :l;s/x0/0xxxxxxxxxx/;/x0/bl;s/[^x]//g
  s/^$/0/;:m;s/x{10}/!/g;s/!\b/&0/;;;;;
  s/0x/1/;s/1x/2/;s/2x/3/;s/3x/4/;;;;;;
  s/4x/5/;s/5x/6/;s/6x/7/;s/7x/8/;;;;;;
                s/8x/9/;;
                s/!/x/g;;
                /x{10}/bm
                /x/!q;;;;
                s/^/0/;bm
                #sum.sed#

(266-বাইট সংস্করণটি পেতে, অগ্রণীত সেড ব্যবহার করে অগ্রণী হোয়াইটস্পেস এবং চূড়ান্ত মন্তব্যটি অনুসরণ করে সেমিকোলনগুলি সরিয়ে ফেলুন))

ডিজিটালট্রামা থেকে কিছু পরীক্ষা নেওয়া:

% printf "%s\n" "0 0" "0 1" "1 0" "9 999" "999 9" "12345 6789" "123 100" | while read l; do sed -rf /tmp/sum.sed <<<"$l"; done 
0
1
1
1008
1008
19134
223

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


2

জাভা 6 (181 টি অক্ষর)

এর সমস্ত গৌরবতে সি # , জাভা হিসাবে পরিচিত প্রতিবন্ধীদের দ্বারা অতিক্রম করা উচিত নয় । এত বয়লারপ্লেট! ব্যবহার একটি আর্গুমেন্ট দ্বারা পৃথক যুক্তিগুলি সরবরাহ করে123 456

import javax.script.*;class T {public static void main(String[] a) throws Exception {System.out.print(new ScriptEngineManager().getEngineByName("JavaScript").eval(a[0]+"+"+a[1]));}}

Ungolfed:

import javax.script.*;

class T {
    public static void main(String[] a) throws Exception {
        System.out.print(new ScriptEngineManager()
                .getEngineByName("JavaScript").eval(a[0] + "+" + a[1]));
    }
}

জাভাস্ক্রিপ্ট ইঞ্জিনটি উপলভ্য ব্যবহার করে javax, আমরা আমাদের জন্য অন্য একটি ভাষা কাজ করতে পারি এবং প্রযুক্তিগতভাবে স্থানীয় ভাষার কোনও সংখ্যক প্রকার ব্যবহার না করার বা রূপান্তর করার নিয়মগুলি অনুসরণ করতে পারি।

ব্যবহারের জন্য ন্যায়সঙ্গত eval

আমরা জাভাস্ক্রিপ্টের জন্য মানগুলিকে ইভিতে রূপান্তর করতে পারি না। আমরা একটি স্ট্রিং তৈরি করেছি "123+456"যা কোনও সংখ্যা নয়। জেএস ইঞ্জিন সূত্রটি হজম করে এবং স্ট্রিংকে সংখ্যা আক্ষরিক হিসাবে মূল্যায়ন করে, যা সংখ্যাগত ডেটা ধরণের নয়। জাভা চিজি যুক্তি! একপাশে হিসাবে, এটি গণিতেও কাজ করে double


আপনি কেবল dc -e"$1 $2+p" টেকনিক্যালি
TessellatingHeckler

2

এপিএল (61)

আমি মনে করি এটি নিয়মের মধ্যে পড়ে।

{⎕D[1+{∨/T←9<Z←0,⍵:∇T↓⍨~×⊃T←(1⌽T)+Z-10×T⋄⍵}+⌿⌽↑⌽¨¯1+⎕D∘⍳¨⍺⍵]}

এটি এমন একটি ফাংশন যা দুটি স্ট্রিং আর্গুমেন্ট নেয় এবং একটি স্ট্রিং প্রদান করে:

      '123'{⎕D[1+{∨/T←9<Z←0,⍵:∇T↓⍨~×⊃T←(1⌽T)+Z-10×T⋄⍵}+⌿⌽↑⌽¨¯1+⎕D∘⍳¨⍺⍵]}'456'
579
      ⍝ show dimensions (if it was a number, this would give the empty list)
      ⍴'123'{⎕D[1+{∨/T←9<Z←0,⍵:∇T↓⍨~×⊃T←(1⌽T)+Z-10×T⋄⍵}+⌿⌽↑⌽¨¯1+⎕D∘⍳¨⍺⍵]}'456'
3

এটি যুক্তিসঙ্গতভাবে দ্রুত, এটি 9তাত্ক্ষণিকভাবে 999999 গুলি দ্বারা গঠিত সংখ্যা যুক্ত করে ।

এটি প্রতিটি অক্ষরের সূচকটি খুঁজে পেয়েছে ⎕D(যা '0123456789' স্ট্রিং), তারপরে প্রতিটি সূচকে আলাদাভাবে গ্রেড স্কুল সংযোজন করে, প্রয়োজন অনুযায়ী বহন করে, তারপরে ফলাফলগুলি অঙ্ক করে ⎕D। (আমি মনে করি ⎕Dচেহারাটি নিয়মের মধ্যে পড়ে, এটি মূলত স্রেফ করছে 'x'-48)।

ব্যাখ্যা:

  • ⎕D∘⍳¨⍺⍵: ⎕Dউভয় স্ট্রিংয়ের প্রতিটি চরিত্রের জন্য সূচকগুলি সন্ধান করুন ।
  • ¯1+: 1প্রতিটি থেকে বিয়োগ করুন , কারণ অ্যারেগুলি ডিফল্টরূপে 1-ভিত্তিক।
  • ⌽↑⌽¨: উভয়কে বিপরীত করুন, একটি ম্যাট্রিক্সে পরিণত করুন (শূন্য সহ খালি স্কোয়ারগুলি পূরণ করুন), তারপরে ম্যাট্রিক্সটি বিপরীত করুন।
  • +⌿: ম্যাট্রিক্সের কলামগুলি যোগ করুন
  • {... }: বহন:
    • ∨/T←9<Z←0,⍵: 0তালিকার সামনে একটি অতিরিক্ত যুক্ত করুন । কোন 'অঙ্কগুলি' 9 এর চেয়ে বেশি এবং এটি সঞ্চয় করে রাখুন T। যদি কোনও অঙ্ক 10 এর চেয়ে বেশি হয়:
      • Z-10×T: 1010 টিরও বেশি অবস্থিত প্রতিটি অবস্থান থেকে বিয়োগ করুন ,
      • T←(1⌽T)+: অ্যাড 1প্রতিটি পদের 10 বেশী ছিল, এবং মধ্যে দোকান থেকে পরবর্তী প্রতিটি অবস্থানে T
      • T↓⍨~×⊃T: যদি Tশূন্য দিয়ে শুরু হয়, এটি সরিয়ে দিন,
      • : ফলাফল বহন ফাংশন প্রয়োগ করুন।
    • ⋄⍵: অন্যথায়, মানটি অপরিবর্তিত রেখে দিন
  • 1+: প্রতিটি পজিশনে একটি যোগ করুন (কারণ অ্যারেটি 1-ইনডেক্সড)
  • ⎕D[... ]: সূচক হিসাবে ফলাফলটি ব্যবহার করুন ⎕D

2

পার্ল - 136 119 115 বাইট

আমি পার্ল শিখছি, এটিকে ভাল অনুশীলনের মতো মনে হয়েছিল। টিপস প্রশংসা করা হয়!

চিটচিটে উত্তর, উপায়টি থেকে বেরিয়ে আসার জন্য:

print$ARGV[0]+$ARGV[1]; #Adding strings

আসল উত্তর:

($x,$y)=@ARGV;while($x.$y.$s){$s-=48-ord$&if$x=~s/.$//;$s-=48-ord$&if$y=~s/.$//;$r=chr($s%10+48).$r;$s=$s>9;}print$r;

uncompressed:

($x,$y)=@ARGV;
while($x.$y.$s){
$s-=48-ord$&if$x=~s/.$//;
$s-=48-ord$&if$y=~s/.$//;
$r=chr($s%10+48).$r;
$s=$s>9;
}
print$r;

2
খুশী হলাম। আপনার সংখ্যাগুলি কিছুটা কেটে ফেলার জন্য আপনি এই টিপসগুলি তদন্ত করতে পারেন । এক নজরে, আপনার প্রথম লাইনটি প্রতিস্থাপন করা ($x,$y)=@ARGVএবং sayপরিবর্তে ব্যবহার করা printকয়েকটি অক্ষর শেভ করবে।
চিহ্নিত করুন

ধন্যবাদ! আমি এটি করেছি এবং কিছু পেরেনগুলি বের করেছি (আমি পার্কের বিরামচিহ্নগুলিতে পছন্দ করি)। আমি যদিও কাজ করতে বলতে পারি না।
বিএমাক

আহ। sayপার্ল 6 জিনিস (বা আপনি এই নির্দেশাবলী সহ পার্ল 5 এ এটি ব্যবহার করতে পারেন তবে এটি খুব দীর্ঘ হবে) long পরিবর্তে say, warnএকটি চরিত্র শেভ করতে ব্যবহার করুন । এটি STDOUT এর পরিবর্তে STDERR এ আউটপুট দেবে, তবে এটি এই নিয়মের বিপরীতে নয়। :-)
চিহ্নিত করুন

0

জাভা 7, স্কোর = 252

যোগ করার জন্য কোনও পূর্ণসংখ্যার, লম্বা, বাইটস, শর্টস, ডাবলস, ফ্লোটস বা লাইব্রেরি ফাংশনগুলিতে ব্যবহার করা হয় না। একটি শ্রেণীর শরীরে জড়ান এবং সাথে কল করুন t(String1,String2)। স্ট্রিংগুলি 0 এর সাথে প্যাড করুন যাতে তাদের দৈর্ঘ্য সমান হয়।

t("123","234")আয় "0357"

Golfed:

char c,d,e,f,g,k;String t(String a,String b){g++;char[]h=a.toCharArray(),i=b.toCharArray(),j=new char[h.length + 1];for(d=(char)h.length;d>f;)j[--d+1]=(c=(e=(char)(h[d]+i[d]-'0'+c))>'9'?g:f)==g?(char)(e-'\n'):e;j[0]=(char)('0'+c);return new String(j);}

গল্ফযুক্ত শ্রেণি সহ প্রসারিত:

public class T{

    public static void main(String[] args){
        System.out.println(new T().t(args[0],args[1]));
    }

    char c,d,e,f,g,k;
    String t(String a,String b){
        g++;
        char[]h=a.toCharArray(),i=b.toCharArray(),j=new char[h.length + 1];
        for(d=(char)h.length;d>f;)
            j[--d+1]=(c=(e=(char)(h[d]+i[d]-'0'+c))>'9'?g:f)==g?(char)(e-'\n'):e;
        j[0]=(char)('0'+c);
        return new String(j);
    }
}

আংশিকভাবে গল্ফড প্রসারিত:

public class TrickSum{

    public static void main(String[] args){
        System.out.println(new TrickSum().trickSum(args[0], args[1]));
    }

    char carry, i, aSum,nullChar,oneChar;
    public String trickSum(String a, String b){
        oneChar++;
        char[] number1 = toCharArray(a), number2 = toCharArray(b), sum = new char[number1.length + 1];
        for (i = (char) number1.length; i > nullChar;)
            sum[--i + 1] = (carry = (aSum = (char) (number1[i] + number2[i] - '0' + carry)) > '9' ? oneChar : nullChar) == oneChar ? (char) (aSum - '\n') : aSum;
        sum[0] = (char)('0' + carry);
        return new String(sum);
    }

    char[] toCharArray(String string){
        return string.toCharArray();
    }
}

100% প্রসারিত:

public class TrickSum{

    public static void main(String[] args){
        System.out.println(trickSum(args[0], args[1]));
    }

    public static String trickSum(String a, String b){
        char[] number1 = a.toCharArray();
        char[] number2 = b.toCharArray();
        char[] sum = new char[number1.length + 1];
        char carry = '\u0000';
        for (char i = (char)(number1.length - 1); i != '\uFFFF'; i--){
            char aSum = (char) (number1[i] + number2[i] - '0' + carry);
            carry = aSum > '9' ? '\u0001' : '\u0000';
            aSum = (carry == '\u0001') ? (char) (aSum - '\n') : aSum;
            sum[i + 1] = aSum;
        }
        sum[0] = (char)('0' + carry);
        return new String(sum);
    }
}

1
প্রযুক্তিগতভাবে, জাভা charএকটি সংখ্যার ডেটা টাইপ ._।
কমপাস

@ কমপাসটি অভ্যন্তরীণভাবে এটি। আমি যদি চরকে \u0030স্ট্রিংয়ে রূপান্তর করি তবে আমি তা পাই "0"না "48"
TheNumberOne

0

জাভা - 257 অক্ষর

যেহেতু সবাই জাভা জানে গল্ফিংয়ের জন্য জাভা এর চেয়ে ভাল ভাষা আর নেই

    class A{public static void main(String[]s){char[]a=s[0].toCharArray();char[]b=s[1].toCharArray();int c=a.length;int d=b.length;int e=0;String f="";for(int i=0;i<Math.max(c,d);i++){f=f+(((i<c?a[i]-48:0)+(i<d?b[i]-48:0)+e)%10);e/=10;}System.out.println(f);}}

এটি নিরবচ্ছিন্ন সমাধান

public static void main(String[] args) {
        char[] aa = args[0].toCharArray();
        char[] bb = args[1].toCharArray();
        int aal = aa.length;
        int bbl = bb.length;

        int reminder = 0;
        String result ="";
        for(int i=0;i<Math.max(aal,bbl);i++){
            result=result+(((i<aal?aa[i]-48:0)+(i<bbl?bb[i]-48:0)+reminder)%10);
            reminder/=10;
        }
        System.out.println(result);
    }

0

হাস্কেল - 98 94 বাইট

main=do
 a<-getLine
 b<-getLine
 let c d=last$takeWhile(\e->d/=(show$e-1))[0..]
 print$c a+c b

0

জাভাস্ক্রিপ্ট (ES6), 55 66 59 *

 f=x=>{for(i=0;i+[]!=x;i++);return i};f((p=prompt)())+f(p())

* এটি কয়েকটি অনুমান করে:

  • আমরা একটি ES6 REPL পরিবেশে রয়েছি (উদাঃ ফায়ারফক্স 33.1 ব্রাউজার কনসোল)
  • পারফরম্যান্সে কিছু আসে যায় না (গুরুত্ব সহকারে '9999999999', '9999999999' ফিরে আসতে প্রায় 20 মিনিট সময় নেয়)
  • পূর্ণসংখ্যা থেকে স্ট্রিংয়ে রূপান্তর অনুমোদিত
  • ইনপুটটি ভেরিয়েবল এ এবং বিতে সংজ্ঞায়িত করা হয়, প্র:var a='123',b=321'; প্রম্পট (+11) থেকে ইনপুট পাওয়ার ক্ষেত্রে পরিবর্তন হয়েছে।
  • ইনপুটটির কোনও শীর্ষস্থানীয় জিরো নেই।

@ অপ্টিমাইজার মেলা যথেষ্ট, প্রম্পট থেকে টানা আপডেট
SLuck49

আপনি এই অক্ষরগুলিকে প্রচুর পরিমাণে নামিয়ে আনতে ES6 ব্যবহার করতে পারেন!
অপ্টিমাইজার

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

@ সিশারপি ওপি মন্তব্য করেছেন যে কোডটিতে নম্বরগুলি ঠিক আছে
SLuck49

0

পাইথন 2.7, 196 137 অক্ষর

সংস্করণ 2 (কোড দিয়ে অভিধানের সূচনা করে সংক্ষিপ্ত):

n={}
for i in range(10):n[`i`]=i*' '
def q(a,b):f=lambda x:''.join([10**p*n[s] for p,s in enumerate(reversed(x))]);return len(f(a)+f(b))

পূর্ববর্তী সংস্করণ 1 (196 অক্ষর):

def q(a,b):n,f={0:'','1':' ','2':'  ','3':'   ','4':4*' ','5':5*' ','6':6*' ','7':7*' ','8':8*' ','9':9*' '}, lambda x:''.join(
    [10**p*n[s] for p,s in enumerate(reversed(x))]);return len(f(a)+f(b))

যেমন

>>> print q('123','111')
234

অভিধান কীগুলি স্ট্রিং হয়, অভিধানের মানগুলিতে কোডটি সংক্ষিপ্ত করার জন্য কেবল সংখ্যা ধ্রুবক অন্তর্ভুক্ত থাকে এবং গণনাটি দুটি স্ট্রিংকে সংহত করে এবং ফলস্বরূপ দৈর্ঘ্য অর্জনের মাধ্যমে করা হয়, সুতরাং আমি আশা করি এটি "তাদেরগুলিকে ইনসে রূপান্তর না করা" হিসাবে গণ্য হবে।

পাইথন ছোট-মুদ্রণের নিয়ম-প্রতারণা সংস্করণ

class z(int):0
def s(a,b): return z(a)+z(b)

বিঃদ্রঃ:

>>> type(z('4'))
<class '__main__.z'>

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

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