Myślę, że wszyscy to zrobiliśmy jako dziecko: niektóre strony internetowe wymagają minimalnego wieku 18 lat, więc odejmujemy tylko kilka lat od roku urodzenia i voilà, mamy „18 lat”.
Ponadto w przypadku większości przejażdżek w wesołych miasteczkach minimalna wysokość, na którą można wjechać, wynosi 1,40 metra (przynajmniej w Holandii). Oczywiście można to łatwiej oszukiwać niż wiek, ale możesz nosić buty z grubymi obcasami, podnosić włosy, nosić kapelusz, stać na palcach itp.
Wejście:
Twój program / funkcja akceptuje dodatnią liczbę całkowitą lub dziesiętną.
Wynik:
- Czy wejście jest liczbą całkowitą
>= 18
? Po prostu wydrukuj dane wejściowe. - Czy wejście jest liczbą całkowitą
0-17
? Drukuj18
. - Czy dane wejściowe są dziesiętne
>= 1.4
? Po prostu wydrukuj dane wejściowe. - Czy dane wejściowe są dziesiętne
0.0-1.4
? Drukuj1.4
.
Zasady konkursu:
- Załóżmy, że dane wejściowe będą zawsze w zakresie
0-122
(najstarsza kobieta kiedykolwiek miała 122 lata) lub0.0-2.72
(najwyższy mężczyzna kiedykolwiek 2,72). - Możesz wziąć dane wejściowe jako ciąg znaków, obiekt lub cokolwiek innego, co wolisz.
- Wprowadzanie miejsc dziesiętnych nigdy nie będzie miało więcej niż trzy miejsca po przecinku po przecinku.
2
lub2.
oba nie są prawidłowymi danymi wyjściowymi dla2.0
. Możesz jednak generować dane wyjściowe2.00
lub2.000
zamiast nich2.0
.
Podobnie jak wejście, wyjście nigdy nie będzie miało więcej niż trzy miejsca po przecinku za kropką.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi odnoszą się standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Przypadki testowe:
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
źródło
źródło
0.0-2.72 (tallest man ever was 2.72).
- Nie jesteś,0.0
kiedy się urodziłeś ...0
i0.0
. :) Dodanotallest man ever was 2.72
ioldest woman ever was 122
właśnie dodano jako fakty informacyjne dla zainteresowanych.Odpowiedzi:
Wypukły , 9 bajtów
Wypróbuj online!
źródło
Python 2.7, 34 bajty
źródło
max(2.0,[18,1.4][True]) == max(2.0,1.4) == 2.0
JavaScript (ES6), 27
31Dane wejściowe są traktowane jako ciąg. Aby sprawdzić, czy wartość wejściowa ma miejsca po przecinku, jest dołączana do siebie: jeśli nie ma przecinka dziesiętnego, wynik jest nadal poprawną liczbą, w przeciwnym razie nie. Aby rozpoznać prawidłowy numer (łącznie 0), używam podział jak w javascript
1/n
jest numeryczny, a nie 0 dla dowolnego numerycznen
(ostatecznie wartość jestInfinity
zan==0
), w przeciwnym wypadku jest toNaN
Test
Moje poprzednie (złe) rozwiązanie:
Biorąc dane wejściowe jako liczbę, możesz użyć operatora reszty,
%
aby sprawdzić, czy liczba jest liczbą całkowitą.lub
Ale to nie działa jako żądanie wyzwania, aby rozróżnić, powiedzmy,
2
i2.0
to ta sama liczba. Dlatego nie jest możliwe uzyskanie danych wejściowych jako liczbyźródło
2.0
powinien być2.0
, nie18
.2.0%1
i1.0%1
spowoduje 01/(x+x)
- teraz to pomysłowe!05AB1E ,
1311 bajtówWykorzystuje kodowanie CP-1252 .
Wyjaśnienie
Wypróbuj online
źródło
Java 8,
906157 bajtów-4 bajty zwracane
Object
zamiastString
; i niektóre dodatkowe bajty konwertujące Java 7 na 8.-4 bajty przyjmując dane wejściowe jako
Object
zamiastString
.Wyjaśnienie:
Wypróbuj tutaj.
źródło
+
, co oznacza, że jeśli usuniesz nawiasy, zmieni się w(""+i.contains(...)) ?
Pyth, 14 bajtów
Wypróbuj online.
źródło
PHP, 40 bajtów
zmodyfikowany przez @ user59178 Dziękujemy
PHP, 42 bajty pierwsza wersja
źródło
is_int($i=$argv[1]+0)
jest o 2 bajty krótszy niżstrpos($i=$argv[1],".")
i może służyć temu samemu celowi, jeśli1.4
18
is_numeric
na sznurku, ale nieis_int
+0
, aby przekonwertować go na typ numeryczny.strpos($i=$argv[1],".")
wersja, czy pamiętasz, aby zamienić wyjścia trójskładnika?<?=max(is_int(0+$i=$argv[1])?18:1.4,$i);
raczej, niż<?=max(is_int($i=$argv[1]+0)?18:1.4,$i);
unikać wyjścia 2, gdy podano 2.0.EXCEL:
263129 bajtówFormuła może iść wszędzie, z wyjątkiem komórki wejściowej A1.
Naprawiono błędy i zastąpiono sugestią Emigny.
Dzięki Alexandru za uratowanie mi niektórych bajtów przy użyciu prawdy
źródło
n
komórki wejściowej? Może być wtedy w dowolnym miejscu w dokumencie i jest również o 2 bajty krótszy.Brachylog , 14 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Perl,
2927 bajtówObejmuje +2 za
-lp
Podaj dane na STDIN
adult.pl
:Jeśli nie przeszkadza ci dodatkowa linia, jeśli naprawdę jesteś pełnoletnią osobą, opuszczenie
l
opcji 26 bajtów również działaźródło
GNU sed, 40 + 1 = 41 bajtów
(
-r
zdobądź +1 za użycie flagi do tłumacza)Adnotacja:
Korzystamy z ograniczeń na wejściu, więc nie musimy testować początku łańcucha, gdy widzimy „1”. - wiemy, że przed kropką dziesiętną jest tylko jedna cyfra.
Wynik testu:
źródło
Haskell, 50 bajtów
Przykład użycia:
f "1.0"
->"1.6"
.Typ ścisły Haskella wymaga użycia ciągów jako danych wejściowych i wyjściowych. Howevers,
read
,max
ishow
są polimorficzne i obsługiwać wszystkie typy numeryczne.źródło
(#)x=map(show.max x.fst).reads;f s=head$18#s++1.4#s
reads
. Po niewielkiej modyfikacji jest o jeden bajt krótszy niż mój. Proszę zamieścić jako osobną odpowiedź.x#y=show.max x.fst<$>reads y;f s=head$18#s++1.4#s
.Java,
7970 bajtówDefiniuje dwie metody z przeciążeniem, które wykorzystują operator warunkowy.
Nazwij to jak
f(5)
lubf(1.4f)
.źródło
x<18?18:x
ix<1.4f?1.4f:x
są krótsze niżMath.max
. Myślę, że możesz znaleźć wskazówki dotyczące gry w golfa w Javie, które warto przeczytać. :)CJam,
1814 bajtówZaoszczędzono 4 bajty dzięki Martinowi Enderowi.
Tłumacz online
źródło
C #, 69 bajtów
Wypróbuj online!
Pełny program z przypadkami testowymi:
Całkiem proste rozwiązanie. Zauważ, że w niektórych systemach float.Parse () może zwracać niepoprawne wyniki. Przekaż CultureInfo.InvariantCulture jako drugi argument zgodnie z tą odpowiedzią .
źródło
s.Contains(".")
zs[1]=='.'
s[1]==46
, albo nawet bardziej agresywne podejście (zakładając, że masz tylko cyfry i znak o indeksie 1 „”) (ma kod ASCII 46 „”)s[1]<47
.Język formuły IBM / Lotus Notes,
5849 bajtówObliczona formuła pola, gdzie a jest edytowalnym polem numerycznym.
EDYTOWAĆ
Alternatywa inspirowana @Mego
źródło
Galaretka ,
16 1513 bajtówTryItOnline
Lub zobacz wszystkie przypadki testowe, także w TryItOnline
W jaki sposób?
źródło
18
do2.0
, niestety :(C ++, 68 bajtów
Ta odpowiedź to tak naprawdę 2 funkcje o tej samej nazwie, a kompilator opracowuje dla mnie, którą wywołać, więc działa jak jedna funkcja, bez konieczności przyjmowania jednego wejścia i decydowania, która to jest. Ponieważ wejście zmiennoprzecinkowe ma taką samą precyzję jak wyjście, mogę je bezpiecznie zwrócić bez konieczności obcinania.
Niegolfowane + testy
źródło
float
s naauto
s. Odrzuciłem zmianę zgodnie z zasadami, ale możesz ją edytować samodzielnie, jeśli potwierdzisz, że działa.C #, 58 bajtów
Żadne szalone parsowanie ciągów nie jest potrzebne dla C #. Oczekuje się, że dane wejściowe to
int
lubfloat
(niestety C # nie może rzucićdouble
na,float
jeślidouble
jest wobject
). Wyjście będzie alboint
czystring
w sposóbobject
.(prawie przegapiłem przynajmniej 1 wymóg dziesiętny, dodałem to teraz)
Nie golfowany:
Alternatywna implementacja, która ma również 58 bajtów.
źródło
Właściwie 16 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
9τ
zamiast po prostu18
? Wiem, że to ta sama liczba bajtów, więc to nie ma znaczenia, ale18
wydaje się bardziej czytelne. Czy istnieje powód, dla którego nie będzie działać w bieżącym języku implementacji / programowania?18
popycha a1
i an8
. Aby wypchnąć literał18
, użyłbyś:18
, który jest dłuższy niż9τ
.Emacs Lisp, 37 bajtów
Odgadnięcia na podstawie „typu danych”, czy należy stosować liczbę całkowitą czy zmiennoprzecinkową. (
floatp
zwracat
za1.0
, ale nie za1.
) Parametr jest liczbą całkowitą lub zmiennoprzecinkową, tzn. powinien spełniaćnumberp
.źródło
Haskell, 49 bajtów
Zasadniczo to najpierw próbuje odczytać dane wejściowe jako liczbę całkowitą, a następnie jako wartość podwójną, jeśli to się nie powiedzie. Następnie przechodzi do porównania z odpowiednią linią bazową porównania.
źródło
Dyalog APL , 14 bajtówNiepoprawne z powodu dalszych specyfikacji⎕IO←0
co jest domyślne w wielu systemach. Bierze ciąg jako argument.⍎⌈
max ocenianego argumentu i18 1.4⊃⍨
{18,1.4} wybrany przez'.'∘∊
czy argument zawiera kropkęźródło
C #, 95 bajtów
Gra w golfa:
Nie golfowany:
Przypadki testowe:
Wynik:
źródło
string y(string p){int a;return int.TryParse(p,out a)?a<1?"18":p:double.Parse(p)<1.4?"1.4":p;}
(usunięcie nawiasu,>=1.4
aby<1.4
przez zamianę"1.4"
ip
; zmieniłodecimal
siędouble
więcM
już nie ma również ktoś inny właśnie pisał. Innego podejścia w C # , który jest nieco krótszy Można znaleźć. Wskazówki do golfa w C # interesujące do przeczytania. Znowu witamy! :)float.Parse
zamiastdouble.Parse
. A także, jeśli przeniesiesz deklarację metody do argumentów metody z wartością domyślną, możesz upuścić instrukcję return za pomocą wyrażenia o treści składowej. np .: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 bajtów
Stosowanie:
Testowanie przeprowadzono
gawk
na RHEL 6. Próbowałem ze wszystkimi przypadkami testowymi, niestety nie mam goAWK
na komputerze, który ma dostęp do Internetu, więc kopiowanie-wklejanie nie jest możliwe.Czy jest na to bardziej zwarty sposób
AWK
?źródło
C, 50 bajtów:
Liczba bajtów obejmuje znak nowej linii na końcu definicji makra.
Test :
źródło
C #, 71 bajtów
spróbuj tutaj
źródło
C,
119111105100Testowane z
Wynik
źródło
Partia, 102 bajty
Najpierw określa, czy wejście jest liczbą całkowitą, sprawdzając, czy usunięcie wszystkich
.
s ma jakikolwiek wpływ na ciąg. Jeśli tak, to wartość jest łatwo porównywana z 18, w przeciwnym razie pierwszy i trzeci znak są łączone w liczbę, która jest porównywana z 14.źródło
PHP: 40 bajtów
psuedocode, (zagnieżdżony obrotowy):
źródło