อยู่ห่างจากศูนย์


41

งาน

กำหนดเป็นจำนวนเต็มไม่ลบnส่งออก1ถ้าnเป็น0และส่งออกค่าเป็นnอย่างอื่น

อินพุต

จำนวนเต็มที่ไม่เป็นลบ

  • หากคุณต้องการที่จะยอมรับสตริงเป็น input สตริงจะตรงกับ regex ต่อไปนี้: /^(0|[1-9][0-9]*)$/คือมันต้องไม่มีเลขศูนย์ชั้นนำใด ๆ 0ยกเว้นเมื่อมันเป็น
  • หากคุณยอมรับจำนวนเต็มจริงเป็นอินพุตคุณอาจสมมติว่าจำนวนเต็มนั้นอยู่ภายในขีดความสามารถในการจัดการของภาษา

เอาท์พุต

จำนวนเต็มบวกที่ระบุข้างต้น ไม่อนุญาตเลขศูนย์นำหน้า ส่งออกของคุณควรจะตรงกับ /^[1-9][0-9]*$/regex

Testcases

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

เกณฑ์การให้คะแนน

นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ

ช่องโหว่มาตรฐานใช้


1
คุณควรใส่ลิงค์ไปยังTNB CMCเนื่องจากเป็นสิ่งที่มาจากความท้าทายนี้
mbomb007

คำตอบต้องเป็นฟังก์ชั่นเต็มรูปแบบหรือว่าจะเป็นร่างกาย
Caleb Kleveter

1
@CalebKleveter กฎเริ่มต้นใน PPCG คือคำตอบนั้นเป็นทั้งฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ แต่ไม่ใช่ตัวอย่าง
Leun Nun

เราสามารถพิมพ์ผลลัพธ์ด้วยศูนย์นำหน้าได้หรือไม่?
MD XF

@ MDXF ใช่คุณทำได้
Leun Nun

คำตอบ:


18

C (gcc), 14 13 ไบต์

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

ขอบคุณ @betseg ที่เตือนให้ฉันนึกถึงn?:1เคล็ดลับในคำตอบ C อื่น ๆ !

ลองออนไลน์!

C, 17 ไบต์

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

ลองออนไลน์!

C, 16 ไบต์

#define f(n)!n+n

ลองออนไลน์!



1
@betseg นั่นเป็นเพราะมันเป็นมาโคร คอมไพเลอร์เห็นว่ามันเป็นซึ่งเท่ากับ3*!n+n 3*0+5
Steadybox

1
ฉันรู้ว่า แต่ฉันคิดว่าคุณควรใช้ตัวดำเนินการทางคณิตศาสตร์กับค่า "ส่งคืน" โดยตรงนั่นคือสาเหตุที่เป็นเรื่องธรรมดาที่จะใส่เครื่องหมายวงเล็บในมาโคร ฉันไม่คิดว่าแมโครนั้นถูกต้อง
betseg

4
@betseg ฉันไม่คิดว่านั่นเป็นข้อกำหนดในรหัสกอล์ฟ ฉันไม่เคยเห็นคำตอบของโค้ดกอล์ฟกับมาโคร C ทำเช่นนั้น
Steadybox

1
@hucancode ดูลิงก์ TIO คุณต้องเพิ่มmainจากการที่ฟังก์ชั่น / แมโครfจะเรียกว่า โซลูชันไม่จำเป็นต้องเป็นโปรแกรมเต็มรูปแบบตามค่าเริ่มต้น รุ่นเฉพาะ gcc อาจหรือไม่อาจรวบรวมในคอมไพเลอร์อื่นและอาจหรือไม่ทำงานอย่างถูกต้องเมื่อรวบรวมในคอมไพเลอร์อื่น
Steadybox

17

Japtap , 2 ไบต์

ª1

ลองออนไลน์!

คำอธิบาย

