Mantente alejado de cero

41

Tarea

Dado un número entero no negativo n, genera 1if si nes 0y genera el valor de lo ncontrario.

Entrada

Un entero no negativo.

  • Si desea aceptar la cadena como entrada, la cadena coincidiría con la siguiente expresión regular: /^(0|[1-9][0-9]*)$/es decir, no debe tener ceros a la izquierda, excepto cuando lo sea 0.
  • Si acepta un entero real como entrada, puede suponer que el entero está dentro de la capacidad de manejo del lenguaje.

Salida

Un entero positivo, especificado anteriormente. Los ceros iniciales no están permitidos. Su salida debe coincidir con la expresión regular /^[1-9][0-9]*$/.

Casos de prueba

input output
    0      1
    1      1
    2      2
    3      3
    4      4
    5      5
    6      6
    7      7

Tanteo

Este es el , por lo que la respuesta más corta en bytes gana.

Se aplican lagunas estándar .

Monja permeable
fuente
1
Probablemente deberías poner un enlace al TNB CMC , ya que de ahí surgió este desafío.
mbomb007
¿La respuesta debe ser una función completa, o puede ser el cuerpo?
Caleb Kleveter
1
@CalebKleveter La regla predeterminada en PPCG es que la respuesta es una función o un programa completo, pero no fragmentos.
Leaky Nun
¿Podemos imprimir la salida con un cero a la izquierda?
MD XF
@MDXF sí, puedes.
Leaky Nun

Respuestas:

18

C (gcc), 14 13 bytes

f(n){n=n?:1;}

¡Gracias a @betseg por recordarme el n?:1truco en los comentarios de la otra respuesta C!

Pruébalo en línea!

C, 17 bytes

f(n){return!n+n;}

Pruébalo en línea!

C, 16 bytes

#define f(n)!n+n

Pruébalo en línea!

Steadybox
fuente
tio.run/nexus/… hmmm ...
betseg
1
@betseg Eso es porque es una macro. El compilador lo ve como 3*!n+nigual 3*0+5.
Steadybox
1
Lo sé, pero creo que debería poder aplicar operadores aritméticos a los valores de "retorno" directamente, por eso es una práctica común poner paréntesis alrededor de las macros. Simplemente no creo que la macro sea válida.
betseg
44
@betseg No creo que sea un requisito en el código de golf. Nunca he visto una respuesta de código de golf con macros C que hagan eso.
Steadybox
1
@hucancode Vea los enlaces de TIO. Debe agregar uno maindesde el que fse llama a la función / macro . Una solución no necesita ser un programa completo por defecto. La versión específica de gcc puede o no compilarse en otro compilador, y puede o no ejecutarse correctamente cuando se compila en otro compilador.
Steadybox
17

Japt , 2 bytes

ª1

Pruébalo en línea!

Explicación

ªes un atajo para el ||operador de JS . Japt tiene una entrada implícita, por lo que este programa calcula input||1y el resultado se envía implícitamente a STDOUT.

w1funcionaría también, tomando el máximo de la entrada y 1.

ETHproducciones
fuente
16

Alice , 7 bytes

1/s
o@i

Pruébalo en línea!

Explicación

1   Push 1. Irrelevant.
/   Reflect to SE. Switch to Ordinal.
i   Read all input as a string.
    Reflect off bottom right corner. Move back NW.
/   Reflect to W. Switch to Cardinal.
1   Push 1.
    IP wraps around to last column.
s   Sort swap: implicitly convert the input to an integer. Then, if the top stack 
    element is less than the one below, the two are swapped. It basically computes
    min and max of two values at the same time, with max on top.
/   Reflect to NW. Switch to Ordinal.
    Immediately reflect off the top boundary. Move SW.
o   Implicitly convert the result to a string and print it.
    Reflect off bottom left corner. Move back NE.
/   Reflect to S. Switch to Cardinal.
@   Terminate the program.
Martin Ender
fuente
15

JavaScript (ES6), 7 bytes

n=>n||1
Arnauld
fuente
55
Alternativa: n=>n+!n(Al menos eso creo)
Matthew Roh
@SIGSEGV Sí, eso funcionaría de hecho. (Eso también podría ser n|!n, aunque este se limita a una cantidad de 31 bits.)
Arnauld
esto se puede simplificar a n || 1. Lo único que se evalúa como falso es 0.
ansiart
1
@ansiart Si su punto es que n=>n||1podría simplificarse n||1, entonces no. Las respuestas aceptables son programas completos o funciones. n=>do_something_with(n)es una función de flecha en la sintaxis de ES6.
Arnauld
1
@StanStrum Estamos obligados a devolver el valor original de nsi no es cero. Un OR bit a bit se modificaría nsiempre que no se establezca el bit menos significativo (p (4|1) === 5. Ej .).
Arnauld
14

