Notcalc (Calcule a resposta errada)


33

Objetivo:

Dados dois números naturais (números inteiros de 0 ao infinito), imprima um número que não seja a soma desses números, mas que seja um número natural.

Exemplos de soluções (TI-Basic):

  • A+B+1

  • not(A+B)

Soluções inválidas:

  • A+B-1(para entradas 0,0, retorna -1, o que não é natural)

  • "ABC"( ABCnão é um número)

Notas:

  • A saída deve sempre ser uma soma de dois números naturais (que na verdade é apenas um número natural)

  • -1, undefined, infinity, NaNE mensagens de erro não são números naturais. Para nossos propósitos, 0é natural (embora nem todos os matemáticos concordem).


1
Talvez tomemos os números como strings e a saída como string?
Xnor

1
A saída pode ter zeros à esquerda?
Kritixi Lithos

1
Eu presumo que os estouros precisam ser levados em consideração, então o resultado de 2 ^ 32 -1 e 2 não deve ser negativo, certo?
adrianmp

1
Apenas uma pequena observação porque gosto de prestar atenção a detalhes inúteis: 0 não é um número natural. Se você alterar a primeira frase para "Dados dois inteiros não negativos ...", não haverá mais detalhes inúteis para comentar. :)
peech

6
@peech Isso não é verdade. 0 é considerado um número natural sob algumas definições. Você não pode vê-lo porque foi excluído, mas houve uma extensa conversa sobre esse assunto.
Assistente de trigo

Respostas:


36

RProgN , 4 3 1 Byte

O riscado 4 ainda é 4; (

E

A mais simples das soluções compara se A e B são iguais. Envia true, que RProgN vê como 1, se forem iguais, ou false, também conhecido como 0, caso contrário.

Casos de teste

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

Experimente online!


22
Acabei de descer a toca do coelho com seu link riscado. Eu classificá-lo <s> 4 </s> / 4
Rohan Jhunjhunwala 14/02

2
@RohanJhunjhunwala segure meu 4, eu vou entrar
Albert Renshaw

4
4 <- u + 0336 (caráter combinar) pode ser uma maneira melhor de fazer isso
Albert Renshaw


3
@AlbertRenshaw, o velho PPCG riscou 4-a-roo?
Rɪᴋᴇʀ

15

Retina , 3 bytes

 
1

Experimente online!

(A primeira linha tem um espaço antes da nova linha. O Stack Exchange não é muito bom em mostrar espaços em branco à direita.)

Entrada são os números em decimal, separados por um espaço (por exemplo 12 34). Este programa apenas altera o espaço para a 1, criando um número muito grande para ser a soma dos números de entrada (ele necessariamente possui pelo menos mais 2 dígitos do que qualquer um deles, e a adição de dois números produz uma saída com não mais que 1 dígito a mais que o entrada maior).


2
0 0também deve funcionar.
216 Dennis

1
@ Dennis: Eu estava pensando sobre isso. 010é considerado um número inteiro através de basicamente todos os analisadores de números inteiros. Eu posso ver um argumento potencial 0 8inválido com base no que 018é considerado octal inválido por meio de alguns analisadores de números inteiros (embora seja considerado 18 decimal por outros). Observe que este programa está muito satisfeito em lidar com os zeros iniciais na entrada , tratando-os como decimais; e escrevi programas que produzem zeros à esquerda para outras perguntas sem que as pessoas percebam um problema. Existe uma meta post relevante sobre o assunto?

2
Ou . 1se você não quiser devolver zeros à esquerda.
Martin Ender

@MartinEnder>, mas é um número natural
wizzwizz4

@ wizzwizz4 Não estou seguindo.
Martin Ender

15

Python , 13 bytes

[(0,0)].count

Experimente online! Recebe a entrada como uma tupla.

O uso de um método de objeto para a função evita o clichê de a lambda.

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

Aqui, a idéia é mapear (0,0)para 1e tudo o mais para 0. Como apenas 0+0fornece uma soma 0entre números naturais, isso sempre evita corresponder à soma.

Se alguém pudesse produzir um booleano aqui, o que acho obscuro, um byte poderia ser salvo como

(0,0).__ge__

Isso verifica se a tupla de entrada é no máximo (0,0), o que é verdadeiro apenas para (0,0). Em Python, True==1e False==0. Ainda mais sombrio, a saída via código de saída e o tratamento como um Python Boolen economizaria dois bytes:

[(0,0)].pop

Se a E / S da string for permitida e os zeros à esquerda estiverem OK, existe a solução de 8 bytes

'1'.join

Isso concatena a1b, que é sempre maior que a+b.


1
int.__eq__para 10 bytes
Azul

@muddyfish Sim, eu também vi a resposta de suever, não pensei em usar a igualdade. Porém, ele retorna um bool, que acho duvidoso em um desafio que solicita uma saída numérica.
Xnor

1
Na IMO, se nadar como um número e grasnar como um número, é razoável supor que seja um número.
CalculatorFeline

13

MATL et al. 1 byte

=

Aceita dois números naturais como entradas e os compara. Se eles são iguais, a saída é 1e, se não forem iguais, a saída é 0. Essa é a mesma abordagem da solução da @ ATaco.


3
A =solução também funciona no Jelly por 1 byte. Eu pensei em mencioná-lo nos comentários, pois não parece valer a pena criar uma resposta separada para a solução trivial.

@ ais523 Atualizado para incluir isso. Obrigado.
Suever

2
Também em Stacked. Experimente online!
Conor O'Brien

Você pode adicionar APL e J?
Adám

@ Adám Coisa certa. Você tem um link TIO ao qual eu possa conectar?
Suever 14/02

10

Javascript, 10 bytes

x=>y=>!x+y

Toma dois números usando a sintaxe de currying da seguinte forma:

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

4
Bem vindo ao site! :)
DJMcMayhem

