Trzymaj się z dala od zera

41

Zadanie

Biorąc pod uwagę nieujemną liczbę całkowitą n, wypisz 1if nis 0i wypisz wartość nelse.

Wejście

Nieujemna liczba całkowita.

  • Jeśli chcesz zaakceptować ciąg jako dane wejściowe, łańcuch będzie pasował do następującego wyrażenia regularnego: /^(0|[1-9][0-9]*)$/tzn. Nie może zawierać żadnych zer wiodących, z wyjątkiem sytuacji, gdy jest 0.
  • Jeśli akceptujesz rzeczywistą liczbę całkowitą jako dane wejściowe, możesz założyć, że liczba całkowita mieści się w zakresie możliwości obsługi danego języka.

Wydajność

Dodatnia liczba całkowita, określona powyżej. Zera wiodące są niedozwolone. Twój wynik powinien być zgodny z wyrażeniem regularnym /^[1-9][0-9]*$/.

Przypadki testowe

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

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź w bajtach.

Obowiązują standardowe luki .

Leaky Nun
źródło
1
Prawdopodobnie powinieneś umieścić link do CMC TNB , ponieważ stąd pochodzi to wyzwanie.
mbomb007
Czy odpowiedź musi być pełną funkcją, czy może to być ciało?
Caleb Kleveter
1
@CalebKleveter Domyślną regułą w PPCG jest to, że odpowiedzią jest albo funkcja, albo pełny program, ale nie fragmenty.
Leaky Nun
Czy możemy wydrukować wynik z wiodącym zerem?
MD XF,
@MDXF tak, możesz.
Leaky Nun

Odpowiedzi:

18

C (gcc), 14 13 bajtów

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

Dzięki @betseg za przypomnienie mi n?:1sztuczki w komentarzach drugiej odpowiedzi C.

Wypróbuj online!

C, 17 bajtów

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

Wypróbuj online!

C, 16 bajtów

#define f(n)!n+n

Wypróbuj online!

Steadybox
źródło
tio.run/nexus/… hmmm ...
betseg
1
@betseg To dlatego, że jest to makro. Kompilator widzi to, 3*!n+nco jest równe 3*0+5.
Steadybox
1
Wiem, ale myślę, że powinieneś być w stanie zastosować operatory arytmetyczne bezpośrednio do wartości „zwracanych”, dlatego powszechną praktyką jest umieszczanie nawiasów wokół makr. Po prostu nie sądzę, że makro jest prawidłowe.
betseg
4
@betseg Nie sądzę, że jest to wymóg w golfie kodu. Nigdy nie widziałem, żeby robiło to odpowiedź na kod golfowy z makrami C.
Steadybox
1
@hucancode Zobacz łącza do TIO. Musisz dodać, mainz którego fwywoływana jest funkcja / makro . Rozwiązaniem nie musi być domyślnie pełny program. Wersja specyficzna dla gcc może, ale nie musi, kompilować się na innym kompilatorze, i może, ale nie musi działać poprawnie, gdy zostanie skompilowana na innym kompilatorze.
Steadybox
17

Japt , 2 bajty

ª1

Wypróbuj online!

Wyjaśnienie

ªjest skrótem dla ||operatora JS . Japt ma niejawne dane wejściowe, więc ten program oblicza input||1, a wynik jest domyślnie wysyłany do STDOUT.

w1działałby również, biorąc maksimum danych wejściowych i 1.

ETHprodukcje
źródło
16

Alice , 7 bajtów

1/s
o@i

Wypróbuj online!

Wyjaśnienie

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
źródło
15

JavaScript (ES6), 7 bajtów

n=>n||1
Arnauld
źródło
5
Alternatywa: n=>n+!n(przynajmniej tak mi się wydaje)
Matthew Roh
@SIGSEGV Tak, to naprawdę by działało. (To może być również n|!n, chociaż ta jest ograniczona do 31-bitowej ilości.)
Arnauld
można to uprościć do n || 1. Jedyną rzeczą, która daje w wyniku fałsz, jest 0.
ansiart
1
@ansiart Jeśli chodzi o to, że n=>n||1można to uprościć n||1, to nie. Dopuszczalne odpowiedzi to pełne programy lub funkcje. n=>do_something_with(n)to funkcja strzałki w składni ES6.
Arnauld
1
@StanStrum Jesteśmy zobowiązani do zwrócenia oryginalnej wartości, njeśli nie jest to zero. Bitowe OR zmieniłoby się nza każdym razem, gdy nie zostanie ustawiony najmniej znaczący bit (np (4|1) === 5.).
Arnauld,
14

Pyth, 2 bajty

+!

Wypróbuj online

Wyjaśnienie

+!
 !Q    1 if (implicit) input is 0, 0 otherwise.
+  Q   Add the (implicit) input.
Mnemoniczny
źródło
12

Siatkówka , 4 bajty

^0
1

