Tinggal jauh dari nol

41

Tugas

Diberikan bilangan bulat non-negatif n, keluaran 1jika nini 0, dan output nilai nsebaliknya.

Memasukkan

Bilangan bulat non-negatif.

  • Jika Anda ingin menerima string sebagai input, string tersebut akan cocok dengan regex berikut:, /^(0|[1-9][0-9]*)$/yaitu string tidak boleh memiliki angka nol di awal, kecuali saat itu 0.
  • Jika Anda menerima integer nyata sebagai input, Anda dapat mengasumsikan bahwa integer berada dalam kemampuan penanganan bahasa.

Keluaran

Bilangan bulat positif, ditentukan di atas. Nol terkemuka tidak diizinkan. Output Anda harus cocok dengan regex /^[1-9][0-9]*$/.

Testcases

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

Mencetak gol

Ini adalah , jadi jawaban tersingkat dalam byte menang.

Celah standar berlaku.

Biarawati Bocor
sumber
1
Anda mungkin harus meletakkan tautan ke TNB CMC , karena dari situlah tantangan ini berasal.
mbomb007
Apakah jawabannya harus berfungsi penuh, atau bisakah itu tubuh?
Caleb Kleveter
1
@ CalebKleveter Aturan default di PPCG adalah bahwa jawabannya adalah fungsi atau program lengkap, tetapi bukan snippet.
Leaky Nun
Bisakah kita mencetak hasilnya dengan nol di depan?
MD XF
@ MDXF ya, Anda bisa.
Leaky Nun

Jawaban:

18

C (gcc), 14 13 byte

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

Terima kasih kepada @betseg untuk mengingatkan saya pada n?:1trik di komentar jawaban C lainnya!

Cobalah online!

C, 17 byte

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

Cobalah online!

C, 16 byte

#define f(n)!n+n

Cobalah online!

Steadybox
sumber
tio.run/nexus/… hmmm ...
betseg
1
@ Betseg Itu karena itu makro. Kompilator melihatnya 3*!n+nsama dengan 3*0+5.
Steadybox
1
Saya tahu, tapi saya pikir Anda harus dapat menerapkan operator aritmatika ke nilai "kembali" secara langsung, itu sebabnya praktik umum menempatkan tanda kurung di sekitar makro. Saya hanya tidak berpikir bahwa makro itu valid.
betseg
4
@ Betseg Saya tidak berpikir itu persyaratan dalam kode golf. Saya belum pernah melihat jawaban kode golf dengan makro C melakukan itu.
Steadybox
1
@hucancode Lihat tautan TIO. Anda perlu menambahkan maindari mana fungsi / makro fdipanggil. Solusi tidak harus berupa program lengkap secara default. Versi spesifik gcc mungkin atau tidak dapat dikompilasi di kompiler lain, dan mungkin atau mungkin tidak berjalan dengan benar ketika dikompilasi di kompiler lain.
Steadybox
17

Japt , 2 byte

ª1

Cobalah online!

Penjelasan

ªadalah jalan pintas untuk ||operator JS . Japt memiliki input implisit, sehingga program ini menghitung input||1, dan hasilnya secara implisit dikirim ke STDOUT.

w1akan bekerja dengan baik, mengambil input dan maksimum 1.

Produksi ETH
sumber
16

Alice , 7 byte

1/s
o@i

Cobalah online!

Penjelasan

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
sumber
15

JavaScript (ES6), 7 byte

n=>n||1
Arnauld
sumber
5
Alternatif: n=>n+!n(Setidaknya saya pikir)
Matius Roh
@SIGSEGV Ya, itu akan berhasil. (Itu bisa juga n|!n, meskipun yang ini terbatas pada kuantitas 31-bit.)
Arnauld
ini dapat disederhanakan menjadi n || 1. Satu-satunya hal yang bernilai false adalah 0.
ansiart
1
@ansiart Jika maksud Anda adalah yang n=>n||1dapat disederhanakan n||1, maka tidak. Jawaban yang dapat diterima adalah program atau fungsi lengkap. n=>do_something_with(n)adalah fungsi panah dalam sintaks ES6.
Arnauld
1
@StanStrum Kami diharuskan mengembalikan nilai awal njika tidak nol. Bitwise ATAU akan memodifikasi nsetiap kali bit paling signifikan tidak diatur (misalnya (4|1) === 5).
Arnauld
14

Pyth, 2 byte

+!

Cobalah online

Penjelasan

+!
 !Q    1 if (implicit) input is 0, 0 otherwise.
+  Q   Add the (implicit) input.
Mnemonik
sumber
12

Retina , 4 byte

^0
1

Cobalah online!