ªเป็นทางลัดสำหรับ||ตัวดำเนินการของ JS Japt มีอินพุตโดยนัยดังนั้นโปรแกรมนี้จะคำนวณinput||1และผลลัพธ์จะถูกส่งไปยัง STDOUT โดยปริยาย

w11จะทำงานได้เป็นอย่างดีการสูงสุดของการป้อนข้อมูลและ


16

อลิซขนาด 7 ไบต์

1/s
o@i

ลองออนไลน์!

คำอธิบาย

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 ไบต์

n=>n||1

5
ทางเลือก: n=>n+!n(อย่างน้อยฉันก็คิดว่า)
Matthew Roh

@SIGSEGV ใช่ว่าจะได้ผลแน่นอน (อาจเป็นn|!nเช่นนั้นแม้ว่าอันนี้จะ จำกัด อยู่ที่ปริมาณ 31 บิต)
Arnauld

สิ่งนี้สามารถทำให้ง่ายขึ้นเป็น n || 1 เฉพาะสิ่งที่ประเมินว่าเป็นเท็จคือ 0
ansiart

1
@ansiart หากประเด็นของคุณคือสิ่งที่n=>n||1สามารถทำให้เป็นเรื่องง่ายn||1ได้ คำตอบที่ยอมรับได้คือโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ n=>do_something_with(n)เป็นฟังก์ชั่นลูกศรในไวยากรณ์ ES6
Arnauld

1
@StanStrum เราต้องส่งคืนค่าเริ่มต้นnหากไม่ใช่ศูนย์ ค่าบิตหรือจะปรับเปลี่ยนnเมื่อใดก็ตามที่ไม่ได้ตั้งค่าบิตที่สำคัญน้อยที่สุด (เช่น(4|1) === 5)
Arnauld


12

เรติน่า 4 ไบต์

^0
1

ลองออนไลน์!

หากอินพุตเริ่มต้นด้วยศูนย์ให้แทนที่ด้วย 1 (ทำงานได้เพราะอินพุตรับประกันว่าจะไม่มีเลขศูนย์นำหน้าสำหรับค่าที่ไม่เป็นศูนย์)


12

V , 4 ไบต์

é0À

ลองออนไลน์!

การละเมิดพฤติกรรมที่ไม่เป็นที่ต้องการ แต่คาดว่าจะเกิดขึ้นดังนั้นฉันจึงเรียกมันว่าข้อบกพร่องไม่ได้ คำอธิบาย:

ในกลุ่มคำสั่งยอมรับการนับ ตัวอย่างเช่น<C-a>จะเพิ่มจำนวน แต่7<C-a>จะเพิ่มจำนวนขึ้น 7 อย่างไรก็ตามคุณไม่สามารถใช้0เป็นจำนวนได้เนื่องจาก

  • 0 เป็นคำสั่งอยู่แล้ว (ไปที่คอลัมน์แรก) และ

  • ในบริบทของเท็กซ์เอดิเตอร์มันไม่ค่อยเหมาะสมที่จะขอให้เรียกใช้คำสั่ง 0 ครั้ง

นี่เป็นสิ่งที่ดีสำหรับโปรแกรมแก้ไขข้อความ แต่โดยทั่วไปแล้วน่ารังเกียจสำหรับภาษากอล์ฟดังนั้น V จะเขียนทับคำสั่งบางคำสั่งเพื่อให้0นับได้อย่างถูกต้อง ตัวอย่างเช่นé, ñ, Äและบางคนอื่น ๆ อย่างไรก็ตามเนื่องจาก<C-a>เป็นคำสั่ง builtin vim จึงไม่ถูกเขียนทับดังนั้นการรันด้วยอินพุตที่เป็นค่าบวกจะให้:

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

แต่ทำงานด้วย 0 เป็นอินพุตให้:

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

คำอธิบายแบบเต็ม:

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

1
ครั้งเดียวที่0ไม่มีการนับมีประโยชน์ ตอนแรกฉันไม่ได้คิดเรื่องนี้เพราะหลีกเลี่ยงมันหลายครั้ง
nmjcman101


