ปัดไปทางศูนย์


14

นี่เป็นงานง่าย กำหนดจำนวนจริงบวกหรือลบให้ปัดเศษเป็นจำนวนเต็มทั้งหมดถัดไปใกล้กับศูนย์

ความท้าทาย

  • รับอินพุตผ่านฟอร์มที่สมเหตุสมผล (stdin, function, ฯลฯ ) ของจำนวนจริงหนึ่งค่าบวกหรือลบ

  • ปัดเศษตัวเลขนี้เป็น "ศูนย์" หมายความว่าถ้ามันเป็นบวกคุณจะปัดเศษลงและถ้ามันเป็นลบคุณจะปัดเศษขึ้น

  • ส่งคืนหมายเลขหรือเอาต์พุตไปยังคอนโซล

กรณีทดสอบ

 1.1   =>  1
-1.1   => -1
 500.4 =>  500
-283.5 => -283
 50    =>  50
-50    => -50

กฎระเบียบ

  • นี่คือดังนั้นคะแนนอย่างน้อยเป็นไบต์จึงชนะ

  • มีสติรู้ของช่องโหว่มาตรฐาน

มีความสุข! ความท้าทายเพิ่มเติมของ Jimmy จะมาเร็ว ๆ นี้


3
ฉันอาจเอาท์พุท3.00สำหรับ3.14?
TSH

1
@A_ หากข้อความแสดงข้อผิดพลาดอยู่ใน stderr และผลลัพธ์ของคุณอยู่ใน stdout มันได้รับอนุญาตโดยค่าเริ่มต้น
TSH

1
อีก0.01ทั้ง-0.01ควรยอม0...
roblogic

2
อืมดูเหมือนว่ามันไม่สำคัญสำหรับการเล่นกอล์ฟ langs ส่วนใหญ่จะมี builtin สำหรับสิ่งนี้ใช่ไหม ดูเหมือนว่าเราจะสมมติว่าอินพุตและเอาต์พุตทั้งหมดเป็นสตริง?
Octopus

2
3.00 เป็นจำนวนเต็มอย่างแน่นอน แม่นยำยิ่งขึ้นในสัญกรณ์คณิตศาสตร์มาตรฐานเช่นเดียวกับในภาษาการเขียนโปรแกรมจำนวนมากสัญกรณ์ "3.00" หมายถึงหมายเลข 3 ซึ่งเป็นจำนวนเต็ม แต่ในภาษาการเขียนโปรแกรมส่วนใหญ่จะระบุว่าหมายเลขนั้นจะถูกจัดเก็บในรูปแบบทศนิยม (แต่มันเป็นจำนวนเต็มโดยไม่คำนึงถึงรูปแบบที่จัดเก็บไว้)
Tanner Swett

คำตอบ:


13

เยลลี่ 1 ไบต์

r

โปรแกรมเต็มรูปแบบ (เป็น monadic Link มันส่งคืนรายการความยาวหนึ่งรายการ)

ลองออนไลน์!

อย่างไร?

r - Main Link: number, X           e.g. -7.999
r - inclusive range between left (X) and right (X) (implicit cast to integer of inputs)
  -  = [int(X):int(X)] = [int(X)]       [-7]
  - implicit (smashing) print            -7

40

Python 3 , 3 ไบต์

int

ลองออนไลน์!

ตัดทอนตัวเลขหลังจุดทศนิยม

หมายเหตุ: นี่คือคำตอบเล็กน้อย โปรดดูคำตอบอื่น ๆ ก่อนการถอนเงิน


18
สิ่งนี้แสดงให้เห็นว่า Python 3 เป็นที่นิยมมากกว่า Python 2

1
เอ่อ ... ทำไมต้องโหวต นี่เป็นคำตอบที่ไม่สำคัญเลยทีเดียว ...
MilkyWay90

ฉันคิดว่ามันเป็นคำอธิบายที่ยอดเยี่ยมของโค้ด :)
Chas Brown

3
@ CharBrown ฉันไม่คิดอย่างนั้น ... คำอธิบายไม่ได้เป็นคำอธิบายที่มีความสามารถมาตรฐาน
MilkyWay90

ฉันเดา @Chas กำลังชี้ให้เห็นว่าคำอธิบายนั้นสมบูรณ์กว่าของเขาเองอย่างไม่ จำกัด
prl

21