Jika input dimulai dengan nol, ganti dengan 1. (Berfungsi karena input dijamin tidak memiliki angka nol di depan untuk nilai yang bukan nol.)

Martin Ender
sumber
12

V , 4 byte

é0À

Cobalah online!

Menyalahgunakan perilaku yang tidak disukai tetapi diharapkan , jadi saya tidak bisa benar-benar menyebutnya bug. Penjelasan:

Di Vim, perintah menerima hitungan. Misalnya, <C-a>akan menambah angka, tetapi 7<C-a>akan menambah angka dengan 7. Namun, Anda tidak dapat menggunakan 0sebagai hitungan, karena

  • 0 sudah menjadi perintah (buka kolom pertama), dan

  • Dalam konteks editor teks, jarang masuk akal untuk meminta perintah dijalankan 0 kali.

Ini bagus untuk editor teks, tetapi biasanya menjengkelkan untuk bahasa golf, jadi V menimpa beberapa perintah sehingga 0merupakan hitungan yang valid. Sebagai contoh, é, ñ, Ä, dan beberapa orang lain. Namun, karena <C-a>ini adalah perintah builtin vim, itu tidak ditimpa, jadi menjalankan ini dengan input positif memberi:

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

Tetapi berjalan dengan 0 sebagai input memberi:

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

Penjelasan lengkap:

é0          " Insert a 0
  À         " Arg1 or 1 times:
   <C-a>    " Increment
DJMcMayhem
sumber
1
Satu kali yang 0tidak menjadi hitungan berguna. Saya bahkan tidak mempertimbangkannya pada awalnya karena saya sering menghindarinya
nmjcman101
12

J , 2 byte

^*

Cobalah online!

^ [argumen] diangkat ke kekuatan

* tanda argumen (0 jika 0 lain 1)

Karena 1=0^0dalam J.

Adm
sumber
12

Haskell, 5 byte

max 1

Contoh penggunaan: (max 1) 0-> 1.

Tidak banyak yang bisa dijelaskan.

nimi
sumber
10

dc, 7

?d0r^+p

Bergantung pada fakta yang dcmengevaluasi 0 0 hingga 1, tetapi 0 n hingga 0 untuk semua n lainnya.

Cobalah online .

Trauma Digital
sumber
10

R, 13 byte

max(1,scan())

dibaca ndari stdin. Dengan pmax, itu bisa membaca dalam daftar dan mengembalikan nilai yang sesuai untuk setiap elemen dalam daftar untuk +1 byte.

coba online!

Saya harus mencatat bahwa ada solusi lain baik R di 13 byte oleh Sven Hohenstein yang memungkinkan untuk belum lagi solusi 13 byte dari

(n=scan())+!n

yang membuat saya bertanya-tanya apakah itu batas bawah untuk R.

Giuseppe
sumber
Lain 13 byte solusi dengan menggunakan pryr: pryr::f(n+!n). Tidak dapat menemukan yang lebih kecil ...
JayCe
9

Cubix , 6 byte

OI!1L@

Entah bagaimana berhasil memasangnya di unit cube ... Uji online!

Penjelasan

Sebelum dijalankan, kode disusun sebagai jaring kubus:

  O
I ! 1 L
  @

IP (penunjuk instruksi) kemudian ditempatkan di wajah paling kiri ( I), menghadap ke kanan. Instruksi berjalan dari sana adalah:

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 kemudian mengenai !lagi, melewatkan @bagian bawah wajah. Ini tidak membantu, karena kita perlu menekan @untuk mengakhiri program. IP menyentuh Llagi dan melewati garis tengah secara terbalik ( L1!I) sebelum berakhir pada Lsekali lagi, yang akhirnya mengubah IP menjadi @.

Produksi ETH
sumber
7

V , 5 byte

ç^0/<C-a>

Dimana <C-a>adalah 0x01.

Cobalah online!

Penjelasan

ç                   " On every line
 ^0/                " that begins with a zero do:
    <C-a>           " Increment the number on that line
Kritixi Lithos
sumber
1
Sebuah kompetisi kecil :)
DJMcMayhem
6

Jelly, 2 byte

Cobalah online!

Cukup banyak jawaban Pyth saya, tetapi ini adalah program Jelly pertama saya.

Mnemonik
sumber
6

Oasis , 2 byte

Menggunakan rumus berikut: a (0) = 1 , a (n) = n

n1

Cobalah online!

Adnan
sumber
1
Bagus. Pendekatan saya adalah >V.
Leaky Nun
@ LeakyNun Oh bagus!
Adnan
6

R 20 16 byte

pryr::f(n+(n<1))
Shayne03
sumber
Selamat datang di PPCG!
Martin Ender
Terima kasih @MartinEnder. Saya sudah belajar beberapa trik perdagangan.
Shayne03
5

