লেভেনস্টেইন দূরত্ব ও ওআইআইএস (পুলিশ)


16

এটি কপ পোস্ট। ডাকাত পোস্ট এখানে


আপনার টাস্ক একটি পূর্ণসংখ্যা ইনপুট নিতে হয় এন এবং আউটপুট N তম ক্রমানুসারে অঙ্ক OEIS A002942

ক্রমটি পিছনে লেখা বর্গ সংখ্যা নিয়ে গঠিত:

1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ...

নোট করুন যে নেতৃস্থানীয় শূন্যগুলি ছাঁটাই হয়ে গেছে ( 100 হয়ে যায় 1 , 001 নয় )। এটিকে স্ট্রিং (বা একটি দীর্ঘ সংখ্যা দেয়) হিসাবে প্রতিবিম্বিত করা:

1496152639446181121441

আপনি এই স্ট্রিং / সংখ্যায় নবম সংখ্যা আউটপুট করতে হবে । আপনি এন- কে 0-ইনডেক্সড বা 1-ইনডেক্সেড হিসাবে বেছে নিতে পারেন (দয়া করে আপনি কোনটি চয়ন করেন তা উল্লেখ করুন)।

পরীক্ষার কেস (1-ইনডেক্সড):

N = 1,      ==> 1
N = 5,      ==> 1
N = 17,     ==> 1   <- Important test case! It's not zero.
N = 20,     ==> 4
N = 78,     ==> 0
N = 100,    ==> 4

আপনার কোডটি এন = 2 ^ 15 অবধি সংখ্যার জন্য কাজ করা উচিত (যদি না আপনার ভাষা ডিফল্টরূপে 32 বিট পূর্ণসংখ্যা পরিচালনা করে না, তবে N কম হতে পারে)।


পুলিশ:

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

প্রকাশ না করা কোডটি মূল সমাধানের চেয়ে বেশি দীর্ঘ হতে পারে না (তবে এটি একই আকার হতে পারে)। ডাকাতরা আপনার দেওয়া লেভেনস্টেইনের দূরত্বের সাথে সঠিকভাবে একটি কোড লেখার চেষ্টা করবে (এটি যতক্ষণ না কাজ করে ততক্ষণ এটি আপনার অবিরত কোড থেকে আলাদা হতে পারে)।

বিজয়ী অচিহ্নিত জমা দেওয়া হবে যা সর্বনিম্ন লেভেনস্টেইনের দূরত্ব রয়েছে।

আপনি এখানে লেভেনস্টাইন দূরত্ব পরীক্ষা করতে পারেন !


যদি আপনার জমাটি days দিনের জন্য আবদ্ধ না হয় তবে আপনি যে বিকল্প কোডটি লিখেছেন তা প্রকাশ করতে পারেন এবং আপনার জমাটি নিরাপদ হিসাবে চিহ্নিত করতে পারেন।



হ্যাঁ, আমি এটি নিয়মে যুক্ত করব। :)
স্টিভি গ্রিফিন

আপনি স্ক্রিপ্ট সম্পর্কে কথা বলেন, তবে আমি ধরে নিই এটি কি ডিফল্ট প্রোগ্রাম বা ফাংশন ?
কেভিন ক্রুইজসেন 15

হ্যাঁ, সব কিছু ডিফল্ট করুন :)
স্টিভি গ্রিফিন

আপনি কীভাবে মন্তব্যগুলি এবং সাদা জায়গাগুলি পরিচালনা করছেন, আমি কিছু অদ্ভুত জিনিস দেখছি।
যাদু অক্টোপাস উরন

1
"আপনার কোডটি এন = 2 ^ 15" -> অবধি সংখ্যার জন্য কাজ করা উচিত তবে পরীক্ষার একটি ক্ষেত্রে এর চেয়ে বড়। 274164 মামলা কি প্রয়োজনীয়?
টম কার্পেন্টার

উত্তর:


6

হাস্কেল , এলডি = 13, ক্র্যাক হয়েছে

((snd.span(<'1').reverse.show.(^2)=<<[1..])!!)

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