12

Haskell, 5 ไบต์

max 1

ตัวอย่างการใช้งาน: ->(max 1) 01

ไม่มีอะไรมากที่จะอธิบาย



10

R, 13 ไบต์

max(1,scan())

อ่านnจาก stdin ด้วยpmaxมันสามารถอ่านในรายการและส่งกลับค่าที่เหมาะสมสำหรับแต่ละองค์ประกอบในรายการสำหรับ +1 ไบต์

ลองออนไลน์!

ฉันควรทราบว่ามีวิธีแก้ปัญหา R ที่ดีอีก 13 ไบต์โดยSven Hohensteinซึ่งอนุญาตให้ใช้อีก 13 ไบต์ของ

(n=scan())+!n

ซึ่งทำให้ฉันสงสัยว่าเป็นขีด จำกัด ล่างของ R


อีก 13 ไบต์วิธีการแก้ปัญหาโดยใช้:pryr pryr::f(n+!n)ไม่สามารถหาอะไรที่เล็กไปกว่านี้ ...
JayCe

9

Cubix , 6 ไบต์

OI!1L@

ยังไงก็เถอะจัดการให้พอดีกับคิวบ์ยูนิต ... ทดสอบออนไลน์!

คำอธิบาย

ก่อนที่จะรันรหัสจะถูกจัดเรียงเป็น cube net:

  O
I ! 1 L
  @

IP (ตัวชี้คำสั่ง) จะถูกวางไว้ที่ใบหน้าซ้ายสุด ( I) หันไปทางขวา คำแนะนำที่เรียกใช้จากที่นั่นคือ:

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 ก็ไปถึง!อีกครั้งโดยข้าม@ด้านล่างของหน้า สิ่งนี้ไม่เป็นประโยชน์เนื่องจากเราจำเป็นต้องกดปุ่ม@เพื่อจบโปรแกรม IP เข้ามาชนLอีกครั้งและผ่านเส้นกลางในสิ่งที่ตรงกันข้าม ( L1!I) ก่อนที่จะสิ้นสุดในLอีกครั้งหนึ่งซึ่งในที่สุดก็เปลี่ยน IP @เป็น






6

R 20 16 ไบต์

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

ยินดีต้อนรับสู่ PPCG!
Martin Ender

ขอบคุณ @MartinEnder ฉันได้เรียนรู้เทคนิคบางอย่างของการค้าขายแล้ว
Shayne03


5

MarioLANGขนาด 12 ไบต์

;
=[
:<+
 =:

ลองออนไลน์!

มันทำงานอย่างไร

มาริโอเริ่มต้นที่ด้านบนซ้ายเริ่มต้นเดินขวา เขาอ่าน int จากอินพุต ( ;) และเก็บไว้ในเซลล์หน่วยความจำปัจจุบัน จากนั้นเขาก็ตกลงมาจากพื้น ( =) กดปุ่ม[ซึ่งทำให้เขาไม่สนใจคำสั่งถัดไปหากเซลล์ปัจจุบันเป็น 0

หากเซลล์ไม่ใช่ 0 เขาจะเริ่มเดินจากซ้าย ( <) ออกเซลล์ปัจจุบันเป็น int ( :) และล้มลงจนตาย (สิ้นสุดโปรแกรม)

หากเซลล์เป็น 0 เขาจะไม่สนใจคำสั่งให้เลี้ยวซ้ายและเดินต่อไปเรื่อย ๆ เขาเพิ่มจำนวนเซลล์ปัจจุบัน ( +) ออกผลลัพธ์และตกไปสู่ความตาย


5

Brain-Flak , 22 , 10 ไบต์

({{}}[]{})

ลองออนไลน์!

คำอธิบาย:

หากอินพุตไม่ใช่ศูนย์จากนั้น{{}}จะปรากฏทุกอย่างออกจากสแต็กและประเมินเป็นอินพุต หากเป็นศูนย์จะไม่มีอะไรโผล่ขึ้นมาและจะประเมินเป็นศูนย์ ดังนั้นการวิ่ง({{}})ให้

ไม่ใช่ศูนย์:

n

ศูนย์:

0
0

ณ จุดนี้เราจะเพิ่มความสูงของสแต็ก (0 สำหรับที่ไม่ใช่ศูนย์, 1 สำหรับศูนย์) และป๊อปอัพอีกหนึ่งมูลค่าจากสแต็ก (เนื่องจากสแต็กถูกเติมด้วยจำนวนอนันต์ของ 0 สิ่งนี้จะปรากฏขึ้นเป็น 0 อันดับแรกหรือเพิ่ม 0)


ทำได้ดี แต่ไม่ใช่วิธีแก้ปัญหาที่สั้นที่สุด: codegolf.stackexchange.com/a/118520/31203
MegaTom


4

Hexagony ,7 6 ไบต์

)?<@.!

ขยาย:

 ) ?
