В Java / .NET / C / JavaScript / и т. Д. Вы можете использовать троичные-ifs для сокращения if-операторов.
Например (на Java):
// there is a String `s` and an int `i`
if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
Можно укоротить на троицу, если:
s=i<0?"Neg":i>0?"Pos":"Neut";
Вызов:
Входные данные: обычный if-else (возможно с вложением), который устанавливает одну переменную.
Выход: преобразованный троичный-если.
Правила соревнований:
- Вы можете предположить, что все случаи if-else возможны без скобок (поэтому каждый блок if / else-if / else имеет одно тело).
- Вы можете предположить, что не будет пробелов, табуляции или новых строк, за исключением одного пробела после каждого
else
(включая atelse if
). - Вы можете предположить, что используемые имена переменных всегда состоят из одной строчной буквы (
[a-z]
). - Значения, данные переменным, могут быть одним из:
- Строки (без пробелов / вкладки / новая строка), которые будут окружены двойными кавычками (например
"Test"
,"SomeString"
,"Example_string"
и т.д.). Вы можете предположить, что строки никогда не будут содержать подстрокif
илиelse
, и при этом они не будут содержать пробелы, табуляции, новые строки, (экранированные) двойные кавычки или символ=
. Он может содержать символы><(){}[];?:!&|
, но будет только в диапазоне ASCII для печати (['!' (33), '~' (126)]
). - Целые (то есть
0
,123
,-55
и т.д.) - Десятичные (то есть
0.0
,0.123
,-55.55
и т.д.)
- Строки (без пробелов / вкладки / новая строка), которые будут окружены двойными кавычками (например
- Значения никогда не будут смешаны. Таким образом, все назначенные переменные являются целыми числами, а некоторые не являются целыми числами, а некоторые являются строками.
- Условия в круглых скобках может содержать следующие символы
=<>!+-/*%&|[]
,a-z
,0-9
. Вы можете предположить, что не будет никаких внутренних скобок, и вы также можете предположить, что не будет никаких (сбивающих с толку) полей из более чем одного используемого символа (напримерif(if<0)
). - Вы можете предположить, что не будет никаких ярлыков, как
i*=10
вместоi=i*10
. - Вам не придется обрабатывать висячие
else
случаи, так что всеif
может быть в паре сelse
. Т.е.if(a)if(b)r=0;else r=1;
это не возможный случай ввода.if(a)if(b)r=0;else r=1;else r=2;
илиif(a&&b)r=0;else if(a&&!b)r=1;else r=-1;
однако. - Ввод / вывод является гибким. Ввод и вывод может быть строкой, списком символов, считыванием из STDIN, выводом в STDOUT и т. Д. Ваш вызов.
- Все троицы будут иметь правильную ассоциативность, как это принято в большинстве языков ( но не в, например, PHP ).
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это возможно.
Тестовые случаи:
Input: if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
Output: s=i<0?"Neg":i>0?"Pos":"Neut";
Input: if(i%2<1)r=10;else r=20;
Output: r=i%2<1?10:20;
Input: if(n<10)if(m<0)i=0;else i=10;else if(m<0)i=-1;else i=1;
Output: i=n<10?m<0?0:10:m<0?-1:1;
Input: if(i==1)i=0.0;else i=0.25;
Output: i=i==1?0.0:0.25;
Input: if(!a)if(b)r=0;else r=1;else r=2;
Output: r=!a?b?0:1:2;
Input: if(a)if(b)r=0;else r=1;else if(c)r=2;else r=3;
Output: r=a?b?0:1:c?2:3;
Input: if(a&&b)r=0;else if(a&&!b)r=1;else r=-1;
Output: r=a&&b?0:a&&!b?1:-1;
Input: if(i[0]>0)if(j>0)if(q>0)r="q";else r="j";else r="i";else r="other";
Output: r=i[0]>0?j>0?q>0?"q":"j":"i":"other";
Input: if(i>0)r="i";else if(j>0)r="j";else if(q>0)r="q";else r="other";
Output: r=i>0?"i":j>0?"j":q>0?"q":"other";
Input: if(a>0)if(a<2)x="one";else if(a<3)x="two";else if(a<4)x="three";else x="other";else x="other";
Output: x=a>0?a<2?"one":a<3?"two":a<4?"three":"other":"other";
Input: if(b[0]<=b[1])q=5;else if(b[0]==null)q=0;else q=-10;
Output: q=b[0]<=b[1]?5:b[0]==null?0:-10;
if ... then ... else
это троичный оператор. Так что если вы напишите,let result = if 10 > 100 then 99 else -99
то значениеresult
будет-99
.