আমি দুবার পরীক্ষা করে দেখেছি যে নেতৃস্থানীয় শূন্যগুলি ছাঁটা হয়েছে;)

ব্যাখ্যা:

                    [1..]     -- for each element in [1,2,3,4,5,...]
                 =<<          -- apply the following functions 
             (^2)             -- square [1,4,9,16,25,...]
           show.              -- convert to string ["1","4","9","16","25",...]
       reverse.               -- reverse ["1","4","9","61","52",...,"001",...]
   span(<'1').                -- split into leading zeros and remainder [("","1"),("","4"),...,("00","1"),...]
  snd.                        -- only keep remainder ["1","4","9","61","52",...,"1",...]
                              -- and concatenate the result "1496152..."
((                       )!!) -- index into the sequence


3

সিকিউয়েন্টস 0 , এলডি = 1, ক্র্যাকড

":\r$*$

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

আমি ভেবেছিলাম এটি শীর্ষস্থানীয় শূন্যগুলির পক্ষে কাজ করে না, তবে এটি আসলে হয় - সাইকেন্টস-এ বিপরীত ফাংশন হিসাবে কোড করা হয় int(reversed(str(n)))

ব্যাখ্যা

"         Concatenate sequence together, get nth term in the string instead of the sequence
 :        Mode: Sequence: given input n, output the nth term, 1-indexed
          Each term in the sequences equals:
  \r      reverse(
    $*$           the index * the index
                  or
    $$            the index * the index
                   ) (implicit)


লাইকনি হ্যাঁ, সাইকেন্টস ম্যাথমেটিকার মতো কিন্ডার মতো গুনাগুন করে তবে আপনার স্পেসের দরকার নেই। একটি ব্যাখ্যা যোগ করা হচ্ছে।
স্টিফেন

3

জাভাস্ক্রিপ্ট (ES6), এলডি = 103 ( ক্র্যাকড )

এ জাতীয় উচ্চতর লেভেনস্টাইন দূরত্ব ব্যবহার করা সম্ভবত সেরা কৌশল নয়, তবে যাইহোক এটি চেষ্টা করুন।

n => { for(i = 0, str = ''; i <= n; i++) { str += +[...i * i + ''].reverse().join(''); } return str[n]; }

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

উদ্দিষ্ট সমাধান

$=>eval(atob`Wy4uLkFycmF5KCQrMSldLm1hcCgoXyxpKT0+K1suLi5pKmkrJyddLnJldmVyc2UoKS5qb2luYGApLmpvaW5gYFskXQ`)

এনকোড অংশ:

[...Array($+1)].map((_,i)=>+[...i*i+''].reverse().join``).join``[$]

এই স্ট্রিপ বিপরীত পরে 0s নেতৃত্ব দেয়?
এরিক দি আউটগল্ফার

পুনঃটুইট অ্যানারি +নিশ্চিত করে যে বিপরীত স্ট্রিংটি একটি সংখ্যায় জোর করে।
আর্নল্ড

1
ওহ্হ্ ... বাহ, এটা আমি ভাবার চেয়েও শক্ত
ম্যাজিক অক্টোপাস আরন


3

পাইথন 2, 104 বাইট, এলডি = 21 অবৈধ এবং ক্র্যাকড

d=lambda y:y if'0'!=str(y)[-1]else d(y/10)
lambda n:''.join([str(d(x*x))[::-1]for x in range(1,n)])[n-1]

পিএস কি সীমাহীন পরিমাণ সাদা স্থান এবং মন্তব্য করার অনুমতি রয়েছে? যদি তাই হয় তবে এই ক্র্যাক করা কঠিন হবে না।


1
"প্রকাশিত কোডটি মূল সমাধানের চেয়ে বেশি দীর্ঘ হতে পারে না।"
খুলদ্রেশেথ না'বাড়িয়া

