Добавить без добавления (или любой из 4 основных арифметических операторов)


40

Проблема:

Ваша цель состоит в том, чтобы добавить два входных чисел без использования какой - либо из следующих операторов математики: +,-,*,/.

Кроме того, вы не можете использовать какие-либо встроенные функции, которые предназначены для замены этих математических операторов.

Подсчет очков:

Наименьший код (в количестве байтов) выигрывает.

Обновить

Большинство программ, которые я видел, объединяют два массива, содержащие их номера, или делают first numberиз символов, добавляют second numberсимволы, а затем подсчитывают их все.

Самый короткий счетчик массива: APL с 8 символами, Tobia

Объединение кратчайшего массива: Golfscript с 4 символами, от Doorknob

Кратчайшее логарифмическое решение: TI-89 Basic с 19-ю символами, по Quincunx

Интеграционное решение: Mathematica с 45 символами, автор Michael Stern

Круто, на мой взгляд: побитовые операторы в JavaScript, Дэйв


Будет ли у него поплавки?
Исмаэль Мигель

7
У него будут отрицательные числа? (В настоящее время все ответы предполагают, что числа будут положительными, поэтому вам, вероятно, не следует это менять)
Ручка двери

4
Как насчет математических решений? Вы забыли перечислить их! Это объединяет, и это играет с логарифмами
Джастин

3
Почему вы приняли одно из более длительных решений? Это потому, что он принимает отрицательные числа, а самые короткие решения ( это и это ) - нет? Если так, мой ответ поддерживает отрицательные числа (он также поддерживает число с плавающей запятой) и короче этого. Вы пометили этот вопрос как code-golf , поэтому вы обязаны принять самое короткое решение.
Джастин

2
Определите «число». Любое целое число? Неотрицательные целые числа? Должны ли они быть базовым 10?
SuperJedi224

Ответы:


2

Smalltalk, 21 13

Все перечисленные ниже работают только с натуральными числами. Смотрите другой ответ Smalltalk для серьезного.

version1

переходя к большому целому числу и запрашивая у него высокий битовый индекс (плохо, индексирование ST основано на 1, поэтому мне нужно дополнительное смещение вправо):

(((1<<a)<<b)>>1)highBit

version2

аналогично и даже немного короче (из-за правил старшинства Smalltalk и не требуется смещение вправо):

1<<a<<b log:2 

Version3

другой вариант темы «размер коллекции-конкатенации»,
заданный двумя числами a и b,

((Array new:a),(Array new:b)) size

используя Intervals в качестве коллекции, мы получаем более дружественную к памяти версию ;-) за 21 символ:

((1to:a),(1to:b))size

хотя не рекомендуется для тяжелого хруста числа.

Version4

Для вашего удовольствия, если вы хотите обменять время на память, попробуйте:

Time secondsToRun:[
   Delay waitForSeconds:a.
   Delay waitForSeconds:b.
]

что обычно достаточно точно (но не гарантирует ;-)))

version5

записать в файл и спросить его размер

(
    [
        't' asFilename 
            writingFileDo:[:s |
                a timesRepeat:[ 'x' printOn:s ].
                b timesRepeat:[ 'x' printOn:s ]];
            fileSize 
    ] ensure:[
        't' asFilename delete
    ]
) print

45

Javascript (25)

while(y)x^=y,y=(y&x^y)<<1

Это добавляет две переменные x и y, используя только побитовые операции, и сохраняет результат в x.

Это работает и с отрицательными числами.


1
@dave, если вы переключаетесь на какое-то время, вы можете сохранить еще два символа с помощью while(y)x^=y,y=(y&x^y)<<1!
Дом Гастингс


3
@ user3125280, проблема не в том, что «делать сложение без добавления» (что немного бессмысленно), а в том, чтобы «делать сложение без базовых математических операторов»
Брайан С.

8
@ user3125280, извините, но любая грубость, которую вы интерпретировали из моего комментария, не была предназначена. Я действительно думаю, что вам будет трудно найти очень многих людей, которые согласны с тем, что XOR следует сгруппировать с PLUS в категорию «базовая арифметика». Даже за пределами поиска людей, которые согласны, OP явно выявляет, какие операторы не разрешены, и XOR не является одним из них. Ergo, это правильный ответ.
Брайан С.

