আমার অ্যারেতে প্রতিধ্বনি আছে ... আমার অ্যারেতে প্রতিধ্বনি আছে ... আমার অ্যারেতে


34

সাহায্য করুন! আমার কিছু অ্যারেতে আমার বিরক্তিকর প্রতিধ্বনি রয়েছে বলে মনে হচ্ছে এবং আমি এটি থেকে মুক্তি পেতে চাই। এটি যখন ঘটে তখন মূল অ্যারেটি মাঝখানে কোথাও পুনরাবৃত্তি করে যার ফলে একে অপরের সাথে মান যুক্ত হয়।

উদাহরণস্বরূপ, অ্যারেটিতে [ 422, 375, 527, 375, 859, 451, 754, 451 ]নিজের মতো একটি প্রতিধ্বনি রয়েছে:

[ 422, 375, 527, 375, 859, 451, 754, 451 ] <-- array with echo (input)

[ 422, 375, 105,   0, 754, 451           ] <-- original array (output)
[           422, 375, 105,   0, 754, 451 ] <-- echo of original array

উদাহরণ 2:

[ 321, 526, 1072, 899, 6563, 798, 7038, 3302, 3032, 3478, 1806, 601 ] <-- input

[ 321, 526,  751, 373, 5812, 425, 1226, 2877, 1806,  601            ] <-- output
[            321, 526,  751, 373, 5812,  425, 1226, 2877, 1806, 601 ]

এটিও সম্ভব যে অ্যারেতে কোনও প্রতিধ্বনি নেই, সেক্ষেত্রে মূল অ্যারেটি ফেরত দিন:

উদাহরণ 3:

[ 623, 533, 494, 382 ] <-- input
[ 623, 533, 494, 382 ] <-- output

চ্যালেঞ্জ:

একটি অ্যারে দেওয়া হয়েছে যাতে প্রতিধ্বনি থাকতে পারে, এটি সরান এবং প্রতিধ্বনি ব্যতীত অ্যারেটি ফিরিয়ে দিন।

ইনপুট:

  • একটি অ্যারে, তালিকা, সীমাবদ্ধ স্ট্রিং, পাঞ্চ কার্ড বা আপনার প্ল্যাটফর্ম-উপযুক্ত সমতুল্য, কমপক্ষে একটি উপাদান > 0 দিয়ে পরিসীমাতে0n<10000 তিন বা ততোধিক পূর্ণসংখ্যা থাকে ।>0
  • প্রতিধ্বনি প্রথম বা শেষ উপাদানটির পরে শুরু হতে পারে না।
  • প্রতিধ্বনি কেবল একবার ইনপুটটির মধ্যেই হবে বা নাও ঘটবে।

আউটপুট:

  • প্রতিধ্বনি মুছে ফেলা সহ 0n<10000 এর পূর্ণসংখ্যার একটি অ্যারে, তালিকা ইত্যাদি ।
  • যদি কোনও প্রতিধ্বনি নেই তবে আসল অ্যারেটি ফিরিয়ে দিন।

বিধি এবং স্কোরিং:

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

পরীক্ষার কেস:

প্রতিধ্বনি সহ:

[ 422, 375, 527, 375, 859, 451, 754, 451 ]
[ 422, 375, 105, 0, 754, 451 ]

[ 321, 526, 1072, 899, 6563, 798, 7038, 3302, 3032, 3478, 1806, 601 ]
[ 321, 526, 751, 373, 5812, 425, 1226, 2877, 1806, 601 ]

[ 4330, 3748, 363, 135, 2758, 3299, 1674, 1336, 4834, 2486, 4087, 1099, 4098, 4942, 2159, 460, 4400, 4106, 1216, 3257, 1638, 2848, 3616, 3554, 1605, 490, 1308, 2773, 3322, 3284, 4037, 7109, 4171, 5349, 2675, 3056, 4702, 4229, 1726, 5423, 6039, 8076, 6047, 7088, 9437, 4894, 1946, 7501, 5331, 3625, 5810, 6289, 2858, 6610, 4063, 5565, 2200, 3493, 4573, 4906, 3585, 4147, 3748, 3488, 5625, 6173, 3842, 5671, 2555, 390, 589, 3553, 3989, 4948, 2990, 4495, 2735, 1486, 3101, 1225, 2409, 2553, 4651, 10, 2994, 509, 3960, 1710, 2185, 1800, 1584, 301, 110, 969, 3065, 639, 3633, 3544, 4268 ]
[ 4330, 3748, 363, 135, 2758, 3299, 1674, 1336, 4834, 2486, 4087, 1099, 4098, 4942, 2159, 460, 4400, 4106, 1216, 3257, 1638, 2848, 3616, 3554, 1605, 490, 1308, 2773, 3322, 3284, 4037, 2779, 423, 4986, 2540, 298, 1403, 2555, 390, 589, 3553, 3989, 4948, 2990, 4495, 2735, 1486, 3101, 1225, 2409, 2553, 4651, 10, 2994, 509, 3960, 1710, 2185, 1800, 1584, 301, 110, 969, 3065, 639, 3633, 3544, 4268 ]

