शून्य से दूर दौर


24

शून्य से दूर दौर

गोल से शून्य की ओर प्रेरित ।

किसी भी उचित विधि के माध्यम से एक संख्या इनपुट को देखते हुए, संख्या को "शून्य से दूर" - सकारात्मक संख्याओं को गोल और नकारात्मक संख्याओं को नीचे गोल करें।

यदि आप इनपुट को एक स्ट्रिंग (STDIN के माध्यम से, उदाहरण के लिए) के रूप में लेने का इरादा रखते हैं, तो आपको दशमलव बिंदु के साथ या उसके बिना संख्याओं को संभालने में सक्षम होना चाहिए। यदि आप इसे एक संख्या के रूप में लेते हैं, तो यह कम से कम फ्लोटिंग-पॉइंट परिशुद्धता (दोहरी परिशुद्धता की आवश्यकता नहीं) या तर्कसंगत संख्याओं को संभालने में सक्षम होना चाहिए।

यदि आप चाहें तो एक फ्लोटिंग-पॉइंट नंबर को दशमलव बिंदु (जैसे 42.0) के साथ आउटपुट कर सकते हैं। (या यहां तक ​​कि कुछ परीक्षण मामलों में आउटपुट फ़्लोटिंग-पॉइंट और कुछ आउटपुट पूर्णांक हैं, अगर यह आपके उत्तर को छोटा बनाता है।)

मानक खामियों की अनुमति नहीं है, आदि।

परीक्षण के मामलों

-99.9 => -100
-33.5 => -34
-7    => -7
-1.1  => -2
0     => 0
2.3   => 3
8     => 8
99.9  => 100
42.0  => 42
-39.0 => -39

सैंडबॉक्स लिंक


यदि हम एक स्ट्रिंग संदर्भ में संख्या ले रहे हैं, जैसे कि STDIN, तो क्या हमें .0परीक्षण मामलों के सुझाव के अनुसार समर्थन करने की आवश्यकता है?
जो राजा

@JoKing हाँ-- मैं स्पष्ट करने के लिए प्रश्न को अपडेट करूंगा। यह वास्तव में मूल मामला था, लेकिन तब सैंडबॉक्स में लोगों ने गैर-दशमलव परीक्षण मामलों को जोड़ने का सुझाव दिया ताकि उह, यहां हम दोनों के साथ हैं, क्षमा करें
मान स्याही

प्रेरणादायक होना अच्छा लगता है :)
connectyourcharger

यह मज़ेदार है कि पूर्णांक इनपुट और पूर्णांक आउटपुट लेने से पिछली चुनौती पर इतनी अच्छी तरह से काम करने वाली सभी भाषाएं इतनी अच्छी तरह से काम नहीं करेंगी, क्योंकि वे बीच का अंतर नहीं बता सकते हैं -0.1और0.1
जो किंग

जवाबों:


15

एक्सेल, 13 बाइट्स

=ROUNDUP(A1,)

विकल्प

=EVEN(A1*2)/2

4
EVEN, क्या एक अजीब समारोह ..
TSH

13
@tsh मुझे लगता है कि आपका मतलब "विषम कार्य" है।
नकारात्मक सात

2
@negativeseven Username चेक आउट करता है। :-पी
वेकी


8

जेली , 4 बाइट्स

ĊṠ¡Ḟ

एक मानदण्ड लिंक एक संख्या को स्वीकार करता है जो पूर्णांक देता है।

इसे ऑनलाइन आज़माएं! या एक परीक्षण-सूट देखें

कैसे?

ĊṠ¡Ḟ - Link: number, N
  ¡  - repeat...
 Ṡ   - ...number of times: sign of N (repeating -1 is the same as 0 times)
Ċ    - ...action: ceiling
   Ḟ - floor (that)

तो ¡नकारात्मक संख्याओं के लिए वास्तव में कैसे काम करता है ? मुझे नहीं लगता कि यह प्रलेखित है
caird coinheringaahing

