Tránh xa số không


41

Bài tập, nhiệm vụ

Cho một số nguyên không âm n, đầu ra 1nếu n0và xuất giá trị nkhác.

Đầu vào

Một số nguyên không âm.

  • Nếu bạn muốn chấp nhận chuỗi làm đầu vào, chuỗi sẽ khớp với regex sau : /^(0|[1-9][0-9]*)$/, nghĩa là nó không được có bất kỳ số 0 đứng đầu nào, ngoại trừ khi có 0.
  • Nếu bạn chấp nhận một số nguyên thực làm đầu vào, bạn có thể cho rằng số nguyên nằm trong khả năng xử lý của ngôn ngữ.

Đầu ra

Một số nguyên dương, được chỉ định ở trên. Số không hàng đầu không được phép. Đầu ra của bạn phải phù hợp với regex /^[1-9][0-9]*$/.

Tủ thử

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

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.

Tiêu chuẩn áp dụng.


1
Bạn có lẽ nên đặt một liên kết đến TNB CMC , vì đó là nơi thử thách này đến từ.
mbomb007

Là câu trả lời cần phải là một chức năng đầy đủ, hoặc nó có thể là cơ thể?
Caleb Kleveter

1
@CalebKleveter Quy tắc mặc định trong PPCG là câu trả lời là một hàm hoặc một chương trình đầy đủ, nhưng không phải là đoạn trích.
Leaky Nun

Chúng ta có thể in đầu ra với số 0 đứng đầu không?
MD XF

@MDXF có, bạn có thể.
Leaky Nun

Câu trả lời:


18

C (gcc), 14 13 byte

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

Cảm ơn @betseg đã nhắc nhở tôi về n?:1mánh khóe trong các bình luận của câu trả lời C khác!

Hãy thử trực tuyến!

C, 17 byte

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

Hãy thử trực tuyến!

C, 16 byte

#define f(n)!n+n

Hãy thử trực tuyến!



1
@betseg Đó là vì nó là một macro. Trình biên dịch xem nó như 3*!n+nbằng 3*0+5.
Steadybox

1
Tôi biết, nhưng tôi nghĩ rằng bạn sẽ có thể áp dụng các toán tử số học cho các giá trị "trả về" trực tiếp, đó là lý do tại sao việc đặt dấu ngoặc đơn quanh các macro. Tôi chỉ không nghĩ rằng macro là hợp lệ.
betseg

4
@betseg Tôi không nghĩ đó là một yêu cầu trong môn đánh gôn. Tôi chưa bao giờ thấy một câu trả lời golf mã với các macro C làm điều đó.
Steadybox

1
@hucancode Xem các liên kết TIO. Bạn cần thêm một maintừ mà hàm / macro fđược gọi. Một giải pháp không cần phải là một chương trình đầy đủ theo mặc định. Phiên bản dành riêng cho gcc có thể hoặc không thể biên dịch trên trình biên dịch khác và nó có thể hoặc không thể chạy chính xác khi được biên dịch trên trình biên dịch khác.
Steadybox

17

Japt , 2 byte

ª1

Hãy thử trực tuyến!

Giải trình

ªlà một lối tắt cho ||toán tử của JS . Japt có đầu vào ngầm định, vì vậy chương trình này sẽ tính toán input||1và kết quả được gửi hoàn toàn đến STDOUT.

w1cũng sẽ làm việc, lấy tối đa của đầu vào và 1.


16

Alice , 7 byte

1/s
o@i

Hãy thử trực tuyến!

Giải trình

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
Thay thế: n=>n+!n(Ít nhất là tôi nghĩ)
Matthew Roh

@SIGSEGV Vâng, điều đó thực sự hiệu quả. (Điều đó cũng có thể n|!n, mặc dù số này được giới hạn ở số lượng 31 bit.)
Arnauld

điều này có thể được đơn giản hóa thành n | | 1. Chỉ có điều đánh giá là sai là 0.
ansiart

