Ich denke, wir haben das alle als Kind gemacht: Einige Websites erfordern ein Mindestalter von 18 Jahren, also ziehen wir nur ein paar Jahre vom Geburtsjahr ab und voilà, wir sind 18+.
Darüber hinaus beträgt die Mindesteinstiegshöhe für die meisten Fahrten in Vergnügungsparks 1,40 m (hier in den Niederlanden mindestens 1,40 m). Natürlich kann dies weniger leicht betrogen werden als das Alter, aber Sie könnten Schuhe mit dicken Absätzen tragen, Ihre Haare hochlegen, einen Hut tragen, auf Ihren Zehen stehen usw.
Eingang:
Ihr Programm / Ihre Funktion akzeptiert eine positive Ganzzahl oder eine Dezimalzahl.
Ausgabe:
- Ist die Eingabe eine Ganzzahl
>= 18
? Einfach die Eingabe ausdrucken. - Ist die Eingabe eine Ganzzahl
0-17
? Drucken18
. - Ist die Eingabe eine Dezimalzahl
>= 1.4
? Einfach die Eingabe ausdrucken. - Ist die Eingabe eine Dezimalzahl
0.0-1.4
? Drucken1.4
.
Herausforderungsregeln:
- Angenommen, die Eingabe liegt immer im Bereich von
0-122
(älteste Frau war 122 Jahre alt) oder0.0-2.72
(größter Mann war 2,72 Jahre alt). - Sie können die Eingabe als Zeichenfolge, Objekt oder eine andere von Ihnen bevorzugte Methode verwenden.
- Die Dezimaleingaben haben niemals mehr als drei Dezimalstellen nach dem Komma.
2
oder2.
beide sind keine gültigen Ausgaben für2.0
. Sie sind frei , die Ausgabe2.00
oder2.000
statt2.0
jedoch.
Genau wie die Eingabe wird die Ausgabe niemals mehr als drei Dezimalstellen nach dem Punkt haben.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methode mit den richtigen Parametern und vollständige Programme verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
0 -> 18
1 -> 18
2 -> 18
12 -> 18
18 -> 18
43 -> 43
115 -> 115
122 -> 122
0.0 -> 1.4
1.04 -> 1.4
1.225 -> 1.4
1.399 -> 1.4
1.4 -> 1.4
1.74 -> 1.74
2.0 -> 2.0
2.72 -> 2.72
code-golf
arithmetic
Kevin Cruijssen
quelle
quelle
0.0-2.72 (tallest man ever was 2.72).
- Sie sind nicht,0.0
wenn Sie geboren sind ...0
und beginnen zu lassen0.0
. :) Die hinzugefügtentallest man ever was 2.72
undoldest woman ever was 122
wurde nur als informative Fakten für Interessenten hinzugefügt.Antworten:
Konvex , 9 Bytes
Probieren Sie es online!
quelle
Python 2.7, 34 Bytes
quelle
max(2.0,[18,1.4][True]) == max(2.0,1.4) == 2.0
JavaScript (ES6), 27
31Eingabe als Zeichenfolge Um zu überprüfen, ob der Eingabewert Dezimalstellen enthält, wird er an sich selbst angehängt: Wenn kein Dezimalpunkt vorhanden ist, ist das Ergebnis immer noch eine gültige Zahl, ansonsten nicht. Um eine gültige Zahl (einschließlich 0) zu erkennen, verwende ich Division, da Javascript
1/n
numerisch ist und nicht 0 für eine Zahl (n
schließlich ist der WertInfinity
fürn==0
), sonst ist esNaN
Prüfung
Meine vorige (falsche) Lösung:
Wenn Sie die Eingabe als Zahl verwenden, können Sie den Restoperator verwenden
%
, um zu überprüfen, ob die Zahl eine Ganzzahl ist.oder
Dies funktioniert jedoch nicht als Aufforderung, zwischen beispielsweise
2
und zu unterscheiden,2.0
und das ist die gleiche Zahl. Es ist also nicht möglich, die Eingabe als Zahl zu erhaltenquelle
2.0
sollte2.0
nicht sein18
.2.0%1
und1.0%1
ergibt 01/(x+x)
- jetzt ist das einfallsreich!05AB1E ,
1311 BytesVerwendet die CP-1252- Codierung.
Erläuterung
Probieren Sie es online aus
quelle
Java 8,
906157 Bytes-4 Bytes werden zurückgegeben
Object
anstattString
; und einige zusätzliche Bytes Umwandeln Java 7 bis 8.-4 - Byte unter den Eingang als
Object
anstelle vonString
als auch.Erläuterung:
Probieren Sie es hier aus.
quelle
+
, was bedeutet, dass wenn Sie die Klammern entfernen, er sich um(""+i.contains(...)) ?
Pyth, 14 Bytes
Probieren Sie es online aus.
quelle
PHP, 40 Bytes
Geändert von @ user59178 Vielen Dank
PHP, 42 Bytes erste Version
quelle
is_int($i=$argv[1]+0)
ist 2 Bytes kürzer alsstrpos($i=$argv[1],".")
und kann den gleichen Zweck erfüllen, wenn Sie den1.4
und den18
is_numeric
auf einer Zeichenfolge verwenden, aber nichtis_int
+0
, um es in einen numerischen Typ umzuwandeln.strpos($i=$argv[1],".")
Version gibt. Haben Sie daran gedacht, die Ausgänge des Ternärs auszutauschen?<?=max(is_int(0+$i=$argv[1])?18:1.4,$i);
eher sein, als<?=max(is_int($i=$argv[1]+0)?18:1.4,$i);
die Ausgabe von 2 zu vermeiden, wenn 2.0 angegeben wird.EXCEL:
263129 BytesDie Formel kann an eine beliebige Stelle außer A1, der Eingabezelle, verschoben werden.
Fehler behoben und durch den Vorschlag von Emigna ersetzt.
Vielen Dank an Alexandru, der mir ein paar Bytes mit Wahrheiten erspart hat
quelle
n
für die Eingabezelle zu definieren ? Es kann dann irgendwo im Dokument sein und es ist auch 2 Bytes kürzer.Brachylog , 14 Bytes
Probieren Sie es online!
Erläuterung
quelle
Perl,
2927 BytesBeinhaltet +2 für
-lp
Geben Sie eine Eingabe für STDIN ein
adult.pl
:Wenn Ihnen ein zusätzlicher Zeilenumbruch nichts ausmacht, wenn Sie wirklich volljährig sind, können Sie auch die
l
Option für 26 Byte weglassenquelle
GNU sed, 40 + 1 = 41 Bytes
(Punktzahl +1 für die Verwendung der
-r
Flagge als Dolmetscher)Kommentiert:
Wir machen uns die Eingabebeschränkungen zunutze und müssen den Anfang der Zeichenfolge nicht testen, wenn "1" angezeigt wird. - Wir wissen, dass es nur eine Ziffer vor dem Komma gibt.
Testergebnis:
quelle
Haskell, 50 Bytes
Anwendungsbeispiel:
f "1.0"
->"1.6"
.Haskells strenger Typ erfordert die Verwendung von Strings als Eingabe und Ausgabe. Howevers,
read
,max
undshow
sind polymorph und behandeln alle numerischen Typen.quelle
(#)x=map(show.max x.fst).reads;f s=head$18#s++1.4#s
reads
. Mit einer kleinen Änderung ist es ein Byte kürzer als meins. Bitte posten Sie es als separate Antwort.x#y=show.max x.fst<$>reads y;f s=head$18#s++1.4#s
.Java,
79-70BytesDefiniert zwei Methoden mit Überladung, die den bedingten Operator verwenden.
Nennen Sie es wie
f(5)
oderf(1.4f)
.quelle
x<18?18:x
undx<1.4f?1.4f:x
sind kürzer als dieMath.max
. Ich denke, Sie könnten Tipps zum Golfen in Java interessant finden , um sie durchzulesen . :)CJam,
1814 Bytes4 Bytes gespart dank Martin Ender.
Online-Dolmetscher
quelle
C #, 69 Bytes
Probieren Sie es online!
Volles Programm mit Testfällen:
Eine ziemlich einfache Lösung. Beachten Sie, dass float.Parse () auf einigen Systemen möglicherweise falsche Ergebnisse zurückgibt. Pass CultureInfo.InvariantCulture als zweites Argument nach dieser Antwort .
quelle
s.Contains(".")
durchs[1]=='.'
s[1]==46
, oder einen noch aggressiveren Ansatz (vorausgesetzt , nur Sie haben Ziffern und Zeichen bei Index 1 ‚‘) (hat einen ASCII - Code 46 ‚‘):s[1]<47
.IBM / Lotus Notes Formula Language,
5849 ByteBerechnete Feldformel wobei a ein bearbeitbares numerisches Feld ist.
BEARBEITEN
Alternative inspiriert von @Mego
quelle
Jelly ,
16 1513 BytesTryItOnline
Oder sehen Sie alle Testfälle, auch bei TryItOnline
Wie?
quelle
18
für2.0
leider :(C ++, 68 Bytes
Diese Antwort besteht eigentlich aus 2 Funktionen mit demselben Namen, und der Compiler ermittelt, welche Funktion ich aufrufen soll, sodass er als eine Funktion fungiert, ohne dass ich eine Eingabe vornehmen und entscheiden muss, um welche es sich handelt. Da die Eingabe auf dem Gleitkomma garantiert die gleiche Genauigkeit wie die Ausgabe hat, kann ich sie sicher zurückgeben, ohne sie abschneiden zu müssen.
Ungolfed + Tests
quelle
float
s inauto
s umgewandelt wird. Ich habe die Bearbeitung gemäß den Richtlinien abgelehnt , kann sie jedoch selbst bearbeiten, wenn Sie bestätigt haben, dass sie funktioniert.C #, 58 Bytes
Für C # ist kein verrücktes String-Parsen erforderlich. Es wird erwartet, dass die Eingabe ein
int
oder istfloat
(leider kann C # kein in umwandelndouble
,float
wenn dasdouble
in ein istobject
). Die Ausgabe wird entwederint
oderstring
in einobject
.(Mindestens 1 Dezimalstelle wurde fast verfehlt, jetzt hinzugefügt)
Ungolfed:
Alternative Implementierung, die ebenfalls 58 Byte umfasst.
quelle
Eigentlich 16 Bytes
Probieren Sie es online!
Erläuterung:
quelle
9τ
statt nur verwenden18
? Ich weiß, dass es die gleiche Byteanzahl ist, also ist es eigentlich egal, aber es18
scheint besser lesbar zu sein. Oder gibt es einen Grund, warum es in der aktuellen Implementierungs- / Programmiersprache nicht funktioniert?18
drückt ein1
und ein8
. Um ein Literal zu pushen18
, verwenden Sie:18
, was länger ist als9τ
.Emacs Lisp, 37 Bytes
Vermutungen aus dem "Datentyp", ob die Integer- oder Float-Version verwendet werden soll. (
floatp
gibtt
für1.0
, aber nicht für zurück1.
) Der Parameter ist eine Zahl als Ganzzahl oder Fließkomma, dh er sollte erfüllennumberp
.quelle
Haskell, 49 Bytes
Grundsätzlich wird zuerst versucht, die Eingabe als Ganzzahl und dann als Double zu lesen, wenn dies fehlschlägt. Dann wird mit dem Vergleich mit der jeweiligen Vergleichsgrundlinie fortgefahren.
quelle
Dyalog APL , 14 ByteDurch weitere Angaben ungültig gemacht⎕IO←0
Das ist auf vielen Systemen Standard. Nimmt string als Argument.⍎⌈
max des bewerteten Arguments und18 1.4⊃⍨
{18,1.4} ausgewählt von'.'∘∊
ob das Argument einen Punkt enthältquelle
95 Bytes
Golf gespielt:
Ungolfed:
Testfälle:
Ausgabe:
quelle
string y(string p){int a;return int.TryParse(p,out a)?a<1?"18":p:double.Parse(p)<1.4?"1.4":p;}
(entfernte Klammer,>=1.4
um<1.4
durch das Austauschen"1.4"
undp
, geändert ,decimal
umdouble
so dieM
ist weg auch, jemand anderes habe gerade gebucht. Einen anderen Ansatz in C # , die etwas kürzer ist Sie finden könnte. Tipps für den Golfsport in C # interessant zu lesen. Nochmals herzlich willkommen! :)float.Parse
anstelle von verwendendouble.Parse
. Und auch wenn Sie die Deklaration von a mit einem Standardwert in die Methodenargumente verschieben, können Sie Ihre return-Anweisung mit dem Ausdruck bodied member löschen.string f(string s,int a=0)=>int.TryParse(s,out a)?a>17?s:"18":float.Parse(s)<1.4?"1.4":s;
AWK - 29 Bytes
Verwendungszweck:
Das Testen wurde mit
gawk
RHEL 6 durchgeführt. Ich habe es mit allen Testfällen versucht, leider habe ichAWK
auf dem Computer keinen Internetzugang, daher ist Kopieren und Einfügen nicht möglich.Gibt es eine kompaktere Möglichkeit, dies zu tun
AWK
?quelle
C, 50 Bytes:
Die Byteanzahl schließt die neue Zeile am Ende der Makrodefinition ein.
Test :
quelle
C #, 71 Bytes
versuche es hier
quelle
C
119111105100Getestet mit
Ausgabe
quelle
Batch, 102 Bytes
Bestimmt zunächst, ob es sich bei der Eingabe um eine Ganzzahl handelt, indem überprüft wird, ob das Löschen aller
.
s Auswirkungen auf die Zeichenfolge hat. Wenn dies der Fall ist, wird der Wert leicht mit 18 verglichen, andernfalls werden das erste und dritte Zeichen zu einer Zahl kombiniert, die mit 14 verglichen wird.quelle
PHP: 40 Bytes
psuedocode (verschachtelter Turnary):
quelle