2
ขออภัย แต่ฉันนินจาคุณ ( codegolf.stackexchange.com/a/190673/83048 )
MilkyWay90

2
หาเรื่อง! แต่คุณกำลังใช้ Python 3 ... :)
Chas Brown

จริง ๆ แล้วผู้คนควรรู้ว่ามันใช้งานได้ใน Python 2 ด้วย
MilkyWay90

น่าเสียดายที่คุณได้รับไขว้เขวประมาณนาที :(
connectyourcharger

3
ฉันถูกปล้น! :)
Chas Brown

12

Perl 5 -p056l15 , 2 ไบต์

<>

ลองออนไลน์!

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

-056   # (CLI) Make "." the input record separator
-l15   # (CLI) Make "\n" the output record separator
       # (otherwise it would use the input separator)
-p     # (CLI) Implicitly read $_ from STDIN
<>     # Read the second input field and do nothing with it
-p     # (CLI) Output $_ to STDOUT

หรือถ้าคุณต้องการคำตอบแบบดั้งเดิมมากขึ้น:

Perl 5 , 6 ไบต์

$_=int

ลองออนไลน์!


l15 ไม่ได้ก็\n จะเป็น l12 แม้ว่ามันจะดูเหมือนกันใน TIO \r\n
Grimmy

สำหรับตัวเลือกที่สองก็มี-Minteger -p $_/=1
Nahuel Fouilleul

4
วิธีแก้ปัญหาแรกคือ 8 ไบต์จริง ๆ เพราะคุณจำเป็นต้องรวมค่าสถานะในจำนวนไบต์ของคุณ
John Dvorak

2
@JohnDvorak จริง ๆ แล้วสำหรับเมตาโพสต์codegolf.meta.stackexchange.com/questions/14337/…แฟล็กไม่ได้เพิ่มไบต์ แต่นับเป็นภาษาอื่น
Nick Kennedy

@NahuelFouilleul ฉันคิดเกี่ยวกับอันนั้นเหมือนกัน แต่มันก็ไม่สำคัญเพราะฉันได้ถึง 2 ไบต์ในทางอื่น
Xcali

6

เขาวงกต & Hexagony , 3 ไบต์

ขอบคุณ FryAmTheEggman ที่ชี้ให้เห็นว่าฉันได้เขียน Hexagony!

?!@

ลองออนไลน์! และลองออนไลน์!

อย่างไร?

เขาวงกตและ Hexagony จะบอกคุณเร็วเท่าที่จะเป็นไปได้! ...

? - read and discard from STDIN until a digit, a - or a + is found. Then read as many characters as possible to form a valid (signed) decimal integer and push its value
! - pop a value and write its decimal representation to STDOUT
@ - exit the labyrinth

3
นี้อาจเป็นจริงของบางส่วนของภาษาอื่น ๆ มาร์ติน แต่โปรแกรมเดียวกันแน่นอนทำงานในHexagony
FryAmTheEggman

3
เฮ้ฉันต้องการคำตอบใน Hexagony เสมอ การทำโดยไม่พยายามเป็นสิ่งสุดท้ายที่ฉันคิดว่าอาจเกิดขึ้นได้!
Jonathan Allan

IO@ในแบ็คแฮนด์ใช้วิธีเดียวกันและ&.@ในเบฟจ์จ์ อาจมีหลายภาษาที่มีอินพุตจำนวนเต็มและการจัดการจำนวนเต็มเท่านั้นจะเหมือนกัน
Jo King

@JoKing ดังนั้นเรากำลังรอให้ใครบางคนค้นหาภาษาด้วยจำนวนเต็ม i / o และอ่านตัวเลขทั้งหมดจาก stdin ไปยัง stack / list แล้วพิมพ์ไปที่ stdout ตามค่าเริ่มต้น ฉันเชื่อว่าอาจมีอย่างใดอย่างหนึ่งและมันจะเป็นคำตอบในศูนย์ไบต์
TSH

@tsh มากที่สุด!
Jonathan Allan

6

brainfuck , 26 ไบต์

,[.+++++[->+++++<]>+[,>]<]

ลองออนไลน์!

ส่งออกด้วยการต่อท้าย.หากตัวเลขเป็นทศนิยม

