スクエアはどのように終わりますか?


20

ベース-10では、すべての完全な正方形はで終わる01456、又は9

ベース-16では、すべての完全な正方形はで終わる014、または9

Nilknarfは、この答えの理由とこれをうまく解決する方法について説明していますが、ここでも簡単に説明します。

10 進数のNを 2乗すると、「1」桁は「10」桁や「100」桁などの影響を受けません。だけで「1」の数字Nはの「1」の数字に影響するN 2を簡単に(多分ないgolfiest)の方法は、すべての可能な最後の数字を見つけることのために、N 2を見つけることですnは2 MOD 10はすべてのために0 <= N < 10。各結果は、可能な最後の数字です。Base-mの場合、すべての0 <= n < mに対してn 2 mod mを見つけることができます。

入力Nが与えられると、Base-Nの完全な正方形のすべての可能な最後の数字を出力する(重複なしで)プログラムを作成します。あなたは、想定し得るNがより大きく、0、そのNは、という小さな十分であるN 2がオーバーフロー(あなたがすべての方法をテストすることができない場合はN 2は、私は、あなたのブラウニーポイントの有限量をあげるが、ことを知っていますブラウニーポイントから実際のポイントへの交換レートは1から無限大です)。

テスト:

 Input -> Output
 1     -> 0
 2     -> 0,1
 10    -> 0,1,5,6,4,9
 16    -> 0,1,4,9
 31    -> 0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28
 120   -> 0,1,4,9,16,24,25,36,40,49,60,64,76,81,84,96,100,105

これはなので、標準のルールが適用されます!

(これがあまりにも簡単だと思う場合、またはトピックに関するより詳細な質問が必要な場合は、この質問を検討してください:正方形の二次剰余検定の基底の最小カバー)。


1
出力配列をソートする必要がありますか?
シャギー

@Shaggy Nope!メゴ、複製は許可されていません。理論的には、Nは膨大になる可能性があるため、重複すると出力がかなり読みにくくなります。私は質問を認める
ファルカードLord 17

セットの出力は受け入れられますか?
完全に人間

2
@totallyhumanなぜそれは有効ではないのですか?セット順不同のコレクションであり、それがソートされてはならない ...そう、
氏Xcoder

回答:



19

Googleスプレッドシート、52 51 47バイト