1
यह जेली के विकी पर प्रलेखित नहीं है, लेकिन ¡दोहराव वाले स्वभाव को for index in range(repetitions)कोड में लूप के साथ लागू किया गया है। range([stop=]-1)खाली है के बाद से startकरने के लिए डिफ़ॉल्ट 0और stepडिफ़ॉल्ट रूप में 1और "एक सकारात्मक कदम के लिए, एक सीमा की सामग्री rसूत्र द्वारा निर्धारित कर रहे हैं r[i] = start + step*i, जहां i >= 0और r[i] < stop।" डॉक्स
जोनाथन एलन

¡पायथन के व्यवहार पर निर्भर करता है range, और range(-1).__iter__().__next__()तुरंत फेंकता है StopIteration
अप्रकाशित स्ट्रिंग

6

पायथन 3 , 23 बाइट्स

lambda i:i-i%(1|-(i>0))

इसे ऑनलाइन आज़माएं!

-1 बाइट एक्सनोर के लिए धन्यवाद


1
आप (1|-(i>0))एक बाइट को बचाने के लिए कर सकते हैं (1,-1)[i>0]
xnor

@xnor अच्छा लगा, धन्यवाद!
जित्स

बहुत बढ़िया। मेरे पास यह 62 बाइट्स पर था ಥ_ಥ:g=lambda r:0if r==0 else(int(r)+r/abs(r)if r/int(r)!=1 else r)
user14492

क्या है '|' से पहले '-'?
विलियम

1
@ अंजाम मुझे वास्तव में वह समाधान भी पसंद है! मेरा प्रारंभिक दृष्टिकोण भी 24 बाइट्स था।
जित्स

5

जेली , 5 4 बाइट्स

AĊ×Ṡ

इसे ऑनलाइन आज़माएं!

यह पोर्ट जेली में पुनरावर्ती का उत्तर देता है, इसलिए एक स्पष्टीकरण के लिए उत्तर दें।

निक कैनेडी के लिए -1 बाइट

जेली , 6 5 बाइट्स

ĊḞ>?0

इसे ऑनलाइन आज़माएं!

-1 जोनाथन एलन को धन्यवाद

यह कैसे काम करता है

ĊḞ>?0 - Monadic link. Takes a float, x, as argument

   ?  - If:
  > 0 -   x > 0
      - Then:
Ċ     -   ceil(x)
      - Else:
 Ḟ    -   floor(x)

ĊḞ>?0अपने 6 के रूप में काम करेगा।
जोनाथन एलन

1
AĊ×Ṡ4 और कार्यात्मक रूप से आपके पहले उत्तर के समान है।
निक कैनेडी

@NickKennedy और जोनाथन, सुझावों के लिए धन्यवाद, उन्हें संपादित किया गया है
caird coinheringaahing

5

जावा (JDK) , 18 बाइट्स

d->d.setScale(0,0)

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण

BigDecimalइनपुट और आउटपुट के रूप में उपयोग करता है । BigDecimalएक विधि है setScaleजो संख्या के पैमाने को निर्धारित करती है। पहला पैरामीटर डॉट सेपरेटर के बाद अंकों की संख्या है, दूसरा गोल मोड है। ROUND_UP"दूर-से-शून्य" गोलाई है और 0इसलिए मेरे पास उस मान का हार्डकोड है।


5

विम, 36 बाइट्स / कीस्ट्रोक्स

:s/-/-<Space>
:g/\..*[1-9]/norm <C-v><C-a>lD
:s/<Space><cr>

इसे ऑनलाइन आज़माएं! या सभी टेस्ट मामलों को सत्यापित करें!

स्पष्टीकरण:

:s/             " Replace...
   -            "   A dash
    /-<Space>   "   With a dash and a space

