У Java / .NET / C / JavaScript / тощо. ви можете використовувати ternar-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(включаючи вelse 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.