< @ .
 ! .

ลองออนไลน์!

บันทึก 1 ไบต์ขอบคุณ Martin!

หากหมายเลขไม่ใช่ศูนย์ให้พิมพ์เป็นอย่างอื่นให้เพิ่มเข้าไปแล้วพิมพ์ออกมาแทน



4

Python ขนาด 15 ไบต์

lambda n:n or 1

ทำไมไม่ใช่แค่n or 16 ไบต์?
DReispt

2
เพราะนั่นเป็นเพียงตัวอย่างเล็ก ๆ น้อย ๆ ในขณะที่เรามักจะตอบคำถามด้วยโปรแกรมหรือฟังก์ชั่นที่สมบูรณ์ ฉันไม่แน่ใจว่าจะมีการระบุไว้อย่างชัดเจนในบางกฎหรือไม่ แต่อย่างน้อยนั่นก็เป็นมาตรฐานตามความเป็นจริง
daniero

การอ้างอิง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 nจะกลับมาเสมอ1ใช่มั้ย
daniero

1
ทางเลือกที่มีจำนวนไบต์เดียวกัน 15 ไบต์:lambda n:n|1>>n
Kevin Cruijssen

4

dc, 11 ไบต์

[1]sf?d0=fp

[1]sfเก็บแมโครใน register f ซึ่งดัน 1 ถึงด้านบนสุดของสแต็ก ?อ่านอินพุต d0=fเรียกใช้แมโคร f ถ้าอินพุตเป็น 0 pพิมพ์ด้านบนของสแต็ก

ทดสอบ:

$ 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 ไบต์

=A1+(A1=0)

นี้ช่วยประหยัด 4 ไบต์มากกว่าการแก้ปัญหาคำสั่งที่ชัดเจน =IF(A1=0,1,A1)'ถ้า'


3
และ 1 ไบต์น้อยกว่าที่ชัดเจนน้อยกว่า=A1+NOT(A1)
วิศวกร Toast

4

Java 8, 10 ไบต์

i->i<1?1:i
  • ขอบคุณ@LeakyNunสำหรับการบันทึก - 1ไบต์
    • ไม่ได้สังเกตว่ามันเป็นจำนวนเต็มไม่เป็นลบ

3
i==0สามารถแทนที่โดยi<1
Leaky Nun


3

Mathematica, 9 8 ไบต์

ต่อมาร์ตินเอนเดอร์:

#~Max~1&

ความคิดแรก:

#/. 0->1&

ฟังก์ชั่นบริสุทธิ์ที่มีแทนที่ด้วย0 พื้นที่ที่มีความจำเป็นหรือคิดว่าเราจะหารด้วย1.0


3

Perl 5, 6 + 2 ไบต์สำหรับแฟล็ก -l และ -p

$_||=1

รับอินพุตบนบรรทัดแยกจาก stdin -lpทำงานกับธง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.