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

Спробуйте в Інтернеті!

(У першому рядку є пробіл перед новим рядком. Обмін стеками не дуже добре показує пробіли пробілів.)

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


2
0 0також повинні працювати.
Денніс

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

2
Або . 1якщо ви не хочете самі повертати провідні нулі.
Мартін Ендер

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

@ wizzwizz4 Я не стежу.
Мартін Ендер

15

Пітон , 13 байт

[(0,0)].count

Спробуйте в Інтернеті! Вводиться як кортеж.

Використання об'єктного методу для функції дозволяє уникнути котлоагрегату a 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
ІМО, якщо він плаває як число і тремтить як число, розумно вважати, що це число.
CalculatorFeline

13

MATL та ін. 1 байт

=

Приймає два натуральних числа як вхідні дані та порівнює їх. Якщо вони рівні, вихід є, 1а якщо вони не рівні, то вихід є 0. Це той самий підхід, що і рішення @ ATaco.


3
=Рішення також працює в желе 1 байт. Я подумав, що згадую це в коментарях, оскільки, здається, не варто створювати окремої відповіді на тривіальне рішення.

@ ais523 Оновлено, щоб включити це. Спасибі.
Suever


Чи можете ви додати APL та J?
Адам

@ Adám Звичайно. У вас є посилання TIO, на яке я можу покластись?
Suever

10

Javascript, 10 байт

x=>y=>!x+y

Бере 2 числа за допомогою синтаксису currying так:

(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

Мозок-Флак , 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 Рівно. Я не хотів давати гарних відповідей в якості прикладів, я просто хотів прикладів.
Julian Lachniet

@JulianLachniet Я розумію і ціную це :)
Timtech


5

Математика, 5 байт

1+##&

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

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


Pochhammerздається, що краще, ніж Binomial. Наскільки я можу сказати лише 1,0невдачі.
Мартін Ендер

Так, і KroneckerDeltaпрацює для всіх входів (є еквівалентом перевірки рівності в деяких езоланг). Насправді це коротше, ніж повторне виконання Boole[#==#2]&, але я припускаю, що ви шукали вбудований, який працює як є.
Мартін Ендер

5

PHP, 17 байт

<?=1-join($argv);

Бігайте так:

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

Пояснення

Це просто об'єднує аргументи. Перший аргумент (назва сценарію) містить -. Таким чином, це призводить до від'ємного числа, яке я заперечую зі знаком мінус. Тоді я додаю 1, про всяк випадок, коли перший номер введення дорівнює 0(0123 = 123).





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 байт (неконкурентоспроможний)

Це, мабуть, найкоротша програма, яку коли-небудь написав Ходор!

Це те, що відбувається, коли вам не потрібно нічого робити на 2-тижневому шкільному канікулі: складіть купу дійсно легко кодованих жартів, які не роблять абсолютно нічого. Так, на шкільні канікули !!!

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

не (A) + B
1+1=2 -> !1+1 -> 0+1=1
0+1=1 -> !0+1 -> 1+1=2


З цікавості, як це підтримує 2+1?
Атако

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

3

R, 13 байт

sum(scan()+1)

Дякую Джонатану Аллану за його вклад!


@JonathanAllan: Ти маєш рацію, я змінив свою відповідь. Спасибі !
Фредерік

Гаразд, майже впевнений, 00це те саме, 0що, мабуть, можливо sep="1"?
Джонатан Аллан

@JonathanAllan: чорт! Знову дякую !
Фредерік

Looking at the Tips For Golfing In R it seems scan() should be fine, accepting a vector input, like this. But we can do one byte better with cat(sum(scan()+1)). Maybe there is shorter?
Jonathan Allan

1
With the cat it is a full program, the alternative would be an unnamed function for the same byte cost function(a,b)a+b+1
Jonathan Allan

3

05AB1E, 1 byte

Q

Works the same as the RProgN answer.

Checks if a and b are the same. If so, print 1. Otherwise, print 0

Try it online!


3
¢ ( a.count(b) ) should also work for 1 byte.
Riley

@Riley you could post that as your own answer.
Okx

2
It's not different enough to needs it's own answer. I thought we could just combine both 1 byte solutions into one answer.
Riley

3

C 26 24 19 bytes

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

Ungolfed version:

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

I hope I got the specification right. Can definitely be shortened!?

@Pavel Thanks for saving 2 bytes

@Neil Thanks for your input.


1
Do you need () around !c+d?
Pavel

@Pavel You're right, brackets were useless, updated!
Abel Tom

2
Not 100% sure but I think you can remove the space in your return, like return!c+d;
Metoniem

1
Lose the return and instead assign it with something like c+=!d
Ahemone

1
@AlbertRenshaw It's not something I'd rely on for portability but here are a couple of examples. I can't get it to work offline and it seems that it needs to be assigned to a non argument variable on TIO.. tio.run/nexus/…
Ahemone

3

MATLAB / Octave, 3 bytes

@eq

Accepts two inputs and checks for equality and yields 1 if they are equal and 0 otherwise.

Online Demo


4
Shouldn't this be @eq? That returns a function handle which can be used to evaluate to the desired function, while just eq is meaningless.
Sanchises

@Sanchises I've seen many answers go both ways: codegolf.stackexchange.com/questions/106149/compute-the-median/…. I'm not actually sure which is preferred.
Suever

Hmmm. I should think this is more like a snippet, while an @ turns it into a valid language construct. But maybe I'm just being pedantic.
Sanchises

3

brainfuck, 12 bytes

Simple solution that outputs A+B+1.

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

Try it online


Alternate answer (12 bytes): ,>,[-<++>]<.
Julian Lachniet

@JulianLachniet will that output A+2B?
george

A+2B hacked when B=0
l4m2

@mbomb007 I'm saying the ,>,[-<++>]<. solution
l4m2

@JulianLachniet Yeah, that's not a valid answer because A+2B for input B=0, gives A.
mbomb007

3

dc, 5 bytes

?1n+n

Try it online!

Input: Two natural numbers separated by a space on stdin.

Output: The digit 1 immediately followed by the sum of the two numbers, which is a number larger than the sum of the two numbers.

Example:

Input: 222 333

Output: 1555


3

PHP, 13 bytes; (17 REPL-less)

!max($argv)+0

Examples

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

For those without REPL use

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

and run using

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

This answer is not valid because it doesn't output anything
aross

@aross If boolean cast was problem I updated my answer
mleko

Yes, you addressed both problems. The output would be true/false, not 1/0. Also, REPL :)
aross

