Bleib weg von Null


41

Aufgabe

Bei einer nicht negativen Ganzzahl ngeben Sie 1if nis 0und den Wert nelse aus.

Eingang

Eine nicht negative ganze Zahl.

  • Wenn Sie den String als Eingabe akzeptieren möchten, würde der String dem folgenden regulären Ausdruck entsprechen: /^(0|[1-9][0-9]*)$/dh er darf keine führenden Nullen haben, außer wenn dies der Fall ist 0.
  • Wenn Sie eine reelle Ganzzahl als Eingabe akzeptieren, können Sie davon ausgehen, dass sich die Ganzzahl innerhalb der Verarbeitungskapazität der Sprache befindet.

Ausgabe

Eine positive ganze Zahl, wie oben angegeben. Führende Nullen sind nicht erlaubt. Ihre Ausgabe sollte dem regulären Ausdruck entsprechen /^[1-9][0-9]*$/.

Testfälle

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

Wertung

Das ist , also gewinnt die kürzeste Antwort in Bytes.

Es gelten Standardlücken .


1
Sie sollten wahrscheinlich einen Link zur TNB CMC setzen , da diese Herausforderung von dort kam.
mbomb007

Muss die Antwort eine vollständige Funktion sein oder kann es der Körper sein?
Caleb Kleveter

1
@CalebKleveter Die Standardregel in PPCG lautet, dass die Antwort entweder eine Funktion oder ein vollständiges Programm ist, jedoch keine Schnipsel.
Undichte Nonne

Können wir die Ausgabe mit einer führenden Null drucken?
MD XF

@ MDXF ja, können Sie.
Undichte Nonne

Antworten:


18

C (gcc), 14 13 Bytes

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

Vielen Dank an @betseg, der mich an den n?:1Trick in den Kommentaren der anderen C-Antwort erinnert hat!

Probieren Sie es online!

C 17 Bytes

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

Probieren Sie es online!

C, 16 Bytes

#define f(n)!n+n

Probieren Sie es online!



1
@betseg Das liegt daran, dass es sich um ein Makro handelt. Der Compiler sieht es als 3*!n+ngleich an 3*0+5.
Steadybox

1
Ich weiß, aber ich denke, Sie sollten in der Lage sein, arithmetische Operatoren direkt auf die Rückgabewerte anzuwenden. Deshalb ist es üblich, Makros in Klammern zu setzen. Ich glaube einfach nicht, dass das Makro gültig ist.
betseg

4
@betseg Ich denke nicht, dass das eine Voraussetzung für Code-Golf ist. Ich habe noch nie eine Code-Golf-Antwort mit C-Makros gesehen.
Steadybox

1
@hucancode Siehe die TIO-Links. Sie müssen eine hinzufügen, mainvon der aus die Funktion / das Makro faufgerufen wird. Eine Lösung muss nicht standardmäßig ein vollständiges Programm sein. Die gcc-spezifische Version wird möglicherweise auf einem anderen Compiler kompiliert oder nicht, und sie wird möglicherweise nicht ordnungsgemäß ausgeführt, wenn sie auf einem anderen Compiler kompiliert wird.
Steadybox

17

Japt , 2 Bytes

ª1

Probieren Sie es online!

Erläuterung

ªist eine Abkürzung für den JS- ||Operator. Japt hat implizite Eingaben, daher berechnet dieses Programm input||1und das Ergebnis wird implizit an STDOUT gesendet.

w1würde auch funktionieren, das Maximum der Eingabe und 1.


16

Alice , 7 Bytes

1/s
o@i

Probieren Sie es online!

Erläuterung

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
Alternative: n=>n+!n(Zumindest denke ich)
Matthew Roh

@SIGSEGV Ja, das würde in der Tat funktionieren. (Das könnte auch sein n|!n, obwohl dies auf eine 31-Bit-Menge beschränkt ist.)
Arnauld

dies kann zu n || 1 vereinfacht werden. Das einzige, was als falsch bewertet wird, ist 0.
ansiart

