LITERALLY 프라임 인 프라임 테스트


23

지정된 숫자의 우선 순위를 테스트하고 출력을 부울 값으로 제공하는 프로그램을 작성하십시오 (True is prime). 귀하의 프라임 테스트는 숫자 1에 유효 할 수 있습니다 (그러나 반드시 그런 것은 아닙니다).

다음은 캐치입니다. 프로그램 자체는 소수입니다. 모든 문자 (공백 포함)를 해당 유니 코드 / ASCII 값 ( table )으로 변환하십시오. 그런 다음 모든 숫자를 더하여 프로그램의 합계를 얻으십시오.

예를 들어, 파이썬 3.3에서 작성한이 좋지 않은 프로그램을 보자.

q=None
y=int(input())
for x in range(2,int(y**0.5)+1):
    if y%x==0:
        q=False
if not q:
    q=True
print(q)

모든 문자를 해당 유니 코드 / ASCII 값으로 변환하면 다음을 얻을 수 있습니다.

113 61 78 111 110 101 10 121 61 105 110 116 40 105 110 112 117 116 40 41 41 10 102 111 114 32 120 32 105 110 32 114 97 110 103 101 40 50 44 105 110 116 40 121 42 42 48 46 53 41 43 49 41 58 10 32 32 32 32 105 102 32 121 37 120 61 61 48 58 10 32 32 32 32 32 32 32 32 113 61 70 97 108 115 101 10 105 102 32 110 111 116 32 113 58 10 32 32 32 32 113 61 84 114 117 101 10 112 114 105 110 116 40 113 41 

그런 다음 수동으로 또는 자신의 프로그램으로 해당 숫자의 합계를 찾을 수 있습니다. 이 특정 프로그램의 합계는 8293으로 소수입니다.

물론 이것은 코드 골프이므로 프로그램을 작게 만들수록 더 좋습니다. 다른 사용자가 지적 했듯이이 프로그램은 그다지 골프 색이 아닙니다.

몇 가지 규칙 :

유효한 입력에는 STDIN 및 프롬프트가 포함됩니다 (기능 없음, 무료 추가 코드를 추가하는 방법 일 뿐임). 공백은 허용되지만 프로그램 기능에 중요한 경우에만 허용됩니다. 출력은 변수에 저장되거나 반환되는 것이 아니라 출력이어야합니다 (print, STDOUT 등 사용).

플래그를 사용할 수 있으며 확장되지 않고 문자 그대로 계산해야합니다. 의견은 허용되지 않습니다. ASCII가 아닌 문자는 해당 인코딩의 값에 지정해야합니다.

프로그램의 크기와 프로그램의 합계를 나열하십시오. 프로그램이 유효한지 테스트합니다.

행운을 빕니다!

다음은 프로그램 합계를 계산하여 소수인지 확인하는 스 니펫입니다.


12
골프가 아닌 언어에서는 가장 짧은 소수 결정 코드를 취하고 합계가 소수가 될 때까지 변수 이름을 조정할 수 있습니다.
xnor

5
왜 I / O에 대한 제한이 있습니까?
Jonathan Allan

2
"Unibyte value"는 무엇입니까?! ???
aditsu

5
문자와 코드 페이지에 대해 이야기합니다. 유니 코드 문자는 인코딩에 사용되는 코드 포인트에 관계없이 항상 동일한 코드 포인트를 갖습니다. ASCII가 아닌 문자는 해당 인코딩의 값에 지정해야합니다. 실제로 바이트 값 의 합계 가 소수 가 되길 원한다고 생각합니다.
Dennis

답변:




6

마이크로 스크립트 II, 2 바이트 (sum 137)

N;

마이크로 스크립트 II, 4 바이트 (합계 353)

N;ph

실제로이 두 가지 모두 소수 바이트 합계가 있다는 사실에 놀랐습니다.



4

Pyth, 2 바이트 127

/P

온라인으로 사용해보십시오

1프라임, 프라임 0이외의 출력 .