[ 24, 12, 52, 125, 154, 3, 567, 198, 49, 382, 53, 911, 166, 18, 635, 213, 113, 718, 56, 811, 67, 94, 80, 241, 343, 548, 68, 481, 96, 79, 12, 226, 255, 200, 13, 456, 41 ]
[ 24, 12, 52, 125, 154, 3, 567, 198, 25, 370, 1, 786, 12, 15, 68, 15, 88, 348, 55, 25, 55, 79, 12, 226, 255, 200, 13, 456, 41 ]

[ 1, 3, 2 ]
[ 1, 2 ]

[ 0, 1, 3, 2, 0 ]
[ 0, 1, 2, 0 ]

প্রতিধ্বনি ব্যতীত:

[ 623, 533, 494, 382 ]
[ 623, 533, 494, 382 ]

[ 1141, 1198, 3106, 538, 3442, 4597, 4380, 3653, 1370, 3987, 1964, 4615, 1844, 5035, 2463, 6345, 4964, 4111, 5192, 8555, 5331, 3331, 4875, 6586, 5728, 4532, 5972, 2305, 3491, 6317, 2256, 2415, 5788, 4873, 6480, 2080, 5319, 4551, 6527, 5267, 4315, 2178, 2615, 5735, 5950, 6220, 7114, 6259, 5000, 4183, 6822, 6927, 7150, 8003, 5603, 3154, 8231, 5005, 5743, 6779, 4530, 4029, 5336, 6105, 4777, 6183, 6838, 5725, 6819, 8584, 3142, 3840, 3291, 4284, 2933, 4859, 2906, 5176, 2853, 2110, 2048, 4389, 4501, 2267, 2704, 431, 1495, 2712, 3008, 187, 3487, 630 ]
[ 1141, 1198, 3106, 538, 3442, 4597, 4380, 3653, 1370, 3987, 1964, 4615, 1844, 5035, 2463, 6345, 4964, 4111, 5192, 8555, 5331, 3331, 4875, 6586, 5728, 4532, 5972, 2305, 3491, 6317, 2256, 2415, 5788, 4873, 6480, 2080, 5319, 4551, 6527, 5267, 4315, 2178, 2615, 5735, 5950, 6220, 7114, 6259, 5000, 4183, 6822, 6927, 7150, 8003, 5603, 3154, 8231, 5005, 5743, 6779, 4530, 4029, 5336, 6105, 4777, 6183, 6838, 5725, 6819, 8584, 3142, 3840, 3291, 4284, 2933, 4859, 2906, 5176, 2853, 2110, 2048, 4389, 4501, 2267, 2704, 431, 1495, 2712, 3008, 187, 3487, 630 ]

[ 4791, 1647, 480, 3994, 1507, 99, 61, 3245, 2932, 8358, 6618, 1083, 5391, 3498, 4865, 1441, 3729, 5322, 5371, 6271, 2392, 1649, 5553, 9126, 3945, 2179, 3672, 2201, 4433, 5473, 4924, 6585, 6407, 3862, 6505, 1530, 5293, 4792, 6419, 6739, 3258, 3839, 3891, 7599, 2576, 5969, 5659, 6077, 5189, 1325, 4490, 5694, 6567, 6367, 5724, 5756, 6450, 5863, 4360, 2697, 3100, 3779, 4040, 4653, 1755, 3109, 2741, 3269 ]
[ 4791, 1647, 480, 3994, 1507, 99, 61, 3245, 2932, 8358, 6618, 1083, 5391, 3498, 4865, 1441, 3729, 5322, 5371, 6271, 2392, 1649, 5553, 9126, 3945, 2179, 3672, 2201, 4433, 5473, 4924, 6585, 6407, 3862, 6505, 1530, 5293, 4792, 6419, 6739, 3258, 3839, 3891, 7599, 2576, 5969, 5659, 6077, 5189, 1325, 4490, 5694, 6567, 6367, 5724, 5756, 6450, 5863, 4360, 2697, 3100, 3779, 4040, 4653, 1755, 3109, 2741, 3269 ]