@ স্ক্রুবল আমি দেখেছি কিন্তু আমি মনে করি না যে এটির চেয়ে অনেক খাটো একটি প্রোগ্রাম তৈরি করা কঠিন হবে। ইতোমধ্যে অন্য উত্তরে অজগর 3 এ করা হয়েছে এবং এটি অজগর 2 তে কাজ করে তাই তাদের যে \n
পরিমাণটি

50 টি নতুনলাইন 21 এর লেভেনস্টেইনের দূরত্বকে অতিক্রম করবে না?
খুলনায়সথ না'বাড়িয়া

@ স্ক্রুবল আপনি খুব ঠিক বলেছেন আমি বিভ্রান্ত হয়ে পড়েছিলাম এবং ভুল সম্পর্কে সমস্যাটি নিয়ে ভাবছিলাম। ধন্যবাদ
ডাইলানান

1
এটি 5 এর চেয়ে কম ইনপুটগুলিতে ত্রুটি বলে মনে হচ্ছে
লিও

3

6502 মেশিন কোড (সি 64), এলডি = 1 ( ক্র্যাকড )

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 88 30 09 B9
5B 00 29 0F 95 5B 10 F3 A9 00 95 5B CA 10 F9 A9 00 A0 03 99 69 00 88 10 FA A0
20 A2 76 18 B5 E6 90 02 09 10 4A 95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11
A2 09 B5 5C C9 08 30 04 E9 03 95 5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9
A9 01 85 FB A2 03 A9 00 95 FB CA D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00
A2 03 95 69 CA 10 FB A0 20 A2 02 46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75
ED 95 ED E8 10 F7 A2 7D 06 26 36 AA E8 10 FB 88 10 DD A0 0B A9 00 99 5A 00 88
D0 FA A0 20 A2 09 B5 5C C9 05 30 04 69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8
D0 FB A2 09 B5 5C 2A C9 10 29 0F 95 5C CA 10 F4 88 D0 D7 E0 0A F0 05 E8 B5 5B
F0 F7 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90 F1 88 B9 5B 00 C9 30 F0 F8 A2
7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05 B9 5B 00 D0 EA A2 7C F6 7F D0
03 E8 10 F9 4C 73 C0 B9 5B 00 4C D2 FF

অনলাইন ডেমো , ব্যবহার:sys49152,nযেখানেn0-ইনডেক্সড ইনপুট।


শেষ পরীক্ষার ক্ষেত্রে আপনার কিছুটা ধৈর্য দরকার, কারণ এই দুর্বল যন্ত্রটি আপনাকে ফলাফল উপস্থাপনের জন্য লক্ষ লক্ষ বিট-শিফট এবং সংযোজন করতে হবে;)

এখানে ভাষাটি মেশিন কোড, সুতরাং এলডি এই বিন্যাসে পরিমাপ করা হয় - তবুও, কিছু দিয়ে শুরু করার জন্য, এখানে ca65এসেম্বলারের উত্সে প্রোগ্রামটি রয়েছে :

NUMSIZE         = 4     ; 32 bit integers ...
NUMSTRSIZE      = 11    ; need up to 11 characters for 0-terminated string

.segment "ZPUSR": zeropage
v_x:            .res    NUMSIZE         ; next number to be squared

.segment "ZPFAC": zeropage
v_n:            .res    NUMSIZE         ; input index (0-based), counts down
nc_string:      .res    NUMSTRSIZE      ; string buffer for numbers

.segment "ZPTMP": zeropage
mpm_arg1:       .res    NUMSIZE         ; arg1 for multiplication
mpm_arg2:       .res    NUMSIZE         ; arg2 for multiplication

.segment "ZPFAC2": zeropage
mpm_res:        .res    NUMSIZE         ; numeric result (mult and str convert)

; load address for creating a C64 .PRG file:

.segment "LDADDR"
                .word   $c000

.code

; first read number from command argument and convert to unsigned
; integer in little-endian:

                jsr     $aefd
                ldy     #$00
rn_loop:        sta     nc_string,y
                iny
                jsr     $73
                bcc     rn_loop
                sta     nc_string,y
                ldx     #NUMSTRSIZE
