Runden Sie in Richtung Null

14

Dies ist eine einfache Aufgabe. Runden Sie eine positive oder negative reelle Zahl auf die nächste ganze Zahl, die näher bei Null liegt.

Die Herausforderung

  • Geben Sie eine positive oder negative reelle Zahl in einer angemessenen Form (stdin, function usw.) ein.

  • Runden Sie diese Zahl auf "gegen Null" - das heißt, wenn es positiv ist, werden Sie abrunden, und wenn es negativ ist, werden Sie aufrunden.

  • Geben Sie die Nummer zurück oder geben Sie sie an die Konsole aus.

Testfälle

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

Regeln

Habe Spaß! Weitere Jimmy-Herausforderungen folgen in Kürze

schließen Sie ihr Ladegerät an
quelle
3
Darf ich ausgeben 3.00für 3.14?
TSH
1
@A_ Wenn Fehlermeldungen in stderr sind. Und Ihre Ausgabe ist in stdout. Es ist standardmäßig erlaubt.
Dienstag,
1
Auch 0.01und -0.01sollte ergeben 0...
Roblogic
2
Hmm, das scheint für einen Code-Golf unangemessen trivial zu sein. Die meisten langs werden dafür einen eingebauten haben, oder? Es sieht so aus, als ob wir davon ausgehen sollen, dass alle Eingaben und Ausgaben Zeichenfolgen sind.
Octopus
2
3.00 ist sicherlich eine ganze Zahl. Genauer gesagt, in der mathematischen Standardnotation sowie in vielen Programmiersprachen bezeichnet die Notation "3.00" die Zahl 3, die eine ganze Zahl ist; In vielen Programmiersprachen bedeutet dies jedoch, dass die Zahl in einem Gleitkommaformat gespeichert werden soll. (Aber es ist eine ganze Zahl, unabhängig von dem Format, in dem es gespeichert ist.)
Tanner Swett

Antworten:

13

Gelee , 1 Byte

r

Ein vollständiges Programm (als monadischer Link gibt es eine Liste mit der Länge eins zurück).

Probieren Sie es online!

Wie?

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
Jonathan Allan
quelle
40

Python 3 , 3 Bytes

int

Probieren Sie es online!

Kürzt die Nachkommastellen.

HINWEIS: Dies ist eine triviale Antwort. Bitte schau dir die anderen Antworten an, bevor du abstimmst

MilkyWay90
quelle
18
Dies zeigt, dass Python 3 beliebter ist als Python 2.
a'_ '23.
1
Ähm ... Warum die Upvotes? Dies ist eine ziemlich triviale Antwort ...
MilkyWay90
Ich denke, es ist Ihre ausgezeichnete Erklärung des Codes. :)
Chas Brown
3
@ChasBrown Ich glaube nicht ... die Erklärung ist nicht einmal eine Standarderklärung.
MilkyWay90
Ich denke, @Chas weist darauf hin, dass die Erklärung unendlich vollständiger ist als seine eigene.
Prl
12

Perl 5 -p056l15 , 2 Bytes

<>

Probieren Sie es online!

Wie funktioniert das?

-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

Oder wenn Sie eine traditionellere Antwort bevorzugen:

Perl 5 , 6 Bytes

$_=int

Probieren Sie es online!

Xcali
quelle
l15 ist nicht \n, es ist \r. \nwäre l12. In TIO sieht es jedoch genauso aus.
Grimmy
für die zweite Option gibt es auch-Minteger -p $_/=1
Nahuel Fouilleul
4
Die erste Lösung ist eigentlich 8 Bytes, weil Sie die Flags in Ihre Byteanzahl einbeziehen müssen
John Dvorak
2
@ JohnDvorak tatsächlich per Meta-Post codegolf.meta.stackexchange.com/questions/14337/… , Flags fügen keine Bytes hinzu, sondern zählen als eine andere Version der Sprache.
Nick Kennedy
@NahuelFouilleul Ich habe auch darüber nachgedacht, aber es war mir egal, da ich in die andere Richtung auf 2 Bytes gekommen bin.
Xcali
6