/코드 포인트가 47있습니다. P코드 포인트가 80있습니다.

작동 방식 :

/P
/PQQ    Implicit variables.
        Q = input
 PQ     Prime factorize Q.
/  Q    Count how many times Q appears. 1 if prime, 0 if not.

4

하스켈, 52 바이트, 4421

main=do
 k<-readLn
 print$product[1..k-1]`rem`k==k-1

윌슨 정리.


2
완전한 독립형 프로그램으로 전환했습니다.
fquarp

::IO Int그 당신이 주요 합계를 얻을 수있는 가장 짧은 방법이 아니라면 정말 필요는 없습니다.
Ørjan Johansen

잘 했어 그러나 우리는 짝수 값으로 '해시'하는 코드를 얻습니다. 공백이나 개행을 추가해도 아무 것도 (값조차도) 변하지 않으며 변수의 이름을 변경하지도 않습니다 (4 번 나타남). 따라서 코드 (c)를 바꾸면 4 * c를 빼고 4 * c '를 빼고 그러나 줄을
끊으

1
다른 우선 순위 테스트를 가진 47 바이트 : 온라인으로 사용해보십시오! (카운트를 올바르게하기 위해 공백 대신 탭이 있습니다.)
Laikoni

PPCG에 오신 것을 환영합니다!
Laikoni



3

05AB1E , 2 바이트,173

p=

설명:

p  # Checks if number is prime - returns 1 if true and 0 if false. Uses implicit input.
 = # Wouldn't usually be required for this sort of program, but I added it to make the sum prime.

온라인으로 사용해보십시오!


뭔가 "댓글이 허용되지 않습니다"라고 생각하지만 효과적인 No-ops가 제대로 작동하는 것 같습니다 : D
Value Ink

2

PHP, 38 바이트, 합계 2791

재미있는 사실 : $h대신에 $c합계는 2801(소수)이며, 이진수 표현 101011110001은 소수로도 소수입니다.

for($b=$c=$argv[1];$c%--$b;);echo$b<2;

명령 행 인수, 인쇄 1또는 빈 문자열을 사용합니다. 로 실행하십시오 -r.

내 주요 기능 에서 가져온 코드 (가능한 경우 원래 게시물을보십시오).


@Artyer 수정되었습니다.
Titus

2

R, 27 32 바이트, 합계 2243 2609

@rturnbull 덕분에 5 바이트를 절약했습니다.

cat(gmp::isprime(scan(),r=43)>0)

이것은 gmp 라이브러리의 isprime 기능을 사용합니다.

> sum(as.integer(charToRaw('cat(!!gmp::isprime(scan()))')))
[1] 2243
> cat(!!gmp::isprime(scan()))
1: 2243
2: 
Read 1 item
TRUE
> 

cat(!!gmp::isprime(scan()))는 5 바이트 더 짧으며으로 요약됩니다 2243.
rturnbull

@rturnbull 감사합니다 :)
MickyT

1

파이썬 2, 44 바이트, 바이트 합계 3109

이것은 가장 낮은 값의 변수 이름으로 소수 바이트 합계를 산출하는 xnor의 44 바이트 구현 입니다.

1소수 0인지 아닌지 인쇄 합니다 .

C=B=1
exec"B*=C*C;C+=1;"*~-input()
print B%C

1

젤리 6 바이트 , 바이트 합계 691

ƓÆḍ,ṠE

1소수이거나 0그렇지 않은 경우 인쇄 합니다 .

TryItOnline!

16 진수의 바이트는 93 0D D5 2C CD 45( 코드 페이지 참조 ) 또는 10 진수는 147 13 213 44 205 69691의 합계이며 소수입니다.

방법?

ƓÆḍ,ṠE - Main Link: no arguments
Ɠ      - read and evaluate a line from STDIN (integer expected)
 Æḍ    - proper divisor count
   ,   - paired with
    Ṡ  - sign
     E - all equal? - returns a boolean (1 or 0)
       - implicit print

