Stai lontano da zero


41

Compito

Dato un numero intero non negativo n, output 1if nis 0e output del valore di nelse.

Ingresso

Un numero intero non negativo.

  • Se si desidera accettare la stringa come input, la stringa corrisponderebbe al seguente regex:, /^(0|[1-9][0-9]*)$/cioè non deve avere zero iniziali, tranne quando lo è 0.
  • Se si accetta un numero intero reale come input, è possibile supporre che il numero intero rientri nella capacità di gestione della lingua.

Produzione

Un numero intero positivo, specificato sopra. Gli zeri iniziali non sono ammessi. L'output dovrebbe corrispondere al regex /^[1-9][0-9]*$/.

Casi test

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

punteggio

Questo è , quindi vince la risposta più breve in byte.

Si applicano scappatoie standard .


1
Probabilmente dovresti mettere un collegamento alla CMC di TNB , poiché è qui che nasce questa sfida.
mbomb007,

La risposta deve essere una funzione completa o può essere il corpo?
Caleb Kleveter,

1
@CalebKleveter La regola predefinita in PPCG è che la risposta è una funzione o un programma completo, ma non frammenti.
Leaky Nun,

Possiamo stampare l'output con uno zero iniziale?
MD XF,

@MDXF sì, puoi.
Leaky Nun,

Risposte:


18

C (gcc), 14 13 byte

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

Grazie a @betseg per avermi ricordato il n?:1trucco nei commenti dell'altra risposta C!

Provalo online!

C, 17 byte

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

Provalo online!

C, 16 byte

#define f(n)!n+n

Provalo online!



1
@betseg Questo perché è una macro. Il compilatore lo vede come 3*!n+nuguale 3*0+5.
Steadybox

1
Lo so, ma penso che dovresti essere in grado di applicare direttamente gli operatori aritmetici ai valori di "ritorno", ecco perché è pratica comune mettere tra parentesi le macro. Non penso che la macro sia valida.
Betseg,

4
@betseg Non credo sia un requisito nel code golf. Non ho mai visto una risposta in codice golf con macro C farlo.
Steadybox

1
@hucancode Vedi i link TIO. Devi aggiungere un mainda cui fviene chiamata la funzione / macro . Per impostazione predefinita, una soluzione non deve essere un programma completo. La versione specifica di gcc può o non può essere compilata su un altro compilatore e può o non può funzionare correttamente quando compilata su un altro compilatore.
Steadybox,

17

Japt , 2 byte

ª1

Provalo online!

Spiegazione

ªè una scorciatoia per l' ||operatore di JS . Japt ha un input implicito, quindi questo programma calcola input||1e il risultato viene implicitamente inviato a STDOUT.

w1funzionerebbe anche, prendendo il massimo dell'input e 1.


16

Alice , 7 byte

1/s
o@i

Provalo online!

Spiegazione

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 byte

n=>n||1

5
Alternativa: n=>n+!n(almeno credo)
Matthew Roh,

@SIGSEGV Sì, funzionerebbe davvero. (Potrebbe anche essere n|!n, sebbene questo sia limitato a una quantità di 31 bit.)
Arnauld

questo può essere semplificato a n || 1. L'unica cosa che valuta falso è 0.
ansiart

1
@ansiart Se il punto è che n=>n||1potrebbe essere semplificato n||1, allora no. Le risposte accettabili sono programmi o funzioni completi. n=>do_something_with(n)è una funzione freccia nella sintassi ES6.
Arnauld,

1
@StanStrum Siamo tenuti a restituire il valore originale nse non è zero. Un OR bit a bit si modifica nogni volta che non viene impostato il bit meno significativo (ad es (4|1) === 5.).
Arnauld,


12

Retina , 4 byte

^0
1

Provalo online!

Se l'input inizia con uno zero, sostituirlo con un 1. (Funziona perché è garantito che l'input non ha zeri iniziali per valori diversi da zero.)


12

V , 4 byte

é0À

Provalo online!

Abusa di un comportamento non preferito ma previsto , quindi non posso davvero definirlo un bug. Spiegazione:

In Vim, i comandi accettano un conteggio. Ad esempio, <C-a>aumenterà un numero, ma 7<C-a>aumenterà un numero di 7. Tuttavia, non è possibile utilizzare 0come conteggio, perché

  • 0 è già un comando (vai alla prima colonna) e

  • Nel contesto di un editor di testo, raramente ha senso richiedere l'esecuzione di un comando 0 volte.

Questo va bene per un editor di testo, ma di solito è odioso per un linguaggio da golf, quindi V sovrascrive alcuni comandi in modo che 0sia un conteggio valido. Ad esempio, é, ñ, Ä, e alcuni altri. Tuttavia, poiché <C-a>è un comando vim incorporato, non viene sovrascritto, quindi eseguirlo con un input positivo dà:

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

