이 광산은 항상 실선입니다


12

숫자가 소수인지 시각적으로 확인하는 데 사용할 수있는 NxN 격자 간격과 밑줄을 만듭니다. (N은 양의 정수일 수 있습니다.)

이 그리드에는 세 가지 간단한 규칙이 있습니다.

  1. n 번째 열에는 n-1 밑줄의 반복 된 패턴과 한 공백이 포함됩니다. 이 패턴은 첫 번째 행에서 시작하고 행 N에서 패턴 중간에 중지됩니다 (행과 열은 1 색인화 됨).
  2. 첫 번째 열은 모든 공백 대신 모든 밑줄로 바뀝니다.
  3. 행 인덱스가 열 인덱스와 같은 위치에 공백이 있으면 밑줄로 바뀝니다.

예 : N = 10

           1
  1234567890 <-- column indices
 1__________
 2__________
 3__________
 4_ ________
 5__________
 6_  _______
 7__________
 8_ _ ______
 9__ _______
10_ __ _____
 ^ row indices

지수는 명확성을위한 것입니다. 일반 그리드 자체 (프로그램이 출력해야하는 것)는 다음과 같습니다.

__________
__________
__________
_ ________
__________
_  _______
__________
_ _ ______
__ _______
_ __ _____

그것을주의해라:

  • 첫 번째 열은 모두 밑줄입니다.
  • 두 번째 열은 2 행의 밑줄을 제외하고 밑줄 공간, 밑줄 공간 등이됩니다.
  • 세 번째 열은 3 행의 밑줄을 제외하고 밑줄 밑줄, 밑줄 밑줄 등입니다.
  • 기타

또한 1 외에도 소수 열에 만 모든 열에 밑줄이 있습니다.

밑줄은 전체 글꼴 너비에 걸쳐 있으므로 각 소수 행은 연속적인 실선을 형성합니다. 따라서 숫자가 소수인지 확인하는 것은 시각적으로 매우 쉽습니다. 모든 열에 걸쳐 선이 실선인지 확인하십시오. (사실 행 인덱스의 제곱근을 찾으면 충분하지만 그 그리드를 출력하는 것은 덜 우아해 보입니다.)

프로그램

stdin (또는 가장 가까운 대안)을 통해 N이 주어진 그리드를 그릴 프로그램을 작성하십시오. 출력은 stdout (또는 가장 가까운 대안)으로 이동하고 선택적인 후행 줄 바꿈과 함께 공백, 밑줄 및 줄 바꿈 만 포함해야합니다.

가장 짧은 코드가 승리합니다.


나는 소수를 어떻게 결정
합니까?


"n 번째 열에는 n-1 밑줄의 반복 된 패턴과 한 공백이 포함됩니다." 따라서 n = 1 열이 모든 공백이 아니어야하고 모든 밑줄이 아니어야합니까?
algorithmshark

6
특히 "후행 줄 바꿈 없음"요구 사항이 마음에 들지 않는다고 말해야합니다. 이것은 일부 언어에서는 매우 어렵고 다른 언어에서는 불가능하며 STDOUT으로 인쇄하는 프로그램에만 영향을 미칩니다.
Dennis

4
설명은 이해하기 어려웠습니다. 이것이 내가 설명하는 방법입니다. N 줄의 N 밑줄로 시작하십시오. 를 들어 n열 번째의 할 k경우 일 문자 공간 k의 제수입니다 m즉 1 아닙니다 m.
Casey Chu

답변:


7

CJam, 33 28 27 바이트

q~,:)_f{f{md\1=+'_S?}0'_tN}

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

작동 원리

q~        " Read one line from STDIN and evaluate it.                                     ";
,:)       " For “N”, push [ 1 ... N ].                                                    ";
_         " Push a copy.                                                                  ";
f{        " For each “I in [ 1 ... N ], push “I   [ 1 ... N ]”; then:                     ";
  f{      " For each “J in [ 1 ... N ], push “J   I”; then:                               ";
    md\   " Push “J % I   J / I”.                                                         ";
    1=+   " Calculate “J % I + (J / I == 1)”.                                             ";
    '_S?  " Push an underscore if the result is truthy and a space otherwise.             ";
  }       "                                                                               ";
  0'_t    " Replace the first character of the resulting array by an underscore.          ";
  N       " Push a newline.                                                               ";
}         "                                                                               ";

예제 실행

$ cjam solid-primes.cjam <<< 10
__________
__________
__________
_ ________
__________
_  _______
__________
_ _ ______
__ _______
_ __ _____
$ cjam solid-primes.cjam <<< 100 | md5sum # trailing newline
e4396b316989813dada21141b569ccf9  -

골프를 마치면 설명을 게시하겠습니다.
Dennis

9
33 바이트와 당신은 골프를하지 않은 ??

5

루비, 77 73 자