1
@ansiart Nếu quan điểm của bạn là n=>n||1có thể được đơn giản hóa n||1, thì không. Câu trả lời chấp nhận được là chương trình đầy đủ hoặc chức năng. n=>do_something_with(n)là một hàm mũi tên trong cú pháp ES6.
Arnauld

1
@StanStrum Chúng tôi bắt buộc phải trả về giá trị ban đầu nnếu nó không bằng không. Một bitwise OR sẽ sửa đổi nbất cứ khi nào bit ít quan trọng nhất không được đặt (ví dụ (4|1) === 5).
Arnauld



12

V , 4 byte

é0À

Hãy thử trực tuyến!

Lạm dụng một hành vi không được ưa thích nhưng được mong đợi , vì vậy tôi thực sự không thể gọi đó là một lỗi. Giải trình:

Trong Vim, các lệnh chấp nhận một số đếm. Ví dụ: <C-a>sẽ tăng một số, nhưng 7<C-a>sẽ tăng một số lên 7. Tuy nhiên, bạn không thể sử dụng 0làm số đếm, bởi vì

  • 0 đã là một lệnh (đi cột đầu tiên) và

  • Trong ngữ cảnh của trình soạn thảo văn bản, hiếm khi có ý nghĩa khi yêu cầu lệnh được chạy 0 lần.

Điều này tốt cho trình soạn thảo văn bản, nhưng thường đáng ghét đối với ngôn ngữ chơi gôn, vì vậy V ghi đè lên một số lệnh để đó 0là số đếm hợp lệ. Ví dụ, é, ñ, Ä, và một số người khác. Tuy nhiên, vì <C-a>là một lệnh vim dựng sẵn, nó không bị ghi đè, do đó, việc chạy lệnh này với đầu vào tích cực sẽ mang lại:

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

Nhưng chạy với 0 là đầu vào cho:

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

Giải thích đầy đủ:

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

1
Một lần mà 0không phải là một đếm là hữu ích. Tôi thậm chí đã không xem xét nó lúc đầu bởi vì tôi đã tránh nó rất nhiều lần
nmjcman101


12

Haskell, 5 byte

max 1

Ví dụ sử dụng: (max 1) 0-> 1.

Không có gì nhiều để giải thích.



10

R, 13 byte

max(1,scan())

đọc ntừ stdin. Với pmax, nó có thể đọc trong một danh sách và trả về giá trị phù hợp cho từng phần tử trong danh sách cho byte 1.

thử trực tuyến!

Tôi nên lưu ý rằng có một giải pháp tốt R trong 13 byte bởi Sven Hohenstein mà cho phép được nêu ra một giải pháp 13 byte

(n=scan())+!n

Điều này khiến tôi tự hỏi nếu đó là giới hạn thấp hơn cho R.


Một giải pháp 13 byte khác sử dụng pryr: pryr::f(n+!n). Không thể tìm thấy bất cứ thứ gì nhỏ hơn ...
JayCe

9

Khối , 6 byte

OI!1L@

Bằng cách nào đó quản lý để phù hợp với nó trên một khối đơn vị ... Kiểm tra trực tuyến!

Giải trình

Trước khi được chạy, mã được sắp xếp dưới dạng một khối lập phương:

  O
I ! 1 L
  @

IP (con trỏ lệnh) sau đó được đặt ở mặt xa bên trái ( I), quay mặt sang phải. Các hướng dẫn chạy từ đó là:

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 sau đó chạm !lại, bỏ qua @mặt dưới. Điều này không hữu ích, vì chúng ta cần nhấn vào @để kết thúc chương trình. IP chạm Llại lần nữa và đi qua đường giữa theo chiều ngược lại ( L1!I) trước khi kết thúc Lthêm một lần nữa, cuối cùng bật IP lên @.






6

R 20 16 byte

pryr::f(n+(n<1))

Chào mừng đến với PPCG!
Martin Ender

Cảm ơn @MartinEnder. Tôi đã học được một số thủ thuật của thương mại.
Shayne03


5

MarioLANG , 12 byte

