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 .


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!



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.


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.

15

JavaScript (ES6), 7 bajtów

n=>n||1

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,



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

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

Haskell, 5 bajtów

max 1

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

Nic wielkiego do wyjaśnienia.



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.


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







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

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


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)



4

TI-BASIC, 7 bajtów

:Prompt X
:X+not(X

Alternatywnie,

TI-BASIC, 7 bajtów

:Prompt X
:max(X,1



4

Python, 15 bajtów

lambda n:n or 1

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

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


3
I 1 bajt mniej niż mniej oczywisty=A1+NOT(A1)
Inżynier Toast


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.