การตีกอล์ฟที่ชาญฉลาดนั้นไม่ค่อยมีอะไรมากยกเว้นว่าจะลบ 46 เพื่อตรวจสอบว่าตัวละครนั้นเป็นแบบ.นั้นหรือเปล่าฉันบวก 5 และทวีคูณ 5 ด้วย 5 เพื่อให้ได้ 255 จากนั้นเพิ่มอีกหนึ่งค่าเพื่อหมุนเป็นศูนย์ การลบ 3 คูณด้วย 6 และลบ 2 เท่ากับผลคูณเดียวกัน


6

C (tcc) 39 21 10 ไบต์

จริง ๆ แล้วฉันค่อนข้างแปลกใจที่ไม่มีใครคิดว่าจะใช้ C.

f(float i){}

นี่ไม่ใช่ฟังก์ชั่นประจำตัวที่ดูเหมือนจะเป็น implant int ชนิดของฟังก์ชั่น f คั่นจุดลอยตัว

TIO

มีโอกาสน้อยที่จะหลอกคน แต่มีความยาวไบต์ที่สั้นกว่า:

f(int i){}

TIO


ห้ามใช้งานfloatเนื่องจากจะใช้รีจิสเตอร์ที่แตกต่างกันสำหรับอินพุตของค่าทศนิยม
Hauleth



3

Java (OpenJDK 8) , 15 ไบต์ 9 ไบต์

s->(int)s

ลองออนไลน์!

ขอบคุณ @ kevin-cruijssen


9 ไบต์(int)โดยใช้แลมบ์ดาอินเตอร์เฟซเพื่อให้เราสามารถใช้วิทยาการและง่ายต่อการโยน และนี่คือความสนุก 15 ไบต์ทางเลือกโดยใช้วิธีการอ้างอิง :)
Kevin Cruijssen

1
@KevinCruijssen ขอขอบคุณสำหรับการชี้คำตอบ 9 ไบต์! และโซลูชั่นทางเลือก 15bytes นั้นยอดเยี่ยม! ยังเป็นแฟนตัวยงของคำตอบของคุณ! ฉันได้รับแรงบันดาลใจในการเข้าร่วมชุมชนด้วยเพื่อการมีส่วนร่วมของคุณ: D
Margon

ดีใจที่ฉันสามารถช่วยและสนุกที่จะได้ยินฉันเป็นแรงบันดาลใจ : D ยินดีต้อนรับ! โอ้และถ้าคุณยังไม่เห็นพวกเขาเคล็ดลับสำหรับการเล่นกอล์ฟใน Javaและเคล็ดลับสำหรับการเล่นกอล์ฟใน <ทุกภาษา>อาจจะสนใจที่จะอ่าน เพลิดเพลินไปกับการพักผ่อนของคุณ! :)
Kevin Cruijssen

ขอขอบคุณ! :) ฉันอ่านเคล็ดลับทั้งหมดแล้วซุ่มซ่อนจริงๆก่อนโพสต์! หวังว่าฉันจะได้คำตอบเพิ่มเติมในอนาคต!
Margon

3

Excel, 10 ไบต์

=TRUNC(A1)

TRUNC ตัดทอนตัวเลขให้เป็นจำนวนเต็มด้วยการลบส่วนที่เป็นเศษส่วนของตัวเลข





2

ReRegexขนาด 12 ไบต์

\..+//#input

ลองออนไลน์!

ReRegex เป็นภาษาการเขียนโปรแกรมซึ่งจับคู่และแทนที่ซ้ำไปซ้ำมาจนกว่าจะไม่มีการแข่งขัน

MATCH
    \.                                      The literal period/full stop char
    .+                                      Followed by one or more characters
REPLACE
    (nothing)                               Equivalent to removing the input
STRING TO REPEATEDLY MATCH/REPLACE UNTIL THERE ARE NO MATCHES
    #input                                  The input



2

รหัสเครื่อง Intel 8087 FPU ขนาด 14 ไบต์

D9 2E 010C      FLDCW CW_RNDZ   ; modified CW register for round towards zero
D9 06 010E      FLD  A          ; load single precision value A into ST(0)
DF 16 0112      FIST B          ; store integer value of ST(0) into B

CW_RNDZ   DW    0F7FH           ; control word to round down

อินพุตคือค่าความแม่นยำเดียวในตำแหน่งหน่วยความจำA(a DD) เอาต์พุตคือค่าจำนวนเต็มที่ตำแหน่งหน่วยความจำB(a DW)

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





2

ถัง ,19 17 13 ไบต์

