> 1
> Input
>> 1…2
>> L!
>> L+1
>> L∣2
>> L⋅R
>> 2%L
>> Each 4 3
>> Each 5 9
>> Each 6 10
>> Each 7 11 3
> {0}
>> 12∖13
>> Each 8 14
>> L≠1
>> Each 16 15
>> Each 7 17 15
>> 18∖13
>> [19]
>> 2’
>> 21⋅20
>> Output 22
온라인으로 사용해보십시오!
이것은 필라델피아가 아닌 프라임에 대해서는 빈 목록을, 그렇지 않으면 비어 있지 않은 목록을 반환합니다.
작동 원리
Whispers는 실수 / 복소수를 조작하기 위해 설계되었으며, 소량의 배열 명령이 추가되어 좋은 측정이 추가되었으므로 Each
생성 된 목록을 반복 사용하는 반복 사용 .
속삭임에 대한 약간의 배경 :
속삭임은 대부분의 다른 언어로의 실행 경로에서 약간 다릅니다. 조건부에서 분기하는 것만으로 각 줄을 선형으로 작업하는 대신 Whispers는 파일의 마지막 줄부터 시작합니다 >
(규칙은 약간 복잡하지만 지금은 알아야 할 모든 것). 숫자의 의미 줄이 >
또는로 시작하는지에 따라 다릅니다 >>
.
라인이로 시작하는 경우 >
와 같은, > 1
또는 > Input
, 이것은이다 상수의 라인 - 그것은 같은 값마다 반환합니다. 여기서 숫자는 숫자 형식을 나타내므로 첫 번째 줄은 호출 될 때 항상 1을 반환 합니다.
>>
그러나 줄이 시작 되면 숫자는 다른 줄에 대한 참조로 간주됩니다. 예를 들어, 라인 >> 1…2
, 이것은 수행하지 않는 …
정수에 명령을 1 및 2 뿐만 아니라 라인들로부터 리턴 된 값에 1 및 2 . 이 경우 해당 값은 정수 1 이며 입력으로 전달 된 정수입니다.
이 예제에서는 23 의 입력을 고려하십시오 . Whispers의 전처리로 인해 두 번째 줄 ( > Input
) 이로 변환됩니다 > 23
.
첫 번째 명령은 3 행 >> 1…2
입니다. …
는 이항 범위이며,이 경우 1 에서 23까지 이며 {1, 2, ... 22, 23} 입니다. 다음으로 9 ~ 12 행으로 건너 뜁니다 .
>> Each 4 3
>> Each 5 9
>> Each 6 10
>> Each 7 11 3
여기에 우리는 4 개의 헌신적 인 Each
진술이 있으며, 각각은 이전 결과에 대해 반복되며, 본질적으로 3 행의 배열에 걸쳐 4 개의 명령을 매핑합니다 : 범위. 처음 세 문장은 4 , 5 및 6 행의 간단한 맵입니다 .
>> L!
>> L+1
>> L∣2
정수 n 에 대한이 세 명령 은 (n! +1) ∣x를 산출합니다 . 여기서 ! 나타내고 팩토리얼 , | 나타내고 divisbility을 그리고 X 입력된다. 마지막으로 12 행 에는 2 차원지도 구조가 있습니다.
2 차원지도 구조는 3 개의 정수 즉, 대상, 왼쪽 및 오른쪽이 각각 다른 행에 대한 색인을 갖습니다. 여기에서 왼쪽과 오른쪽을 압축하여 쌍 목록을 생성 한 다음 dyadic 명령 (대상)으로 각 쌍을 줄입니다. 여기서 입력이 23 인 경우 목록은 {1, 2, ... 22, 23} 및 {0, 0, ... 1, 0} 이며 명령은 다음과 같습니다.
>> L⋅R
왼쪽 인수에 오른쪽을 곱합니다. 이것은 계승 증분이 입력으로 나눌 수없는 정수 색인 과 0 이있는 정수 색인에 정수 배열을 생성합니다 . 이 배열을 A 라고합니다 . 다음으로, 우리는 제거 0 에서 S 을 사이 차 집합 취하여 {0} 및 :
> {0}
>> 12∖13
예제 입력으로 {14, 18, 22} 세트가 생성 됩니다. 다음으로 입력의 나머지를 세트의 각 값으로 나눈 다음 나머지가 1 이 아닌지 확인합니다 .
>> 2%L
>> Each 8 14
>> L≠1
>> Each 16 15
다시 말하지만, 우리는 하나의 목록이 0 또는 1 의와 제거해야하는 0 들과 교체 한 원래의 값으로들. 여기에서 우리는 우리가 위에서 본 코드를 반복하되으로 >> 18∖13
보다는 12
. 마지막으로이 결과 집합을 최종 확인을위한 목록으로 캐스트합니다. 불행히도, 우리의 코드는 437 과 같은 모든 기준을 달성하는 복합 숫자도 거부해야합니다 . 최종 목록에 입력의 우선 순위를 곱하여 최종 검사를 추가합니다. Python 곱셈이 목록에서 작동하는 방식으로 인해 0 은 빈 목록으로 대체하고 1 은 영향을 미치지 않습니다. 따라서 입력의 우선도를 계산하고 m 의 목록을 곱합니다.입력과 최종 결과 출력 :
>> 2’
>> 21⋅20
>> Output 22