ํƒœ๊ทธ ๋ณด๊ด€๋ฌผ: algorithm

algorithm

๋ฐฐ์—ด์— ์—์ฝ”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค โ€ฆ ๋ฐฐ์—ด์— ์—์ฝ”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค โ€ฆ ๋ฐฐ์—ด <โ€“ input [ 623, 533, 494, 382 ]

๋„์›€! ๋‚ด ๋ฐฐ์—ด ์ค‘ ์ผ๋ถ€์— ์„ฑ๊ฐ€์‹  ์—์ฝ”๊ฐ€์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ๊ทธ๊ฒƒ์„ ์—†์• ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์›๋ž˜ ๋ฐฐ์—ด์ด ๊ฐ€์šด๋ฐ ์–ด๋”˜๊ฐ€์— ๋ฐ˜๋ณต๋˜์–ด ๊ฐ’์ด ์„œ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด [ 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โ‰คn<10000

    ์ ์–ด๋„ ํ•˜๋‚˜ ๊ฐœ์˜ ์›์†Œ์™€ >0

    .
  • ์—์ฝ”๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ๋‚˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ๋‹ค์Œ์— ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์—์ฝ”๋Š” ์ž…๋ ฅ ๋‚ด์—์„œ ํ•œ ๋ฒˆ๋งŒ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์ „ํ˜€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฐ์ถœ:

  • ์—์ฝ”๊ฐ€ ์ œ๊ฑฐ ๋œ ์ •์ˆ˜
    0โ‰คn<10000

    ์˜ ๋ฐฐ์—ด, ๋ชฉ๋ก ๋“ฑ
  • ์—์ฝ”๊ฐ€ ์—†์œผ๋ฉด ์›๋ž˜ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜์‹ญ์‹œ์˜ค.

๊ทœ์น™๊ณผ ๋“์  :

  • ์ด๊ฒƒ์€ ์ด๋ฏ€๋กœ ๊ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ์ตœ๋‹จ ๋‹ต๋ณ€์ด ์Šน๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ‘œ์ค€ ๊ทœ์น™ ๋ฐ ๊ธฐ๋ณธ I / O ๊ทœ์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ํ—ˆ์  ์€ ๋ฌผ๋ก  ๊ธˆ์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ํ…Œ์ŠคํŠธ ( 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 ]


๋‹ต๋ณ€

MATL , 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

๋‹ต๋ณ€

ํ•˜์Šค์ผˆ , 167 ๋ฐ”์ดํŠธ

๋จผ์ € ๋ฐ˜ํ–ฅ์ด ์žˆ์œผ๋ฉด ์ž…๋ ฅ ๋ฐฐ์—ด์ด ํ˜•์‹์˜ ์ผ๋ถ€ ๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅธ ๋ฐฐ์—ด์˜ ์ปจ๋ณผ ๋ฃจ์…˜์ด๋ผ๋Š” ์ ์— ์œ ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค [1,1],[1,0,1],[1,0,0,1],....

์ฆ‰,์ด ๋ชจ๋“  ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์ด๊ฒƒ์„ ํ™•์ธํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์‚ฐ ์ปจ๋ณผ ๋ฃจ์…˜ / ๋””์ปจ ๋ณผ ๋ฃจ์…˜์€ ๋‹คํ•ญ์‹ ๊ณฑ์…ˆ / ๊ธด ๋‚˜๋ˆ—์…ˆ๊ณผ ๋™์ผํ•˜๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํ•ญ์ƒ ๋ชซ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‹คํ•ญ์‹์„ ์‚ฌ์šฉํ•œ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค.

[1]๋‹ค๋ฅธ ๋ฐฐ์—ด์ด ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด deconvolution [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] 

์˜จ๋ผ์ธ์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค!


๋‹ต๋ณ€

์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ , 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}

์˜จ๋ผ์ธ์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค

Kevin Cruijssen ์—์„œ 40 ๋ฐ”์ดํŠธ

Arnauld ์—์„œ ๋˜ ๋‹ค๋ฅธ 26 ๋ฐ”์ดํŠธ

์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ ๊ณจํ”„ ์‘๋‹ต์€ ์ž ์žฌ์  ์˜คํ”„์…‹์„ ๋ฌดํšจํ™”ํ•˜๊ณ  ์ฐพ์€ ๋‚ด์šฉ์— ๋”ฐ๋ผ ์›๋ž˜ ๋ฐฐ์—ด ๋˜๋Š” ์ƒˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ์งง๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”. ์žฌ๋ฏธ์žˆ๋Š” ๊ฒŒ์ž„์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.


๋‹ต๋ณ€

ํ•˜์Šค์ผˆ, 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

๋‹ต๋ณ€

๋ณผํ”„๋žŒ ์–ธ์–ด (ํ‹ฐ์นด) , 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)&

์˜จ๋ผ์ธ์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค!

attinat ๋•๋ถ„์— โˆ’1 ๋ฐ”์ดํŠธ : ์ธ์ˆ˜๊ฐ€ ์ˆซ์ž ๋ชฉ๋ก ์ผ ๋•Œ 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 *)

๋‹ต๋ณ€

์ ค๋ฆฌ , 25 24 ๋ฐ”์ดํŠธ

รฐsแบก\FแธฃL_ยฅ,+ยฅลปโนยก$ยตโฑฎLแนชโผยฅฦ‡ศฏ

์˜จ๋ผ์ธ์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค!

์ •์ˆ˜ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋ฆฌํ„ดํ•˜๋Š” ๋ชจ๋‚˜๋“œ ๋งํฌ์ž…๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ์„ฑ๊ณต์ ์ธ ๊ฒฐ๊ณผ๋Š” ๋‘ ๊ฐœ์˜ ์ถ”๊ฐ€ ๋ชฉ๋ก์— ์ค‘์ฒฉ๋˜์ง€๋งŒ ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด stdout์— ๋Œ€ํ•œ ์•”์‹œ ์  ์ถœ๋ ฅ์ด ์ค‘๋ณต ๋ชฉ๋ก์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.


๋‹ต๋ณ€

ํŒŒ์ด์ฌ (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 ๋ฐ”์ดํŠธ thx ~ TFeld ; ๊ทธ๋ฆฌ๊ณ  Sebastian Kreft์˜ 1 ๋ฐ”์ดํŠธ thx .

๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ๋งˆ๋‹ค f๊ธธ์ด์˜ ์ž ์žฌ์  ์—์ฝ”๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค len(a)-i. ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์€ ia ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” โ€˜์—์ฝ” ํ•ฉ๊ณ„โ€™๊ฐ€ ์—์ฝ” ํ•ฉ๊ณ„์˜ โ€˜๊ฒน์นœโ€™์„น์…˜์— ๋Œ€ํ•ด ์ •ํ™•ํ•˜๋„๋ก ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค (์ฆ‰, ์—์ฝ” ํ•ฉ๊ณ„๊ฐ€ ์ตœ๋Œ€ ๊ฐ’๊นŒ์ง€ ์ •ํ™•ํ•จ a[:-i]).

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ณจํ”„๋ฅผ ํƒ€์ง€ ์•Š์€ ๋ฐ”๋กœ ๊ฐ€๊ธฐ ๋น„๊ต๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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