:g/                             " On Every line matching this regex...
   \.                           "   A dot
     .*                         "   Followed By anything
       [1-9]                    "   Followed by a digit other than 0
            /norm               " Run the following keystrokes...
                  <C-v><C-a>    "   Increment the number by 1
                                "   This also conveniently places our cursor just before the dot
                            l   "   Move one character right
                             D  "   Delete everything after the cursor

:s/             " Replace...
   <Space>      "   A space
                "   (With nothing)

का उपयोग करते हुए $F-a <esc>पहली पंक्ति और के साथ एक मैक्रो के बजाय /के स्थान पर एक सशर्त के रूप में :gऔर :norm29 बाइट्स देता tio.run/##HczBCoJAFEZhWva/QpuLCNbizoxalBXRInqJMpjGCYVwmkx7/...
Kritixi lithos


4

C # (विजुअल C # कंपाइलर) , 41 बाइट्स 27 बाइट्स 24 बाइट्स

s=>(int)s+Math.Sign(s%1)

इसे ऑनलाइन आज़माएं!

यहाँ पहली पोस्ट, इसके साथ मज़ा था, आशा है कि आप इसे पसंद करेंगे। किंडा को लगा कि यहां सी # जगह खाली है

-14 tnx
से @ काम का डाटा -3 tnx से @ night2


1
साइट पर आपका स्वागत है, और अच्छा पहला जवाब! आशा है कि आप कोड गोल्फ का आनंद लेंगे!
caird coinheringaahing

27 बाइट्स ... शायद अभी भी कुछ को बचाने के लिए
एक्सपायर्ड डाटा

@ उत्कृष्ट, हाँ अच्छा है, पहली नज़र में इस तरह की कोडिंग इतनी अजीब थी कि ऐसा लगता है कि मैं पूरी लाइब्रेरी चीज़ के बारे में भूल गया, इसे उत्तर के रूप में पोस्ट करने का मन
हेसाम हेडी

1
@ रात 2, टिप्पणी के लिए tnx, मैंने पूरा उत्तर नहीं टाइप किया, मैंने Code golf submissionकार्यक्षमता का उपयोग किया , बस अंत में अपने खुद के शब्दों में थोड़ा जोड़ा, लेकिन संपादित करने के लिए मैंने बस उस कोड लाइन को बदल दिया, और उर वहीं, मैं भूल गया। लिंक को अपडेट करें, जो हमें पहले चरण में वापस लाता है, केवल एक बार संशोधित करने के लिए, थोड़े से यहां हल करें, वैसे भी, संकेत के लिए भी tnx
हल hessam hedieh

1
आपने अपने TIO लिंक को 24 बाइट संस्करण में संपादित किया है, लेकिन कोड लाइन अभी भी 27 बाइट संस्करण है।
वैल्यू इंक।

4

रूनिक एनचेंमेंट्स , 18 16 बाइट्स

1µ-i:'-A{*+'.A@

इसे ऑनलाइन आज़माएं!

"जोड़ता है" (शून्य से दूर) 0.999999 और परिणाम को फर्श करता है। µभाषा के संचालकों में एक infinitesimal के लिए निकटतम चीज है। ठीक से कार्य करने वाली Trunc(x)कमांड के साथ, उत्तर अब 0इनपुट के रूप में समर्थन करता है।


1
@ जोकिंग ओफ़। अच्छी पकड़। यह divide by inputइनपुट वैल्यू का "संकेत" प्राप्त करने के लिए कर रहा है , जो निश्चित रूप से, जब इनपुट 0 से विभाजित होता है। उस समय के आसपास कोई 0. अच्छा (अच्छा) तरीका नहीं है। की आवश्यकता होगी इस लिए प्रतिबद्ध पहले। मैं डेनिस (पक्ष लाभ, जवाब छोटा हो जाएगा) प्रहार करूँगा।
Draco18s

1
@ जॉकिंग उत्तर अब 0सही ढंग से संभालता है।
ड्रेको

3

स्टैक्स , 6 बाइट्स

å├╪∙Bß

