전치, 소수, 오 마이!


15

작업은 간단합니다. 프로그램은 정수를 입력으로 읽고 소수인지 여부를 인쇄합니다. "yes / no", "true / false"또는 결과를 명확하게 식별하는 모든 것을 인쇄 할 수 있습니다.

문제는 코드가 행과 열이 바뀐 상태에서 작동해야한다는 것입니다.

명백한 솔루션 (주석을 사용하여 문자별로 세로로 반복되는 가장 짧은 "간단한"솔루션)을 제외하기 위해 메트릭은 일반적인 코드 골프와 약간 다릅니다.

이 과제 에서는 서식이 매우 중요 하므로 코드 크기는 코드가 가장 작은 사각형의 영역에서 측정됩니다. 즉, 공백이 계산되고 행의 길이는 동일해야합니다 ( 단순화를 위해 솔루션을 게시 할 때 실제로해야합니다.) 예를 들어

int main()   
{            
    return 0;
}            

크기는 4 * 13 = 52 이며, 두 가지 기준 (프라임 검출 및 트랜스 포저 블) 중 하나에 맞지 않습니다.

가장 작은 크기가 이깁니다.

함수의 유일한 목적이 소수를 찾고 생성하거나 감지하는 것 이외의 모든 언어 및 라이브러리 함수를 사용할 수 있습니다.

편집하다:

우승자가 아마도 Golfscript 솔루션 일지 모르지만 최고의 C 또는 C ++ 솔루션에 대해 50 포인트 현상금을 수여합니다!


직사각형 측정 항목이 확실한 솔루션을 방해하지 않습니다. 가장 긴 측면 길이를 사용하는 것이 좋습니다. 그러나 이것은 GS 답변을 4 점으로 줄입니다.
boothby

네 말이 맞아 다음에 바뀐 문제는 다른 메트릭과 금지 된 대칭 솔루션을 가져야합니다. 그러나 그때조차도 규칙을 우회하거나 최소한 QA가 규칙을 작성할 때 기대하지 않은 해결책을 찾는 사람이있을 것이라고 생각합니다.
vsz

답변:


7

GolfScript, 13 × 1

~.,2>{1$\%!}?

GolfScript가 다시 공격합니다!

입력이 소수이면 입력을 반복하고, 그렇지 않으면 입력을 가장 작은 적절한 제수와 연결하여 인쇄합니다. 그렇습니다. "명확하게 결과를 식별하는 것은 무엇이든"이라는 정의를 확장하고 있지만, 더 멋진 일을하려면 약간의 추가 문자가 필요합니다. 더 나은 출력을 원하면 ;]!코드에 세 문자 를 추가하면 1소수와 0복합 숫자가 생성됩니다.

이 알고리즘은 실제로 비효율적이며 2에서 n -1 까지의 무차별 대입 시험 분할입니다 . 대부분의 GolfScript 연산자는 단일 문자 일 뿐이므로이 코드는 잘 바뀝니다. 그러나 할당 연산자 :는 자신과 대상 사이에 공백을 허용하지 않으므로 변수없이 완전히 수행해야했습니다.


Wrt는 "어떤 캐릭터라도 약간의 추가 문자가 필요합니다."– GolfScript 스타일의 부울 값은 2입니다.
Peter Taylor

@ 피터 : 당신은 위의 내 편집과 같은 것을 의미합니다 !. 아니면 더 멋진 것을 염두에 두셨습니까?
Ilmari Karonen

1
나는 항상 제수를 찾고 끝까지 생각 )하기 전에 생각하고있었습니다 . ,=
Peter Taylor

:개행 문자 다음에 개행 문자를 할당합니다. 따라서 공백은 허용되지 않습니다. 공백 만 할당되는 것입니다.
gnibbler

@gnibbler : 기술적으로 우리 둘 다 맞습니다. :공백 과 그 밖의 대상 사이에 공백 이나 다른 것을 허용하지 않습니다 . 공백이나 다른 토큰 (예, 숫자, 문자열 또는 코드 블록)에 관계없이 바로 뒤에 오는 것은 무엇이든 할당됩니다. 그러나 공백은 공식 문서가 특별히 경고하는 이유이며, 다른 이유로 골프 스크립트에서 토큰 사이에 공백을 추가하는 것은 아무 것도하지 않기 때문에 (보통 할당되지 않은 경우).
Ilmari Karonen

21

C, 2 * 70 2 * 60