puts (1..n=gets.to_i).map{|a|?_+(2..n).map{|b|a!=b&&a%b==0? ' ':?_}.join}

내가 사용한 몇 가지 트릭 :

  • ..연산자는 루비에있는 모든 사업자의 거의 가장 낮은 우선 순위를 가지고, 그래서 (1..n=gets.to_i)바로 작동합니다.

  • a!=1문자가 밑줄 대신 공백이어야하는지 검사 할 때 추가 조건 을 추가하는 대신 (첫 번째 행이 모두 밑줄이기 때문에) 범위를 시작하고 2여분을 추가했습니다 ?_.

  • A 행은 B 행이 될 수 있습니다.

    A | a%b==0&&a!=b ? ' ':?_
    B | a!=b&&a%b==0? ' ':?_
    

    내가 사이에 여분의 공간이 필요하기 때문 b?라인 (A)에 있지만, 그 사이에 필요하지 않은 것 0?라인 B.는 b?유효한 루비 방법이지만 0?없습니다.

  • puts는 개행으로 배열을 자동으로 결합하여 추가가 필요하지 않습니다 *"\n".

에 대한 출력 n=100:

____________________________________________________________________________________________________
____________________________________________________________________________________________________
____________________________________________________________________________________________________
_ __________________________________________________________________________________________________
____________________________________________________________________________________________________
_  _________________________________________________________________________________________________
____________________________________________________________________________________________________
_ _ ________________________________________________________________________________________________
__ _________________________________________________________________________________________________
_ __ _______________________________________________________________________________________________
____________________________________________________________________________________________________
_   _ ______________________________________________________________________________________________
____________________________________________________________________________________________________
_ ____ _____________________________________________________________________________________________
__ _ _______________________________________________________________________________________________
_ _ ___ ____________________________________________________________________________________________
____________________________________________________________________________________________________
_  __ __ ___________________________________________________________________________________________
____________________________________________________________________________________________________
_ _  ____ __________________________________________________________________________________________
__ ___ _____________________________________________________________________________________________
_ ________ _________________________________________________________________________________________
____________________________________________________________________________________________________
_   _ _ ___ ________________________________________________________________________________________
____ _______________________________________________________________________________________________
_ __________ _______________________________________________________________________________________
__ _____ ___________________________________________________________________________________________
_ _ __ ______ ______________________________________________________________________________________
____________________________________________________________________________________________________
_  _  ___ ____ _____________________________________________________________________________________
____________________________________________________________________________________________________
_ _ ___ _______ ____________________________________________________________________________________
__ _______ _________________________________________________________________________________________
_ ______________ ___________________________________________________________________________________
____ _ _____________________________________________________________________________________________
_   _ __ __ _____ __________________________________________________________________________________
____________________________________________________________________________________________________
_ ________________ _________________________________________________________________________________
__ _________ _______________________________________________________________________________________
_ _  __ _ _________ ________________________________________________________________________________
____________________________________________________________________________________________________
_  __  ______ ______ _______________________________________________________________________________
____________________________________________________________________________________________________
_ _ ______ __________ ______________________________________________________________________________
__ _ ___ _____ _____________________________________________________________________________________
_ ____________________ _____________________________________________________________________________
____________________________________________________________________________________________________
_   _ _ ___ ___ _______ ____________________________________________________________________________
______ _____________________________________________________________________________________________
_ __ ____ ______________ ___________________________________________________________________________
__ _____________ ___________________________________________________________________________________
_ _ ________ ____________ __________________________________________________________________________
____________________________________________________________________________________________________
_  __ __ ________ ________ _________________________________________________________________________
____ _____ _________________________________________________________________________________________
_ _ __  _____ _____________ ________________________________________________________________________
__ _______________ _________________________________________________________________________________
_ __________________________ _______________________________________________________________________
____________________________________________________________________________________________________
_     ___ _ __ ____ _________ ______________________________________________________________________
____________________________________________________________________________________________________
_ ____________________________ _____________________________________________________________________
__ ___ _ ___________ _______________________________________________________________________________
_ _ ___ _______ _______________ ____________________________________________________________________
____ _______ _______________________________________________________________________________________
_  __ ____ __________ __________ ___________________________________________________________________
____________________________________________________________________________________________________
_ _ ____________ ________________ __________________________________________________________________
__ ___________________ _____________________________________________________________________________
_ __ _ __ ___ ____________________ _________________________________________________________________
____________________________________________________________________________________________________
_   _ _  __ _____ _____ ___________ ________________________________________________________________
____________________________________________________________________________________________________
_ __________________________________ _______________________________________________________________
__ _ _________ _________ ___________________________________________________________________________
_ _ ______________ __________________ ______________________________________________________________
______ ___ _________________________________________________________________________________________
_  __ ______ ____________ ____________ _____________________________________________________________
____________________________________________________________________________________________________
_ _  __ _ _____ ___ ___________________ ____________________________________________________________
__ _____ _________________ _________________________________________________________________________
_ ______________________________________ ___________________________________________________________
____________________________________________________________________________________________________
_   _  ____ _ ______ ______ _____________ __________________________________________________________
____ ___________ ___________________________________________________________________________________
_ ________________________________________ _________________________________________________________
__ _________________________ _______________________________________________________________________
_ _ ___ __ __________ _____________________ ________________________________________________________
____________________________________________________________________________________________________
_  _  __  ____ __ ___________ ______________ _______________________________________________________
______ _____ _______________________________________________________________________________________
_ _ __________________ ______________________ ______________________________________________________
__ ___________________________ _____________________________________________________________________
_ ____________________________________________ _____________________________________________________
____ _____________ _________________________________________________________________________________
_   _ _ ___ ___ _______ _______ _______________ ____________________________________________________
____________________________________________________________________________________________________
_ ____ ______ __________________________________ ___________________________________________________
__ _____ _ _____________________ ___________________________________________________________________
_ _  ____ _________ ____ ________________________ __________________________________________________