Obrigado =) Estou lendo desafios há um tempo, apenas tentando encontrar um bom lugar para começar.
Malivil

9

Vim, 3 bytes / pressionamentos de tecla

<C-a>gJ

Experimente online!

Observe que <C-a>na verdade é ctrl-a , que representa byte 0x01.

Adoro quando o vim (que nem sequer é uma linguagem de programação) pode competir com as linguagens do golfe. :) A entrada vem neste formato:

a
b

Isso simplesmente incrementa o primeiro número em um (esta é a <C-a>parte) e, em seguida, une as representações de string dos dois números. Até onde eu sei, isso nunca deve resultar na soma.


9

Flak cerebral , 8 bytes

({}{}())

Experimente online!

Esta é a resposta mais fácil de ler que já escrevi. :)

Explicação:

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

Soluções alternativas (também 8 bytes):

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

Existem várias outras soluções que funcionam apenas com números positivos:

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

7

Geléia , 2 bytes

+‘

O + adiciona as duas entradas e o 'incrementa a resposta em um

Experimente online!


Essa resposta me deixa gelada.
MD XF

Aposto que sim: P
Christopher

Tecnicamente, isso não ocorre, (a+b)+1mas a+(b+1)porque a cadeia da díade-mônada fGé tratada como f(a, G(b)). Nesse caso, é a mesma coisa, mas tecnicamente é diferente: P #
HyperNeutrino

6

TI-Basic, 3 bytes