3
for(;y;y=(y&x^y)<<1)x^=yна 1 байт короче :)
Уильям Барбоза

22

C - 38 байт

main(){return printf("%*c%*c",3,0,4);}

Я тут немного обманываю, ОП сказал, что не использует никаких математических операторов.

Формат *in printf()означает, что ширина поля, используемого для печати символа, берется из аргумента printf(), в данном случае 3 и 4. Возвращаемым значением printf()является количество напечатанных символов. Таким образом, он печатает один ' 'с шириной поля 3, а другой с шириной поля 4, всего 3 + 4 символа.

Возвращаемое значение - добавленные номера в printf()вызове.


3
Вы должны сделать 3 и 4 параметра, и функция не должна быть main. Кроме того, если вам все равно, что вы печатаете, вы можете заменить один ' 'на 0и пропустить второй.
Угорен

17

Python - 49 байт

Предполагая ввод путем размещения в переменных xи y.

from math import*
print log(log((e**e**x)**e**y))

Это 61-байтовое решение является полной программой:

from math import*
print log(log((e**e**input())**e**input()))

Учитывая, что вы не запретили возведение в степень, мне пришлось опубликовать это. Когда вы упрощаете выражение, используя свойства логарифмов, вы просто получаете print input() + input().

Это поддерживает как отрицательные числа, так и числа с плавающей запятой.

Примечание: я последовал совету Гнибблера и разделил этот ответ на три части. Это решение Mathematica , и это решение TI-89 Basic .


Я пытался сделать что-то подобное с javascript, но забыл, какова была формула, так как прошло несколько лет с того момента, когда я видел это и искал в интернете, чтобы найти это.
Виктор Стафуса

4
@Victor Я создал формулу самостоятельно. Я очень хорошо помню математику.
Джастин

1
Ваша Mathematica очень близка, вам просто нужно использовать встроенные символы. Log [Log [(E ^ E ^ x) ^ (E ^ y)]] работает (23 символа или 22, если вы используете @ для обозначения внешней функции).
Майкл Стерн

«Если мне позволят принять ввод путем размещения в переменных x и y ..» Я думаю, что вы можете - другие так же поступают.
blabla999

@MichaelStern: Вы можете сохранить еще два символа, пропустив круглые скобки E^y. Использование, Log[Log[(E^E^x)^E^y]]кажется, работает нормально.
alexwlchan

14

JavaScript [25 байт]

~eval([1,~x,~y].join(''))

1
Ваш ответ выглядит нехорошо (и привлекает отрицательное мнение), но на самом деле это хороший ответ. Пожалуйста, удалите это, чтобы избавиться от отрицательных голосов и перепечатайте это с некоторым текстом, объясняющим это. Я буду приветствовать ваш новый ответ.
Виктор Стафуса

1
Теперь это выглядит очень хорошо, мне это нравится. Конечно, стоит больше голосов.
VisioN

13

Mathematica, 21 байт

Есть несколько способов сделать это в Mathematica. Во-первых, используйте функцию Accumulate и бросьте все, кроме последнего числа в выводе. Как и в моем другом решении ниже, я предполагаю, что входные числа находятся в переменных aи b. 21 байт.

Last@Accumulate@{a, b}

Веселее, хотя это 45 символов, используйте цифры, чтобы определить линию и интегрировать под ней.

Integrate[Fit[{{0, a}, {2, b}}, {x, 1}, x], {x, 0, 2}]

В качестве бонуса оба решения работают для всех комплексных чисел, а не только для положительных целых чисел, как, кажется, имеет место для некоторых других решений здесь.


2
Я люблю интеграцию! (хотя, строго говоря, это что-то складывает). +1
blabla999

1-е решение недействительно. Цитирую автора задачи: «Кроме того, вы не можете использовать какие-либо встроенные функции, предназначенные для замены этих математических операторов». Я дал это решение: function _(){return array_sum(func_get_args());}. Я должен был снять это, потому что я не мог найти короткий способ "исправить" это.
Исмаэль Мигель