1
@ansiart Wenn dein Punkt das n=>n||1vereinfachen könnte n||1, dann nein. Akzeptable Antworten sind entweder vollständige Programme oder Funktionen. n=>do_something_with(n)ist eine Pfeilfunktion in der ES6-Syntax.
Arnauld

1
@StanStrum Wir müssen den ursprünglichen Wert von zurückgeben, nwenn er nicht Null ist. Ein bitweises ODER ändert sich, nwenn das niedrigstwertige Bit nicht gesetzt ist (z (4|1) === 5. B. ).
Arnauld


12

Retina , 4 Bytes

^0
1

Probieren Sie es online!

Wenn die Eingabe mit einer Null beginnt, ersetzen Sie diese durch eine 1. (Funktioniert, da die Eingabe für Werte ungleich Null garantiert keine führenden Nullen enthält.)


12

V , 4 Bytes

é0À

Probieren Sie es online!

Missbrauch eines nicht bevorzugten, aber erwarteten Verhaltens , daher kann ich es nicht wirklich als Fehler bezeichnen. Erläuterung:

In Vim akzeptieren Befehle eine Zählung. Erhöht beispielsweise <C-a>eine Zahl, 7<C-a>erhöht aber eine Zahl um 7. Sie können sie jedoch nicht 0als Zählung verwenden, da

  • 0 ist schon ein Befehl (gehe in die erste Spalte), und

  • Im Kontext eines Texteditors ist es selten sinnvoll, die 0-fache Ausführung eines Befehls anzufordern.

Dies ist für einen Texteditor in Ordnung, für eine Golfsprache jedoch normalerweise unangenehm. Daher überschreibt V einige Befehle, sodass dies 0eine gültige Anzahl ist. Zum Beispiel é, ñ, Ä, und einige andere. Da es sich jedoch <C-a>um einen integrierten vim-Befehl handelt, wird dieser nicht überschrieben. Wenn Sie diesen Befehl also mit einer positiven Eingabe ausführen, erhalten Sie Folgendes:

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

Aber wenn Sie mit 0 als Eingabe ausführen, erhalten Sie:

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

Vollständige Erklärung:

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

1
Das eine Mal, dass es 0keine Zählung gibt, ist nützlich. Ich habe es anfangs gar nicht in Betracht gezogen, weil ich es so oft gemieden habe
nmjcman101


12

Haskell, 5 Bytes

max 1

Anwendungsbeispiel: (max 1) 0-> 1.

Es gibt nicht viel zu erklären.



10

R, 13 Bytes

max(1,scan())

liest naus stdin. Mit pmaxkann es eine Liste einlesen und den entsprechenden Wert für jedes Element in der Liste für +1 Byte zurückgeben.

versuche es online!

Ich sollte beachten, dass es eine andere feine R-Lösung in 13 Bytes von Sven Hohenstein gibt, die eine weitere 13-Byte-Lösung von ermöglicht

(n=scan())+!n

was mich fragt, ob das die untere Grenze für R ist.


Eine weitere 13 Byte - Lösung pryr: pryr::f(n+!n). Kann nichts kleineres finden ...
JayCe

9

Cubix , 6 Bytes

OI!1L@

Irgendwie ist es gelungen, es auf einen Einheitswürfel zu montieren ... Testen Sie es online!

Erläuterung

Vor der Ausführung wird der Code als Würfelnetz angeordnet:

  O
I ! 1 L
  @

Der IP (Anweisungszeiger) befindet sich dann ganz links ( I) und zeigt nach rechts. Die Anweisungen, die von dort ausgeführt werden, sind:

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.

Die IP schlägt dann !erneut zu und überspringt @die Unterseite. Dies ist nicht hilfreich, da wir das drücken müssen, @um das Programm zu beenden. Die IP schlägt Lerneut zu und durchläuft die mittlere Zeile in umgekehrter Reihenfolge ( L1!I), bevor sie Lein weiteres Mal endet , wodurch die IP schließlich aktiviert wird @.







5

Brachylog , 3 Bytes

∅1|

Probieren Sie es online!