y소수를 인쇄 합니다.
편집 : 10자를 저장하도록 코드를 변경했습니다. 매개 변수없이 실행해야합니다 (so m=1).

main(m,n){for(scanf("%d",&n);n%++m&&n>1;);n-m||puts("y");}/*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ 

조옮김을 처리하는 방법은 매우 일반적이며 모든 프로그램에 적용 할 수 있습니다.
이것을 변환을 기반으로합니다.

abcd/*
\\\\*/

이에:

a\
b\
c\
d\
/*
*/

그리고 둘 다 단순히 의미 abcd합니다.


와우, 선 연결의 영리한 오용 :)
vsz

2
골프 / 퍼즐 사이트입니다. 오용과 같은 것은 없습니다.
boothby

2
@boothby, 나는 그가 학대를 의미한다고 생각합니다. 그러나 나는 칭찬으로 논쟁하지 않습니다.
ugoren

14

C-13x13

stdin에서 입력을 읽고 1소수와 소수 0가 아닌 경우 를 인쇄합니다 .

////m(i;(a=)<
////aans")a;2
//:Di)tc%;;p)
//O n{ adfau+
main//bn"o%t4
(a){///f,r-c8
int b///&(-h)
;scanf///bba;
("%d",&///;r}
a);for(b///( 
=a;a%--b;//( 
);putchar((b 
<2)+48);}    

편집 : gcc 및 clang으로 컴파일, 다른 컴파일러는 테스트되지 않았습니다.


12

C, 12x12 자

동일한 코드를 기반으로 한 다른 답변 과 달리 2 차원 솔루션 (그리고 마찬가지로 y합성을 위해 아무것도 인쇄 하지 않습니다).
구조는 Quasimodo의 답변 과 비슷 하지만 코드가 짧아서 코맨트 사용법이 조금 더 효율적이므로 12x12에 맞출 수 있다고 생각합니다.

////m()s";np
////am{c%n>u
////i,fad%1t
////nnon"+;s
main//rf,+)(
(m,n//((&m;"
){for(//n&ny
scanf(//)&-"
"%d",&n)//m)
;n%++m&&//|;
n>1;);n-m|| 
puts("y"); }

7

펄, 14 x 14

나는 이것에 매달리고 있다고 생각한다. 명령 행 인수, 출력 0또는 로 숫자를 지정하십시오 1. 아마도 개선의 여지가 더 많을 것입니다.

$   n=pop;$p|=
 !  ($n%$_)for
  2 ..$n/2;   
   print!$p+m~
n(.r          
=$.i          
pn$n          
o%nt          
p$/!          
;_2$          
$);p          
pf +          
|o m          
=r ~          

3

대칭적이고 비효율적 인 솔루션에 대한 주석이 남용되었습니다.

/{/////////////////////////////////
{(~)any 0=mod[x;2+(!)x-2]}"I"$(0:)0
/~
/)
/a
/n
/y
/ 
/0
/=
/m
/o
/d
/[
/x
/;
/2
/+
/(
/!
/)
/x
/-
/2
/]
/}
/"
/I
/"
/$
/(
/0
/:
/)
/0

STDIN에서 입력을 받고 부울을 리턴합니다.


sqrt거기에 주목 했다. 코드 골프에서 프라임을 찾을 때 일반적으로 sqrt n에서 멈추지 않고 n까지 (폐기 적으로) 나누는 것이 유리합니다.
gnibbler

고마워요 아직 더 좋은 점수를받을 기회가 없었습니다.
skeevey

당신은 당신의 대답에 점수를 포함해야한다
FlipTack

2

젤리 , 2x2 정사각형

PÆ
ÆP

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

조옮김 부분이 올바른 것으로 생각되며, 그렇다면 조옮김 버전은

PÆ
ÆP

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

(동일한 코드입니다)


4
"유효하지 않습니다." 해당 기능의 유일한 목적이 소수를 찾고, 생성하거나, 감지하는 경우를 제외하고 는 모든 언어와 모든 라이브러리 기능을 사용할 수 있습니다 . "
Kevin Cruijssen

1

05AB1E , 1 × 1 × ( 5 3 바이트 )

이것은 큰 프로그램이 아닙니다. 각 라인은 프라임 내장을 사용하지 않고 프라임 체크를 처리하기위한 별도의 대체 프로그램입니다.