Wypróbuj online!

Jeśli dane wejściowe zaczynają się od zera, zamień je na 1. (Działa, ponieważ na wejściach nie ma zer wiodących dla wartości niezerowych).

Martin Ender
źródło
12

V , 4 bajty

é0À

Wypróbuj online!

Nadużywa niepreferencyjnego, ale oczekiwanego zachowania , więc nie mogę nazwać go błędem. Wyjaśnienie:

W Vimie polecenia akceptują zliczanie. Na przykład <C-a>zwiększy liczbę, ale 7<C-a>zwiększy liczbę o 7. Jednak nie można użyć 0jako liczby, ponieważ

  • 0 jest już poleceniem (przejdź do pierwszej kolumny) i

  • W kontekście edytora tekstowego rzadko ma sens żądanie wykonania polecenia 0 razy.

Jest to dobre w przypadku edytora tekstu, ale zwykle nieznośne dla języka golfowego, więc V zastępuje niektóre polecenia, więc 0jest to prawidłowa liczba. Na przykład é, ñ, Ä, i kilka innych. Ponieważ jednak <C-a>jest to wbudowane polecenie vim, nie jest nadpisywane, więc uruchomienie go z dodatnim wejściem daje:

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

Ale uruchomienie z 0 jako wejściem daje:

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

Pełne wyjaśnienie:

é0          " Insert a 0
  À         " Arg1 or 1 times:
   <C-a>    " Increment
DJMcMayhem
źródło
1
0Przydaje się, że nie jest to liczba. Na początku nawet tego nie brałem pod uwagę, ponieważ unikałem tego wiele razy
nmjcman101
12

J , 2 bajty

^*

Wypróbuj online!

^ [argument] podniesiony do potęgi

* znak argumentu (0 jeśli 0 jeszcze 1)

Ponieważ 1=0^0w J.

Adám
źródło
12

Haskell, 5 bajtów

max 1

Przykład użycia: (max 1) 0-> 1.

Nic wielkiego do wyjaśnienia.

nimi
źródło
10

dc, 7

?d0r^+p

Opiera się na fakcie, że dcocenia 0 0 do 1, ale 0 n do 0 dla wszystkich innych n.

Wypróbuj online .

Cyfrowa trauma
źródło
10

R, 13 bajtów

max(1,scan())

czyta nze standardowego. Za pomocą pmaxmoże odczytać listę i zwrócić odpowiednią wartość dla każdego elementu na liście dla bajtu +1.

spróbuj online!

Należy zauważyć, że nie ma innego rozwiązania porządku R w 13 bajtów przez Sven Hohenstein , który pozwala na jeszcze innego rozwiązania 13 bajt

(n=scan())+!n

co mnie zastanawia, czy to dolna granica dla R.

Giuseppe
źródło
Kolejne 13 bajtów roztworu przez pryr: pryr::f(n+!n). Nie mogę znaleźć nic mniejszego ...
JayCe
9

Cubix , 6 bajtów

OI!1L@

Jakoś udało się zmieścić go na kostce jednostkowej ... Przetestuj online!

Wyjaśnienie

Przed uruchomieniem kod jest ułożony jako sześcian:

  O
I ! 1 L
  @

IP (wskaźnik instrukcji) jest następnie umieszczany na skrajnie lewej twarzy ( I), skierowanej w prawo. Instrukcje uruchamiane stamtąd to:

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.

IP następnie uderza !ponownie, pomijając @dolną powierzchnię. Nie jest to pomocne, ponieważ musimy nacisnąć przycisk, @aby zakończyć program. IP uderza Lponownie i przechodzi przez środkową linię w odwrotnej kolejności ( L1!I), zanim trafi jeszcze Lraz, co ostatecznie zmienia IP na @.

ETHprodukcje
źródło
7

V , 5 bajtów

ç^0/<C-a>

Gdzie <C-a>jest 0x01.

Wypróbuj online!

Wyjaśnienie

ç                   " On every line
 ^0/                " that begins with a zero do:
    <C-a>           " Increment the number on that line
Kritixi Lithos
źródło
1
Trochę konkurencji :)
DJMcMayhem
6

Galaretka, 2 bajty

Wypróbuj online!

Prawie dokładnie moja odpowiedź na Pythona, ale to mój pierwszy program Jelly.

Mnemoniczny
źródło
6

Oaza , 2 bajty

Wykorzystuje następujący wzór: a (0) = 1 , a (n) = n

n1

Wypróbuj online!

Adnan
źródło
1
Miły. Moje podejście było >V.
Leaky Nun
@LeakyNun Oh nice!
Adnan
6

R 20 16 bajtów

pryr::f(n+(n<1))
Shayne03
źródło
Witamy w PPCG!
Martin Ender
Dzięki @MartinEnder. Uczę się już kilku sztuczek.
Shayne03
5

Brachylog , 3 bajty

∅1|