Æḍ기능은 다른 정수하지 (복합을 그들의 부정 하나, 하나 뺀 수익 제로 제로 수익률, 이상하게도, 마이너스 1보다 큰 숫자를 반환) 할 때 소수과 부정 하나를 반환하도록합니다.

기능은 음의 정수를 반환 뺀가 0는 0을 반환하고 긍정적 인 정수를 반환하도록합니다.

따라서 두 함수는 소수에 대해 동일한 값만 반환합니다.

ƓÆPSTDIN의 입력이 소수인지 직접 테스트 하는 3 바이트 프로그램 은 불행히도 소수 프로그램이 아닙니다 (240).

5 바이트에 대해 =(같음), e(존재 함) 또는 (비 벡터화 같음)을 사용하여 동등성을 테스트 해도 소수 프로그램이 생성되지 않습니다.


대체 (허용되지 않을 수 있음) 4 바이트, 합계 571

I / O 제한이 여전히 인수를 취하는 전체 프로그램을 허용하는 경우.

Æḍ⁼Ṡ

... 위와 동일한 원리를 사용하여 비 벡터화 동등성 (비 벡터화 측면은 효과가 없습니다). 16 진수 값은 소수이며 소수 0D D5 8C CD13 213 140 205571입니다.

다시 2 바이트 프로그램 ÆP에는 소수 (93)가 없습니다.


ƓÆPG(311)과 ÆPF(163)은 괜찮을 것 같아요?
Lynn

for 유니 코드의 ƓÆḍ,ṠE경우 값은입니다 16183.
Artyer

@Lynn 예, "필수 코드 제한"(공백 문자 제외)이 해제 된 것 같습니다 ƓÆPG. 또한 STDIN을 사용하지 않고 입력을받는 프로그램이 허용 가능한지 물었습니다.
Jonathan Allan

1
... 두 가지 모두 정상이면 ÆP¥3 바이트와 97입니다.
Jonathan Allan


1

Mathematica, 21 바이트 1997

Print@*PrimeQ@Input[]

Input[]입력 행을 읽습니다 (프론트 엔드를 사용하지 않으면 STDIN에서 Mathematica 프론트 엔드를 사용하는 경우 대화 상자를 통해 )하고 및 함수 Print@*PrimeQ의 구성 ( @*) 이며 접두사 함수 표기법입니다.PrintPrimeQ@


1

Perl 6 , 24 22 바이트,1949

say .is-prime
for +get

세 개의 공백 문자가 모두 필요합니다.
(Perl 6은 어떤 종류 의 공백 문자를 신경 쓰지 않으므로 두 번째 공백에 가장 일반적으로 사용되는 공백 대신 줄 바꿈을 선택했습니다 ...)



1

, 8 바이트,511

0Na%,a=1

나는 소수 검사기를 썼고 그 합계는 소수였습니다. 편리한. 입력 1-30 확인 : 온라인으로 사용해보십시오!

설명

          a is first command-line argument
    ,a    Numbers from 0 to a-1
  a%      Take a mod each of those numbers (a%0 gives nil)
0N        Count number of times 0 occurs in that list
      =1  If 0 occurs only 1 time (for a%1), then a is prime


1

J, 18 바이트, 1103

echo 1&p:".(1!:1)1