Labyrinth und Hexagonie , 3 Bytes

Vielen Dank an FryAmTheEggman für den Hinweis, dass ich Hexagony geschrieben habe!

?!@

Probieren Sie es online! & Online ausprobieren!

Wie?

Labyrinth und Hexagony werden es dir so früh wie möglich sagen! ...

? - 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
Jonathan Allan
quelle
3
Dies mag für einige von Martins anderen Sprachen zutreffen, aber genau dasselbe Programm funktioniert in Hexagony .
FryAmTheEggman
3
Heh, ich wollte schon immer eine Antwort in Hexagony geben. Es zu tun, ohne es zu versuchen, war das Letzte, von dem ich dachte, dass es passieren könnte!
Jonathan Allan
IO@In der Rückhand funktioniert das genauso und &.@in der Befunge. Wahrscheinlich viele Sprachen mit Integer-Eingabe, und nur Integer-Behandlung wird gleich sein
Jo King
@JoKing Wir warten also darauf, dass jemand eine Sprache mit Integer-I / O herausfindet und auch alle Zahlen von stdin bis stack / list liest und sie dann standardmäßig auf stdout druckt. Ich glaube, es könnte eine geben, und es wäre eine Antwort in null Bytes.
TSH
@tsh höchstwahrscheinlich!
Jonathan Allan
6

Brainfuck , 26 Bytes

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

Probieren Sie es online!

Wird mit einem nachgestellten Wert ausgegeben, .wenn die Zahl eine Dezimalzahl war

Es gibt nicht viel spezielles Golfen, außer dass .ich , anstatt 46 zu subtrahieren, um zu prüfen, ob ein Charakter a ist , 5 addiere und mit 5 multipliziere, um 255 zu erhalten, und dann eine weitere hinzufüge, um auf Null zu rollen. Das Subtrahieren von 3, das Multiplizieren mit 6 und das Subtrahieren von 2 entspricht der Anzahl

Scherzen
quelle
6

C (tcc), 39 21 10 Bytes

Ich war eigentlich ziemlich überrascht, dass niemand daran gedacht hat, C zu verwenden.

f(float i){}

Dies ist keine Identitätsfunktion, wie es scheint. Der implizite int-Typ der f-Funktion trunctuated den Gleitkommawert.

TIO

Es ist weniger wahrscheinlich, dass Leute betrogen werden, hat aber eine kürzere Bytelänge:

f(int i){}

TIO

ein'_'
quelle
Arbeiten Sie nicht mit, floatda dies ein anderes Register für die Eingabe von Gleitkommawerten verwendet.
Hauleth
4

J , 6 Bytes

**<.@|

Probieren Sie es online!

Unterschreibe *mal *die Abrundung <.des absoluten Wertes@|

Jona
quelle
3

Java (OpenJDK 8) , 15 Bytes 9 Bytes

s->(int)s

Probieren Sie es online!

danke an @ kevin-cruijssen

Margon
quelle
9 Bytes mit einer Schnittstelle Lambda, so dass wir Primitive und eine einfache Umwandlung verwenden können (int). Und hier eine spaßige 15-Byte- Alternative mit einer Methodenreferenz. :)
Kevin Cruijssen
1
@ KevinCruijssen Vielen Dank für den Hinweis auf die 9-Byte-Antwort! Und die 15-Byte-Alternativlösung ist genial! Auch großer Fan Ihrer Antworten! Ich habe mich dazu inspirieren lassen, mich der Community anzuschließen, auch wegen deiner Beiträge: D
Margon
Ich bin froh, dass ich helfen konnte und es macht Spaß zu hören, dass ich eine Inspiration bin. : D Willkommen! Oh, und wenn Sie sie noch nicht gesehen haben, könnten Tipps zum Golfen in Java und Tipps zum Golfen in <allen Sprachen> beide daran interessiert sein, sie durchzulesen. Genieße deinen Aufenthalt! :)
Kevin Cruijssen
Vielen Dank! :) Ich habe bereits alle Tipps gelesen und tatsächlich viel gelauert, bevor ich gepostet habe! Hoffe ich kann in Zukunft mehr antworten!
Margon
3

