Java / .NET / C / JavaScript 등에서 삼항 -if를 사용하여 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";
다음과 같은 경우 3 항으로 단축 할 수 있습니다.
s=i<0?"Neg":i>0?"Pos":"Neut";
도전:
입력 : 단일 변수를 설정하는 정규 if-else (중첩 가능).
출력 : 변환 된 3 진 -if.
도전 규칙 :
- 대괄호없이 모든 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;
그러나. - I / O는 유연합니다. 입력 및 출력은 문자열, 문자 목록, STDIN에서 읽거나 STDOUT으로 출력 등이 될 수 있습니다.
- 모든 삼항은 대부분의 언어 표준 ( 예 : PHP는 아님) 과 마찬가지로 올바른 연관성을 갖습니다 .
일반 규칙:
- 이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오. - 표준 규칙이 답변에 적용 되므로 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
.