Trong Java / .NET / C / JavaScript / v.v. bạn có thể sử dụng ternary-ifs để rút ngắn if-statement.
Ví dụ: (trong Java):
// there is a String `s` and an int `i`
if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
Có thể rút ngắn bằng một ternary-if to:
s=i<0?"Neg":i>0?"Pos":"Neut";
Thử thách:
Đầu vào: Một if-other thông thường (có thể với lồng nhau) đặt một biến duy nhất.
Đầu ra: The ternary-if.
Quy tắc thử thách:
- Bạn có thể giả sử tất cả các trường hợp if-other đều có thể mà không có dấu ngoặc (vì vậy mỗi khối if / other-if / other có một thân).
- Bạn có thể cho rằng sẽ không có bất kỳ khoảng trắng, tab hoặc dòng mới nào, ngoại trừ một khoảng trắng sau mỗi khoảng trống
else
(bao gồm tạielse if
). - Bạn có thể giả sử các tên biến được sử dụng luôn là một chữ cái viết thường (
[a-z]
). - Các giá trị được cung cấp cho các biến có thể là một trong:
- Strings (không có dấu cách / tab / new-lines), mà sẽ được bao quanh bởi hai dấu ngoặc kép (ví dụ
"Test"
,"SomeString"
,"Example_string"
, vv). Bạn có thể giả sử các chuỗi sẽ không bao giờ chứa các chuỗi conif
hoặcelse
cũng không chứa các khoảng trắng, tab, dòng mới, dấu ngoặc kép (thoát) hoặc ký tự=
. Nó có thể chứa các ký tự><(){}[];?:!&|
, nhưng sẽ chỉ nằm trong phạm vi ASCII có thể in (['!' (33), '~' (126)]
). - Số nguyên (ví dụ
0
,123
,-55
, vv) - Số thập phân (tức là
0.0
,0.123
,-55.55
, vv)
- Strings (không có dấu cách / tab / new-lines), mà sẽ được bao quanh bởi hai dấu ngoặc kép (ví dụ
- Các giá trị sẽ không bao giờ được trộn lẫn. Vì vậy, tất cả các biến được gán là số nguyên, và không phải một số là số nguyên và một số là chuỗi.
- Các điều kiện trong ngoặc đơn có thể chứa các ký tự sau
=<>!+-/*%&|[]
,a-z
,0-9
. Bạn có thể cho rằng sẽ không có bất kỳ dấu ngoặc đơn bên trong nào và bạn cũng có thể cho rằng sẽ không có bất kỳ trường (khó hiểu) nào có nhiều hơn một ký tự được sử dụng (nhưif(if<0)
). - Bạn có thể cho rằng sẽ không có bất kỳ lối tắt nào như
i*=10
thay vìi=i*10
. - Bạn sẽ không phải xử lý
else
các trường hợp lơ lửng , vì vậy tất cảif
có thể được ghép nối với mộtelse
. Tứcif(a)if(b)r=0;else r=1;
là không phải là một trường hợp đầu vào có thể.if(a)if(b)r=0;else r=1;else r=2;
hoặcif(a&&b)r=0;else if(a&&!b)r=1;else r=-1;
là tuy nhiên. - I / O là linh hoạt. Đầu vào và đầu ra có thể là một chuỗi, danh sách các ký tự, đọc từ STDIN, đầu ra thành STDOUT, v.v. Cuộc gọi của bạn.
- Tất cả các ternary sẽ có một sự kết hợp đúng, như là tiêu chuẩn trong hầu hết các ngôn ngữ ( nhưng không phải trong ví dụ PHP ).
Quy tắc chung:
- Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất bằng byte thắng.
Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'. - Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, các chương trình đầy đủ. Cuộc gọi của bạn.
- Lỗ hổng mặc định bị cấm.
- Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
- Ngoài ra, xin vui lòng thêm một lời giải thích nếu có thể.
Các trường hợp thử nghiệm:
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
là toán tử ternary. Vì vậy, nếu bạn viếtlet result = if 10 > 100 then 99 else -99
thì giá trị củaresult
sẽ là-99
.