@Ismael Miguel Accumulate [] не предназначен для замены Plus. Это происходит, чтобы дать сумму списка чисел среди его выходов, и я использую это преимущество.
Майкл Стерн

Но это делает сумму всех элементов в этом списке, верно? Если это так, по моему мнению, это так же недействительно, как использование array_sum()в php, что делает то же самое.
Исмаэль Мигель

3
@Ismael Miguel Существует функция Mathematica, которая суммирует массив, который называется Total []. Я согласен, что это будет противоречить правилам, указанным для использования этой функции, но я этого не сделал. Вывод Accumulate [{a, b}] не является a + b.
Майкл Стерн

12

GolfScript, 6 4 символа / байт

Ввод в виде 10, 5(=> 15).

~,+,

+Является массив конкатенация, а не дополнение.

Как это работает, это то, что ,используется для создания массива длины, которой является число ( 0,1,...,n-2,n-1). Это делается для обоих чисел, затем массивы объединяются. ,снова используется для другой цели, чтобы найти длину результирующего массива.

Теперь вот трюк . Мне действительно нравится этот, потому что он злоупотребляет форматом ввода. Это выглядит , как это просто ввод массива, но на самом деле, так как вход выполняется в GolfScript коде, первый ,уже сделал для меня! (Старая 6-символьная версия была ~,\,+,с форматом ввода 10 5, который я сбрил на 2 символа, исключив \,(массив подкачки)).

Старая версия (12) :

Создает функцию f.

{n*\n*+,}:f;

Символы *и +являются повторением и объединением строк, а не арифметическими функциями.

Объяснение: nсоздает односимвольную строку (новую строку). Затем это повторяется aраз, затем делается то же самое b. Строки объединяются, а затем ,используются для длины строки.


Это работает и для отрицательных чисел?
Майкл Стерн

@MichaelStern Нет, но это никогда не упоминалось в вопросе. Хм, я добавил комментарий. Большинство (фактически, все ) других ответов также предполагают положительные результаты.
Ручка

Смотрите мое решение Mathematica. На правильном языке возможны решения для отрицательных чисел.
Майкл Стерн

@MichaelStern LOL @ "правильный язык" на этом сайте всех мест ...
Tobia

10

C 29 27 байт

Использование арифметики указателей:

f(x,y)char*x;{return&x[y];}

x определяется как указатель, но вызывающая сторона должна передать целое число.

Анонимный пользователь предложил следующее - также 27 байтов, но параметры являются целыми числами:

f(x,y){return&x[(char*)y];}

Первая форма, вероятно, плохо работает, если передать два ints в распространенных в настоящее время системах, где int32-битные, а указатели имеют 64-битные. Второй избегает этой проблемы.
HVd

@hvd, оба работают, по крайней мере на Linux 64bit. Целочисленные параметры в любом случае расширяются до размера регистра машины.
Угорен

Ах, честно, согласился, что это будет обычным делом. Я прокомментирую еще раз, если я смогу найти конкретный пример, который не работает, хотя. :)
HVd

8

Brainf * ck, 9 36

,>,[-<+>]

++[->,[->>[>]+[<]<]<]>>>[<[->+<]>>]<

Это работает без использования простого сложения; он проходит и кладет след 1, а затем считает их

Примечание: +и -являются просто единичными приращениями, и без них ничего нельзя сделать в brainf * ck. Они на самом деле не сложение / вычитание, поэтому я считаю, что это все еще имеет значение.


-1. Это простое дополнение. Если вы сделали что-то, что не является сложением, умножением и т. Д., То это считается, но как есть, это не считается.
Джастин

@Quincunx Я исправил это; я сделал это, пропустив и оставив след, а затем подметая и «подбирая» этот след
ASKASK

3
Перевернутый. Хорошая работа.
Джастин

6

J (6)

Вы не сказали, что мы не можем использовать функцию succ:

>:@[&0

Использование:

   9>:@[&0(8)
17

Он просто делает 9 повторений >:по 8.

Список конкатенации подход работает, тоже: #@,&(#&0). И - я знаю, что это противоречит правилам - я не могу позволить этому ответу остаться без самого решения J-ish: *&.^(умножение при возведении в степень).


5

Постскриптум, 41

Мы определяем функцию с выражением длиной 41 байт:

/a{0 moveto 0 rmoveto currentpoint pop}def

Тогда мы называем это, например, как:

gs -q -dBATCH -c '/a{0 moveto 0 rmoveto currentpoint pop}def' -c '10 15 a ='

Который дает

25.0

Он легко обрабатывает негативы и плавающие, в отличие от большинства конкурентов :-)



4

Smalltalk (сейчас серьезно), 123 118 105 (*)

Извините за ответ дважды, но считаю это серьезным ответом, тогда как другой был больше похож на юмор. Следующее фактически выполняется прямо в этот самый момент на всех наших машинах (хотя на аппаратном уровне). Странно, что это никому не пришло в голову ...

Комбинируя два полумесяца и выполняя все биты слов параллельно, мы получаем (входные данные a, b; выходные данные в s) читаемую версию:

  s := a bitXor: b.            
  c := (a & b)<<1.             

  [c ~= 0] whileTrue:[        
     cn := s & c.
     s := s bitXor: c.
     c := cn<<1.
     c := c & 16rFFFFFFFF.
     s := s & 16rFFFFFFFF.
  ].
  s           

Цикл предназначен для распространения переноса. Маски гарантируют обработку целых чисел со знаком (без них возможны только числа без знака). Они также определяют длину слова, указанное выше для 32-битной операции. Если вы предпочитаете 68-битное дополнение, измените на 16rFFFFFFFFFFFFFFFFF.

версия для гольфа (123 символа) (избегая длинной маски, повторно используя в м):

[:a :b||s c n m|s:=a bitXor:b.c:=(a&b)<<1.[c~=0]whileTrue:[n:=s&c.s:=s bitXor:c.c:=n<<1.c:=c&m:=16rFFFFFFFF.s:=s&m].s]

(*) Используя -1 вместо 16rFFFFFFFF, мы можем лучше играть в гольф, но код больше не работает для чисел с произвольной точностью, только для smallIntegers размером с машинное слово (представление для largeIntegers не определено в стандарте Ansi):

[:a :b||s c n|s:=a bitXor:b.c:=(a&b)<<1.[c~=0]whileTrue:[n:=s&c.s:=s bitXor:c.c:=n<<1.c:=c&-1.s:=s&-1].s]

это уменьшает размер кода до 105 символов.


Это код-гольф, так что гольф ваш ответ.
Виктор Стафуса

1
нет шансов на победу, но я сделаю это для вас ;-)
blabla999

Приятно видеть ответ на Smalltalk!
Зубная щетка

4

APL, 8 и 12

Ничего нового здесь, версия для подсчета массивов:

{≢∊⍳¨⍺⍵}

и журнал ○ версия журнала:

{⍟⍟(**⍺)**⍵}

Я просто думал, что они выглядят круто в APL!

{≢     }       count
  ∊            all the elements in
   ⍳¨          the (two) sequences of naturals from 1 up to
     ⍺⍵        both arguments

 

{⍟⍟        }   the double logarithm of
   (**⍺)       the double exponential of ⍺
        *      raised to
         *⍵    the exponential of ⍵

2
Если честно, в APL все выглядит круто.
Майкл Стерн

Вы можете сделать первую функцию молчаливым префиксом для 5:≢∘∊⍳¨
Адам

@ Adám Да, но мне не нравятся неявные функции, и я затрудняюсь их прочитать.
Тобиа

@ Tobia Может быть, они тебе не нравятся, потому что тебе трудно их читать? Я провожу семинар по этому ... Вы видели мой урок по этому вопросу ?
Адам

@ Adám круто, спасибо! Проверим это.
Тобия

4

sed, 359 байт (без необычного форматирования)

Извините за поздний ответ, и, вероятно, самый длинный ответ здесь. Но я хотел посмотреть, возможно ли это с помощью sed:

                       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/;
                       # # # # # # #  # # # # # # #