Excel, 10 Bytes

=TRUNC(A1)

TRUNC Kürzt eine Zahl in eine Ganzzahl, indem der Bruchteil der Zahl entfernt wird.

Wernisch
quelle
3

R , 13 5 Bytes

Vielen Dank, Robin Ryder

trunc

Probieren Sie es online!

Robert S.
quelle
2
Es besteht Einigkeit darüber, dass es akzeptabel ist, mit einer Funktion oder einem vollständigen Programm zu antworten. Hier beträgt die Funktionsform nur 5 Bytes .
Robin Ryder
2

Ruby , 11 Bytes

proc &:to_i

Ich habe mich für dieses entschieden, weil es sich von den Lambdas unterscheidet, die wir Ruby-Golfer normalerweise verwenden (zum Glück hatte es denselben Bytecount wie die "traditionelle" Lösung):

->n{n.to_i}

Probieren Sie es online!

Wert Tinte
quelle
2

ReRegex , 12 Bytes

\..+//#input

Probieren Sie es online!

ReRegex ist eine Programmiersprache, die immer wieder übereinstimmt und ersetzt, bis es keine Übereinstimmungen mehr gibt.

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
MilkyWay90
quelle
2

Intel 8087 FPU-Maschinencode, 14 Byte

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

Die Eingabe ist ein Wert mit einfacher Genauigkeit an einem Speicherplatz A(a DD), die Ausgabe ist ein ganzzahliger Wert an dem Speicherplatz B(a DW).

Der 8087 muss zuerst durch Setzen des Steuerworts ( 0F7FH) in Richtung Null gerundet werden . Laden Sie dann den Gleitkommawert und speichern Sie ihn als Ganzzahl.

640 KB
quelle
2

Fass ,19 17 13 Bytes

Dies gibt einige nachgestellte nicht druckbare Zeichen aus. Dies wird auch mit einem Fehler beendet. (Jetzt brauchen wir umgekehrte Eingabe!)

?'(:\.>')"([,
ein'_'
quelle
Das Beenden mit einem Fehler ist standardmäßig zulässig
EdgyNerd
2

Whitespace (mit vii5ard-Compiler ), 18 bis 17 Byte

[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]

Buchstaben S(Leerzeichen), T(Tabulator) und (Zeilenvorschub) werden Nnur als Hervorhebungen hinzugefügt.
[..._some_action]nur als Erklärung hinzugefügt.

Probieren Sie es online aus. Sie müssen den Code selbst kopieren und einfügen (beachten Sie, dass SE die Tabulatoren in eine Reihe von Leerzeichen konvertiert!), Um den Code auf dem Online-Whitespace-Compiler vii5ard auszuführen. Wenn Sie auf "Ausführen" klicken, werden Sie nach einer Eingabe gefragt (dh -285.5). Nach dem Klicken auf "Eingabe" wird die Eingabe fortgesetzt und ausgegeben -283.

Erklärung im Pseudocode:

Integer i = STDIN as integer
Print i as integer

Whitespace kann E / A nur als Ganzzahl oder Einzelzeichen verwenden. In diesem Fall wird die Eingabe als Ganzzahl gelesen und alle anderen nachgestellten Zeichen ignoriert. Dh -283.5oder -283abc5beides wäre Eingabe (und damit Ausgabe) als -283.

