난해한 프로그래밍 언어 Curly에서 프로그램은 중괄호 {}
와 세미콜론 으로 만 구성됩니다 ;
. 이 겸손한 툴셋에도 불구하고 Curly에는 음이 아닌 정수를 나타낼 수있는 리터럴이 있습니다. 그러나이 형식은 처음에는 읽기가 약간 어렵 기 때문에 변환을위한 코드를 작성해 보겠습니다.
숫자 형식
곱슬 번호는 다음 규칙에 따라 구성됩니다.
- 세미콜론을 추가하면 숫자에 1이 추가됩니다.
- 중괄호로 묶은 숫자에 4를 곱합니다.
- 중괄호 그룹은 중첩되지만 연결되지 않을 수 있습니다. 괄호가 올바르게 일치해야합니다.
- 중괄호 세트 외부의 세미콜론은 이후가 아니라 이후에 와야합니다.
- 구문 분석시 모호함을 피하려면 숫자는 항상 중괄호로 시작해야합니다.
몇 가지 예 :
{;;} 2*4 = 8
{{;};}; (1*4+1)*4+1 = 21
{};;; 0*4+3 = 3
규칙 5는 0에서 3까지의 숫자가 빈 중괄호 쌍으로 시작해야 함을 의미합니다.
그리고 일부 잘못된 예 :
{{;}{;;}} Curly brace groups side-by-side, not nested
{;}} Unmatched brace
{;{;}} Semicolon before curly-brace group
;;; Number does not start with curly brace
곱슬 번호에 대한 BNF 문법은 다음과 같습니다.
<number> ::= "{" <inner> "}" <semis>
<inner> ::= <semis>
| <number>
<semis> ::= ";" <semis>
| ""
같은 숫자 {;;;;}
(연속 3 개 이상 세미콜론) 또는 {{};}
(불필요한 빈 괄호 그룹)이라고합니다 부적절한 곱슬 번호. 위의 문법을 따르고 일반적인 방식으로 평가할 수 있지만 더 짧은 표현도 가능합니다 (위의 예 {{;}}
및 {;}
각각).
도전
문자열을 입력 / 수신하는 프로그램 또는 함수를 작성하십시오. 문자열이 음이 아닌 10 진수 인 경우 해당 정수에 대한 적절한 (가장 짧은) 곱슬 표현을 출력 / 반환합니다 . 문자열이 곱슬 번호 인 경우 10 진수 표현을 출력 / 반환합니다.
STDIN, 명령 줄 인수 또는 함수 매개 변수를 통해 입력을 받을 수 있습니다. 그것은 해야한다 문자열이어야; 즉, Curly 숫자에는 문자열을 허용하고 10 진수에는 정수를 허용하는 함수를 작성할 수 없습니다.
출력 은 STDOUT으로 인쇄되거나 함수에서 리턴 될 수 있습니다. 함수 는 적절한 경우 정수를 반환하거나 모든 상황에서 문자열을 반환 할 수 있습니다.
프로그램은 잘못된 입력 (형식 규칙, 부동 소수점 숫자, 음수, 임의의 텍스트를 위반하는 숫자) 을 처리 할 필요 가 없으며 부적절한 곱슬 숫자를 처리 할 필요 는 없습니다 (아래 참조). 입력은 인쇄 가능한 ASCII 문자로만 구성됩니다.
채점
바이트 단위의 가장 짧은 코드가 이깁니다. 프로그램 이 다음 두 가지 를 모두 수행 할 수있는 경우 :
- 부적절한 곱슬 번호를 올바르게 처리하고
- 곱슬 번호가 주어지면, 그렇지 않은 추가 문자는 무시하십시오.
{};
그런 다음 점수에서 10 %를 뺍니다. (정수 입력에도 보너스에 관계없이 외래 문자가 없습니다.)
테스트 사례
Input Output
{;;} 8
{{;};}; 21
{};;; 3
{{{{;}}};} 260
{} 0
4 {;}
17 {{;}};
1 {};
0 {}
96 {{{;};;}}
보너스 :
{};;;;; 5
{{;;;;};;} 72
c{u;r;l}y;! 9
42{;} ;;;; 8
참고 : Curly는 아직 구현되지 않았습니다. 그러나이 질문이 잘되면 더 발전시킬 수 있습니다.