stn_copybcd:    dex
                dey
                bmi     stn_fillzero
                lda     nc_string,y
                and     #$f
                sta     nc_string,x
                bpl     stn_copybcd
stn_fillzero:   lda     #$0
                sta     nc_string,x
                dex
                bpl     stn_fillzero
                lda     #$0
                ldy     #(NUMSIZE-1)
stn_znumloop:   sta     mpm_res,y
                dey
                bpl     stn_znumloop
                ldy     #(NUMSIZE*8)
stn_loop:       ldx     #($81-NUMSTRSIZE)
                clc
stn_rorloop:    lda     nc_string+NUMSTRSIZE+$80,x
                bcc     stn_skipbit
                ora     #$10
stn_skipbit:    lsr     a
                sta     nc_string+NUMSTRSIZE+$80,x
                inx
                bpl     stn_rorloop
                ldx     #(NUMSIZE-1)
stn_ror:        ror     mpm_res,x
                dex
                bpl     stn_ror
                dey
                beq     main
stn_sub:        ldx     #(NUMSTRSIZE-2)
stn_subloop:    lda     nc_string+1,x
                cmp     #$8
                bmi     stn_nosub
                sbc     #$3
                sta     nc_string+1,x
stn_nosub:      dex
                bpl     stn_subloop
                bmi     stn_loop

main:
                ldx     #(NUMSIZE-1)
argloop:        lda     mpm_res,x
                sta     v_n,x
                dex
                bpl     argloop
                lda     #$01
                sta     v_x
                ldx     #(NUMSIZE-1)
                lda     #$00
initxloop:      sta     v_x,x
                dex
                bne     initxloop

mainloop:

; prepare arguments for multiplication:

                ldx     #(NUMSIZE-1)
sqrargloop:     lda     v_x,x
                sta     mpm_arg1,x
                sta     mpm_arg2,x
                dex
                bpl     sqrargloop

; do multiplication:

                lda     #$00
                ldx     #(NUMSIZE-1)
mul_clearloop:  sta     mpm_res,x
                dex
                bpl     mul_clearloop
                ldy     #(NUMSIZE*8)
mul_loop:       ldx     #(NUMSIZE-2)
                lsr     mpm_arg1+NUMSIZE-1
mul_rorloop:    ror     mpm_arg1,x
                dex
                bpl     mul_rorloop
                bcc     mul_noadd
                ldx     #($80-NUMSIZE)
                clc
mul_addloop:    lda     mpm_arg2+NUMSIZE+$80,x
                adc     mpm_res+NUMSIZE+$80,x
                sta     mpm_res+NUMSIZE+$80,x
                inx
                bpl     mul_addloop
mul_noadd:      ldx     #($81-NUMSIZE)
                asl     mpm_arg2
mul_rolloop:    rol     mpm_arg2+NUMSIZE+$80,x
                inx
                bpl     mul_rolloop
                dey
                bpl     mul_loop

; convert result to string:

                ldy     #NUMSTRSIZE
                lda     #$0
nts_fillzero:   sta     nc_string-1,y
                dey
                bne     nts_fillzero
                ldy     #(NUMSIZE*8)
nts_bcdloop:    ldx     #(NUMSTRSIZE-2)
nts_addloop:    lda     nc_string+1,x
                cmp     #$5
                bmi     nts_noadd
                adc     #$2
                sta     nc_string+1,x
nts_noadd:      dex
                bpl     nts_addloop
                asl     mpm_res
                ldx     #($ff-NUMSIZE+2)
nts_rol:        rol     mpm_res+NUMSIZE,x       ; + $100 w/o zp wraparound
                inx
                bne     nts_rol
                ldx     #(NUMSTRSIZE-2)
nts_rolloop:    lda     nc_string+1,x
                rol     a
                cmp     #$10
                and     #$f
                sta     nc_string+1,x
nts_rolnext:    dex
                bpl     nts_rolloop
                dey
                bne     nts_bcdloop
nts_scan:       cpx     #(NUMSTRSIZE-1)
                beq     nts_copydigits
                inx
                lda     nc_string,x
                beq     nts_scan