Wypróbuj online!

Wyjaśnienie

Jeśli dodamy niejawne ?(Dane wejściowe) i .(Dane wyjściowe), otrzymamy:

?∅          Input is empty (that is, [] or "" or 0 or 0.0)
  1.        Output = 1
    |       Else
     ?.     Input = Output
Fatalizować
źródło
5

MarioLANG , 12 bajtów

;
=[
:<+
 =:

Wypróbuj online!

Jak to działa

Mario zaczyna w lewym górnym rogu, początkowo idąc w prawo. Odczytuje liczbę int z input ( ;) i zapisuje ją w bieżącej komórce pamięci. Następnie spada z ziemi ( =), uderzając [, co powoduje, że ignoruje następne polecenie, jeśli bieżąca komórka ma wartość 0.

Jeśli komórka nie jest równa 0, zacznie chodzić w lewo ( <), wypisać bieżącą komórkę jako int ( :) i spaść na śmierć (koniec programu).

Jeśli komórka ma wartość 0, ignoruje polecenie skrętu w lewo i idzie dalej w prawo. Przyrostuje bieżącą komórkę ( +), wysyła ją i pada na śmierć.

Business Cat
źródło
5

Brain-Flak , 22 , 10 bajtów

({{}}[]{})

Wypróbuj online!

Wyjaśnienie:

Jeśli dane wejściowe są niezerowe, {{}}wyskakuje wszystko ze stosu i ocenia dane wejściowe. Jeśli wynosi zero, nic nie zostanie wyskakujące i będzie miało wartość zero. Więc bieganie ({{}})daje

Niezerowe:

n

Zero:

0
0

W tym momencie dodamy wysokość stosu (0 dla niezerowego, 1 dla zera) i usuniemy jeszcze jedną wartość ze stosu. (ponieważ stos jest wypełniony nieskończoną liczbą zer, spowoduje to wyświetlenie albo górnej 0, albo dodatkowej 0)

DJMcMayhem
źródło
Dobra
MegaTom
4

TI-BASIC, 7 bajtów

:Prompt X
:X+not(X

Alternatywnie,

TI-BASIC, 7 bajtów

:Prompt X
:max(X,1
Scott Milner
źródło
4

Sześciokąt ,7 6 bajtów

)?<@.!

Rozszerzony:

 ) ?
< @ .
 ! .

Wypróbuj online!

Zapisano 1 bajt dzięki Martinowi!

Jeśli liczba jest niezerowa, wydrukuj ją, w przeciwnym razie dodaj jedną i wydrukuj ją.

FryAmTheEggman
źródło
4

Python, 15 bajtów

lambda n:n or 1
daniero
źródło
Dlaczego nie tylko n or 16 bajtów?
DReispt
2
Ponieważ to tylko fragment, podczas gdy zwykle odpowiadamy za pomocą kompletnych programów lub funkcji. Nie jestem pewien, czy jest to gdzieś wyraźnie określone w niektórych regułach, ale przynajmniej taki jest de facto standard.
daniero
Cytując 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 nzawsze wracał 1, prawda?
daniero
1
Alternatywnie z tą samą 15-bajtową liczbą bajtów:lambda n:n|1>>n
Kevin Cruijssen
4

dc, 11 bajtów

[1]sf?d0=fp

[1]sfzapisuje makro w rejestrze f, które wypycha 1 na górę stosu, ?odczytuje dane wejściowe, d0=furuchamia makro f, jeśli wejście miało wartość 0, pdrukuje górę stosu.

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
daniero
źródło
4

Excel, 10 bajtów

=A1+(A1=0)

Oszczędza to 4 bajty nad oczywistym rozwiązaniem oświadczenie „if”, =IF(A1=0,1,A1).

qoou
źródło
3
I 1 bajt mniej niż mniej oczywisty=A1+NOT(A1)
Inżynier Toast
4

Java 8, 10 bajtów

i->i<1?1:i
  • Dzięki @LeakyNun za oszczędność - 1 bajt
    • Nie zauważyłem, że jest to nieujemna liczba całkowita
Roman Gräf
źródło
3
i==0można zastąpići<1
Leaky Nun
4

R, 13 bajtów

n=scan();n+!n

Tutaj scansłuży do odczytu wartości wejściowej n. Negacja n(tj. !n0 lub 1) jest dodawana do n.

Sven Hohenstein
źródło
3

Mathematica, 9 8 bajtów

Per Martin Ender:

#~Max~1&

Pierwszy pomysł:

#/. 0->1&

Czysta funkcja z replaces 0z 1. Przestrzeń jest niezbędna lub myśli, że się dzielimy .0.

ngenisis
źródło
3

Perl 5, 6 + 2 bajty dla flag -l i -p

$_||=1

Pobiera dane wejściowe w oddzielnych wierszach od standardowego wejścia. Działa z flagami -lp.

Chris
źródło