Notcalc (Рассчитать неправильный ответ)


33

Цель:

Учитывая два натуральных числа (целые числа от 0 до бесконечности), выведите число, которое не является суммой этих чисел, но является натуральным числом.

Примеры решений (TI-Basic):

  • A+B+1

  • not(A+B)

Неверные решения:

  • A+B-1(для входных данных 0,0возвращается -1, что не является естественным)

  • "ABC"( ABCэто не число)

Заметки:

  • Выходные данные всегда должны быть суммой двух натуральных чисел (на самом деле это просто натуральное число)

  • -1, undefined, infinity, NaNИ сообщения об ошибках не натуральные числа. Для наших целей 0это естественно (хотя не все математики согласны).


1
Может быть, мы берем числа как строки и выводим как строки?
xnor

1
Может ли вывод иметь начальные нули?
Kritixi Lithos

1
Я предполагаю, что переполнения должны быть приняты во внимание, поэтому результат 2 ^ 32 -1 и 2 не должен быть отрицательным, верно?
adrianmp

1
Просто небольшое замечание, потому что мне нравится обращать внимание на бесполезные детали: 0 - это не натуральное число. Если вы измените первое предложение на «Учитывая два неотрицательных целых числа ...», мне не останется никаких бесполезных подробностей, чтобы комментировать. :)
peech

6
@peech Это не правда. 0 считается натуральным числом по некоторым определениям. Вы не можете видеть это, потому что это было удалено, но был большой разговор по этому вопросу.
Пшеничный волшебник

Ответы:


36

RProgN , 4 3 1 байт

Зачеркнуто 4 - это еще 4; (

E

Самое простое из решений, сравнивает, если A и B равны. Pushes true, который RProgN видит как 1, если они одинаковы, или false aka 0 в противном случае.

Тестовые случаи

0+0 = 1
1+0 = 0
0+1 = 0
1+1 = 1

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


22
Я только что спустился в кроличью нору с твоей перечеркнутой ссылкой. Я оцениваю это <s> 4 </ s> / 4
Rohan Jhunjhunwala

2
@RohanJhunjhunwala держи мои 4, я иду
Альберт Реншоу

4
̶4̶ <- u + 0336 (объединение символов) может быть лучшим способом сделать это
Альберт Реншоу

3
PSA: codegolf.stackexchange.com/questions/48100/… Оригинальная перечеркнутая вещь
Кристофер

3
@AlbertRenshaw, старый PPCG вычеркнутый 4-a-roo?
Rɪᴋᴇʀ

15

Сетчатка , 3 байта

 
1

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

(В первой строке перед новой строкой есть пробел. Stack Exchange не очень хорошо показывает конечные пробелы.)

Ввод - это десятичные числа, разделенные пробелом (например 12 34). Эта программа просто меняет пространство на a 1, создавая число, слишком большое, чтобы быть суммой входных чисел (оно обязательно должно иметь по крайней мере на 2 цифры больше, чем любая из них, и добавление двух чисел приводит к выводу не более чем на 1 цифру больше больший вклад).


2
0 0также должен работать.
Деннис

1
@Dennis: мне было интересно об этом. 010считается целым числом через практически все целочисленные парсеры. Я вижу потенциальный аргумент, который 0 8является недопустимым на основании того, что 018он считается недействительным восьмеричным через некоторые целочисленные парсеры (хотя другие считают его десятичным 18). Обратите внимание, что эта программа очень рада обрабатывать начальные нули на входе , обрабатывая их как десятичные; и я написал программы, которые выводят начальные нули для других вопросов, и люди не видят проблемы. Есть ли соответствующий мета-пост на эту тему?

2
Или . 1если вы не хотите возвращать ведущие нули самостоятельно.
Мартин Эндер

@MartinEnder> но это натуральное число
wizzwizz4

@ wizzwizz4 Я не подписан.
Мартин Эндер

15

Python , 13 байт

[(0,0)].count

Попробуйте онлайн! Принимает ввод как кортеж.

Использование метода объекта для этой функции позволяет избежать использования шаблона lambda.

lambda a,b:a-~b   # 15 bytes

Здесь идея сопоставить (0,0)с 1и всем остальным 0. Поскольку только 0+0дает сумму 0среди натуральных чисел, это всегда позволяет избежать совпадения суммы.

Если бы можно было вывести здесь логическое значение, которое я считаю теневым, байт можно сохранить как

(0,0).__ge__

Это проверяет, является ли входной кортеж не более (0,0), что верно только для (0,0). В Python True==1и False==0. Более того, вывод через код завершения и обработка его как Python Boolen позволит сэкономить два байта:

[(0,0)].pop

Если разрешен строковый ввод-вывод и начальные нули в порядке, есть 8-байтовое решение

'1'.join

Это объединяет a1b, который всегда больше, чем a+b.


1
int.__eq__для 10 байтов
синий

@muddyfish Да, я тоже видел ответ Суевера, не думал об использовании равенства. Это возвращает bool, хотя, я думаю, это сомнительно на вызов, который требует вывода числа.
xnor

1
IMO, если он плавает как число и крякает как число, разумно предположить, что это число.
CalculatorFeline

13

MATL и соавт. 1 байт

=

Принимает два натуральных числа в качестве входных данных и сравнивает их. Если они равны, вывод равен, 1а если они не равны, вывод равен 0. Это тот же подход, что и решение @ ATaco.


3
=Решение также работает в желе 1 байт. Я думал, что упомяну это в комментариях, так как не стоит создавать отдельный ответ для тривиального решения.

@ ais523 Обновлено, чтобы включить это. Спасибо.
17


Можете ли вы добавить APL и J?
Адам

@ Адам Конечно. У вас есть ссылка на TIO, на которую я могу ссылаться?
Suever

10

Javascript, 10 байт

x=>y=>!x+y

Принимает 2 числа, используя синтаксис карри, например:

(x=>y=>!x+y)(0)(0) // 1

4
Добро пожаловать на сайт! :)
DJMcMayhem