nts_copydigits: ora     #$30
                sta     nc_string,y
                iny
                inx
                cpx     #(NUMSTRSIZE)
                beq     strip0loop
                lda     nc_string,x
                bcc     nts_copydigits

; search for first non-0 character from the end of the string:

strip0loop:     dey
                lda     nc_string,y
                cmp     #$30
                beq     strip0loop

; decrement n for each digit:

founddigit:
                ldx     #($80-NUMSIZE)
                clc
decnloop:       lda     v_n+NUMSIZE+$80,x
                sbc     #$00
                sta     v_n+NUMSIZE+$80,x
                inx
                bpl     decnloop
                bcc     foundresult

                dey
                bmi     next_x
                lda     nc_string,y
                bne     founddigit

; increment x to calculate next square number:

next_x:
                ldx     #($80-NUMSIZE)
incxloop:       inc     v_x+NUMSIZE-$80,x
                bne     incxdone
                inx
                bpl     incxloop
incxdone:       jmp     mainloop

foundresult:    lda     nc_string,y
                jmp     $ffd2

... এবং এখানে লিঙ্কার স্ক্রিপ্ট এখানে রয়েছে ld65:

MEMORY {
  LDADDR: start = $bffe, size = 2;
  CODE: start = $c000, size = $1000;
  ZPTMP: start = $0022, size = $0008;
  ZPFAC: start = $0057, size = $000f;
  ZPFAC2: start = $0069, size = $0004;
  ZPUSR: start = $00fb, size = $0004;
}

SEGMENTS {
  LDADDR: load = LDADDR;
  CODE: load = CODE;
  ZPTMP: load = ZPTMP, type = zp;
  ZPFAC: load = ZPFAC, type = zp;
  ZPFAC2: load = ZPFAC2, type = zp;
  ZPUSR: load = ZPUSR, type = zp;
}

কর্কশ (আমি বিশ্বাস করি)
জো।

@Jo। হ্যাঁ, সম্পাদিত
ফেলিক্স Palmen


2

জাভা 8, (177 বাইট) এলডি = 92 ( @ আর্নল্ড দ্বারা ক্র্যাকড) )

( IV এই অনলাইন এলডি-ক্যালকুলেটর ব্যবহার করেছেন ))

n->{String r="",t=r;for(int i=1,j;r.length()<=n+1;i++)if(Math.sqrt(i)%1==0){for(t="",j=(i+"").length();j>0;t+=(i+"").charAt(--j));r+=t.replaceAll("^0+","");}return r.charAt(n);}

আপনি খুব সহজেই এটি গল্ফ করেন তবে এটি সম্ভবত খুব কঠিন নয়। :)

ব্যাখ্যা:

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

n->{                             // Method with integer parameter and character return-type
  String r="",                   //  Result-String, starting empty
         t=r;                    //  Temp-String, starting empty
  for(int i=1,j;                 //  Index-integers
      r.length()<=n+1;i++)       //  Loop (1) as long as the length is at least n+1
    if(Math.sqrt(i)%1==0){       //   If the current number `i` is a perfect square:
      for(t="",                  //    Reset the temp-String to empty
          j=(i+"").length();     //    Set `j` to the length of the current number
          j>0;                   //    Inner loop (2) as long as `j` is larger than 0
        t+=                      //     Append the temp-String with:
           (i+"").charAt(--j)    //     The digit of integer `i` at index `j-1`
                                 //     (by first decrease `j` with 1 with `--j`)
      );                         //    End of inner loop (2)
      r+=t                       //    And then append the temp-String to the result-String
          .replaceAll("^0+","");}//    after we've removed any leading zeroes
                                 //  End of loop (1) (implicit / single-line body)
  return r.charAt(n);            //  Return the `n`'th character of the result-String
}                                // End of method


উদ্দিষ্ট সমাধান: n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}( 118 বাইট, 92 এলডি )
কেভিন ক্রুইজসেন


2