ÑPQ
ÒgΘ
ÒQP
ÕαΘ
fQO
fs¢
f`Q

Grimy 덕분에 -2 바이트 .

05AB1E에서 줄 사이의 공백은 작동하지 않으며 1 바이트 명령 만 사용하므로 조옮김 후에는 잘 작동합니다.

출력 1/ 0진실 / 거짓 각각.

온라인으로 첫 번째 테스트를 수행.V 하거나 모든 테스트 사례 (eval 내장 )를 확인하십시오 .
조옮김 : 첫 번째 온라인 시도 .

설명:

Ñ    # Get a list of all divisors of the (implicit) input-integer
     # (which would be only 1 and the integer itself for primes)
 P   # Take the product of that list
  Q  # And check if it's equal to the (implicit) input-integer

Ò    # Get a list of all prime factors of the (implicit) input-integer 
 g   # Get the amount of those prime factors by taking the length of the list
  Θ  # Check if that's equal to 1 (so only itself is a prime factor)

Ò    # Get a list of all prime factors of the (implicit) input-integer including duplicates
 Q   # Check for each if it's equal to the (implicit) input-integer
     # (1 if truthy; 0 if falsey)
  P  # Take the product of those checks (resulting in either 1 or 0 as well)

Õ    # Get the Euler totient of the (implicit) input-integer
 α   # Take the absolute difference with the (implicit) input-integer
  Θ  # Check if that's equal to 1

f    # Get a list of all prime factors of the (implicit) input-integer without duplicates
 Q   # Check for each if it's equal to the (implicit) input-integer
  O  # And take the sum of that (resulting in either 1 or 0)

f    # Get a list of all prime factors of the (implicit) input-integer without duplicates
 s   # Swap to get the (implicit) input-integer
  ¢  # And count how many time it occurs in the list

f    # Get a list of all prime factors of the (implicit) input-integer without duplicates
 `   # Dump all the content of this list onto the stack
  Q  # Check if the top two values are equal, or if only a single value is present, it will
     # use the (implicit) input-integer as second value

     # For all these program the same applies at the end:
     # (implicitly output the result with trailing newline)

참고 : 만 truthy / falsey 값이 유효합니다, 그것은 구별되어야 할 필요가있다하지 않는, 어느 경우 Òg또는 Õα에만 있기 때문에, 유효한 2 byters로 사용될 수 105AB1E에서 truthy이며, 다른 모든 falsey입니다 : 모두를보십시오 일부 테스트 사례의 경우 .

기본 제공이 허용 된 경우 단일 항목으로 p충분합니다. 온라인으로 시도 하거나 테스트 사례를 더 확인 하십시오 .


1
ÑPQ또는 ÒgΘ또는 ÒQP3 바이트. ( Ñ그리고 Ò그들이 금지에 포함하지 않을 수 있도록 모두 내 독서에 의해, "발견 생성하거나 소수를 감지하는"이외의 다른 목적을 가지고).
Grimmy

1
더 많은 3 byters : ÕαΘ, fQO, fs¢,f`Q
그리미

@Grimy Ah, 내가 제수 나 주요 요소에 대해 생각하지 않았다는 것을 믿을 수 없다. 나는 너무 빨리 대답했다. 에 대해 알고하지 않았다 Õα비록! 꽤 좋은 것입니다.
Kevin Cruijssen

0

룬 마법 마법 부여 , 7 × 1

v̀i'PA@

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

Runic은 소스 재배 열에 대한 당신의 연약한 시도를 걱정하지 않습니다! 리플렉션 수정 자 및 진입 점에 대해 소스 전환 비용 +3 바이트 (+2 사각형 너비)를 사용한 후에도 여전히 작동해야하는 요구 사항을 준수합니다.

전치 또는 전치하지만 부모에 부착 된 결합 문자를 남겨 .





0

APL (Dyalog Unicode) , 10x11

{⍵∊∘.×⍨1↓⍳⍵          
           
           
 .          
 ×          
           
 1          
           
           
          }

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

사양에 맞게 기능을 수정했습니다. 감사합니다 @ Adám.

반환 falsy에 대한 truthy 0, 1 .

어떻게

{⍵∊∘.×⍨1↓⍳⍵  Dfn. everything below this is a noop up until closing the brace
         ⍳⍵  Range [1..arg]
       1    Dropping the first element (yields [2..arg])
   ∘.×⍨      Multiplication table for each element in the vector
 ⍵∊          Check if the argument is in the table.

조옮김 버전은 동일합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.