Erläuterung

Wenn wir die impliziten ?(Input) und .(Output) hinzufügen , haben wir:

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

5

MarioLANG , 12 Bytes

;
=[
:<+
 =:

Probieren Sie es online!

Wie es funktioniert

Mario beginnt oben links und geht zunächst nach rechts. Er liest ein int von input ( ;) und speichert es in der aktuellen Speicherzelle. Dann fällt er vom Boden ( =) und trifft [, wodurch er den nächsten Befehl ignoriert, wenn die aktuelle Zelle 0 ist.

Wenn die Zelle nicht 0 ist, geht er nach links ( <), gibt die aktuelle Zelle als int ( :) aus und fällt in den Tod (Programmende).

Wenn die Zelle 0 ist, ignoriert er den Befehl, nach links abzubiegen, und geht weiter nach rechts. Er erhöht die aktuelle Zelle ( +), gibt sie aus und fällt in den Tod.


5

Brain-Flak , 22 , 10 Bytes

({{}}[]{})

Probieren Sie es online!

Erläuterung:

Wenn die Eingabe nicht Null ist, {{}}wird alles vom Stapel genommen und als Eingabe ausgewertet. Wenn es Null ist, wird nichts geknallt und es wird zu Null ausgewertet. So läuft ({{}})es

Nicht-Null:

n

Null:

0
0

An dieser Stelle addieren wir die Höhe des Stapels (0 für nicht Null, 1 für Null) und entfernen einen weiteren Wert vom Stapel. (Da der Stapel mit einer unendlichen Anzahl von Nullen aufgefüllt ist, wird entweder die oberste 0 oder eine zusätzliche 0 eingefügt.)



4

TI-BASIC, 7 Bytes

:Prompt X
:X+not(X

Alternative,

TI-BASIC, 7 Bytes

:Prompt X
:max(X,1



4

Python, 15 Bytes

lambda n:n or 1

Warum nicht einfach n or 16 Bytes?
DReispt

2
Weil das nur ein Ausschnitt ist, während wir normalerweise mit vollständigen Programmen oder Funktionen antworten. Ich bin mir nicht sicher, ob dies in einigen Regeln explizit angegeben ist, aber zumindest ist dies der De-facto-Standard.
Daniero

Zitieren von 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 nwürde immer zurückkehren 1, nicht wahr ?
Daniero

1
Alternative mit der gleichen 15-Byte-Anzahl:lambda n:n|1>>n
Kevin Cruijssen

4

Gleichstrom, 11 Bytes

[1]sf?d0=fp

[1]sfspeichert ein Makro in Register f, das 1 an die Spitze des Stapels schiebt, die ?Eingabe liest, d0=fdas Makro f ausführt, wenn die Eingabe 0 war, und pdie Spitze des Stapels druckt.

Prüfung:

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

Dies spart 4 Bytes gegenüber der offensichtlichen 'IF'-Anweisungslösung =IF(A1=0,1,A1).


3
Und 1 Byte weniger als das weniger offensichtliche=A1+NOT(A1)
Engineer Toast

4

Java 8, 10 Bytes

i->i<1?1:i
  • Vielen Dank an @LeakyNun für das Speichern - 1 Byte
    • Ich habe nicht bemerkt, dass es sich um eine nicht negative Ganzzahl handelt

3
i==0kann ersetzt werden durchi<1
Leaky Nun

4

R, 13 Bytes

n=scan();n+!n

Hier scanwird verwendet, um den Eingabewert zu lesen n. Die Negation von n(dh !n0 oder 1) wird zu addiert n.


3

Mathematica, 9 8 Bytes

Per Martin Ender:

#~Max~1&

Erste Idee:

#/. 0->1&

Reine Funktion mit ersetzt 0mit 1. Der Raum ist notwendig oder er denkt, wir teilen uns durch .0.


3

Perl 5, 6 + 2 Bytes für die Flags -l und -p

$_||=1

Übernimmt Eingaben in separaten Zeilen von stdin. Läuft mit den Flaggen -lp.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.