[ 235, 121, 52, 1249, 154, 26, 5672, 1975, 482, 3817, 532, 9104, 1661, 171, 6347, 2124, 1122, 7175, 558, 8101, 667, 934, 798, 2404, 3424, 5479, 672, 4808, 956, 789, 123, 2255, 2549, 200, 126, 4562, 41 ]
[ 235, 121, 52, 1249, 154, 26, 5672, 1975, 482, 3817, 532, 9104, 1661, 171, 6347, 2124, 1122, 7175, 558, 8101, 667, 934, 798, 2404, 3424, 5479, 672, 4808, 956, 789, 123, 2255, 2549, 200, 126, 4562, 41 ]

[ 1, 1, 1, 1, 1 ]
[ 1, 1, 1, 1, 1 ]

3
যদি একাধিক সম্ভাব্য আউটপুট থাকে? ইনপুট: [1, 2, 2, 2, 1]; আউটপুট: [1, 1, 1, 1]বনাম[1, 2, 1]
tsh

3
জন্য প্রত্যাশিত আউটপুট কি [1, 2, 3, 1, 2, 3], [1, 2, 3, 0, 1, 2, 3], [0, 1, 3, 2, 0]? বর্তমান উত্তরগুলি এই সমস্ত ইনপুটগুলির সাথে একমত নয়।
tsh

@tsh এর মধ্যে উভয়ই ( [1, 1, 1, 1]বনাম [1, 2, 1]) গ্রহণযোগ্য। আমার প্রথমে কোন নিয়মটি বেছে নেবেন সে সম্পর্কে একটি নিয়ম ছিল তবে এটি স্যান্ডবক্সে তুলেছিলাম কারণ মনে হয় এটি কেবলমাত্র সংখ্যক প্রান্তের ক্ষেত্রেই প্রয়োগ হয়।
640 কেবি

@ স্প, [0, 1, 3, 2, 0]হওয়া উচিত [0, 1, 2, 0]- আমি পরীক্ষার কেসগুলিতে যুক্ত করেছি। অন্য দুটি সম্পর্কে একটি প্রত্যাশিত উত্তর হতে পারে [1, 2, 3]যদিও আমি বিধি অনুসারে সেই বৈধ পরীক্ষাগুলি বিবেচনা করব না the original array repeats itself somewhere in the middle
640 কেবি

1
@ নিমী ভাল। আমি বলব যে এটি [0,0,0](বা কোনও আকারের সকলের 0অ্যারে) যে কোনও প্রতিধ্বনি প্রতিনিধিত্ব করে কিনা বা যদি [0,0,0](কোনও প্রতিধ্বনি নয়) এছাড়াও এই বিশেষ মামলার বৈধ উত্তর হতে পারে, কারণ কোনটি নির্ধারণ করার জন্য কেবল পর্যাপ্ত তথ্য নেই এটাই. আমি এটিকে বৈধ ইনপুট হতে বাধা দেওয়ার জন্য নিয়মগুলি আপডেট করব, কারণ এটি কোনও বিদ্যমান উত্তরকে অকার্যকর বা পরিবর্তন করবে না।
640 কেবি

উত্তর:


8

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

t"GX@WQB&Y-~?w]x

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

জয়ের জন্য বহুপদী বিভাগ!

t      % Implicit input. Duplicate
"      % For each (do the following as many times as input length)
  G    %   Push input again. This will be the output if no solution exists
  X@   %   Push current iteration index, k
  WQB  %   2 raised to that, add 1, convert to binary. Gives [1 0 ... 0 1] (k-1 zeros)
  &Y-  %   Two-output polynomial division (deconvolution). Gives quotient and remainder
  ~    %   Logical negate: transforms zeros into 1, nonzeros into 0
  ?    %   If all values are nonzero (i.e. if remainder was all zeros): solution found
    w  %      Swap. This moves the copy of the input to top (to be deleted)
  ]    %   End
  x    %   Delete. This deletes the quotient if it was not a solution, or else deletes
       %   the copy of the input
       % End (implicit). Since it is guaranteed that at most one solution exists, at this
       % point the stack contains either the solution or the input
       % Implicit display