not(max(Ans

Soluções alternativas:

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

É interessante que você tenha feito os exemplos da pergunta no TI-Basic, mas você esqueceu o mais curto A=B(ou talvez tenhamos sido nós que descobrimos?)


1
Ninguém gosta quando o OP publica uma solução super curta na pergunta, dificultando a solução.
mbomb007

@ mbomb007 Suponho, mas esses eram apenas trechos e não programas completos. A adição Prompt A,B:a eles aumenta a contagem de bytes para oito bytes cada.
Timtech

1
@Timtech Exatamente. Eu não queria dar boas respostas como exemplos, só queria exemplos.
Julian Lachniet

@JulianLachniet eu entender e apreciar que :)
Timtech

6

Braquilog , 2 bytes

+<

Experimente online!

Explicação

+     The sum of the elements in the Input...
 <    ...is strictly less than the Output
      (implicitely label the output with an integer respecting this constraint)

Isso sempre resultará em A+B+1, se Input = [A, B].


5

Mathematica, 5 bytes

1+##&

Produz a soma dos dois argumentos mais 1. Por exemplo, 1+##&[2,5]produz 8.

(Nota: Binomialquase funciona, embora Binomial[1,0]=1e Binomial[4,2]=6são contra-exemplos, eu acho que eles são os únicos contra-exemplos, no entanto.)


Pochhammerparece ser um melhor que Binomial. Tanto quanto eu posso dizer, apenas 1,0falha.
Martin Ender

Ah, e KroneckerDeltafunciona para todas as entradas (sendo o equivalente da verificação de igualdade em alguns dos esolangs). Na verdade, é mais curto para reimplementar como Boole[#==#2]&, mas presumo que você estava procurando por um built-in que funcionasse como está.
Martin Ender

5

PHP, 17 bytes

<?=1-join($argv);

Execute assim:

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

Explicação

Isso apenas concatena os argumentos. O primeiro argumento (nome do script) contém -. Então isso resulta em um número negativo, que eu nego com o sinal de menos. Então adiciono 1, caso o primeiro número de entrada seja a 0(0123 = 123).



4

Turtlèd , 12 bytes

faz números muito grandes

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

Experimente online!

Explicação:

'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]

Assim, gera 10 ** (x + y).



4

Java (OpenJDK 9) , 10 bytes

a->b->a-~b

Experimente online!


1
Com currying, você pode poupar um byte: a->b->a-~b. Também trabalha com Java 8, qualquer edição (por isso não há necessidade de especificar o OpenJDK 9)
Olivier Grégoire

@ OlivierGrégoire O Java começou a se parecer com o JS agora> _>
Kritixi Lithos

@KritixiLithos Bem ... tivemos uma dica que isso iria acontecer há anos: Java Script ;-)
Olivier Grégoire

@KritixiLithos A especificação para Java 9 tem uma seção sobre 'Conformidade com ECMAScript 6'.
Pavel

@ OlivierGrégoire Sim, mas esse envio foi gerado automaticamente, razão pela qual o 9 foi adicionado.
Pavel

4

HODOR , 40 bytes (não concorrente)

Este é provavelmente o programa mais curto que Hodor já escreveu!

É o que acontece quando você não tem nada para fazer durante as férias escolares de duas semanas: produza um monte de linguagens de piadas realmente facilmente codificadas que não fazem absolutamente nada. Yay para férias escolares !!!

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

Walder era o nome original de Hodor e, portanto, é necessário para iniciar o programa.

Hodor?! pega um número de STDIN ou um único caractere e define o acumulador para a entrada

Hodor adicione 1 ao acumulador

HODOR! gera o acumulador como um número

HODOR!!!mata Hodor! Nããããão!

Este é o pseudo-código:

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

1
Eu acho que você precisa criar um nome diferente para o seu idioma, a menos que este seja um intérprete do idioma Hodor pré-existente criado em 2015, o que eu tenho certeza que isso não é.
mbomb007

@ mbomb007 Não, isso não é meu, mas existem idiomas com nomes duplicados. Eu sei de dois chamados 7 neste site (eu simplesmente não consigo encontrá-los no momento)
caird coinheringaahing

1
Tenho certeza de que só existe um chamado 7, e é este . Você pode alterar a capitalização do título para uma solução fácil, algo como HODOR.
mbomb007

@ mbomb007 o meu é o odor H e o deles é o odor h, então isso pode ser suficiente?
caird coinheringaahing

Não, o deles tem uma letra maiúscula H, como você pode ver toda vez que ele usa o nome do idioma em seu site.
mbomb007

3

SmileBASIC, 4 bytes

!A+B

não (A) + B
1+1=2 -> !1+1 -> 0+1=1
0+1=1 -> !0+1 -> 1+1=2


Por curiosidade, como isso suporta 2+1?
ATaco

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

3

R, 13 bytes

sum(scan()+1)

Obrigado a Jonathan Allan por suas contribuições!


@ JonathanAllan: Você está certo, eu mudei minha resposta. Obrigado !
Frédéric

OK, com certeza 00é o mesmo 0que, talvez sep="1"?
Jonathan Allan

@JonathanAllan: caramba! Obrigado novamente !
Frédéric

Olhando para as dicas de golfe em R , parece que scan()deve estar bem, aceitando uma entrada de vetor, como esta . Mas podemos fazer um byte melhor com cat(sum(scan()+1)). Talvez haja mais curto?
Jonathan Allan

1
Com o catque é um programa completo, a alternativa seria uma função sem nome para o mesmo custo bytefunction(a,b)a+b+1
Jonathan Allan

3

05AB1E , 1 byte

Q

Funciona da mesma forma que a RProgNresposta.

Verifica se ae bé o mesmo. Se sim, imprima 1. Caso contrário, imprima0

Experimente online!


3
¢(a.count (b)) também deve funcionar para 1 byte.
Riley

@Riley, você pode postar isso como sua própria resposta.
Okx

2
Não é diferente o suficiente para precisar de sua própria resposta. Eu pensei que poderíamos apenas combinar as soluções de 1 byte em uma resposta.
Riley

3

C 26 24 19 bytes

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

Versão não destruída:

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

Espero ter acertado as especificações. Definitivamente pode ser encurtado !?

@Pavel Obrigado por salvar 2 bytes

@ Neil Obrigado pela sua contribuição.


1
Você precisa por ()!c+d?
Pavel

@Pavel Você está certo, os suportes eram inúteis, atualizados!
Abel Tom

2
Não tenho 100% de certeza, mas acho que você pode remover o espaço no seu return, comoreturn!c+d;
Metoniem 13/02/17

1
Perder o retorno e, em vez atribuí-lo com algo como c + = d!
Ahemone

1
@AlbertRenshaw Não é algo em que eu possa confiar para a portabilidade, mas aqui estão alguns exemplos. Eu não posso começar a trabalhar offline e parece que ele precisa ser atribuído a uma variável não argumento em TIO .. tio.run/nexus/...
Ahemone

3

MATLAB / oitava, 3 bytes

@eq

Aceita duas entradas e verifica a igualdade e produz 1se forem iguais ou 0não.

Demo Online


4
Isso não deveria ser @eq? Isso retorna um identificador de função que pode ser usado para avaliar a função desejada, enquanto apenas eqnão faz sentido.
Sanchises

@ Sanchises Já vi muitas respostas nos dois sentidos: codegolf.stackexchange.com/questions/106149/compute-the-median/… . Na verdade, não tenho certeza qual é o preferido.
Suever

Hummm. Eu acho que isso é mais como um trecho, enquanto o @transforma em uma construção de linguagem válida. Mas talvez eu esteja apenas sendo pedante.
Sanchises

3

brainfuck, 12 bytes

Solução simples que gera A+B+1.

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

Experimente online


Resposta alternativa (12 bytes):,>,[-<++>]<.
Julian Lachniet

@JulianLachniet irá produzir A + 2B?
george

A + 2B hackeado quando B = 0
l4m2

@ mbomb007 eu estou dizendo a ,>,[-<++>]<.solução
l4m2

@JulianLachniet Sim, essa não é uma resposta válida porque A + 2B para a entrada B = 0 fornece A. #
mbomb007

3

dc , 5 bytes

?1n+n

Experimente online!

Entrada: Dois números naturais separados por um espaço em stdin.

Saída: o dígito 1 seguido imediatamente pela soma dos dois números, que é um número maior que a soma dos dois números.

Exemplo:

Entrada: 222 333

Saída: 1555


3

PHP, 13 bytes; (17 sem REPL)

!max($argv)+0

Exemplos

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

Para aqueles sem uso de REPL

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

e corra usando

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

Esta resposta não é válida porque não produz nada
aross

@aross Se boolean elenco foi problema que eu atualizei a minha resposta
mleko

Sim, você abordou os dois problemas. A saída seria verdadeira / falsa, não 1/0. Além disso, REPL :)
aross