=ArrayFormula(Join(",",Unique(Mod(Row(A:A)^2,A1

Taylor Scottのおかげで4バイト節約

シートは、式の最後に4つの閉じ括弧を自動的に追加します。

昇順で結果を返しませんが、正しい結果を返します。

結果


聖なる牛、狂った殺人者の男!誰が考えたでしょうか?+1
bearacuda13

1
これは間違いなくこれまでのところ私のお気に入りの答えです。
主ファルカード

@LordFarquaad驚いたし、これはとても好評でした。スプレッドシートとエクセルでもっとゴルフしようとしていますが、その範囲は限られています。それは多くの配列式につながりました。
エンジニアトースト

)-4バイトの終端のs をドロップできるはずです
テイラースコット

@TaylorScottありがとう!私は最近どこかでそのトリックを見ました-おそらくあなたの答えの1つで-それを使い始めるのを忘れないでください。
エンジニアトースト

6

05AB1E、5バイト

Lns%ê

オンラインでお試しください!またはテストスイートとして

L     # Range 1 .. input
 n    # Square each
  s%  # Mod by input
    ê # Uniquify (also sorts as a bonus)

sここでどのように機能しますか?入力が繰り返されていますか?
ルイスメンドー

@LuisMendo spop a,b; push b,aです。コマンドがスタックから何かをポップしようとして、何も残っていない場合、次の入力が使用されます。これ以上入力がない場合は、最後の入力が使用されます(ここに例があります)。この場合¹、最初の入力をプッシュする方法を使用できますがs、テストスイートではより適切に動作します。
ライリー

ありがとう。入力が再利用される基準に関する詳細情報はありますか?(たとえば、3つの入力があり、空のスタックから2つの値をポップしようとした場合)?
ルイスメンドー

1
@LuisMendo Inputは、なくなるまで順番に使用され、最後の要素を使用し続けます。スタックが各入力で順番にパディングされ、最後の要素が無限に続くように想像できます。
ライリー

@LuisMendo Ln¹%êはここでは同等です。s
魔法のタコUr

6

Swift47 35 32 *バイト

* -3 @Alexanderに感謝します。

おそらく史上初めてSwiftの結びつきがPython 打ち負かしたのでしょうか?

{m in Set((0..<m).map{$0*$0%m})}

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


説明

  • (0..<m).map{}-範囲[0...m)を反復処理し、次の結果をマッピングします。

  • $0*$0%m-基数を法とする各整数の二乗m

  • Set(...) -重複を削除します。

  • m in -ベースを変数に割り当てます m


ユーザー名がチェックアウトします...ちょっと待ってください。
ローハンジュンジュンワラ

1
Pythonに勝るようなものです。それは印象的です!私は、その日が起こることは決してないと思いました。
カレブKleveter

@CalebKleveterありがとう!あなたがそれを印象的に見つけてくれてうれしいです:)
Mr Xcoder


3

JavaScript(ES6)、52バイト

f=(m,k=m,x={})=>k?f(x[k*k%m]=m,k-1,x):Object.keys(x)

テストケース


非再帰バージョン、60 58バイト

@ThePirateBayのおかげで2バイト節約

m=>(a=[...Array(m).keys()]).filter(v=>a.some(n=>n*n%m==v))

テストケース


非再帰的な58バイト:m=>(a=[...Array(m).keys()]).filter(v=>a.some(n=>n*n%m==v))

@ThePirateBay良いキャッチ。ありがとう。
アーナウド


3

Brachylog10 9バイト

>ℕ^₂;?%≜ᶠ

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

説明

       ≜ᶠ       Find all numbers satisfying those constraints:
    ;?%           It must be the result of X mod Input where X…
  ^₂              …is a square…
>ℕ                …of an integer in [0, …, Input - 1]

私は{>≜^₂;?%}ᵘ代替案として提案しようとしていた...それから私は負の数もあることに気づいた。> _ <
アウトゴルファーのエリック

1
@EriktheOutgolferコミットがTIOにプルされると、実際にを使用してこの回答を9バイトに減らすことができます
17

OK ...負の数もある場合、どのように機能しますか?単に無視するのでしょうか?
エリックアウトゴルファー

@EriktheOutgolfer modは、正の除算の剰余として定義できます(商は符号を取ります)。編集:また、正方形は正です。
jaxad0127

@ jaxad0127私はそれ>がここでのケースだとは思わない。
エリックアウトゴルファー

3

Japt7 6バイト

Dz%UÃâ

試して

Oliverのおかげで1バイト節約


説明

integerの暗黙的な入力U

Ç   Ã

から0までの整数の配列を作成し、U-1それぞれに関数を渡します。

²

平方。

%U

モジュロU

â

配列内のすべての一意の要素を取得し、結果を暗黙的に出力します。


1
範囲は包括的である必要はないと思います。Dz%UÃâうまくいくようです。
オリバー

2

Pythonの340の 39 37バイト

Xcoder氏のおかげで-1バイト。Business Catのおかげで-2バイト。

lambda m:[*{n*n%m for n in range(m)}]

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


1
あなたは置き換えることはできませんn**2n*n
ミスターXcoder

うん、いつも忘れて。> <ありがとう!
完全に人間

2
また、ちょうどrange(m)十分です
ビジネス猫

1
あなたはのためのセットを使用することができます34バイト
氏Xcoder







1

JavaScript(ES6)、48バイト

f=
n=>[...new Set([...Array(n)].map((_,i)=>i*i%n))]
<input type=number min=0 oninput=o.textContent=f(+this.value)><pre id=o>

Set配列の代わりにを返すことが許容される場合、43バイト。


1

Scala32 30バイト

OP の簡単なヒント簡単な使用。

(0 to n-1).map(x=>x*x%n).toSet

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

-2の優先順位(を必要とせず、@MrXcoderおかげバイト()の周りの*動作)

疑問に思う:これは、することが可能である暗黙的のようなものを理解するようにコンパイラに伝える(0 to n-1)map(x=>x*x%n)toSet(しなくてもimport scala.language.postfixOps)?


1
(0 to n-1).map(x=>x*x%n).toSet30バイト。べき乗はモジュロよりも優先順位が高くなります。
ミスターXcoder

@ Mr.Xcoder ooh〜ありがとう:)
V.クルトワ




0

Perl 6、19バイト

{set (^$_)»²X%$_}

試して

拡張:

{ # bare block lambda with implicit param 「$_」

  set        # turn the following into a Set (shorter than 「unique」)

      (
        ^$_  # a Range upto (and excluding) 「$_」
      )»²    # square each of them (possibly in parallel)

    X%       # cross modulus the squared values by

      $_     # the input
}

0

Pyth、13バイト

VQ aY.^N2Q){Y

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

説明の不十分な試み:

VQ               for N in [0 .. input-1]
                   blank space to supress implicit print inside the loop
     .^N2Q         N ^ 2 % input
   aY              append that to Y, which is initially an empty list
          )      end for
           {Y    deduplicate and implicit print

出力を並べ替えるには、のS任意の側に{

もっと短い方法があるはずだと思う...


1
ええ、Pythの機能スタイルはもっと簡潔になる傾向があります。mapあなたの友だちです!
アンダースカセオルグ





0

PHP、53バ​​イト

for(;$i<$t=$argv[1];)$a[$z=$i++**2%$t]++?:print"$z
";

使用済みのn^2 mod base番号をマークする式を使用して、0から入力番号までループします。配列内のその位置に移動し、インクリメントされているかどうかを確認し、インクリメントされていない場合は出力します。その後、値をインクリメントして、重複する値が出力されないようにします。

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


0

8番目138131バイト

コード

[] swap dup >r ( 2 ^ r@ n:mod a:push ) 1 rot loop rdrop ' n:cmp a:sort ' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip

説明

[] -出力配列を作成する

swap dup >r -後で使用するために入力を保存する

( 2 ^ r@ n:mod a:push ) 1 rot loop -スクエアエンドの計算

rdrop -Rスタックのクリーニング

' n:cmp a:sort -出力配列のソート

' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip -配列から連続した重複を取り除く

SED(スタック効果図)は次のとおりです。a -- a

使用法と例

: f [] swap dup >r ( 2 n:^ r@ n:mod a:push ) 1 rot loop rdrop ' n:cmp a:sort ' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip ;

ok> 120 f .
[0,1,4,9,16,24,25,36,40,49,60,64,76,81,84,96,100,105]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.