Спасибо =) Я некоторое время читаю проблемы, просто пытаюсь найти хорошее место для начала.
Маливиль,

9

Vim, 3 байта / нажатия клавиш

<C-a>gJ

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

Обратите внимание, что <C-a>на самом деле это ctrl-a , который представляет байт 0x01.

Мне нравится, когда vim (который даже не является языком программирования) может конкурировать с языками игры в гольф. :) Вход приходит в следующем формате:

a
b

Это просто увеличивает первое число на единицу (это <C-a>часть), а затем соединяет строковые представления двух чисел вместе. Насколько я могу сказать, это никогда не должно привести к сумме.


9

Brain-Flak , 8 байт

({}{}())

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

Это самый читаемый ответ, который я когда-либо писал. :)

Объяснение:

(      )    # Push the sum of all the following:
 {}         #   The first input
   {}       #   The second input
     ()     #   and one

Альтернативные решения (также 8 байтов):

({}[]{})    # Sum + 1
([]{}{})    # Sum + 2

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

(<{}>{})
({}<{}>)
({{}}())
({{}()})
({{}}[])
({{}[]})

7

Желе , 2 байта

+‘

+ Добавляет два входа вместе, затем 'увеличивает ответ на единицу

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


Этот ответ делает меня желе.
MD XF

Бьюсь об заклад, это делает: P
Кристофер

Технически это не (a+b)+1только a+(b+1)потому , что диада монада цепь fGрассматривается как f(a, G(b)). В этом случае это то же самое, но технически, как это работает, иначе: P
HyperNeutrino

6

TI-Basic, 3 байта

