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 .


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!



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.


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.

15

JavaScript (ES6), 7 bytes

n=>n||1

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


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).


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

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

Haskell, 5 bytes

max 1

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

No hay mucho que explicar.



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.


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 @.







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

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.


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)


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



4

Python, 15 bytes

lambda n:n or 1

¿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

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).


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


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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.