В 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.