"এসো" বা "historicতিহাসিক" ভাষার অনুগ্রহে কোনও গ্রহণকারী নেই ... এতে অনুগ্রহ জনপ্রিয়তায় যায়!
640 কেবি

1
@ 640KB আমি জানতাম না যে এই চ্যালেঞ্জের কোনও অনুগ্রহ রয়েছে! ধন্যবাদ!
লুইস মেন্ডো

7

হাস্কেল , 167 বাইট

প্রথমে এটি লক্ষ্য করা গুরুত্বপূর্ণ যে যদি এখানে একটি প্রতিধ্বনি উপস্থিত থাকে তবে ইনপুট অ্যারেটি ফর্মের কিছু অ্যারে সহ অন্য অ্যারের কনভোলজেশন [1,1],[1,0,1],[1,0,0,1],...

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

একটি কৌশল যা পুরো বিষয়টিকে কিছুটা সংক্ষিপ্ত করে তুলেছিল সেটি উপরের অ্যারেগুলি ছাড়াও [1]একটি বেস কেস হিসাবেও যাচাই করছিল , কারণ যদি অন্য কোনও অ্যারে কাজ না করে তবে ডিকনভোলিউশনটি [1]কাজ করবে এবং আসল বহুবর্ষকে ফিরিয়ে দেবে।

import Math.Polynomial
import Data.Ratio
p=poly LE
c z=last[polyCoeffs LE q|k<-zipWith const[p(take k(1:repeat 0)++[1])|k<-[0..]]z,(q,r)<-[quotRemPoly(p z)k],r==zero] 

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


বেস কেস নিয়ে ভাল কৌশল! আমি আমার উত্তরে এটি অন্তর্ভুক্ত করার চেষ্টা করেছি কিন্তু আমি কোডটি সংক্ষিপ্ত করতে পারলাম
লুইস মেন্ডো

4

জাভাস্ক্রিপ্ট , 211 171 145 বাইট

s=>{for(n=x=0,y=s.length;++x<y/2&!n;)for(n=s.slice(i=0,x);i+x<y-x&&n;)n=(n[i+x]=s[i+x]-n[i++])<0?0:n;return n&&n.slice(1-x)+''==s.slice(1-x)?n:s}

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

কেভিন ক্রুইজসেন থেকে 40 বাইট

আরনাউল্ড থেকে আরও 26 বাইট

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


1
আমি জাভাস্ক্রিপ্ট নিয়ে খুব দক্ষ নই, তবে কয়েকটি বেসিক গল্ফের সাথে (যেমন অপ্রয়োজনীয় বন্ধনী অপসারণ, এর স্থানগুলির স্থান ++পরিবর্তন &&করা &, প্রথম চেকটিতে পরিবর্তন করা , উভয়কে পরিবর্তন .toString()করা +''ইত্যাদি) আমি আপনার কোডটি 181 বাইটে নামিয়ে পেয়েছি । আপনি তাদের এখনো দেখা যায় না পারেন, জাভাস্ক্রিপ্ট মধ্যে golfing জন্য টিপস এবং সমস্ত ভাষায় golfing জন্য টিপস মাধ্যমে পড়া আকর্ষণীয় হতে পারে। :)
কেভিন ক্রুইজসেন

1
ওহ, একটি ভুলে গেছেন ( function q(s)হতে পারে s=>): 171 বাইট । উপভোগকর তোমার থাকা! :)
কেভিন ক্রুইজসেন

তার জন্য ধন্যবাদ, আমি একটি পড়তে হবে। আমি জাভাস্ক্রিপ্টের সাথে খুব সহজ হয়ে উঠছি না তবে আমাকে কিছুটা ইদানীং করতে হয়েছে এবং ভেবেছিলাম আমার ডাউনটাইমে কিছুটা ব্রাশ করার ভাল উপায় এটি হতে পারে
লেভি ফেইড

1
আরও কিছু গল্ফ করেছেন (সমস্ত পরীক্ষা ছাড়াই যাতে এটি এই মন্তব্যে সরাসরি ইউআরএল হিসাবে ফিট করে)
আর্নাউল্ড

1
কোড গল্ফ এসই তে স্বাগতম! আমরা আশা করি আপনি এখানে সময় গল্ফ উপভোগ করবেন!
জিউসেপ্পে

