Я думаю, что все мы делали это в детстве: некоторым сайтам требуется минимальный возраст 18 лет, поэтому мы просто вычитаем несколько лет из года рождения и вуаля, нам «больше 18 лет».
Кроме того, для большинства аттракционов в парках развлечений минимальная высота входа составляет 1,40 метра (здесь, в Нидерландах, как минимум). Конечно, это можно обмануть не так легко, как возраст, но вы можете носить обувь на толстых каблуках, поднять волосы, надеть шляпу, встать на цыпочки и т. Д.
Входные данные:
Ваша программа / функция принимает положительное целое или десятичное число.
Выход:
- Является ли ввод целым числом
>= 18
? Просто распечатайте ввод. - Является ли ввод целым числом
0-17
? Версия для печати18
. - Является ли ввод десятичным
>= 1.4
? Просто распечатайте ввод. - Является ли ввод десятичным
0.0-1.4
? Версия для печати1.4
.
Правила соревнований:
- Предположим, что вход всегда будет в диапазоне
0-122
(самая старая женщина когда-либо была 122) или0.0-2.72
(самый высокий мужчина когда-либо был 2,72). - Вам разрешено принимать входные данные в виде строки, объекта или чего-либо еще, что вы предпочитаете.
- Десятичные входы никогда не будут иметь более трех десятичных знаков после десятичной точки.
2
или2.
оба не являются допустимыми выходами для2.0
. Вы можете выводить2.00
или2.000
вместо этого2.0
.
Как и на входе, на выходе никогда не будет больше трех знаков после запятой после точки.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
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
Кевин Круйссен
источник
источник
0.0-2.72 (tallest man ever was 2.72).
- Ты не0.0
когда родишься ...0
и0.0
. :) Добавленоtallest man ever was 2.72
иoldest woman ever was 122
было просто добавлено в качестве информационных фактов для тех, кто заинтересован.Ответы:
Выпуклый , 9 байт
Попробуйте онлайн!
источник
Python 2.7, 34 байта
источник
max(2.0,[18,1.4][True]) == max(2.0,1.4) == 2.0
JavaScript (ES6), 27
31Ввод принимается в виде строки. Чтобы проверить, имеет ли входное значение десятичные дроби, оно добавляется к себе: если десятичной точки нет, результат все еще является действительным числом, в противном случае это не так. Чтобы распознать действительное число (включая 0), я использую деление, так как в javascript
1/n
это число, а не 0 для любого числаn
(в конце концов, значениеInfinity
дляn==0
), иначе этоNaN
Тест
Мое предыдущее (неправильное) решение:
Принимая входные данные как число, вы можете использовать оператор остатка,
%
чтобы проверить, является ли число целым числом.или
Но это не работает , как запрос на вызов , чтобы различать между, скажем,
2
и2.0
и это то же самое число. Таким образом, невозможно получить входные данные в виде числаисточник
2.0
должен быть2.0
, а не18
.2.0%1
и1.0%1
приведет к 01/(x+x)
- теперь это образно!05AB1E ,
1311 байтИспользует кодировку CP-1252 .
объяснение
Попробуйте онлайн
источник
Java 8,
906157 байт-4 байта возвращаются
Object
вместоString
; и некоторые дополнительные байты, преобразующие Java 7 в 8.-4 байта, принимающие входные данные
Object
вместо нихString
.Объяснение:
Попробуй это здесь.
источник
+
, что означает, что если вы удалите скобки, он превратится в(""+i.contains(...)) ?
Pyth, 14 байт
Попробуйте онлайн.
источник
PHP, 40 байт
изменено @ user59178 Спасибо
PHP, 42 байта первая версия
источник
is_int($i=$argv[1]+0)
составляет 2 байта корочеstrpos($i=$argv[1],".")
и может служить той же цели , если поменять местами1.4
и в18
is_numeric
для строки, но неis_int
+0
, чтобы преобразовать его в числовой тип.strpos($i=$argv[1],".")
версией, помните ли вы, чтобы поменять местами выходы троичного?<?=max(is_int(0+$i=$argv[1])?18:1.4,$i);
скорее, чем<?=max(is_int($i=$argv[1]+0)?18:1.4,$i);
избегать вывода 2, когда дано 2.0.EXCEL:
263129 байтФормула может идти куда угодно, кроме А1, входной ячейки.
Исправлены ошибки и заменено предложением Эминьи.
Спасибо Александру за то, что он спас мне несколько байтов, используя правду
источник
n
для входной ячейки? Это может быть где угодно в документе, и это также на 2 байта короче.Брахилог , 14 байт
Попробуйте онлайн!
объяснение
источник
Perl,
2927 байтВключает +2 для
-lp
Внести вклад в STDIN
adult.pl
:Если вы не возражаете против дополнительной новой строки, если вы действительно были взрослым человеком, то не работает
l
опция 26 байтов.источник
GNU sed, 40 + 1 = 41 байт
(оценка +1 за использование
-r
флага для переводчика)Аннотированный:
Мы используем ограничения ввода, поэтому не нужно проверять начало строки, когда мы видим «1». - мы знаем, что перед десятичной запятой есть только одна цифра.
Результат испытаний:
источник
Haskell, 50 байтов
Пример использования:
f "1.0"
->"1.6"
.Строгий тип Haskell требует использования строк в качестве входных и выходных данных. Howevers,
read
,max
иshow
являются полиморфными и обрабатывать все числовые типы.источник
(#)x=map(show.max x.fst).reads;f s=head$18#s++1.4#s
reads
. С небольшой модификацией он на один байт короче моего. Пожалуйста, опубликуйте это как отдельный ответ.x#y=show.max x.fst<$>reads y;f s=head$18#s++1.4#s
,Ява,
7970 байтОпределяет два метода с перегрузкой, которые используют условный оператор.
Назовите это как
f(5)
илиf(1.4f)
.источник
x<18?18:x
иx<1.4f?1.4f:x
короче чемMath.max
. Я думаю, что вы могли бы найти советы по игре в гольф на Java, которые интересно прочитать. :)CJam,
1814 байтовСохранено 4 байта благодаря Мартину Эндеру.
Онлайн переводчик
источник
C #, 69 байт
Попробуйте онлайн!
Полная программа с тестовыми примерами:
Довольно простое решение. Обратите внимание, что в некоторых системах float.Parse () может возвращать неверные результаты. Передайте CultureInfo.InvariantCulture в качестве второго аргумента в соответствии с этим ответом .
источник
s.Contains(".")
наs[1]=='.'
s[1]==46
, или даже более агрессивный подход (предполагается , что у вас есть только цифры и символ с индексом 1 «») (имеет ASCII - код 46 «»):s[1]<47
.Язык
формулIBM / Lotus Notes,5849 байтовФормула вычисляемого поля, где a является редактируемым числовым полем.
РЕДАКТИРОВАТЬ
Альтернатива, вдохновленная @Mego
источник
Желе ,
16 1513 байтTryItOnline
Или посмотрите все контрольные примеры, также на TryItOnline
Как?
источник
18
к2.0
сожалению :(C ++, 68 байт
Этот ответ на самом деле представляет собой две функции с одним и тем же именем, и компилятор решает, что мне вызывать, поэтому он действует как одна функция, и мне не нужно брать один вход и решать, какой это. Поскольку входные данные с плавающей запятой гарантированно имеют ту же точность, что и выходные данные, я могу вернуть их безопасно, без необходимости усекать их.
Ungolfed + тесты
источник
float
s вauto
s. Я отклонил редактирование в соответствии с политикой, но не стесняйтесь редактировать его самостоятельно, если вы подтвердили, что оно работает.C #, 58 байт
Не требуется сумасшедший разбор строк для C #. Ожидается, что входные данные будут
int
или илиfloat
(к сожалению, C # не может привестиdouble
к,float
если онdouble
находится вobject
). Вывод будет либо в,int
либоstring
вobject
.(почти пропустил хотя бы 1 десятичное требование, добавил, что сейчас)
Ungolfed:
Альтернативная реализация, которая также составляет 58 байтов.
источник
На самом деле, 16 байтов
Попробуйте онлайн!
Объяснение:
источник
9τ
вместо просто18
? Я знаю, что это тот же счетчик байтов, так что это не имеет большого значения, но18
кажется более читабельным. Или есть причина, по которой он не будет работать в текущей реализации / языке программирования?18
толкает1
и8
. Чтобы вставить литерал18
, вы бы использовали:18
, который длиннее, чем9τ
.Emacs Lisp, 37 байт
По «типу данных» угадывает, следует ли использовать целочисленную или плавающую версию. (
floatp
возвращаетt
для1.0
, но не для1.
) Параметр представляет собой целое число или число с плавающей точкой, т.е. он должен удовлетворятьnumberp
.источник
Haskell, 49 байтов
По сути, это сначала пытается прочитать входные данные как целое число, а затем как двойное, если это не удается. Затем приступает к сравнению с соответствующей базовой линией сравнения.
источник
Dyalog APL , 14 байт.Недействительно по дополнительным данным.⎕IO←0
который по умолчанию на многих системах. Принимает строку в качестве аргумента.⍎⌈
максимум оцениваемого аргумента и18 1.4⊃⍨
{18,1.4} выбрано'.'∘∊
содержит ли аргумент точкуисточник
C #, 95 байт
Golfed:
Ungolfed:
Тестовые случаи:
Выход:
источник
string y(string p){int a;return int.TryParse(p,out a)?a<1?"18":p:double.Parse(p)<1.4?"1.4":p;}
(удалена скобка;>=1.4
чтобы<1.4
путем замены"1.4"
иp
; изменилсяdecimal
наdouble
так, чтоM
ушел. Кроме того, кто-то еще только что опубликовал другой подход в C #, который немного короче. Вы можете найти Советы по игре в гольф в C # интересно читать. Снова, добро пожаловать! :)float.Parse
вместоdouble.Parse
. А также, если вы переместите объявление a в аргументы метода со значением по умолчанию, вы можете отбросить оператор return с помощью выражения bodied member. Например: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 байт
Использование:
Тестирование проводилось
gawk
на RHEL 6. Я пробовал все тестовые случаи, к сожалению, у меня нет компьютера,AWK
на котором есть доступ в Интернет, поэтому копирование-вставка невозможна.Есть ли более компактный способ сделать это в
AWK
?источник
C, 50 байтов:
Число байтов включает в себя символ новой строки в конце определения макроса.
Тест :
источник
C #, 71 байт
попробуйте здесь
источник
С
119111105100Протестировано с
Выход
источник
Пакетная, 102 байта
Сначала определяется, является ли ввод целым числом, проверяя, влияет ли удаление всех
.
s на строку. Если это так, то значение легко сравнивается с 18, в противном случае первый и третий символы объединяются в число, которое сравнивается с 14.источник
PHP: 40 байт
psuedocode, (вложенный turnary):
источник