최적에서 멀지 않은 한, 전체 프로그램 우선 순위 테스트를 골프로 칠 수있는 최소한의 것은 17 바이트였습니다. echo(p:[:".1!:1)1불행히도 1133 = 11 * 103입니다.

불행히도 TIO에서 키보드 입력을 작동시키는 방법을 알 수 없으므로 아직 링크가 없습니다.

설명:

echo 1&p:".(1!:1)1  | Full program
           (1!:1)1  | Read a line of input from keyboard
         ".         | Evaluate (converts string to int)
     1&p:           | 1 for prime, 0 for composite
echo                | Print result. The space is required, as 'echo1' would be interpreted as a variable

프로그램 확인

   1 p:+/u:inv'echo 1&p:".(1!:1)1'  NB. Convert to ints, sum, and test primality
1

1

C (gcc) , 62 60 바이트, 4583

꽤 직설적 인. 소수이면 *를 출력하고, 그렇지 않으면 공백을 출력합니다. 1에서는 작동하지 않습니다.

l4m2 덕분에 -2

p;main(i){for(scanf("%d",&p);++i<p;)p=p%i?p:0;puts("*"+!p);}

온라인으로 사용해보십시오!


1
n;main(i){for(scanf("%d",&n);++i<n;)n=n%i?n:0;puts("*"+!n);}소수에 대한 일부 변수 이름을 변경해야 할 수도 있습니다
l4m2

@ l4m2 좋은 것!
gastropner


1

Excel (57 바이트, 코드 합계 3547)

=XOR(0<PRODUCT(MOD(A1,ROW(OFFSET(D2,0,,SQRT(A1))))),3>A1)

Excel에는 실제로 "입력"이 없지만이 수식은 숫자가 A1로 테스트되고 놓은 셀에 출력 될 것으로 예상합니다. 배열 수식이므로 Ctrl-Shift-Enter를 눌러 입력하십시오. Enter가 아니라


1

Java 8, 114 바이트, Prime 10037

interface M{static void main(String[]a){long n=new Long(a[0]),x=2;for(;x<n;n=n%x++<1?0:n);System.out.print(n>1);}}

온라인으로 사용해보십시오.

설명:

interface M{                     // Class
  static void main(String[]a){   //  Mandatory main-method
    long n=new Long(a[0]),       //   The first argument as number
    x=2;for(;x<n;n=n%x++<1?0:n); //   Check if `n` is a prime
    System.out.print(n>1);}}     //   Print whether `n` was a prime
                                 //    (if `n` is still the same: it's a prime;
                                 //     if `n` is now 0 or 1: it's not a prime)

유니 코드 합계를 소수로 만드는 x대신 사용 했습니다 i. 여기에서 유니 코드 합계를 확인하십시오.



0

SmileBASIC, 42 바이트, 2687

INPUT N:FOR D=2TO N/2P=P+!(N MOD D)NEXT?!P

숫자가 소수이면 1 (true), 그렇지 않으면 0 (false)을 출력합니다.

변수 이름은 프로그램을 주요하게 만들기 위해 선택된 것이 아닙니다. N는 IS N 개의 테스트에 암갈색이 D는 IS 차원 ivisor 및 PN인지 여부를 추적 유지 P의 빙한다.



0

녹, 190 바이트, 15013 점

fn main(){let A=&mut"".into();std::io::stdin().read_line(A);let(B,mut C)=(A.trim().parse::<u64>().unwrap(),true);for H in 2..((B as f64).sqrt()+1.0) as u64{if B%H==0{C=false}}print!("{}",C)}

언 골프

fn main() {
    let input = &mut "".into();
    std::io::stdin().read_line(input);
    let (number, mut prime) = (input.trim().parse::<u64>().unwrap(), true);

    for x in 2..((number as f64).sqrt() + 1.0) as u64 {
        if number % x == 0 {
            prime = false;
        }
    }

    print!("{}", prime);
}

1에서 작동하지 않습니다



0

Whispers v2 , 33 바이트

>>> ⊤ℙ∘ℕ
> Input
>> 1∘2

온라인으로 사용해보십시오!

  1. 점수: 44381
  2. 유효하도록 6 바이트 / 2 자만 추가되었습니다!
  3. 1 은 소수가 아닙니다

작동 원리

실행 순서대로 표시됩니다.

		; Line 3:
>>  ∘		; Compose...
   1            ; Line 1 with
     2          ; The result of line 2

		; Line 2:
> Input		; Retrieve a line of input

		; Line 1:
>>> ⊤		; The input is...
     ℙ		; Prime
      ∘		; And it is...
       ℕ	; Natural
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.