3

হাস্কেল, 112 111 110 বাইট

l=length
(!)=splitAt
f a=last$a:[x|i<-[1..l a],let (h,t)=i!a;o=h++zipWith(-)t o;(x,y)=l t!o,all(>=0)o,sum y<1]

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

f a=                
      i<-[1..l a]                -- for all indices 'i' of the input array 'a'
      (h,t)=i!a                  -- split 'a' at 'i' into 'h' and 't'
                                 -- e.g. a: [1,2,3,4], i: 1 -> h: [1], t:[2,3,4] 
      o=                         -- calculate the original array by
        h++                      --   prepended 'h' to
        zipWith(-)t o            --   the (element-wise) difference of
                                 --   't' and itself
      (x,y)=l t!o                -- split 'o' at position <length of t>
                                 --
                                 -- example:
                                 --      a: [0,1,3,2,0]
                                 --      h: [0]
                                 --      t: [1,3,2,0]
                                 --   now
                                 --      o: [0,1,2,0,0]
                                 --      x: [0,1,2,0]
                                 --      y: [0]
                                 --
    ,                            -- 'o' is valid, if
     all(>=0)o                   --   all elements of 'o' are not negative
    ,sum y<1                     --   and 'y' is all zeros
  [x|         ]                  -- keep 'x' (a valid echo array) if 'o' is valid

 last $ a :[  ]                  -- if there's no echo, the list of 'x's is empty
                                 -- and 'a' is picked, else the last of the 'x's 

3

উল্ফর্যাম ভাষা (ম্যাথামেটিকাল) , 131 129 120 119 102 98 97 96 95 বাইট