Pyth, 2 bytes

+!

Pruébalo en línea

Explicación

+!
 !Q    1 if (implicit) input is 0, 0 otherwise.
+  Q   Add the (implicit) input.
Mnemotécnico
fuente
12

Retina , 4 bytes

^0
1

Pruébalo en línea!

Si la entrada comienza con un cero, reemplácela con un 1. (Funciona porque se garantiza que la entrada no tendrá ceros a la izquierda para valores distintos de cero).

Martin Ender
fuente
12

V , 4 bytes

é0À

Pruébalo en línea!

Abusa de un comportamiento no preferido pero esperado , por lo que realmente no puedo llamarlo un error. Explicación:

En Vim, los comandos aceptan un recuento. Por ejemplo, <C-a>incrementará un número, pero 7<C-a>incrementará un número en 7. Sin embargo, no puede usarlo 0como un conteo, porque

  • 0 ya es un comando (vaya a la primera columna) y

  • En el contexto de un editor de texto, rara vez tiene sentido solicitar que un comando se ejecute 0 veces.

Esto está bien para un editor de texto, pero generalmente es desagradable para un lenguaje de golf, por lo que V sobrescribe algunos comandos para que 0sea ​​un recuento válido. Por ejemplo, é, ñ, Ä, y algunos otros. Sin embargo, dado que <C-a>es un comando vim integrado, no se sobrescribe, por lo que ejecutar esto con una entrada positiva da:

N       " N times:
 <C-a>  "   Increment

Pero correr con 0 como entrada da:

0       " Go to column one
 <C-a>  " Increment

Explicación completa:

é0          " Insert a 0
  À         " Arg1 or 1 times:
   <C-a>    " Increment
DJMcMayhem
fuente
1
La única vez que 0no es un conteo es útil. Ni siquiera lo consideré al principio porque lo he evitado muchas veces
Nmjcman101
12

J , 2 bytes

^*

Pruébalo en línea!

^ [argumento] elevado al poder de

* el signo del argumento (0 si 0 más 1)

Porque 1=0^0en J.

Adán
fuente
12

Haskell, 5 bytes

max 1

Ejemplo de uso: (max 1) 0-> 1.

No hay mucho que explicar.

nimi
fuente
10

dc, 7

?d0r^+p

Se basa en el hecho de que dcevalúa 0 0 a 1, pero 0 n a 0 para todos los demás n.

Pruébalo en línea .

Trauma digital
fuente
10

R, 13 bytes

max(1,scan())

lee nde stdin. Con pmax, puede leer en una lista y devolver el valor apropiado para cada elemento en la lista para +1 byte.

Pruébalo en línea!

Debo señalar que hay otra solución R fina en 13 bytes por Sven Hohenstein que permite otra solución de 13 bytes de

(n=scan())+!n

lo que me hace preguntarme si ese es el límite inferior para R.

Giuseppe
fuente
Otro 13 bytes solución utilizando pryr: pryr::f(n+!n). No puedo encontrar nada más pequeño ...
JayCe
9

Cubix , 6 bytes

OI!1L@

De alguna manera logró colocarlo en un cubo de unidad ... ¡ Pruébelo en línea!

Explicación

Antes de ejecutarse, el código se organiza como una red de cubos:

  O
I ! 1 L
  @

El IP (puntero de instrucción) se coloca en la cara izquierda ( I), hacia la derecha. Las instrucciones que se ejecutan desde allí son:

I  Input a number from STDIN and push it to the stack.
!  If the top number is non-zero, skip the next instruction.
1  Push a 1 (only if the input was zero).
L  Turn left. The IP is now on the top face facing the !.
O  Output the top item as a number.

La IP luego golpea !nuevamente, omitiendo la @en la cara inferior. Esto no es útil, ya que debemos presionar @para finalizar el programa. La IP golpea Lnuevamente y atraviesa la línea media en reversa ( L1!I) antes de terminar Luna vez más, lo que finalmente activa la IP @.

ETHproducciones
fuente
6

Jalea, 2 bytes

Pruébalo en línea!

Casi exactamente mi respuesta de Pyth, pero es mi primer programa Jelly.

Mnemotécnico
fuente
6

Oasis , 2 bytes

Utiliza la siguiente fórmula: a (0) = 1 , a (n) = n

n1

Pruébalo en línea!

Adnan
fuente
1
Agradable. Mi enfoque fue >V.
Leaky Nun
@LeakyNun ¡Qué bien!
Adnan
6

R 20 16 bytes

pryr::f(n+(n<1))
Shayne03
fuente
Bienvenido a PPCG!
Martin Ender
Gracias @MartinEnder. Ya estoy aprendiendo algunos trucos del oficio.
Shayne03
5

Brachylog , 3 bytes

∅1|

Pruébalo en línea!