इसे चलाएं और डीबग करें

प्रक्रिया:

  1. निरपेक्ष मूल्य
  2. अधिकतम सीमा
  3. मूल चिन्ह से गुणा करें

टूल जो मैं उपयोग कर रहा हूं, यह 14 बाइट्स है
गस्ट वैन डे वाल

आपके उपकरण को शायद स्टेक्स कैरेक्टर एन्कोडिंग के बारे में पता नहीं है । यदि आप अभी भी आश्वस्त नहीं हैं, तो "टूल" अनुभाग में, एक डाउनलोड लिंक है, जहां आप वास्तव में स्रोत फ़ाइल डाउनलोड कर सकते हैं और अपने लिए इसके आकार का निरीक्षण कर सकते हैं।
पुनरावर्ती


2

रेटिना 0.8.2 , 38 बाइट्स

\.0+
.
\b9+\..
0$&
T`9d`d`.9*\..
\..*

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण मामले शामिल हैं। स्पष्टीकरण:

\.0+
.

दशमलव बिंदु के बाद शून्य हटाएं, यह सुनिश्चित करने के लिए कि संख्या पूर्णांक नहीं है; यदि दशमलव बिंदु के बाद कोई अंक नहीं हैं तो अगले दो मैच विफल हो जाते हैं।

\b9+\..
0$&

यदि पूर्णांक भाग सभी 9s है, तो उपसर्ग 0को बढ़ाने के लिए वेतन वृद्धि की अनुमति दें।

T`9d`d`.9*\..

संख्या का पूर्णांक भाग बढ़ाएँ।

\..*

संख्या के भिन्नात्मक भाग को हटाएं।


2

05AB1E , 6 बाइट्स

ÄîI.±*

5-बटर निश्चित रूप से संभव होना चाहिए ।।

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

Ä       # The absolute value of the (implicit) input,
 î      # ceiled
     *  # And then multiplied by
      # the signum
  I     # of the input
        # (after which the result is output implicitly)

2

जावास्क्रिप्ट (ईएस 6), 20 बाइट्स

n=>n%1?n<0?~-n:-~n:n

इसे ऑनलाइन आज़माएं!

टिप्पणी की गई

n =>        // n = input
  n % 1 ?   // if n is not an integer:
    n < 0 ? //   if n is negative:
      ~-n   //     return -(floor(-n) + 1) = -floor(-n) - 1
    :       //   else:
      -~n   //     return -(-(floor(n) + 1)) = floor(n) + 1
  :         // else:
    n       //   return n unchanged

मैं अपने 16-बाइट के उत्तर के लिए एक उत्तर लिख रहा था ( n=>(~~n-n%1)%1+n) जब तक मुझे पता चला कि मेरा कोड -1 और 1. के बीच की संख्याओं के लिए काम नहीं करता है, आप यह पता लगाने में सक्षम हो सकते हैं कि अंतिम 3 बाइट्स के साथ यह काम कैसे करें। बाएं!
गस्ट वैन डे वाल



2

PHP , 30 बाइट्स

<?=0^$argn-=0<=>fmod($argn,1);

इसे ऑनलाइन आज़माएं!

यदि संख्या पूर्णांक नहीं है, तो संकेत -1 (नकारात्मक दशमलव के लिए) या 1 (सकारात्मक दशमलव के लिए) के आधार पर इसमें जोड़ा जाता है और फिर नए नंबर का पूर्णांक भाग मुद्रित होता है।


PHP , 32 बाइट्स

<?=[ceil,floor][$argn<0]($argn);

इसे ऑनलाइन आज़माएं!

मूल रूप floorसे इनपुट के आउटपुट यदि यह 0 से कम है, तो ceilइसके अन्य।


PHP , 34 बाइट्स

<?=($argn>0?:-1)*ceil(abs($argn));

इसे ऑनलाइन आज़माएं!





1

एपीएल (डायलॉग यूनिकोड) , 15 बाइट्स