not(max(Ans

Альтернативные решения:

10^(sum(Ans         3 bytes @DestructibleWatermelon
not(sum(Ans         3 bytes
1+sum(Ans           4 bytes
Input :X=Y          5 bytes @ATaco
Input :X+not(Y      6 bytes
Input :not(X+Y      6 bytes
Input :10^(X+Y      6 bytes
Input :X+Y+1        7 bytes
Input :not(max(X,Y  7 bytes
Ans(1)=Ans(2        8 bytes
Ans(1)+not(Ans(2    9 bytes
not(Ans(1)+Ans(2    9 bytes

Интересно, что вы сделали примеры вопросов в TI-Basic, но вы забыли более короткое A=B(или, может быть, мы должны были это выяснить?)


1
Никто не любит, когда ОП публикует супер короткое решение вопроса, что делает его трудным для победы.
mbomb007

@ mbomb007 Полагаю, это были только фрагменты, а не полные программы. Добавление Prompt A,B:к ним приносит количество байтов до восьми байтов каждый.
Timtech

1
@Timtech Точно. Я не хотел давать хорошие ответы в качестве примеров, я просто хотел примеры.
Джулиан Лакниет,

@JulianLachniet Я понимаю и ценю это :)
Timtech


5

Mathematica, 5 байтов

1+##&

Выводит сумму двух аргументов плюс 1. Например, 1+##&[2,5]возвращает 8.

(Примечание: Binomialпочти работает, хотя Binomial[1,0]=1и Binomial[4,2]=6являются контрпримерами; я думаю, что они единственные контрпримеры.)


Pochhammerкажется, один лучше, чем Binomial. Насколько я могу сказать, только 1,0терпит неудачу.
Мартин Эндер

Ах, и KroneckerDeltaработает для всех входных данных (будучи эквивалентом проверки на равенство в некоторых из esolangs). Это на самом деле короче, чтобы переопределить как Boole[#==#2]&, но я предполагаю, что вы искали встроенный, который работает как есть.
Мартин Эндер

5

PHP, 17 байт

<?=1-join($argv);

Запустите так:

echo '<?=1-join($argv);' | php -- 0 0
> 1

объяснение

Это просто объединяет аргументы. Первый аргумент (имя скрипта) содержит -. В результате получается отрицательное число, которое я отрицаю со знаком минус. Затем я добавляю 1, на случай, если первое введенное число - 0(0123 = 123).



4

Turtlèd , 12 байт

делает очень большие числа

'1?:?:[1'0l]

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

Объяснение:

'1                write one on the starting grid square
  ?:?:            take a number, move right that many (repeat)
      [1   ]      while not on a grid square with a one on it
        '0l       put a zero on that square, move left
[implicit output of grid]

Таким образом, он выдает 10 ** (x + y).



4

1
С выделкой, вы можете сэкономить байты: a->b->a-~b. Также работает с Java 8, любой редакцией (поэтому нет необходимости указывать OpenJDK 9)
Оливье Грегуар,

@ OlivierGrégoire Java теперь стала выглядеть как JS> _>
Kritixi Lithos

@KritixiLithos Ну ... у нас был намек на то, что это будет происходить годами: Java Script ;-)
Оливье Грегуар

@KritixiLithos В спецификации для Java 9 есть раздел «Соответствие ECMAScript 6».
Павел

@ OlivierGrégoire Да, но это представление было сгенерировано автоматически, поэтому 9 было добавлено.
Павел

4

HODOR , 40 байт (не конкурирует)

Это, наверное, самая короткая программа, когда-либо написанная Ходором!

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

Walder
Hodor?!
Hodor?!
Hodor HODOR!
HODOR!!!

Walder было оригинальное имя Ходора и поэтому необходимо, чтобы начать программу.

Hodor?! принимает число из STDIN или один символ и устанавливает аккумулятор на вход

Hodor добавить 1 к аккумулятору

HODOR! выводит аккумулятор в виде числа

HODOR!!!убивает Ходора! Noooooo!

Это псевдокод:

Take input
Take input
Add 1 to sum(inputs)
Output value

1
Я думаю, вам нужно придумать другое название для вашего языка, если только это не интерпретатор ранее существовавшего языка Ходора, созданного в 2015 году, что, я уверен, это не так.
mbomb007

@ mbomb007 Нет, это не мое, но есть языки с повторяющимися именами. На этом сайте мне известны два человека, которым звонили 7 (я просто не могу их найти в данный момент)
caird coinheringaahing

1
Я почти уверен, что есть только один по имени 7, и это тот . Вы можете изменить заглавную букву для легкого исправления, что-то вроде HODOR.
mbomb007

@ mbomb007 шахтные является H и запах их есть ч запах , так что может быть достаточно?
caird coinheringaahing

Нет, у них есть заглавная буква H, как вы можете видеть каждый раз, когда он использует название языка на своем веб-сайте.
mbomb007

3

SmileBASIC, 4 байта

!A+B

нет (А) + В
1+1=2 -> !1+1 -> 0+1=1
0+1=1 -> !0+1 -> 1+1=2


Из любопытства, как это поддерживает 2+1?
ATaco

2
2+1=3 -> !2+1 -> 0+1=1
12Me21

3

R 13 байт

sum(scan()+1)

Спасибо Джонатану Аллану за его вклад!


@JonathanAllan: Ты прав, я изменил свой ответ. Благодарность !
Фредерик

Ладно, точно так 00же, как 0если бы, может быть sep="1"?
Джонатан Аллан

@JonathanAllan: черт возьми! Еще раз спасибо !
Фредерик,

Глядя на советы по игре в гольф в R, кажется, все scan()должно быть хорошо, принимая входные данные вектора, как это . Но мы можем сделать один байт лучше с cat(sum(scan()+1)). Может быть, есть короче?
Джонатан Аллан

1
С catполной программой, альтернативой была бы безымянная функция при той же стоимости в байтахfunction(a,b)a+b+1
Джонатан Аллан

3

05AB1E , 1 байт

Q

Работает так же, как RProgNответ.

Проверяет, если aи bодинаковы. Если так, распечатайте 1. В противном случае распечатайте0

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


3
¢(a.count (b)) также должен работать на 1 байт.
Райли

@ Райли, ты можешь опубликовать это как свой собственный ответ.
Okx

2
Это не настолько отличается, чтобы нуждаться в собственном ответе. Я думал, что мы могли бы просто объединить оба однобайтовых решения в один ответ.
Райли

3

C 26 24 19 байтов

f(c,d){return!c+d;}

Безголовая версия:

int f(int c,int d)
{
   return !c+d; 
}

Надеюсь, я правильно понял спецификацию. Определенно можно сократить !?

@Pavel Спасибо за сохранение 2 байта

@Neil Спасибо за ваш вклад.


1
Тебе нужно ()вокруг !c+d?
Павел

@Pavel Вы правы, скобки были бесполезны, обновлены!
Абель Том

2
Не уверен на 100%, но я думаю, что вы можете удалить пространство в вашем return, какreturn!c+d;
Metoniem

1
Потерять возврат и вместо этого назначить что-то вроде c + =! D
Ahemone

1
@AlbertRenshaw Это не то, на что я бы рассчитывал в отношении портативности, но вот несколько примеров. Я не могу заставить его работать в автономном режиме, и кажется, что его нужно назначить переменной без аргументов в TIO
Ahemone

3

MATLAB / Octave, 3 байта

@eq

Принимает два входа и проверяет равенство и дает, 1если они равны, и в 0противном случае.

Демо онлайн


4
Не должно ли это быть @eq? Это возвращает дескриптор функции, который может быть использован для оценки желаемой функции, в то время как просто eqбессмысленно.
Sanchises

@ Рассылки Я видел, что многие ответы идут в обе стороны: codegolf.stackexchange.com/questions/106149/compute-the-median/… . Я на самом деле не уверен, что является предпочтительным.
17

Хммм. Я должен думать, что это больше похоже на фрагмент, а @превращает его в правильную языковую конструкцию. Но, может быть, я просто педантичен.
Sanchises

3

брейкфук, 12 байт

Простое решение, которое выводит A+B+1.

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

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


Альтернативный ответ (12 байт):,>,[-<++>]<.
Джулиан Лахниет

@JulianLachniet будет ли это выводить A + 2B?
джордж

A + 2B взломали, когда B = 0
l4m2

@ mbomb007 Я говорю ,>,[-<++>]<.решение
l4m2

@JulianLachniet Да, это неправильный ответ, потому что A + 2B для входа B = 0, дает A.
mbomb007


3

PHP, 13 байт; (17 REPL-менее)

!max($argv)+0

Примеры

[0,0] -> 1
[0,1] -> 0
[1,0] -> 0

Для тех, кто не использует REPL

<?=!max($argv)+0;

и запустить с помощью

echo '<?=!max($argv)+0;' | php -- 0 0

Ответ на этот вопрос не является действительным , поскольку он не выводит ничего
aross

@aross Если логическая Отливка проблема , я обновил свой ответ
Mleko

Да, вы решили обе проблемы. Вывод будет true / false, а не 1/0. Кроме того , РЕПЛ :)
aross

3

Cubix, 9 8 байтов

u-~OII/@

объяснение

В развернутом виде этот ответ выглядит так:

    u -
    ~ O
I I / @ . . . .
. . . . . . . .
    . .
    . .

Порядок выполнения инструкций II~-O@

II~-O@
I      # First input
   -   # Minus
 I~    # NOT(second input)
    O  # Output as integer
     @ # End program

Протестировано для всех комбинаций входов, где оба находятся в диапазоне 0-100.

Попробуй это здесь .


3

APL - 4 байта

1++/

Принимает массив, суммирует его элементы и добавляет один. Тест:

 1++/1 2  
4
 1++/1 0
2


3

Гексагония , 7 байт

?<.!?)@

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

Или в более читаемом формате,

 ? <
. ! ?
 ) @

Это превосходит текущее решение Hexagony в 11 байтов.

Объяснение:

Если первое число не равно 0, программа выберет следующий путь:

Не 0

Это читает первый номер и ветви справа. Затем он читает второе число, за которым следует перенос и попытка прочитать третье, но этого не существует, поэтому он читает 0. Это печатается, и программа завершается (обратите внимание, что если a> 0, так как b неотрицательный a + Ь> 0).

Если первое число равно 0, программа выбирает следующий путь:

0

Это читает первый номер и оставленные ветви. Он попадает в угол, беря маршрут по северо-западному краю, потому что число равно 0, и читает второе число. Он оборачивает, затем увеличивает второй номер и печатает.

Еще 0

Он отскакивает от <, снова печатая увеличенный второй ввод. Он увеличивает значение и снова принимает северо-восточный фронт, но на этот раз, потому что текущий фронт - неотрицательное значение, увеличенное вдвое, что определенно положительно. Затем он пытается получить третий вход, но вместо этого получает 0.

Еще 0 еще

Наконец, он переносится и отклоняется стрелкой, затем пытается прочитать четвертый ввод и снова получает 0. Он оборачивается и пытается прочитать пятый вход и получает 0 в последний раз. Это он печатает, и переносит @и выходит.

Обратите внимание, что b * (10 ^ k + 1) * 10> 0 + b = b, где k - длина b в цифрах, так что это работает.


2

Бильярд , 11 символов = 17 байтов

⇲
⇲
+
1
+
↥

Реализует x + y + 1. Довольно элементарно. Он принимает входные данные в двух отдельных строках. (Кстати, язык был немного изменен после запроса, но только для того, чтобы подавить подсказку от ввода, не уверен, что этот ответ все еще действителен).

7 символов = 11 байт, не конкурирующие

Это короче, но возможно только после нового обновления языка:

⇲
⇲
=
$

Это использует x == y, который был бесстыдно украден из решения RProgN @ ATaco [надеюсь, вы не возражаете (:). При $выходе выводит, сколько шаров прошло над ним.


slightly after the languageопечатка, также я думаю, что, когда у языка была подсказка ввода, это все еще было бы допустимо. Я не думаю, что выходные стандарты
Разрушаемый Лимон

@DestructibleWatermelon О, это была странная опечатка. Благодарю за разъяснение. Я на самом деле изменил язык, затем пришел и увидел проблему, поэтому я решил добавить туда эту заметку на тот случай, если кто-нибудь решит быть разборчивым в проверке, когда был сделан пуш в GitHub, но спасибо за разъяснение этого.
HyperNeutrino
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.