Brachylog , 3 byte

∅1|

Cobalah online!

Penjelasan

Jika kita menambahkan implisit ?(Input) dan .(Output), kita memiliki:

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

MarioLANG , 12 byte

;
=[
:<+
 =:

Cobalah online!

Bagaimana itu bekerja

Mario mulai di kiri atas, awalnya berjalan ke kanan. Dia membaca sebuah int dari input ( ;) dan menyimpannya di sel memori saat ini. Lalu ia jatuh dari tanah ( =), memukul [, yang membuatnya mengabaikan perintah berikutnya jika sel saat ini adalah 0.

Jika selnya bukan 0, dia akan mulai berjalan ke kiri ( <), mengeluarkan sel saat ini sebagai int ( :), dan jatuh ke kematiannya (akhir program).

Jika sel adalah 0, ia mengabaikan perintah untuk belok kiri, dan terus berjalan ke kanan. Ia menambah sel saat ini ( +), mengeluarkannya, dan jatuh ke kematiannya.

Kucing Bisnis
sumber
5

Brain-Flak , 22 , 10 byte

({{}}[]{})

Cobalah online!

Penjelasan:

Jika inputnya bukan nol, maka {{}}akan muncul semuanya dari stack dan mengevaluasi ke input. Jika nol, tidak ada yang muncul, dan akan dievaluasi menjadi nol. Jadi berlari ({{}})memberi

Bukan nol:

n

Nol:

0
0

Pada titik ini, kami akan menambahkan ketinggian tumpukan (0 untuk non-nol, 1 untuk nol) dan mengeluarkan satu nilai lagi dari tumpukan. (karena tumpukan diisi dengan angka 0 yang tak terhingga, ini akan muncul sebagai 0 teratas atau 0 tambahan)

DJMcMayhem
sumber
Pekerjaan bagus, tetapi bukan solusi terpendek: codegolf.stackexchange.com/a/118520/31203
MegaTom
4

TI-BASIC, 7 byte

:Prompt X
:X+not(X

Kalau tidak,

TI-BASIC, 7 byte

:Prompt X
:max(X,1
Scott Milner
sumber
4

Segi enam ,7 6 byte

)?<@.!

Diperluas:

 ) ?
< @ .
 ! .

Cobalah online!

Disimpan 1 byte berkat Martin!

Jika nomornya bukan nol, cetaklah, jika tidak, tambahkan nomor itu dan cetaklah.

FryAmTheEggman
sumber
4

Python, 15 byte

lambda n:n or 1
daniero
sumber
Mengapa tidak adil n or 1, 6 byte?
Lepaskan
2
Karena itu hanya cuplikan, sementara kami biasanya menjawab dengan program atau fungsi yang lengkap. Saya tidak yakin apakah ini dinyatakan secara eksplisit dalam beberapa aturan di suatu tempat, tetapi setidaknya itulah standar de facto.
daniero
Mengutip 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 nakan selalu kembali 1, bukan?
daniero
1
Alternatif dengan byte-count 15-byte yang sama:lambda n:n|1>>n
Kevin Cruijssen
4

dc, 11 byte

[1]sf?d0=fp

[1]sfmenyimpan makro dalam register f yang mendorong 1 ke atas tumpukan, ?membaca input, d0=fmenjalankan makro f jika input adalah 0, pmencetak bagian atas tumpukan.

Uji:

$ 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
sumber
4

Excel, 10 Bytes

=A1+(A1=0)

Ini menghemat 4 Bytes dari solusi pernyataan 'IF' yang jelas =IF(A1=0,1,A1),.

qoou
sumber
3
Dan 1 byte kurang dari yang kurang jelas=A1+NOT(A1)
Engineer Toast
4

Java 8, 10 byte

i->i<1?1:i
  • Terima kasih kepada @LeakyNun karena telah menghemat - 1 byte
    • Tidak menyadari itu bilangan bulat non-negatif
Roman Gräf
sumber
3
i==0dapat digantikan olehi<1
Leaky Nun
4

R, 13 byte

n=scan();n+!n

Di sini, scandigunakan untuk membaca nilai input n. Negasi dari n(yaitu !n, 0 atau 1) ditambahkan ke n.

Sven Hohenstein
sumber
3

Mathematica, 9 8 byte

Per Martin Ender:

#~Max~1&

Ide pertama:

#/. 0->1&

Fungsi murni dengan penggantian 0dengan 1. Ruang itu perlu atau ia pikir kita bagi .0.

ngenisis
sumber
3

Perl 5, 6 + 2 byte untuk flag -l dan -p

$_||=1

Mengambil input pada baris terpisah dari stdin. Berjalan dengan bendera -lp.

Chris
sumber