3

Cubix, 9 8 bytes

u-~OII/@

Explanation

Expanded, this answer looks like this:

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

The order of the instructions that are executed is II~-O@

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

Tested for all combinations of inputs where both are in the range 0-100.

Try it here.




3

Hexagony, 7 bytes

?<.!?)@

Try it online!

Or in more readable format,

 ? <
. ! ?
 ) @

This beats the current Hexagony solution of 11 bytes.

Explanation:

If the first number is not 0, the program takes the following path:

Not 0

This reads the first number and branches right. Then it reads the second number, followed by wrapping and trying to read a third, but that doesn't exist so it reads 0. This is printed and the program terminated (note that if a>0, since b is non-negative a+b>0).

If the first number is 0, the program takes the following path to start with:

Is 0

This reads the first number and branches left. It hits the corner, taking the route from along the north-west edge because the number is 0, and reads the second number. It wraps, then increments the second number and prints.

Is still 0

It bounces against the <, printing the incremented second input again. It increments the value and takes the north-east edge again, but this time because the current edge a twice-incremented non-negative value which is definitely positive. It then tries to get a third input, but receives 0 instead.

Is still 0 some more

Finally it wraps and gets diverted by the arrow, then tries to read a fourth input and gets 0 again. It wraps and tries to read a fifth input and receives 0 for the last time. This it prints, and wraps to the @ and exits.

Note that b*(10^k+1)*10>0+b=b where k is the length of b in digits, so this works.


2

Billiards, 11 characters = 17 bytes

⇲
⇲
+
1
+
↥

Implements x + y + 1. Pretty elementary. It takes the inputs on two separate lines. (By the way, the language was modified slightly after the challenge, but only to suppress the prompt from inputting, not sure if this answer is still valid).

7 characters = 11 bytes, non-competing

This one is shorter but only possible after a new update of the language:

⇲
⇲
=
$

This uses x == y, which was shamelessly stolen from @ATaco's RProgN solution [ hope you don't mind (: ]. The $, on exit, outputs how many balls passed over it.


slightly after the language typo, also I think when the language had the input prompt, it would still be valid. I don't think output standards are that strict, and non-suppressible outputs are allowed I think
Destructible Lemon

@DestructibleWatermelon Oh, that was a weird typo. Thanks for the clarification. I actually modified the language, then came and saw the challenge, so I decided to add that note in there in case anyone decided to be picky about checking when the push was made to GitHub, but thank you for clarifying that.
HyperNeutrino
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.