3

Cubix, 9 8 bytes

u-~OII/@

Explicação

Expandida, esta resposta tem a seguinte aparência:

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

A ordem das instruções executadas é II~-O@

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

Testado para todas as combinações de entradas em que ambas estão no intervalo 0-100.

Experimente aqui .


3

APL - 4 bytes

1++/

Pega array, soma seus elementos e adiciona um. Teste:

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


3

Hexagonia , 7 bytes

?<.!?)@

Experimente online!

Ou em um formato mais legível,

 ? <
. ! ?
 ) @

Isso supera a atual solução Hexagony de 11 bytes.

Explicação:

Se o primeiro número não for 0, o programa seguirá o seguinte caminho:

Não 0

Isso lê o primeiro número e ramifica à direita. Em seguida, ele lê o segundo número, seguido pelo empacotamento e pela tentativa de ler um terceiro, mas isso não existe e, portanto, lê 0. Isso é impresso e o programa é encerrado (observe que, se a> 0, pois b não é negativo a + b> 0).

Se o primeiro número for 0, o programa seguirá o seguinte caminho:

É 0

Lê o primeiro número e ramificações restantes. Ele atinge a esquina, seguindo a rota ao longo da borda noroeste, porque o número é 0 e lê o segundo número. Ele envolve, depois incrementa o segundo número e imprime.