Это похоже на https://codegolf.stackexchange.com/a/38087/11259 , который просто увеличивает числа в строке. Но вместо этого он выполняет операции приращения в цикле.

Ввод берется из STDIN в форме "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
$

Обратите внимание, что это работает только для натуральных чисел. Однако (по крайней мере, в теории) это работает для сколь угодно больших целых чисел. Поскольку мы выполняем x операций инкремента для y, порядок может иметь большое значение для скорости: x <y будет быстрее, чем x> y.


4

Тире , 18 байт

time -f%e sleep $@

Требуется время GNU 1,7 или выше. Выход в STDERR.

Попробуйте онлайн!

Обратите внимание, что это не будет работать в B ash, поскольку его встроенная команда time отличается от времени GNU.

За счет одного дополнительного байта \timeможно использовать вместо того, timeчтобы заставить Bash использовать внешнюю команду.


что произойдет, если один из входов будет отрицательным?
Майкл Стерн

4
Это не удается. Как и все остальные ответы.
Деннис

5
Drats! Я надеялся, что это дало результат, прежде чем был задан вопрос.
Tobia

3
Да. Я также возлагал большие надежды на то, что, вставив случайное число, sleep -3я смогу ускорить свои программы. Какое разочарование.
Alfe

1
@userunknown также \timeдолжен работать в Bash.
Денис

3

Javascript (67)

Там наверное намного лучше

a=Array;p=Number;r=prompt;alert(a(p(r())).concat(a(p(r()))).length)

Вы не должны давать однозначный ответ, не зная, нужны ли ему поплавки или нет. И это не справится с NaN. Но это довольно хороший код!
Исмаэль Мигель

Я думаю, что все joinsизлишне. ArrayКонструктор делает массив undefineds, который можно пересчитать:a=Array;p=parseInt;r=prompt;alert(a(p(r())).concat(a(p(r()))).length)
Ben Reich

@BenReich, ты прав, спасибо
Майкл М.

@Michael Кроме того, Numberконструктор спасает 2 персонажаparseInt
Бен Райх

@Michael Кроме того, если вы удалите alert, вывод будет по-прежнему идти на консоль, но это делает ответ немного менее забавным. Вы также можете повторно использовать promptпеременную вместо alert (конструктор предупреждает аргумент подсказкой). В любом случае, хороший ответ!
Бен Райх,

3

Рубин, 18 символов

a.times{b=b.next}

И еще два подробных варианта, 29 символов

[*1..a].concat([*1..b]).size

Другая версия, 32 символа

(''.rjust(a)<<''.rjust(b)).size

3

C # - генерация кода на лету

Да, там на самом деле есть добавление, но не оператор + и даже не каркасная функция, которая выполняет добавление, вместо этого мы генерируем метод на лету, который выполняет добавление.

public static int Add(int i1, int i2)
{
    var dm = new DynamicMethod("add", typeof(int), new[] { typeof(int), typeof(int) });
    var ilg = dm.GetILGenerator();
    ilg.Emit(OpCodes.Ldarg_0);
    ilg.Emit(OpCodes.Ldarg_1);
    ilg.Emit(OpCodes.Add);
    ilg.Emit(OpCodes.Ret);
    var del = (Func<int, int, int>)dm.CreateDelegate(typeof(Func<int, int, int>));
    return del(i1, i2);
}


2

R 36

function(x,y)length(rep(1:2,c(x,y)))

где repстроит вектор из xтех, за которыми следуют yдвойки.


2
Вы можете сделать программу, которая делает то же самое, немного короче:length(rep(1:2,scan()))
Masclins

2

TI Basic 89 - 19 байт

Запустите это в своем TI-89 (домашний экран или приложение для программирования):

ln(ln((e^e^x)^e^y))

Это использует правила журнала для вычисления x+y, как в этом решении . В качестве бонуса он работает для десятичных и целых чисел. Это работает для всех действительных чисел. Если правила логарифма все еще действительны для комплексных показателей, то это работает и для комплексных чисел. Тем не менее, мой калькулятор выплевывает мусор, когда я пытаюсь вставить сложные показатели.


