Перл 5 for($i=0,$a=explode(" ",$argv[1]),$c=count($a);$i<$c/2;$i++)echo$i==$c-$i-1?$a[$i]:$a[$i]+$a[$c-$i-1]."\n";
, 23 bytes
sizeof(int)==sizeof(char*)
Попробуйте онлайн!
Perl необычен тем, что изменение массива допустимо во время его работы в цикле. Итак, вы можете иметь argv
walking from front to back while using i,j,*k;f(char**s){k=(int*)s;while(s[++i])k[i]=atoi(s[i]);while(++j<=--i)printf("%d\n",k[i]+(i==j?0:k[j]));}
эффективно идти сзади вперед, удаляя элементы массива, которые остановят цикл, когда они встретятся посередине:
argv
Однако это не работает для нечетного числа элементов, поскольку в середине оба realloc()
и strtok()
это средний элемент, поэтому вы получаете вдвое большее значение.
Поэтому вместо этого я использую еще один странный факт использования циклов Perl: переменная цикла не является копией соответствующей позиции массива, а является ее псевдонимом. Если вы измените atoi()
then you change the corresponding array element. In this case I want to both get the value of i[9],j,k;f(char*s){for(s=strtok(s," ");j++,s;i[j]=atoi(s),s=strtok(0," "));while(--j>=++k)printf("%d\n",i[j]+(j==k?0:i[k]));}
и измените это на def x(a);puts a.shift.to_i+a.pop.to_i;return if a.length==0;x a;end
so that the def f(x):
x,o=[int(i) for i in x.split()],[];y=len(x)
for i in range(int(y/2)):o+=[x[i]+x[-i-1]]
if y%2!=0:o+=[x[int(y/2)]]
return o
возвращает ноль при обработке среднего элемента. Самый короткий путь (без необходимости func[b][l: length? b
repeat n l / 2[print b/(n) + b/(l - n + 1)]if odd? l[print b/(n + 1)]]
) to do that is func[s][b: to-block s
l: length? b
repeat n l / 2[print b/(n) + b/(l - n + 1)]if odd? l[print b/(n + 1)]]
который меняется, например. .pop||0
to {say .shift+(.pop||0) while $_}(.words.Array)
который оценивается как Perl6 -ne
in a numeric context. The part after the substitution is preserved in def f(s):
s=[int(i)for i in s.split(' ')];s.insert(len(s)//2,0)
for i in range(len(s)//2):print s[i]+s[-i-1]
который будет 1 2 3 4 5 a
6
6
3 ok
2 2 A
4 ok
-5 3 -8 2 A
-3
-5 ok
in the example. And since : A BEGIN DEPTH 1 - ROLL + CR . DEPTH 2 <= UNTIL DEPTH 1 = IF CR . THEN ;
возвращает количество замен ( lambda i:[i[x]+i[-(x+1)]for x in range(len(i)/2)]+[i[x+1]]*(len(i)%2)
in this case) the expression x
оба установят i=map(int,input().split())
for y in[i[x]+i[-(x+1)]for x in range(len(i)/2)]+[i[x+1]]*(len(i)%2):print y
to zero and return the original value.
Однако для этого потребуется пробел после i=[*map(int,input().split())]
l=len(i)
for a,b in zip(i,i[:int(l/2-.5):-1]):print(a+b)
if l&1:print(i[l//2])
. So finally I use yet another perl oddity, the fact that the expression stack also uses aliases of the values and variables you are processing. Therefore f(all captured middle numbers)
тоже работает. Когда a- -b
is put on the expression stack it is not set yet but when next f=x=>([a,m='',b]=x.split(/ (.*) | /),b?a- -b+`
`+f(m):a)
выполняется, он меняется на старое значение s->{var a=s.split(" ");for(int i=0,l=a.length;i<l--;)System.out.println(i<l?new Long(a[i++])+new Long(a[l]):a[i]);}
in place just before the multiplication is done. This is also the reason why the simpler seeming
a->{for(int i=0,l=a.length;i<l--;)System.out.println(i<l?a[i++]+a[l]:a[i]);}
делает нет работа. Первый *.[^*/2,{$_-1...$_/2}].&roundrobin».sum
gets changed to .say for .=words[^*/2]Z+ |.[$_-1...$_/2],0
непосредственно перед первым добавлением. Вам нужно будет принудительно скопировать что-то вроде
.&{$_,{S:s/(\S+) (.*?) (\S+)?$ {say $0+($2//0)}/$1/}...''}
чтобы это сработало