私のこれらの素数は常に実線です


12

数値が素数かどうかを視覚的に判断するために使用できるスペースとアンダースコアのN×Nグリッドを作成しましょう。(Nは任意の正の整数です。)

このグリッドには3つの単純なルールがあります。

  1. n番目の列には、n-1個のアンダースコアと1つのスペースの繰り返しパターンが含まれます。このパターンは最初の行から始まり、場合によっては行Nで途中で停止します(行と列には1インデックスが付けられます)。
  2. 最初の列は、すべてのスペースではなく、すべての下線に置き換えられます。
  3. 行インデックスが列インデックスと等しい場所にスペースが発生すると、アンダースコアに置き換えられます。

例:N = 10

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

インデックスはわかりやすくするためのものです。プレーングリッド自体(プログラムが出力する必要があるもの)は次のとおりです。

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

次のことに注意してください。

  • 最初の列はすべてアンダースコアです。
  • 2番目の列は、行2の下線を除き、下線スペース、下線スペースなどになります。
  • 3番目の列は、行3の下線を除き、下線下線スペース、下線下線スペースなどになります。

また、1に加えて、すべての列にアンダースコアがあるのは素数の行だけです。

アンダースコアはフォント幅全体に及ぶため、各素数の行は連続した実線を形成します。したがって、数値が素数であるかどうかを確認することは視覚的に非常に簡単です。その行がすべての列で実線であるかどうかを確認します。(実際、行インデックスの平方根を検索するだけで十分ですが、そのグリッドを出力することはそれほどエレガントではないようです。)

プログラム

Nを指定したstdin(または最も近い代替)でこれらのグリッドを描画するプログラムを作成します。出力はstdout(または最も近い代替)に送られ、スペース、アンダースコア、および改行のみを含む必要があり、オプションで末尾の改行が含まれます。

最短のコードが優先されます。


私はそれが素数決定しない方法を得ることはありません
フィリップBartuzi


「n番目の列には、n-1個のアンダースコアとそれに続く1つのスペースの繰り返しパターンが含まれています。」それでは、列n = 1をすべてアンダースコアではなく、すべてスペースにするべきではありませんか?
algorithmshark 14

6
「末尾の改行なし」の要件は特に気に入らないと言わなければなりません。これは一部の言語では非常に難しく、他の言語ではまったく不可能であり、STDOUTに出力するプログラムにのみ影響します。
デニス14

4
説明は私には理解しがたいものでした。これは私がそれをどのように説明するかです:N個の下線のN行のグリッドから始めます。n番目の行については、その除数が1またはでないk場合、th文字をスペースにします。kmm
ケーシーチュー14

回答:


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  -

ゴルフが終わったら説明を投稿します。
デニス14

9
33バイトで、ゴルフをしていませんか?

5

ルビー、77 73文字

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

私が使用したいくつかのトリック:

  • ..オペレータはRubyですべての演算子のほぼ最低の優先度を持っているので、(1..n=gets.to_i)ちょうど働きます。

  • a!=1文字がアンダースコアではなくスペースであるかどうかを確認するときに追加条件を追加する代わりに(最初の行はすべてアンダースコアであるため)、範囲を開始して2extraを追加しました?_

  • 行Aは行Bになります。

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

    行A b?行Aの間に余分なスペースが必要なので、行B と行Bの間に0それは必要ありません。有効なRubyメソッドですが、そうではありません。?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
それはフラクタルでなければなりませんように見える...それ
ベータ崩壊

の前の三項内のスペースを削除します' '。おそらくシンタックスハイライターを台無しにしますが、それでも適切に動作します。また、a%b<1
バリューインク

*''結合と同じように機能し、aの因子はaより大きくないため、a<b代わりにチェックできますa!=b。また、3進数を使用する代わりに、aとbのいくつかの数学の結果を使用して2文字の文字列にスライスすることで節約できる場合があります。
-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

Python 2、76 71

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

これより短くなるかどうかわからない...これらのキーワード:rangeinputそしてprintかなりの費用がかかります。


3
あなたは置き換えることができi>j>1and i%j<1i>j>1>i%j
seequ

@ジーグ:クール!実際、これらの連結された比較を利用するのは初めてです。
ファルコ14

i%j<1<j<i:-P を含むvar名まで、文字ごとにこの正確なコードを記述しました。したがって、実際には短くなりません。
xnor 14

実際には、(テストされていない)あなたができると思いますi%j<1。それは意味しi>=jます。
seequ 14

@Sieg:はい。ただし、対角線の空白を避けるためにi>j、必要i>=jです。
ファルコ14

3

APL(28)

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

説明:

  • ⍳2⍴⎕:数値Nを読み取り、N行N列の座標行列を作成します
  • (...)/¨:座標のペアごとに、次の関数を適用します。
    • 次の場合、セルにはスペースが必要です。
    • 0=|⍨:y mod x = 0、および
    • :xはyと等しくない
    • 1≠⊢:xはそうではありません1
    • 1+1APL配列は1から始まるため、結果のビット行列に追加します。
  • '_ '[... ]:それぞれ1をアンダースコアと2スペースに置き換えます。

どうやらここのマジックゴルフの番号は28です。

2

Perl、    69   61

更新されたバージョン(ありがとう、デニス!)

$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.の| 代わりに使用できます||
デニス14

@Dennis —ありがとう!それらのいくつかを適用しました。私は-nそれを自己完結型のプログラムに保ちたいと言ったので、それをしなかった$^N=1。の_ベアワードとしての使用は機能しました$i==_$i%_、パーサー%_はハッシュであると考えたため、機能しませんでした。
トッドリーマン14

1
1.シバン(#!/bin/perl -n通常は1バイトとしてカウントされます)で自己完結型に保つことができますが、それは明らかにあなた次第です。何$^N=1が起こるかわからない... 2. $i==_正しく動作しない。それがテストされます$i == "_"。私は何を意味して使用される_代わりに"_"、すなわち、say _$i==$_?_:$"
デニス14

@デニス—ああ、そうだね。私が行った編集は、マトリックスを通る対角線を導入しました。それをつかまえなかったのは恥だ。修繕。_= "_"今のあなたの意味がわかります。残念ながら、後者の場合sayは機能しますが、ファイルハンドルであると思われるため、横にエラーが表示されます。
トッドリーマン14

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でそれを行う1つの方法を次に示します。最大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(1,000,000,000,000要素のグリッドを生成する)のランタイムは、私のシステムで約55分です。

  • n = 1000(1,000,000要素のグリッドを生成)のランタイムは、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;)
デニス14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.