転置、素数、ああ!


15

タスクは簡単です。プログラムは整数を入力として読み取り、それが素数であるかどうかを出力します。「yes / no」、「true / false」、または結果を明確に識別するものを印刷できます。

課題は、コードが転置された行と列で動作する必要があることです。

明らかな解決策(コメントを使用して文字ごとに垂直に繰り返される最短の「単純な」解決策)を除外するために、メトリックは通常のcode-golfとは少し異なります。

この課題はフォーマットが非常に重要であるため、コードサイズはコードが収まる最小の長方形の領域で測定されます。簡単にするために、ソリューションを投稿するときに実際にそれを行う必要があります)。例えば

int main()   
{            
    return 0;
}            

4 * 13 = 52のサイズになります(そして明らかに、2つの基準のいずれにも適合しません:素数検出と転置可能)。

最小サイズが勝ちます。

関数の唯一の目的が素数の検索、生成、または検出である場合を除き、任意の言語およびライブラリ関数を使用できます。

編集:

おそらく勝者はGolfscriptソリューションでしょうが、最高のCまたはC ++ソリューションに対して50ポイントの賞金を授与します!


長方形メトリックは、明らかな解決策を思いとどまらせるのに失敗します。最も長いサイドレングスを取ることをお勧めします。
ただし

あなたが正しいです。次の転置問題には、異なるメトリックが必要であり、対称ソリューションを禁止する必要があります。ただし、その場合でも、ルールを回避する人、または少なくともQAがルールを作成するときに予期していなかった解決策を見つける人がいると思います。
-vsz

回答:


7

GolfScript、13×1

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

GolfScriptが再びストライキします!

入力が素数であれば入力を繰り返し、そうでなければ最小の適切な除数で連結された入力を出力します。はい、それは「結果を明確に識別するもの」の定義を拡張していることを知っていますが、より洗練されたものを行うと、いくつかの余分な文字がかかります。より良い出力が必要な場合は;]!、コードに3文字を追加すると1、素数と0合成数が得られます。

このアルゴリズムは本当に非効率的で、2からn -1の総当たり試行分割です。ほとんどのGolfScript演算子は単一の文字であるため、このコードは転置しても同様に機能します。しかし、面倒なことに、代入演算子:はそれ自体とそのターゲットの間の空白を許可しないため、変数なしでこれを完全に行う必要がありました。


WRT「何の愛好家は、いくつかの余分な文字を要するだろう」 -あなただけのために2 GolfScriptスタイルブールを得ることができます
ピーター・テイラー

@Peter:上記の私の編集のようなものを意味し!ますか?それとも、何かおかしなことを考えていましたか?
イルマリカロネン

1
私はその),に常に除数と=最後を見つけるように考えていました。
ピーターテイラー

:改行が続き、改行文字に割り当てられます-したがって、空白が許可されているわけではなく、空白が割り当てられるだけです
-gnibbler

@gnibbler:技術的には、どちらも正しいです。それ自体とそのターゲットとの間に:空白などを許可しません:空白または他のトークン(はい、偶数、文字列、またはコードブロック)に関係なく、それに続くものが割り当てられます。ただし、空白は公式ドキュメントが特に警告するものであり、正当な理由によります-他のほとんどの場所では、GolfScriptのトークン間に空白を追加しても何も起こりません(通常、割り当てられていない限り...)。
イルマリカロネン

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
これは、ゴルフ/パズルサイトです。誤用などはありません。
ブースビー

2
@boothby、私は彼が虐待を意味すると思います。しかし、私は賛辞を主張しません。
ウゴレン

14

C-13x13

stdinからの入力を読み取り、1for primeおよびa 0for not primeを出力します。

////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

Perl、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

Q

対称的で、文字効率の悪いソリューションに対する虐待コメント。

/{/////////////////////////////////
{(~)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まで(無駄に)分割することが有利です。
ニブラー

本当に本当です、ありがとう。私はまだ、より良いスコアを取得しようとする機会がありません。
skeevey

あなたは、あなたの答えにスコアを含める必要があります
FlipTack

2

ゼリー、2x2スクエア

PÆ
ÆP

オンラインでお試しください!

私は移調部分が正しいと思う、そしてそうなら、これの転置バージョンは

PÆ
ÆP

オンラインでお試しください!

(これは同じコードです)


4
これは無効です。「関数の唯一の目的が素数の検出、生成、または検出である場合を除き、任意の言語およびライブラリ関数使用できます。
ケビンクルーイッセン

1

05AB1E1x5 1x3(5 3 バイト

これは大きなプログラムではありません。各行は、プライムチェックに取り組むための独立した代替プログラムです(プライム組み込みを使用せずに)。

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

Grimyのおかげで-2バイト。

行間の空白は05AB1Eではノーオペレーションであり、1バイトのコマンドのみを使用しているため、これは転置後に正常に機能します。

出力1/ 0truthy / falseyそれぞれのために。

オンライン最初のものを試してみたり(evalの組み込みと、それらのすべてのためにいくつかのより多くのテストケースを検証します.V
転置:最初の1つをオンラインで試してください

説明:

Ñ    # 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バイト用。(ÑおよびÒ両方とも「素数を検索、生成、または検出する」以外の目的があるため、私の読書では禁止に含まれていません)。
グリムミー

1
さらに詳しい情報3-byters: 、ÕαΘ、、fQOfs¢f`Q
Grimmy

@Grimyああ、私は除数や素因数の組み込みについて考えていなかったとは信じられません。Õαしかし、知らなかった!それはかなりいいものです。
ケビンCruijssen

0

ルーンエンチャント、7×1

v̀i'PA@

オンラインでお試しください!

ルーンは、ソースの再配置の微弱な試みを気にしません!リフレクションモディファイヤとエントリポイントに、ソースの転置コストが+3バイト(+2長方形の幅)になった後も引き続き機能するという要件に準拠しています。

転置または転置しますが、結合文字を親にアタッチしたままにします。





0

APL(Dyalog Unicode)、10x11

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

オンラインでお試しください!

仕様に準拠するように機能を修正しました。ヘッズアップをありがとう@Adám。

真実の場合は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.