Ainda é 0

Ele salta contra o <, imprimindo a segunda entrada incrementada novamente. Ele incrementa o valor e retoma a borda nordeste novamente, mas desta vez porque a borda atual é um valor não negativo duas vezes incrementado que é definitivamente positivo. Em seguida, tenta obter uma terceira entrada, mas recebe 0.

Ainda é 0 um pouco mais

Finalmente, envolve e é desviado pela seta, tenta ler uma quarta entrada e obtém 0 novamente. Ele envolve e tenta ler uma quinta entrada e recebe 0 pela última vez. Isso imprime e envolve as @saídas e.

Observe que b * (10 ^ k + 1) * 10> 0 + b = b onde k é o comprimento de b em dígitos, portanto, isso funciona.


2

Bilhar , 11 caracteres = 17 bytes

⇲
⇲
+
1
+
↥

Implementos x + y + 1. Bem elementar. Leva as entradas em duas linhas separadas. (A propósito, o idioma foi modificado um pouco após o desafio, mas apenas para suprimir a solicitação de entrada, sem ter certeza se essa resposta ainda é válida).

7 caracteres = 11 bytes, não concorrente

Este é mais curto, mas só é possível após uma nova atualização do idioma:

⇲
⇲
=
$

Esse uso x == y, que foi descaradamente roubado da solução RProgN da @ ATaco [espero que você não se importe (:]. O $, na saída, gera quantas bolas passaram por ele.


slightly after the languageerro de digitação, também acho que quando o idioma tinha o prompt de entrada, ainda seria válido. Eu não acho que os padrões de saída são de que saídas rigorosos, e não supressível são permitidos eu acho
Destrutível Lemon

@DestructibleWatermelon Oh, esse foi um erro de digitação estranho. Obrigado pelo esclarecimento. Na verdade, eu modifiquei o idioma, depois vim e vi o desafio, então decidi adicionar essa nota para o caso de alguém decidir ser exigente em verificar quando o push foi feito no GitHub, mas obrigado por esclarecer isso.
HyperNeutrino
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.