;
=[
:<+
 =:

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Mario bắt đầu ở phía trên bên trái, ban đầu đi bên phải. Anh ta đọc một int từ input ( ;) và lưu nó trong ô nhớ hiện tại. Sau đó, anh ta rơi xuống đất ( =), đánh [, khiến anh ta bỏ qua lệnh tiếp theo nếu ô hiện tại là 0.

Nếu ô không bằng 0, anh ta sẽ bắt đầu đi bên trái ( <), xuất ô hiện tại dưới dạng int ( :) và rơi vào cái chết của anh ta (kết thúc chương trình).

Nếu ô là 0, anh ta bỏ qua lệnh rẽ trái và tiếp tục đi bên phải. Anh ta tăng tế bào hiện tại ( +), xuất nó và rơi vào cái chết.


5

Brain-Flak , 22 , 10 byte

({{}}[]{})

Hãy thử trực tuyến!

Giải trình:

Nếu đầu vào khác không, thì {{}}sẽ bật mọi thứ ra khỏi ngăn xếp và đánh giá đầu vào. Nếu nó bằng 0, sẽ không có gì xuất hiện và nó sẽ đánh giá bằng không. Vì vậy, chạy ({{}})cho

Khác không:

n

Số không:

0
0

Tại thời điểm này, chúng tôi sẽ thêm chiều cao của ngăn xếp (0 cho khác không, 1 cho 0) và bật thêm một giá trị khỏi ngăn xếp. (vì ngăn xếp được đệm với số lượng vô hạn là 0, nên giá trị này sẽ bật 0 trên cùng hoặc thêm 0)


Công việc tốt, nhưng không phải là giải pháp ngắn nhất: codegolf.stackexchange.com/a/118520/31203
MegaTom

4

TI-BASIC, 7 byte

:Prompt X
:X+not(X

Ngoài ra,

TI-BASIC, 7 byte

:Prompt X
:max(X,1



4

Python, 15 byte

lambda n:n or 1

Tại sao không chỉ n or 1, 6 byte?
DReispt

2
Bởi vì đó chỉ là một đoạn trích, trong khi chúng tôi thường trả lời với các chương trình hoặc chức năng hoàn chỉnh. Tôi không chắc chắn nếu điều này được nêu rõ ràng trong một số quy tắc ở đâu đó, nhưng ít nhất đó là tiêu chuẩn thực tế.
daniero

Trích dẫn 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/iêu
daniero

@trichoplax 1or nsẽ luôn trở lại 1, phải không?
daniero

1
Thay thế với cùng số lượng byte 15 byte:lambda n:n|1>>n
Kevin Cruijssen

4

dc, 11 byte

[1]sf?d0=fp

[1]sflưu trữ một macro trong thanh ghi f đẩy 1 lên đỉnh ngăn xếp, ?đọc đầu vào, d0=fchạy macro f nếu đầu vào là 0, pin đỉnh của ngăn xếp.

Kiểm tra:

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

=A1+(A1=0)

Điều này giúp tiết kiệm 4 byte qua giải pháp câu lệnh 'IF' rõ ràng , =IF(A1=0,1,A1).


3
Và ít hơn 1 byte so với ít rõ ràng hơn=A1+NOT(A1)
Engineering Toast

4

Java 8, 10 byte

i->i<1?1:i
  • Cảm ơn @LeakyNun đã lưu - 1 byte
    • Không nhận thấy đó là một số nguyên không âm

3
i==0có thể được thay thế bằngi<1
Leaky Nun

4

R, 13 byte

n=scan();n+!n

Ở đây, scanđược sử dụng để đọc giá trị đầu vào n. Phủ định của n(nghĩa là !n0 hoặc 1) được thêm vào n.


3

Toán học, 9 8 byte

Mỗi Martin Ender:

#~Max~1&

Ý tưởng đầu tiên:

#/. 0->1&

Chức năng thuần túy với thay thế 0bằng 1. Không gian là cần thiết hoặc nó nghĩ rằng chúng ta đang chia cho .0.


3

Perl 5, 6 + 2 byte cho các cờ -l và -p

$_||=1

Đưa đầu vào trên các dòng riêng biệt từ stdin. Chạy với những lá cờ -lp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.