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.


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!



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.


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.

15

JavaScript (ES6), 7 byte

n=>n||1

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


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


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

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.


12

Haskell, 5 byte

max 1

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

Tidak banyak yang bisa dijelaskan.



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.


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







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

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.


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)


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



4

Python, 15 byte

lambda n:n or 1

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

4

Excel, 10 Bytes

=A1+(A1=0)

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


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

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.


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.


3

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

$_||=1

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.