เอาต์พุตนี้มีอักขระที่ไม่สามารถพิมพ์ได้บางส่วน นอกจากนี้สิ่งนี้ยังมีข้อผิดพลาด (ตอนนี้เราต้องการอินพุตที่ตรงกันข้าม!)

?'(:\.>')"([,

การออกโดยมีข้อผิดพลาดจะได้รับอนุญาตตามค่าเริ่มต้น
EdgyNerd

2

ช่องว่าง (พร้อมคอมไพเลอร์ vii5ard ), 18 17 ไบต์

[S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_integer][T   T   T   _Retrieve_input][T  N
S T _Print_as_integer]

เพิ่มตัวอักษรS(ช่องว่าง), T(แท็บ) และN(บรรทัดใหม่) เป็นการเน้นเท่านั้น
[..._some_action]เพิ่มเป็นคำอธิบายเท่านั้น

ลองออนไลน์ คุณจะต้องคัดลอกโค้ดด้วยตัวคุณเอง (โปรดสังเกตว่า SE แปลงแท็บให้เป็นช่องว่าง!) เพื่อเรียกใช้โค้ดที่ Whitespace-compiler ออนไลน์ vii5ard เมื่อคลิกวิ่งก็จะขอให้การป้อนข้อมูล (เช่น-285.5) -283และหลังจากการคลิกที่ใส่มันจะดำเนินต่อไปและเอาท์พุท

คำอธิบายในรหัสเทียม:

Integer i = STDIN as integer
Print i as integer

ช่องว่างสามารถใช้ I / O เป็นจำนวนเต็มหรืออักขระเดี่ยวเท่านั้นดังนั้นในกรณีนี้มันจะอ่านอินพุตเป็นจำนวนเต็มและไม่สนใจอักขระต่อท้ายอื่น ๆ Ie -283.5หรือ-283abc5ทั้งสองจะมีการป้อนข้อมูล (และเอาท์พุทจึง) -283เช่น

น่าเสียดายที่สิ่งนี้ไม่ทำงานบนTIOด้วยเหตุผลสองประการ (คอมไพเลอร์ Whitespace ทั้งหมดนั้นแตกต่างกันเล็กน้อย .. ):

  1. มันจะให้no parseข้อผิดพลาดเมื่อเราพยายามอ่านอินพุตเป็นจำนวนเต็มซึ่งไม่ใช่จำนวนเต็มที่ถูกต้อง ดังนั้นเราจะอ่านตัวอักษรทีละตัวและหยุด (พร้อมข้อผิดพลาด) ทันทีที่เราพบ.หรือไม่มีการป้อนข้อมูลเพิ่มเติม (เช่น50/ -50)
  2. ในคอมไพเลอร์ vii5ard ก็ยังเป็นไปได้ที่จะผลักดัน 0 มีเพียงSSNในขณะที่ใน TIO มันต้องมีการเพิ่มเติมSหรือT: /SSSN SSTNประการแรกSคือเปิดใช้งานการจัดการกองซ้อน ; ที่สองSคือกดสิ่งต่อไปนี้เป็นจำนวนเต็ม ; ที่สามS/ Tเป็นบวก / ลบตามลำดับ และใด ๆS/ Tหลังจากนั้น (ตามN) คือจำนวนที่เราต้องการที่จะผลักดันในไบนารีที่และS=0 T=1สำหรับจำนวนเต็ม 0 ส่วนไบนารีนี้ไม่สำคัญเนื่องจากเป็น 0 โดยค่าเริ่มต้น แต่ใน TIO เรายังคงต้องระบุค่าบวก / ลบและด้วยคอมไพเลอร์ Whitespace อื่น ๆ เช่น vii5ard

ช่องว่าง (พร้อมคอมไพเลอร์ TIO ) 48 ไบต์

[N
S S N
_Create_Label_LOOP][S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   S _Read_STDIN_as_character][T   T   T   _Retrieve_input][S N
S _Duplicate_input][S S S T S T T   T   S N
_Push_46_.][T   S S T   _Subtract][N
T   S S N
_If_0_Jump_to_Label_EXIT][T N
S S _Print_as_character][N
S N
N
_Jump_to_Label_LOOP]

เพิ่มตัวอักษรS(ช่องว่าง), T(แท็บ) และN(บรรทัดใหม่) เป็นการเน้นเท่านั้น
[..._some_action]เพิ่มเป็นคำอธิบายเท่านั้น