Extra-Special ™ Mega-Colorful Red © Highlight-Magic ™ ® Extended Edition ©을 포함합니다 : (축소판을 클릭하면 확대됩니다)

색상이있는 루비, 110 자

puts (1..n=gets.to_i).map{|a|x=(2..n).map{|b|a!=b&&a%b==0? ' ':?_}.join;x.index(' ')??_+x :"\e[41m_#{x}\e[0m"}

확장 버전


1
그것은 프랙탈이어야하는 것 같습니다 ...
Beta Decay

' '. 앞에 3 진 내의 공간을 제거하십시오 . 구문 형광펜이 엉망이지만 여전히 제대로 작동합니다. 또한,a%b<1
값 잉크

*''는 join과 동일하게 작동하며 a의 인수가 a보다 크지 않기 때문에 a<b대신 확인할 수 있습니다 a!=b. 삼항을 사용하는 대신 a와 b에 대한 수학 결과를 사용하여 두 자릿수 문자열로 분할하여 절약 할 수도 있습니다.
histocrat

5

J-28 자

1('_ '{~0==+&|:1&=+|/~)@:+i.

폭발로 설명 :

1(                    )@:+i.  NB. on vector 1..n, do
                   |/~        NB. take the table "column modulo row"
               1&=+           NB. add 1 to column 1
          =                   NB. identity matrix of size 10
            &|:               NB. transpose both tables (now table is row mod col)
           +                  NB. add them
  '_ '{~0=                    NB. space if cell=0 else underscore

모양 :

   1('_ '{~0==+&|:1&=+|/~)@:+i.25
_________________________
_________________________
_________________________
_ _______________________
_________________________
_  ______________________
_________________________
_ _ _____________________
__ ______________________
_ __ ____________________
_________________________
_   _ ___________________
_________________________
_ ____ __________________
__ _ ____________________
_ _ ___ _________________
_________________________
_  __ __ ________________
_________________________
_ _  ____ _______________
__ ___ __________________
_ ________ ______________
_________________________
_   _ _ ___ _____________
____ ____________________

4

파이썬 2, 76 71

r=range(1,input()+1)
for i in r:print''.join("_ "[i%j<1<j<i]for j in r)

그것은 ...이 키워드 이보다 짧은를 얻을 수 있습니다 확실하지 경우 : range, input그리고 print꽤 많은 비용.


3
당신은 대체 할 수 i>j>1and i%j<1i>j>1>i%j
seequ

@Sieg : 쿨! 실제로 이러한 연결된 비교를 활용하는 것은 처음입니다.
Falko

i%j<1<j<i:-P를 포함하여 var- 문자까지 문자 별로이 정확한 코드를 작성했습니다 . 아마 더 짧아지지 않을 것입니다.
xnor

실제로, 나는 당신이 할 수 있다고 생각합니다 (테스트되지 않음) i%j<1. 의미합니다 i>=j.
seequ

@Sieg : 네,하지만 우리는 필요 i>j하지, i>=j대각선에 공백을 방지하기 위해.
Falko

3

APL (28)

'_ '[(1+(1≠⊢)∧≠∧0=|⍨)/¨⍳2⍴⎕]

설명:

  • ⍳2⍴⎕: 숫자 N을 읽고 NxN 좌표 행렬을 만듭니다.
  • (... )/¨: 각 좌표 쌍에 대해 다음 기능을 적용하십시오.
    • 다음과 같은 경우 셀에 공백이 있어야합니다.
    • 0=|⍨: y modx = 0이며
    • : x는 y와 같지 않으며
    • 1≠⊢: x는 아닙니다 1.
    • 1+: 1APL 배열이 1부터 시작하므로 결과 비트 행렬에 추가 합니다.
  • '_ '[... ]: 각각 1을 밑줄과 2공백으로 바꿉니다.

분명히 28은 매직 골프 번호입니다.

2

펄,    69   61

업데이트 된 버전 (감사합니다, Dennis !)

$n=<>;for$i(1..$n){say"_".join"",map{$i%$_|$i==$_?_:$"}2..$n}

원본 버전 :

$n=<>;for$i(1..$n){say"_".join("",map{$i%$_||$i==$_?"_":" "}(2..$n))}

1
1. 괄호 join2..$n필요 하지 않습니다 . 2. -n스위치로 $_대신에 사용할 수 있습니다 $n. 3. _유효한 베어 워드이므로 따옴표가 필요하지 않습니다. 4. $"대신에 사용할 수 있습니다 " ". 5. | 대신에 사용할 수 있습니다 ||.
Dennis

@Dennis — 감사합니다! 나는 그 중 몇 가지를 적용했습니다. 나는 -n그것을 독립적 인 프로그램으로 유지하고 싶을 필요가 없었기 때문에 그 일을 하지 않았다 $^N=1. _베어 워드로 사용 하는 경우에는 효과가 $i==_있었지만 $i%_파서 %_가 해시 라고 생각했기 때문에 작동하지 않았습니다 .
Todd Lehman

1
1. shebang ( #!/bin/perl -n보통 1 바이트로 계산 됨)으로 자체 포함 된 상태로 유지할 수 있지만 이는 사용자에게 달려 있습니다. 나는 무엇을하는지 전혀 모른다 $^N=1... 2. $i==_제대로 작동하지 않을 것이다; 경우 테스트합니다 $i == "_". 내가 의미하는 것은 , 및 _대신에 사용하는 것입니다 . "_"say _$i==$_?_:$"
Dennis

@Dennis — 아아아 아아아, 맞아. 내가 만든 편집은 행렬을 통해 대각선을 도입했습니다. 그것을 잡지 못해서 부끄러운 줄 아세요. 결정된. 나는 당신이 무슨 뜻인지 참조 _= "_"지금. 불행히도, 후자의 경우에는 작동하지만 say파일 핸들이라고 생각하기 때문에 옆에 오류가 발생 합니다.
Todd Lehman

2

CJam, 27 바이트

q~:I,{__I?'_*S+I*I<'_t}%zN*

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

이 방법은 다른 답변과 동일한 바이트 수를 달성하지만 어쨌든 게시 할 가치가 있다고 생각했습니다. 모든 행에 적절한 배수를 표시하는 대신 사양에서 말하는 것과 정확히 일치합니다.

작동 원리

q~:I                         " Read an integer I from STDIN.                              ";
    ,{                }%     " For each J ∊ {1,...,I}:                                    ";
          '_*S+              " Push J - 1 underscores followed by a space.                ";
               I*I<          " Repeat the pattern to complete I characters.               ";
       _I?                   " For the first row, replace all spaces with underscores.    ";
      _            '_t       " Replace the Jth character by an underscore.                ";
                        zN*  " Transpose rows and columns; separate with linefeeds.       ";

예제 실행

$ cjam prime-lines.cjam <<< 10; echo
__________
__________
__________
_ ________
__________
_  _______
__________
_ _ ______
__ _______
_ __ _____
$ cjam prime-lines.cjam <<< 100 | md5sum # no trailing newline
83c7b974e1510f482322456a9dbb461f  -

1

C, 143

C는 분명히 언어의 올바른 선택이 아닙니다. 그러나 완전성을 기하기 위해 C에서 수행 할 수있는 한 가지 방법이 있습니다. 최대 1048575까지 의 n 값에 대해 작동합니다 . 표준 입력에서 n 을 읽습니다 .

#include <stdio.h>
main(){int n,i=0,j;scanf("%d",&n);char x[1<<20];x[n+1]=0;
for(;++i<=n;){for(j=0;++j<=n;)x[j]=i%j|i==j|j==1?95:32;puts(x+1);}}

그러나 매우 빠릅니다.

  • 내 시스템 에서 n = 1,000,000 (100,000,000,000 요소 그리드 생성)의 런타임 은 약 55 분입니다.

  • 1,000,000 요소 그리드를 생성하는 n = 1000의 런타임은 1/100 초 미만입니다.


4
1. 일부 컴파일러 (예 : GCC)에는 포함이 필요하지 않으므로 제거 할 수 있습니다. 2. 전역 변수는 0으로 초기화되고 기본값은 int로 설정되므로 사용할 수 있습니다 char x[1<<20];n,i,j;main.... 3.를 for(scanf("%d",&n);i++<n;)통해 2 바이트를 저장합니다 scanf("%d",&n);for(;++i<=n;).
Dennis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.