(w=#;Do[(w=v/.#)&/@Thread[#==PadLeft[v=Array[x,L-d],L]+v~PadRight~L]~Solve~v,{d,L=Tr[1^#]}];w)&

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

In1 বাইট অ্যাটিনেটকে ধন্যবাদ : আমরা যখন যুক্তি সংখ্যার একটি তালিকা হয় তার L=Tr[1^#]পরিবর্তে আমরা লিখতে পারি L=Length@#

কোড ব্যাখ্যা: সংকোচনের মাধ্যমে আইট্রেট dকরুন (ইনপুট এবং আউটপুট দৈর্ঘ্যের মধ্যে পার্থক্য)। প্রতিটি আউটপুট তালিকার দৈর্ঘ্যের জন্য, অজানাগুলির একটি তালিকা তৈরি v={x[1],x[2],...,x[L-d]}করুন এবং এটি নিজের সাথে বাম-প্যাডযুক্ত এবং ডান-প্যাডযুক্ত দৈর্ঘ্যে L( PadLeft[v,L]+PadRight[v,L]) যুক্ত করুন, তারপরে এই যোগটি ইনপুট তালিকার সমান করে সেট করুন এবং অজানাগুলির জন্য সমাধান করুন x[1]...x[L-d]। সংক্ষিপ্ততম সমাধানটি চয়ন করুন, যা সর্বশেষটি উত্পন্ন হয়েছে: wপ্রতিবার কোনও সমাধান পাওয়া গেলে কেবল পরিবর্তনশীল ওভাররাইট করা চালিয়ে যান ।

আন-গল্ফ করা সংস্করণ:

F = Function[A,                                  (* A is the input list *)
  Module[{L = Length[A],                         (* length of A *)
          v,                                     (* list of unknowns *)
          x,                                     (* unknowns in v *)
          w = A},                                (* variable for solution, defaults to A *)
    Do[                                          (* loop over shrinkage: d = Length[A]-Length[output] *)
      v = Array[x, L - d];                       (* list of unknowns to be determined *)
      (w = v /. #) & /@                          (* overwrite w with every... *) 
        Solve[                                   (* ...solution of... *)
          Thread[PadLeft[v,L]+PadRight[v,L]==A], (* ...v added to itself, left-padded and right-padded, equals A *)
          v],                                    (* solve for elements of v *)
    {d, L}];                                     (* loop for shrinkage from 1 to L (the last case d=L is trivial) *)
    w]];                                         (* return the last solution found *)

-1 এর Tr[1^#]পরিবর্তেLength@#
অ্যাটিনিট

2

জেলি , 25 24 বাইট

ðsạ\FḣL_¥,+¥Ż⁹¡$µⱮLṪ⁼¥Ƈȯ

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

একটি মোনাডিক লিঙ্ক যা পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে এবং ফেরত দেয়। প্রযুক্তিগতভাবে, সফল ফলাফলগুলি আরও দুটি তালিকায় নেস্ট করা হয়, তবে যখন একটি সম্পূর্ণ প্রোগ্রাম হিসাবে চালিত হয় তখন স্টাডআউটের অন্তর্নিহিত আউটপুটটি অতিরিক্ত কাজগুলি তালিকাকে উপেক্ষা করে।


2

পাইথন 2 , 113 123 128 127 123 122 বাইট

def f(a,i=1):
 e=a[:i]
 for v in a[i:-i]:e+=v-e[-i],
 return i<=len(a)/2and(min(e)>=0<e[-i:]==a[-i:]and e or f(a,i+1))or a

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

টিফিল্ডে 1 বাইট থেক্স ; এবং 1 বাইট থেক্স থেকে সেবাস্তিয়ান ক্রেফ্টে

প্রতিটি কল এ f , আমরা দৈর্ঘ্যের একটি সম্ভাব্য প্রতিধ্বনি নির্মাণ করি len(a)-i। প্রথম অংশটি ia এর প্রথম বাইট; বাকীটি গণনা করা হয় যাতে প্রতিধ্বনির যোগফলের 'ওভারল্যাপড' বিভাগের জন্য (যেমন, প্রতিধ্বনি-যোগটি সঠিক হয় a[:-i]) সঠিক হবে e

তারপরে খুব স্বল্প-কাটা তুলনা, অ-গল্ফযুক্ত, দেয়:

if i>=len(a)/2+1:
    return a # because it can't be that short, so there is no echo
else:
    if min(e)>=0                       # all elements are non-negative
                 and e[-i:]==a[-i:]:   # and the tails are the same
        return e                       # it's a match!
    else:
        return f(a,i+1)                # recurse

e+=[v-e[-i]]হতে পারেe+=v-e[-i],
TFeld

আপনি আরও একটি চরিত্র শেভ করতে পারেনi<=len(a)/2
সেবাস্তিয়ান ক্রেফট

2

ওল্ফ্রাম ভাষা (গণিত) , 93 বাইট

(b=#;Do[a=#;Do[a[[i+j]]-=a[[j]],{j,2k}];a/.{__?(#>=0&),0}:>(b=a~Drop~-i),{i,k=Tr[1^#]/2}];b)&

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

তালিকায় উপস্থিত সংক্ষিপ্ততম প্রতিধ্বনি প্রদান করে।


দেখে মনে হচ্ছে এভাবে ব্যর্থ হয় {1,1,1}এবং এর {1,0,1}
রোমান

@ রোমান কি এই মামলার কোনওটির প্রতিধ্বনি নেই?
এ্যাটিন্যাট

যেহেতু {1,1,1}কোনও প্রতিধ্বনি নেই, তাই আপনাকে মূল অ্যারেটি ফিরিয়ে দিতে হবে। কারণ {1,0,1}আমি বলতে চাইছি প্রতিধ্বনি {1}তবে স্বীকার করছি নিয়ম কী তা কিছুটা অস্পষ্ট।
রোমান

আহ ঠিক. ধরার জন্য ধন্যবাদ!
attinat

2

পিএইচপি , 124 বাইট

function($a){while(!$z&&++$y<$c=count($b=$a))for($x=0;$x<$c&$z=0<=$b[$x+$y]-=$b[$x++];);return array_slice($b,0,$c-$y)?:$a;}

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

ব্যাখ্যা:

প্রতিধ্বনির প্রতিটি সম্ভাব্য অফসেটের মাধ্যমে ইনপুট অ্যারের একটি অনুলিপি তৈরি করুন এবং লুপ করুন। প্রতিটি কলামের জন্য, ইনপুটটিতে যোগ করার জন্য প্রয়োজনীয় মান নির্ধারণ করতে মূল অবস্থানের সাথে সম্পর্কিত মান থেকে অফসেট পজিশনে মান বিয়োগ করুন। যদি এটি বৈধ হয় (>0), সেই মানটির সাথে column কলামের বিষয়বস্তুগুলি প্রতিস্থাপন করুন। শেষ অবধি চালিয়ে যান এবং কোনও মান যদি অবৈধ না হয় তবে এটি সঠিক উত্তর।

function( $a ) {
  // iterate through all possible offsets of echo
  while( ! $b && ++$y < $c = count( $b = $a ) ) {
    // create a copy of input array, iterate through all elements
    for( $x = 0; $b && $x < $c; ) {
      // if difference between the elements in the offset copy of 
      // the array is positive, subtract the value in the input array
      // from the offset array in the same column
      if ( ( $b[ $x+$y ] -= $b[ $x++ ] ) < 0 ) {
        // result is not valid, erase array and break out of loop
        $b = 0;
      }
    }
  }
  // truncate output array to correct size. if still contains values, 
  // it is a valid result. otherwise return the original array
  return array_slice( $b, 0, $c-$y ) ?: $a;
}

2

পাইথন 3 , 111 বাইট

def f(r,l=1):o=r[:l];o+=(v-o[-l]for v in r[l:]);return l<len(r)and(min(o)<any(o[-l:])and f(r,l+1)or o[:-l])or r

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

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

অবহেলিত, পুনরাবৃত্তিযোগ্য সংস্করণ

def remove_echo(arr):
    l = 1
    while l < len(arr):
        out = arr[:l]
        out += (v - out[-l] for v in arr[l:])
        if min(out) >= 0 and out[-l:] == [0] * l:
            return out[:-l]
        l += 1
    return arr

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


1
@ 40৪০ কেবি আমি পরীক্ষিত উত্তরটি আমার কোডের প্রত্যাশিত ফলাফলের সাথে মেলে কিনা এবং আমি কোনও মিল নেই তবেই বার্তা প্রিন্ট করে কিনা তা আমি পরীক্ষা করেছিলাম। সুতরাং কোনও আউটপুট মানেই সব কিছু ঠিক। আমি স্বীকার করি যে এটি প্রথম নজরে বিভ্রান্ত হতে পারে এবং আমি কোনও ম্যাচে "সঠিক" মুদ্রণের জন্য এটি পরে আপডেট করব।
জোয়েল

1
@ 640KB আপডেট হয়েছে।
জোয়েল

1

কাঠকয়লা , 62 বাইট

≔⁰ζF⊘Lθ«≔E⊕ι⁰ηFLθ§≔ηκ⁻§θκ§ηκ¿⬤η¬κ≔⊕ιζ»F⁻Lθζ⊞υ⁻§θι∧ζ∧¬‹ιζ§υ±ζIυ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔⁰ζ

ধরুন কোন প্রতিধ্বনি নেই

F⊘Lθ«

প্রতিধ্বনি সমস্ত সম্ভাব্য প্রারম্ভিক পয়েন্ট চেষ্টা করুন। দ্রষ্টব্য: আমি হয়ত প্রশ্নটি ভুলভাবে পড়েছি এবং যথেষ্ট আকারের প্রতিধ্বনি চেষ্টা করছি না, সেক্ষেত্রে ক্ষেত্রেটি প্রয়োজনীয় হবে না।

≔E⊕ι⁰η

প্রতিধ্বনির সূচনা পয়েন্টের সমান আকারের শূন্যের অ্যারে দিয়ে শুরু করুন।

FLθ§≔ηκ⁻§θκ§ηκ

আসল অ্যারেতে প্রতিটি উপাদানের জন্য ইকো অ্যারেতে উপাদানটি এটি থেকে চক্রাকারে বিয়োগ করুন। প্রতিধ্বনির অ্যারেতে প্রতিটি উপাদান এভাবে পৃথক হওয়া উপাদানগুলির বিকল্প যোগফল তৈরি করে।

¿⬤η¬κ≔⊕ιζ»

যদি সমস্ত পরিবর্তনের পরিমাণগুলি শূন্য হয় তবে এটি একটি সম্ভাব্য সূচনা পয়েন্ট হিসাবে সংরক্ষণ করুন। (সুতরাং যদি একাধিক সম্ভাবনা থাকে তবে বৃহত্তম সম্ভাব্য শুরুর পয়েন্টটি ব্যবহৃত হয়।)

F⁻Lθζ⊞υ⁻§θι∧ζ∧¬‹ιζ§υ±ζ

উপযুক্ত পূর্বে গণনা করা উপাদান থেকে শুরু বিন্দুর পরে উপাদানগুলি বিয়োগ করে প্রতিধ্বনি অ্যারে তৈরি করুন।

Iυ

পৃথক লাইনে অন্তর্নিহিত আউটপুট জন্য স্ট্রিং এ কাস্ট করুন।

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