6502 মেশিন কোড (সি 64), এলডি = 1, নিরাপদ

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 98 88 30 09
B9 5B 00 29 0F 95 5B 10 F2 95 5B CA 10 FB A0 20 A2 76 18 B5 E6 90 02 09 10 4A
95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11 A2 09 B5 5C C9 08 30 04 E9 03 95
5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9 A9 01 85 FB A2 03 A9 00 95 FB CA
D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00 A2 03 95 69 CA 10 FB A0 20 A2 02
46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75 ED 95 ED E8 10 F7 A2 7D 06 26 36
AA E8 10 FB 88 10 DD A2 0B A9 00 95 5A CA D0 FB A0 20 A2 09 B5 5C C9 05 30 04
69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8 D0 FB A2 09 B5 5C 2A C9 10 29 0F 95
5C CA 10 F4 88 D0 D7 E8 B5 5B F0 FB 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90
F1 88 B9 5B 00 C9 30 F0 F8 A2 7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05
B9 5B 00 D0 EA A2 7C F6 7F D0 03 E8 10 F9 4C 68 C0 B9 5B 00 4C D2 FF

অনলাইন ডেমো , ব্যবহার:sys49152,nযেখানেn0-ইনডেক্সড ইনপুট।


উদ্দিষ্ট সমাধান: (পৃথক)

 B9 5B 00 29 0F 95 5B 10 F2 95 5B CA 10 FB A0 20 A2 76 18 B5 E6 90 02 09 10 4A
-95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11 A2 09 B5 5C C9 08 30 04 E9 03 95
+95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11 A2 09 B5 5C C9 08 90 04 E9 03 95
 5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9 A9 01 85 FB A2 03 A9 00 95 FB CA

30(Opcode bmi) দ্বারা প্রতিস্থাপিত হয় 90(opcode bcc)। এটি এসেম্বলারের উত্সের নীচের অংশের সাথে মিলে যায়:

stn_subloop:    lda     nc_string+1,x
                cmp     #$8
                bmi     stn_nosub       ; use bcc here for same result
                sbc     #$3
                sta     nc_string+1,x

এটি কাজ করে কারণ এই কোডটি 8 টির চেয়ে কম কিনা তা পরীক্ষা করে The cmpনির্দেশিকাটি সেই জন্য পতাকাগুলি সেট করে তার জন্য বিয়োগ করে। সুতরাং, যদি সংগ্রহকারী 8 টিরও কম সংখ্যক ধারণ করে, এটি বহন করে, বহনকারী পতাকাটি সাফ করে, সুতরাং সঠিক শাখার নির্দেশটি সত্যই সত্য bccbmi(নেতিবাচক যখন শাখাঙ্কিত), ঠিক ঠিক ঠিক এখানে কাজ করার জন্য ঘটে, কারণ তুলনামূলক সংখ্যা যথেষ্ট কম, সুতরাং $80-$ffএকটি বিচ্ছুরণের ফলাফল নেতিবাচক পরিসীমাতে শেষ হয় ( ) যখন কোনও আন্ডারফ্লো ঘটে তখন।

অনলাইন ডেমো


এটি আমার পূর্ববর্তী জমা দেওয়ার একটি উন্নত / সংক্রামিত সংস্করণ । আকার হ্রাস করার জন্য অন্যান্য কয়েকটি কৌশলগুলির মধ্যে এটি অকেজো কোডটিকে সরিয়ে দেয় এবং এক ধরণের "সরল" *) ক্র্যাককে অনুমতি দেয়। সব মিলিয়ে আকার 16 বাইট দ্বারা হ্রাস পেয়েছে। এবার, এলডি 1 :) এর সাথে সমতুল্য প্রোগ্রামটি খুঁজে পাওয়া কিছুটা শক্ত হওয়া উচিত

*) সম্ভবত এখনও খুঁজে পেতে বেশ কিছু কাজ অবশ্যই :)

আবার ca65কোডটি দিয়ে শুরু করতে সহায়তা করতে এখানে এসেম্বলারের উত্সটি রয়েছে:

NUMSIZE         = 4     ; 32 bit integers ...
NUMSTRSIZE      = 11    ; need up to 11 characters for 0-terminated string