Explicación

Si agregamos el implícito ?(Entrada) y .(Salida), tenemos:

?∅          Input is empty (that is, [] or "" or 0 or 0.0)
  1.        Output = 1
    |       Else
     ?.     Input = Output
Fatalizar
fuente
5

MarioLANG , 12 bytes

;
=[
:<+
 =:

Pruébalo en línea!

Cómo funciona

Mario comienza en la parte superior izquierda, inicialmente caminando hacia la derecha. Él lee un int de input ( ;) y lo almacena en la celda de memoria actual. Luego se cae del suelo ( =), golpeando [, lo que le hace ignorar el siguiente comando si la celda actual es 0.

Si la celda no es 0, comenzará a caminar hacia la izquierda ( <), generará la celda actual como un int ( :) y caerá a su muerte (fin del programa).

Si la celda es 0, ignora el comando de girar a la izquierda y sigue caminando hacia la derecha. Incrementa la celda actual ( +), la genera y cae a su muerte.

Gato de negocios
fuente
5

Brain-Flak , 22 , 10 bytes

({{}}[]{})

Pruébalo en línea!

Explicación:

Si la entrada no es cero, entonces {{}}sacará todo de la pila y lo evaluará. Si es cero, no aparecerá nada y se evaluará a cero. Entonces correr ({{}})da

No cero:

n

Cero:

0
0

En este punto, agregaremos la altura de la pila (0 para no cero, 1 para cero) y sacaremos un valor más de la pila. (dado que la pila se rellena con un número infinito de 0, aparecerá el 0 superior o un 0 adicional)

DJMcMayhem
fuente
Buen trabajo, pero no es la solución más corta: codegolf.stackexchange.com/a/118520/31203
MegaTom
4

TI-BASIC, 7 bytes

:Prompt X
:X+not(X

Alternativamente,

TI-BASIC, 7 bytes

:Prompt X
:max(X,1
Scott Milner
fuente
4

Hexagony ,7 7 6 bytes

)?<@.!

Expandido:

 ) ?
< @ .
 ! .

Pruébalo en línea!

¡Guardado 1 byte gracias a Martin!

Si el número no es cero, imprímalo; de lo contrario, agréguele uno e imprímalo.

FryAmTheEggman
fuente
4

Python, 15 bytes

lambda n:n or 1
daniero
fuente
¿Por qué no solo n or 16 bytes?
DReispt
2
Porque eso es solo un fragmento, mientras que generalmente respondemos con programas o funciones completos. No estoy seguro de si esto se establece explícitamente en algunas reglas en alguna parte, pero al menos ese es el estándar de facto.
daniero
Citando trichoplax : The rules are not terribly clear. I think we have a consensus on meta that REPLs count, but as a separate language, which would allow snippets in many cases, but snippets are not permitted according to this meta post-> codegolf.meta.stackexchange.com/questions/2419/…
daniero
@trichoplax 1or nsiempre volvería 1, ¿no?
daniero
1
Alternativa con el mismo conteo de bytes de 15 bytes:lambda n:n|1>>n
Kevin Cruijssen
4

dc, 11 bytes

[1]sf?d0=fp

[1]sfalmacena una macro en el registro f que empuja 1 a la parte superior de la pila, ?lee la entrada, d0=fejecuta la macro f si la entrada fue 0, pimprime la parte superior de la pila.

Prueba:

$ dc -e "[1]sf?d0=fp" <<< 0
1
$ dc -e "[1]sf?d0=fp" <<< 1
1
$ dc -e "[1]sf?d0=fp" <<< 42
42
daniero
fuente
4

Excel, 10 bytes

=A1+(A1=0)

Esto ahorra 4 bytes a través de la solución afirmación obvia 'SI', =IF(A1=0,1,A1).

qoou
fuente
3
Y 1 byte menos que el menos obvio=A1+NOT(A1)
Engineer Toast
4

Java 8, 10 bytes

i->i<1?1:i
  • Gracias a @LeakyNun por ahorrar - 1 byte
    • No me di cuenta de que es un entero no negativo
Roman Gräf
fuente
3
i==0puede ser reemplazado pori<1
Leaky Nun
4

R, 13 bytes

n=scan();n+!n

Aquí, scanse usa para leer el valor de entrada n. La negación de n(es decir, !n0 o 1) se agrega a n.

Sven Hohenstein
fuente
3

Mathematica, 9 8 bytes

Por Martin Ender:

#~Max~1&

Primera idea

#/. 0->1&

Función pura con reemplaza 0con 1. El espacio es necesario o cree que estamos dividiendo por .0.

ngenisis
fuente
3

Perl 5, 6 + 2 bytes para los indicadores -l y -p

$_||=1

Toma entrada en líneas separadas de stdin. Corre con las banderas -lp.

Chris
fuente