Leider funktioniert dies auf TIO aus zwei Gründen nicht (alle Whitespace-Compiler sind leicht unterschiedlich ..):

  1. Es wird ein no parseFehler ausgegeben, wenn wir versuchen, eine Eingabe als Ganzzahl zu lesen, die keine gültige Ganzzahl ist. Stattdessen lesen wir also jeweils ein Zeichen und stoppen (mit einem Fehler), sobald wir auf das gestoßen sind .oder es keine Eingabe mehr gibt (dh 50/ -50).
  2. Im vii5ard-Compiler ist es auch möglich, 0 mit just zu drücken SSN, während für TIO ein zusätzliches Sor T: SSSN/ erforderlich ist SSTN. Das erste Sist Stapelmanipulation aktivieren ; der zweite Sist Push, was als Ganzzahl folgt ; das dritte S/ Tist positiv / negativ; und any S/ Tafter that (gefolgt von einem N) ist die Zahl, die wir binär einfügen wollen, wo S=0und T=1. Für die Ganzzahl 0 spielt dieser Binärteil keine Rolle, da er standardmäßig 0 ist. Aber bei TIO müssten wir immer noch das Positive / Negative angeben und bei den meisten anderen Whitespace-Compilern wie vii5ard nicht.

Whitespace (mit TIO-Compiler ), 48 Byte

[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]

Buchstaben S(Leerzeichen), T(Tabulator) und (Zeilenvorschub) werden Nnur als Hervorhebungen hinzugefügt.
[..._some_action]nur als Erklärung hinzugefügt.

Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).

Erklärung im Pseudocode:

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

05AB1E , 1 Byte

ï

In der älteren Version (die in Python geschrieben ist) funktioniert die Umwandlung in eine Ganzzahl wie erwartet, um die Dezimalwerte abzuschneiden.

Probieren Sie es online aus.

In der neuen Version von 05AB1E (geschrieben in Elixir) funktioniert es nur mit Zeichenfolgen (auch wenn alle Ganzzahlen / Dezimalzahlen / Zeichenfolgen austauschbar sein sollten, es sei denn, Sie sortieren lexikografisch oder numerisch). Ich schätze, ich kann @Adnan einen Fehler melden .

Probieren Sie es online aus , um Integer- / Dezimal-Eingaben (die zu falschen Ergebnissen führen) mit Zeichenfolgen-Eingaben (die zu korrekten Ergebnissen führen) zu vergleichen.

Kevin Cruijssen
quelle
1
ïFunktioniert problemlos mit 05AB1E, das kein Legacy-Produkt ist . Es ist ein Array-Eingang, der auf seltsame Weise funktioniert.
Grimmy
@Grimy Ah, es ist ein String gegen eine Ganzzahl / Dezimalzahl. Zeichenfolgen funktionieren korrekt, Ganzzahlen / Dezimalzahlen jedoch nicht.
Kevin Cruijssen
1

Aheui (Esotop) , 9 Bytes

방망희

Probieren Sie es online!

Grundidee aus der Dreiecksantwort (oder jeder anderen Sprache wird die numerische Eingabe als Ganzzahl verwendet).

Lustige Tatsache. 방망희(ausgesprochen bang-mang-heui( avon ark)) klingt fast genauso wie 방망이(ausgesprochen bang-mang-i( avon ark,i klingt wie E), was Fledermaus bedeutet.

Wie funktioniert es?

Nimmt Zahl als Ganzzahl.

Gibt den Wert als Zahl aus.

Beendet das Programm.

LegenDUST
quelle
1

PowerShell , 19 Byte

$args-replace'\..*'

Probieren Sie es online!

Standardmäßig rundet PowerShell die Banker , was ziemlich genau das Gegenteil davon ist, wie viele andere Sprachen runden. Traditionell verwenden wir also, um [Math]::Truncate()den Dezimalpunkt und jeden Dezimalteil zu entfernen und die hier interessierte Nullrundung zu erzielen. Das ist jedoch ein bisschen lang, also benutze diesen Tipp können wir also auf Null runden wir die Eingabe implizit in einen String umwandeln, einen regulären Ausdruck ausführen -replace, um die Periode und alles danach zu entfernen, und die Ausgabe für in der Pipeline belassen implizites Drucken.

AdmBorkBork
quelle
Ich denke nicht, dass dies das gewünschte Ergebnis für negative Zahlen liefern würde.
Octopus
@ Octopus Sicher ist es das? Es wird lediglich der Dezimalteil abgeschnitten, wodurch die Zahl von positiven oder negativen Fließkommazahlen in Richtung Null verschoben wird.
AdmBorkBork
Richtig, duh. Lol.
Octopus