.segment "ZPUSR": zeropage
v_x:            .res    NUMSIZE         ; next number to be squared

.segment "ZPFAC": zeropage
v_n:            .res    NUMSIZE         ; input index (0-based), counts down
nc_string:      .res    NUMSTRSIZE      ; string buffer for numbers

.segment "ZPTMP": zeropage
mpm_arg1:       .res    NUMSIZE         ; arg1 for multiplication
mpm_arg2:       .res    NUMSIZE         ; arg2 for multiplication

.segment "ZPFAC2": zeropage
mpm_res:        .res    NUMSIZE         ; numeric result (mult and str convert)

; load address for creating a C64 .PRG file:

.segment "LDADDR"
                .word   $c000

.code

; first read number from command argument and convert to unsigned
; integer in little-endian:

                jsr     $aefd
                ldy     #$00
rn_loop:        sta     nc_string,y
                iny
                jsr     $73
                bcc     rn_loop
                sta     nc_string,y
                ldx     #NUMSTRSIZE
stn_copybcd:    dex
                tya
                dey
                bmi     stn_fillzero
                lda     nc_string,y
                and     #$f
                sta     nc_string,x
                bpl     stn_copybcd
stn_fillzero:   sta     nc_string,x
                dex
                bpl     stn_fillzero
                ldy     #(NUMSIZE*8)
stn_loop:       ldx     #($81-NUMSTRSIZE)
                clc
stn_rorloop:    lda     nc_string+NUMSTRSIZE+$80,x
                bcc     stn_skipbit
                ora     #$10
stn_skipbit:    lsr     a
                sta     nc_string+NUMSTRSIZE+$80,x
                inx
                bpl     stn_rorloop
                ldx     #(NUMSIZE-1)
stn_ror:        ror     mpm_res,x
                dex
                bpl     stn_ror
                dey
                beq     main
stn_sub:        ldx     #(NUMSTRSIZE-2)
stn_subloop:    lda     nc_string+1,x
                cmp     #$8
                bmi     stn_nosub
                sbc     #$3
                sta     nc_string+1,x
stn_nosub:      dex
                bpl     stn_subloop
                bmi     stn_loop

main:
                ldx     #(NUMSIZE-1)
argloop:        lda     mpm_res,x
                sta     v_n,x
                dex
                bpl     argloop
                lda     #$01
                sta     v_x
                ldx     #(NUMSIZE-1)
                lda     #$00
initxloop:      sta     v_x,x
                dex
                bne     initxloop

mainloop:

; prepare arguments for multiplication:

                ldx     #(NUMSIZE-1)
sqrargloop:     lda     v_x,x
                sta     mpm_arg1,x
                sta     mpm_arg2,x
                dex
                bpl     sqrargloop

; do multiplication:

                lda     #$00
                ldx     #(NUMSIZE-1)
mul_clearloop:  sta     mpm_res,x
                dex
                bpl     mul_clearloop
                ldy     #(NUMSIZE*8)
mul_loop:       ldx     #(NUMSIZE-2)
                lsr     mpm_arg1+NUMSIZE-1
mul_rorloop:    ror     mpm_arg1,x
                dex
                bpl     mul_rorloop
                bcc     mul_noadd
                ldx     #($80-NUMSIZE)
                clc
mul_addloop:    lda     mpm_arg2+NUMSIZE+$80,x
                adc     mpm_res+NUMSIZE+$80,x
                sta     mpm_res+NUMSIZE+$80,x
                inx
                bpl     mul_addloop
mul_noadd:      ldx     #($81-NUMSIZE)
                asl     mpm_arg2
mul_rolloop:    rol     mpm_arg2+NUMSIZE+$80,x
                inx
                bpl     mul_rolloop
                dey
                bpl     mul_loop

; convert result to string:

                ldx     #NUMSTRSIZE
                lda     #$0
nts_fillzero:   sta     nc_string-1,x
                dex
                bne     nts_fillzero
                ldy     #(NUMSIZE*8)