ลองใช้ออนไลน์ (ด้วยพื้นที่ว่างเปล่าแท็บและบรรทัดใหม่เท่านั้น)

คำอธิบายในรหัสเทียม:

Start LOOP:
  Character c = STDIN as character
  If(c == '.'):
    Exit program
  Print c as character
  Go to the next iteration of LOOP




1

05AB1E , 1 ไบต์

ï

ในเวอร์ชันดั้งเดิม (ซึ่งเขียนด้วย Python) การสร้าง cast ไปที่จำนวนเต็มจะทำงานตามที่คาดไว้เพื่อตัดค่าทศนิยม

ลองออนไลน์

ในรุ่นใหม่ของ 05AB1E (เขียนใน Elixir) จะใช้งานได้กับสตริงเท่านั้น (แม้ว่าจำนวนเต็ม / ทศนิยม / สตริงควรทั้งหมดสามารถใช้แทนกันได้ยกเว้นการเรียงลำดับพจนานุกรมและตัวเลขเป็นต้น) คิดว่าฉันสามารถรายงานข้อผิดพลาดถึง@Adnan ..

ลองใช้ออนไลน์เพื่อเปรียบเทียบอินพุตจำนวนเต็ม / ทศนิยม (ให้ผลลัพธ์ที่ไม่ถูกต้อง) เทียบกับอินพุตสตริง (ให้ผลลัพธ์ที่ถูกต้อง)


1
ïทำงานได้ดีบน 05AB1E มันเป็นอินพุตอาเรย์ที่ใช้งานได้แปลก
Grimmy

@Grimy Ah มันเป็นสตริงเทียบกับจำนวนเต็ม / ทศนิยม สตริงทำงานถูกต้อง แต่ไม่ได้เป็นจำนวนเต็ม / ทศนิยม
Kevin Cruijssen

1

Aheui (esotope)ขนาด 9 ไบต์

방망희

ลองออนไลน์!

แนวคิดพื้นฐานจากคำตอบสามเหลี่ยม (หรือภาษาอื่น ๆ จะรับอินพุตเป็นตัวเลขจำนวนเต็ม)

สนุกกับความเป็นจริง. 방망희(ออกเสียงbang-mang-heui( aของark)) เสียงเกือบจะเป็นเช่นเดียวกับ방망이(ออกเสียงbang-mang-i( aของark, iเสียงเหมือนE ) ซึ่งหมายความว่าค้างคาว

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

ใช้จำนวนเป็นจำนวนเต็ม

พิมพ์ค่าเป็นตัวเลข

ยุติโปรแกรม


1

PowerShellขนาด 19 ไบต์

$args-replace'\..*'

ลองออนไลน์!

PowerShell โดยค่าเริ่มต้นจะทำการปัดเศษของนายธนาคารซึ่งค่อนข้างตรงกันข้ามกับภาษาอื่น ๆ ที่มีการปัดเศษ ตามธรรมเนียมเราจะใช้[Math]::Truncate()เพื่อตัดจุดทศนิยมและส่วนทศนิยมใด ๆ และบรรลุการปัดเศษ "เป็นศูนย์" ที่เราสนใจที่นี่ อย่างไรก็ตามนั่นใช้เวลาค่อนข้างนานดังนั้นการใช้เคล็ดลับนี้เราสามารถปัดเศษเข้าหาศูนย์โดยการคัดเลือกอินพุตไปยังสตริงโดยปริยายทำการแสดง regex -replaceเพื่อกำจัดระยะเวลาและอะไรก็ตามหลังจากนั้นและปล่อยเอาต์พุตบนไพพ์ไลน์สำหรับ การพิมพ์โดยนัย


ฉันไม่คิดว่านี่จะให้ผลลัพธ์ที่ต้องการสำหรับจำนวนลบ
Octopus

@ Octopus แน่ใจหรือไม่? มันแค่ตัดส่วนทศนิยมซึ่งย้ายตัวเลขไปที่ศูนย์ไม่ว่าจะเป็นจากค่าบวกหรือค่าลบ
AdmBorkBork

ถูกต้อง ฮ่า ๆ.
Octopus

1

สามเหลี่ยม 3 ไบต์

$.%

ลองออนไลน์!

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


สามเหลี่ยม 1 ไบต์

$

ลองออนไลน์!

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