Ma correre con 0 come input dà:

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

Spiegazione completa:

é0          " Insert a 0
  À         " Arg1 or 1 times:
   <C-a>    " Increment

1
L'unica volta che 0non essere un conteggio è utile.
All'inizio

12

J , 2 byte

^*

Provalo online!

^ [argomento] elevato al potere di

* il segno dell'argomento (0 se 0 altro 1)

Perché 1=0^0in J.


12

Haskell, 5 byte

max 1

Esempio di utilizzo: (max 1) 0-> 1.

Non c'è molto da spiegare.



10

R, 13 byte

max(1,scan())

legge nda stdin. Con pmax, può leggere in un elenco e restituire il valore appropriato per ogni elemento nell'elenco per +1 byte.

provalo online!

Devo notare che esiste un'altra soluzione R di qualità in 13 byte di Sven Hohenstein che consente l' ennesima soluzione di 13 byte di

(n=scan())+!n

il che mi fa chiedere se questo è il limite inferiore per R.


Un altro 13 byte soluzione utilizzando pryr: pryr::f(n+!n). Non riesco a trovare nulla di più piccolo ...
JayCe

9

Cubix , 6 byte

OI!1L@

In qualche modo è riuscito a inserirlo in un cubo di unità ... Provalo online!

Spiegazione

Prima di essere eseguito, il codice è organizzato come una rete cubica:

  O
I ! 1 L
  @

L'IP (puntatore alle istruzioni) viene quindi posizionato sulla faccia dell'estrema sinistra ( I), rivolta verso la destra. Le istruzioni partono da lì:

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.

L'IP quindi colpisce di !nuovo, saltando la @parte inferiore. Questo non è utile, poiché dobbiamo premere il tasto @per terminare il programma. L'IP colpisce di Lnuovo e attraversa la linea di mezzo in senso inverso ( L1!I) prima di finire Lun'altra volta, il che alla fine trasforma l'IP in @.







5

Brachylog, 3 bytes

∅1|

Try it online!

Explanation

If we add the implicit ? (Input) and . (Output), we have:

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

5

MarioLANG, 12 bytes

;
=[
:<+
 =:

Try it online!

How it works

Mario starts in the top left, initially walking right. He reads an int from input (;) and stores it in the current memory cell. Then he falls off the ground (=), hitting [, which makes him ignore the next command if the current cell is 0.

If the cell is not 0, he'll start walking left (<), output the current cell as an int (:), and fall to his death (end of program).

If the cell is 0, he ignores the command to turn left, and keeps walking right. He increments the current cell (+), outputs it, and falls to his death.


5

Brain-Flak, 22, 10 bytes

({{}}[]{})

Try it online!

Explanation:

If the input is non-zero, then {{}} will pop everything off the stack and evaluate to the input. If it is zero, nothing will be popped, and it will evaluate to zero. So running ({{}}) gives

Diverso da zero:

n

Zero:

0
0

A questo punto, aggiungeremo l'altezza dello stack (0 per diverso da zero, 1 per zero) e elimineremo un altro valore dallo stack. (poiché lo stack è riempito con un numero infinito di 0, questo farà apparire lo 0 in alto o uno 0 in più)


Bel lavoro, ma non la soluzione più breve: codegolf.stackexchange.com/a/118520/31203
MegaTom

4

TI-BASIC, 7 byte

:Prompt X
:X+not(X

Alternatively,

TI-BASIC, 7 byte

:Prompt X
:max(X,1



4

Python, 15 bytes

lambda n:n or 1

Why not just n or 1, 6 bytes?
DReispt

2
Because that's just a snippet, while we usually answer with complete programs or functions. I'm not sure if this is stated explicitly in some rules somewhere, but at least that's the de facto standard.
daniero

Quoting 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 n would always return 1, wouldn't it?
daniero

1
Alternative with the same 15-bytes byte-count: lambda n:n|1>>n
Kevin Cruijssen

4

dc, 11 bytes

[1]sf?d0=fp

[1]sf stores a macro in register f which pushes 1 to the top of the stack, ? reads input, d0=f runs macro f if input was 0, p prints the top of the stack.

Test:

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

This saves 4 Bytes over the obvious 'IF' statement solution, =IF(A1=0,1,A1).


3
And 1 byte less than the less obvious =A1+NOT(A1)
Engineer Toast


4

R, 13 bytes

n=scan();n+!n

Here, scan is used to read the input value n. The negation of n (i.e., !n, 0 or 1) is added to n.


3

Mathematica, 9 8 bytes

Per Martin Ender:

#~Max~1&

First idea:

#/. 0->1&

Pure function with replaces 0 with 1. The space is necessary or it thinks we are dividing by .0.


3

Perl 5, 6 + 2 bytes for the -l and -p flags

$_||=1

Takes input on separate lines from stdin. Runs with the flags -lp.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.