nts_bcdloop:    ldx     #(NUMSTRSIZE-2)
nts_addloop:    lda     nc_string+1,x
                cmp     #$5
                bmi     nts_noadd
                adc     #$2
                sta     nc_string+1,x
nts_noadd:      dex
                bpl     nts_addloop
                asl     mpm_res
                ldx     #($ff-NUMSIZE+2)
nts_rol:        rol     mpm_res+NUMSIZE,x       ; + $100 w/o zp wraparound
                inx
                bne     nts_rol
                ldx     #(NUMSTRSIZE-2)
nts_rolloop:    lda     nc_string+1,x
                rol     a
                cmp     #$10
                and     #$f
                sta     nc_string+1,x
nts_rolnext:    dex
                bpl     nts_rolloop
                dey
                bne     nts_bcdloop
nts_scan:       inx
                lda     nc_string,x
                beq     nts_scan
nts_copydigits: ora     #$30
                sta     nc_string,y
                iny
                inx
                cpx     #(NUMSTRSIZE)
                beq     strip0loop
                lda     nc_string,x
                bcc     nts_copydigits

; search for first non-0 character from the end of the string:

strip0loop:     dey
                lda     nc_string,y
                cmp     #$30
                beq     strip0loop

; decrement n for each digit:

founddigit:
                ldx     #($80-NUMSIZE)
                clc
decnloop:       lda     v_n+NUMSIZE+$80,x
                sbc     #$00
                sta     v_n+NUMSIZE+$80,x
                inx
                bpl     decnloop
                bcc     foundresult

                dey
                bmi     next_x
                lda     nc_string,y
                bne     founddigit

; increment x to calculate next square number:

next_x:
                ldx     #($80-NUMSIZE)
incxloop:       inc     v_x+NUMSIZE-$80,x
                bne     incxdone
                inx
                bpl     incxloop
incxdone:       jmp     mainloop

foundresult:    lda     nc_string,y
                jmp     $ffd2

... এবং এখানে লিঙ্কার স্ক্রিপ্ট এখানে রয়েছে ld65:

MEMORY {
  LDADDR: start = $bffe, size = 2;
  CODE: start = $c000, size = $1000;
  ZPTMP: start = $0022, size = $0008;
  ZPFAC: start = $0057, size = $000f;
  ZPFAC2: start = $0069, size = $0004;
  ZPUSR: start = $00fb, size = $0004;
}

SEGMENTS {
  LDADDR: load = LDADDR;
  CODE: load = CODE;
  ZPTMP: load = ZPTMP, type = zp;
  ZPFAC: load = ZPFAC, type = zp;
  ZPFAC2: load = ZPFAC2, type = zp;
  ZPUSR: load = ZPUSR, type = zp;
}

এটি আন-ক্র্যাক বিবেচনা করুন :)
জো।

@Jo। ভাল যদি আপনি জেদ করেন - অনেক অনেক ধন্যবাদ, আমি এটি সম্পাদনা করেছি।
ফেলিক্স Palmen




0

পাইথন 3: এলডি = 9 | কর্কশ

lambda i:"".join(str(k*k+2*k+1)[::-1].lstrip("0")for k in range(i+1))[i]

এই এক পেতে মোটামুটি (খুব) সহজ হওয়া উচিত: পি



1
আমি আমার ক্র্যাকটি মুছে ফেলেছি কারণ আসল উত্তরটি অবৈধ।
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার আপনি এখনই মুছে ফেলতে পারেন; এলডি একই কারণ .lstrip("0")অংশটি কেবল অনুলিপি করা যায়।
হাইপারনিউটারিনো


0

সি ++, এলডি = 159

0-ইনডেক্সড, ইনপুট ইন argv[1], GCC 7.2.0 তে সংকলিত

#import<bits/stdc++.h>
char*h,b[1<<17],*q=b;int x,y;main(int,char**j){sscanf(j[1],"%d",&y);do{x++;q+=sprintf(h=q,"%d",x*x);while(*--q==48);std::reverse(h,++q);}while(q-b<=y);b[y+1]=0,printf(b+y);}

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