3
Не является ли ln1 байт в TI Basic? Кроме того, вы можете удалить закрывающие скобки, уменьшив их до 15 байт.
ɐɔı'uʎs

2

Спасибо Майклу Стерну за то, что он научил меня нотации Mathematica .

Mathematica - 21 20 байт

Log@Log[(E^E^x)^E^y]

При этом используется тот же подход, что и в этом решении , но в Mathematica его сделать короче. Это работает для отрицательных чисел и чисел с плавающей точкой, а также целых чисел в xи y.

Упрощение выражения с использованием правил журнала дает результат x+y, но это действительно, поскольку оно использует возведение в степень, а не один из 4 основных операторов.


Вы уверены, что это работает для комплексных чисел?
Майкл Стерн

2

C # - строковая арифметика

Мы конвертируем оба числа в строки, добавляем их с обрезкой строки (с помощью переноса и всего, что вы знаете), а затем анализируете до целого числа. Протестировано с i1, i2 в 0..200, работает как шарм. Найти дополнение в этом!

public static int Add(int i1, int i2)
{
    var s1 = new string(i1.ToString().Reverse().ToArray());
    var s2 = new string(i2.ToString().Reverse().ToArray());
    var nums = "01234567890123456789";
    var c = '0';
    var ret = new StringBuilder();
    while (s1.Length > 0 || s2.Length > 0 || c != '0')
    {
        var c1 = s1.Length > 0 ? s1[0] : '0';
        var c2 = s2.Length > 0 ? s2[0] : '0';
        var s = nums;
        s = s.Substring(int.Parse(c1.ToString()));
        s = s.Substring(int.Parse(c2.ToString()));
        s = s.Substring(int.Parse(c.ToString()));
        ret.Append(s[0]);
        if (s1.Length > 0)
            s1 = s1.Substring(1);
        if (s2.Length > 0)
            s2 = s2.Substring(1);
        c = s.Length <= 10 ? '1' : '0';
    }
    return int.Parse(new string(ret.ToString().ToCharArray().Reverse().ToArray()));
}


2

Python - 22 символа

len(range(x)+range(y))

1
Я думаю, что считается дополнением?
TheDoctor

1
это конкатенация
pydud

2

APL: 2

1⊥

Это преобразует числа из базы 1, поэтому (n * 1 ^ 1) + (m * 1 ^ 2), что в точности равно n + m.

Можно попробовать на TryApl.org


2

TI-BASIC, 10

Добавляет XиY

ln(ln(e^(e^(X))^e^(Y

1
Вы уверены, что знаете, как копировать решения: codegolf.stackexchange.com/a/21033/9498
Джастин

Во-первых, это не работает, потому что он использует log (вместо ln (. Во-вторых, на самом деле это десять байтов, если записано в форме ln (ln (e ^ (e ^ (X)) ^ e ^ (Y.
lirtosiast

2

К, 2 байта

#&

Пример использования:

  #&7 212
219

Примените оператор «где» (монадический &) к числам в списке ввода (возможно, воспользовавшись форматом ввода). Это создаст список, содержащий первое число нулей, за которым следует второе число единиц:

  &3 2
0 0 0 1 1

Обычно этот оператор используется как «сборка» для создания списка индексов ненулевых элементов логического списка, но обобщенная форма иногда оказывается полезной.

Затем просто возьмите счет этого списка (монадический #).

Если моя интерпретация входных требований неприемлема, то следующее немного более длинное решение делает то же самое:

{#&x,y}

2

Pyth , 29 байт

AQW!qG0=k.&GH=HxGH=k.<k1=Gk)H

Попробуйте онлайн!

Моя первая подача здесь!

Это компилируется в:

assign('Q',eval_input())     # Q
assign('[G,H]',Q)            #A
while Pnot(equal(G,0)):      #  W!qG0
  assign('k',bitand(G,H))    #       =k.&GH
  assign('H',index(G,H))     #             =HxGH  (index in this case is XOR)
  assign('k',leftshift(k,1)) #                  =k.<k1
  assign('G',k)              #                        =Gk)
imp_print(H)                 #                            H

1
Добро пожаловать на сайт!
Пшеничный волшебник
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.