{⍎'⌈⌊'[0>⍵],⍕⍵}

इसे ऑनलाइन आज़माएं!

सरल डीएफएन। उपयोग⎕IO←0

किस तरह:

{⍎'⌈⌊'[0>⍵],⍕⍵}  Main function, argument ⍵.
            ⍕⍵   Stringified argument
           ,     Appended to
      [0>⍵]      This item... (0 if  is positive or 0, else 1)
  '⌈⌊'           of this string (which are the functions Ceiling and Floor, respectively)
                Executed as APL code.

1

-rफ्लैग के लिए sed, 131 बाइट्स + 2 बाइट्स

/^-?[^.]*(\.0*)?$/bQ
s/^(-?)9/\109/
s/([0-8]9*)\..*$/_\1/
h
s/.*_//
y/0123456789/1234567890/
G
s/(.*)\n(.*)_(.*)/\2\1/
:Q
s/\..*$//

Ungolfed

#!/bin/sed -rf

# identify integers
/^-?[^.]*(\.0*)?$/ b isInt

# add a leading 0 if we'll need it later
s/^(-?)9/\109/

# convert to format: -?[0-9]_[0-8]9*
s/([0-8]9*)\..*$/_\1/

# move the part that will remain constant into the hold buffer
h
s/.*_//

# [0-8]9* can be incremented via character substitution
y/0123456789/1234567890/

# reassemble parts
G
s/(.*)\n(.*)_(.*)/\2\1/

:isInt
# Get rid of anything after the decimal point
s/\..*$//


1

जावास्क्रिप्ट (नोड.जेएस), 30 23 21 बाइट्स

s=>~~s+Math.sign(s%1)

C # उत्तर से प्रेरित है।

@Vueue इंक और @Gust वैन डे वाल -7 बाइट्स के लिए धन्यवाद!

एक बार फिर धन्यवाद, एक और -2 बाइट्स के लिए @Gust van de Wal!


का उपयोग क्यों करें +=जब +इस मामले में चाल क्या करेंगे? -1 बाइट
वैल्यू इंक

इसके बजाय parseInt(), मैं बस ~~शुरुआत या किसी अन्य बिटकॉइन ऑपरेटर की तरह |0या ^0बाइट्स का एक और हिस्सा बचाने के लिए उपयोग करूँगा
गस्ट वैन डे वाल

@ValueInk वाह, मुझे नहीं पता कि मैंने क्यों लिखा +=, इसे इंगित करने के लिए thx
धनु

आप अभी भी बाहरी कोष्ठकों को छोड़ सकते हैं
गस्ट वैन डे वाल

@GustvandeWal ओह, मुझे नहीं पता था कि! धन्यवाद
धनु

0

पर्ल 6 , 19 बाइट्स

{$_+|0+.sign*?/\./}

इसे ऑनलाइन आज़माएं!

सबसे छोटा समाधान नहीं है, लेकिन मैं इस पर काम कर रहा हूं। मूल रूप से यह संख्या को कम कर देता है, फिर एक को शून्य से दूर जोड़ता है यदि संख्या पूरी तरह से शुरू नहीं हुई थी


0

जावा (ओपनजेडके 8) , 43 बाइट्स

a->{return(int)((int)a/a<1?a>0?a+1:a-1:a);}

इसे ऑनलाइन आज़माएं!


3
स्पष्ट returnकथन का उपयोग किए बिना लैम्बडा फ़ंक्शन लिखा जा सकता है ।
जोएल

@Joel वास्तव में सही है। और अगर आप 4 अतिरिक्त बाइट्स बदलते बचा सकते हैं (int)a/a<1करने के लिए a%1!=0: 30 बाइट्स
केविन Cruijssen

ऐसी BigDecimal.setScaleविधि भी है जो उत्कृष्ट परिणाम देती है, जैसे मेरा उत्तर दर्शाता है
ओलिवियर ग्रेजायर




हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.