Kare nasıl bitiyor?


20

Base-10'da tüm mükemmel kareler 0 , 1 , 4 , 5 , 6 veya 9 ile biter .

Base-16'da tüm mükemmel kareler 0 , 1 , 4 veya 9 ile biter .

Bu nedir ve nasıl çok iyi bu out çalışmaya neden Nilknarf açıklar bu cevap, ama ben de kısa bir açıklama buraya vereceğiz:

Bir Base-10 sayısını ( N) karelerken , "olanlar" basamağı "onlarca" basamağından veya "yüzlerce" basamağından vb. Etkilenmez. Sadece "olanlar" basamaklı N in "olanlar" rakamı etkileyen N 2 kolay (ama belki değil golfiest) yolu mümkün olan tüm son rakamı bulmak çok için, N 2 bulmaktır n 2 mod 10 tümü için 0 <= n < 10 . Her sonuç olası bir son rakamdır. Base-m için tüm 0 <= n < m için n 2 mod m bulabilirsiniz .

N girişi verildiğinde, Base-N'de mükemmel bir kare için tüm olası son rakamları veren bir program yazın (kopyalar olmadan). Sen varsayabiliriz N büyükse 0 ve o N o küçük yeterlidir N 2 taşma (eğer giden tüm yol boyunca test edebilirsiniz vermezse N 2 , sana kek noktaları sınırlı miktarda vereceğiz ama biliyorum brownie noktalarının gerçek noktalara döviz kuru bire sonsuzdur).

Testler:

 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

Bu , bu yüzden standart kurallar geçerlidir!

(Bunu çok kolay bulursanız veya konuyla ilgili daha ayrıntılı bir soru istiyorsanız, şu soruyu göz önünde bulundurun: Karesel kuadratik kalıntı testi için tabanların minimum kapağı .


1
Çıktı dizisinin sıralanması gerekiyor mu?
Shaggy

@Shaggy Hayır! Mego, Çoğaltmaya izin verilmiyor. Teorik olarak, N çok büyük olabilir, bu nedenle kopyalar çıktıyı oldukça okunamaz hale getirir. Ben soruyu soracağım
Lord Farquaad

Set çıkışı kabul edilebilir mi?
totallyhuman

2
@totallyhuman Neden geçerli olmaz? Setler sıralanmamış koleksiyonlardır ve sıralanmamalıdır , bu yüzden ...
Bay Xcoder

Yanıtlar:



19

Google E-Tablolar, 52 51 47 bayt

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

Taylor Scott sayesinde 4 bayt kurtardı

E-tablolar formülün sonuna otomatik olarak 4 kapanış parantez ekleyecektir.

Sonuçları artan sırada döndürmez, ancak doğru sonuçları döndürür.

Results


Kutsal inek, acayip katil adam! Kim düşünebilirdi ki? +1
bearacuda13

1
Bu kesinlikle benim en sevdiğim cevap.
Lord Farquaad

@LordFarquaad Bu çok iyi karşılandı şaşırdım ve memnun oldum. Kısmen çünkü - bu tür sınırlı aralıkları olsa bile E-Tablolar ve Excel'de daha fazla golf oynamaya çalışıyorum. Çok sayıda dizi formülüne yol açtı.
Mühendis Toast

)-4 bayt için sonlandırmayı bırakabilmelisiniz
Taylor Scott

@TaylorScott Teşekkürler! Bu numarayı son zamanlarda bir yerde gördüm - muhtemelen cevaplarınızdan birinde - ve kullanmaya başlamayı hatırlamamız gerekiyor.
Mühendis Tost

6

05AB1E , 5 bayt

Lns%ê

Çevrimiçi deneyin! veya Test Paketi olarak

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

sBurada nasıl çalışır? Giriş tekrarlanıyor mu?
Luis Mendo

@LuisMendo söyle pop a,b; push b,a. Bir komut yığından bir şey çıkarmaya çalıştığında ve geriye bir şey kalmadığında sonraki giriş kullanılır. Başka girdi yoksa, son girdi kullanılır ( işte bir örnek ). Bu durumda ¹, ilk girdiyi iten, ancak stest takımı için daha iyi çalışan kullanabilirsiniz.
Riley

Teşekkürler. Hangi girdilerin yeniden kullanıldığı ölçütü hakkında daha fazla bilginiz var mı? (üç giriş söylendiyse ve boş bir yığından iki değer açmaya çalışırsanız)?
Luis Mendo

1
@LuisMendo Girişi bitene kadar kullanılır, daha sonra son elemanı kullanmaya devam eder. Yığın, her bir girişle sırayla ve son elemanın sonsuz sayıda doldurulmuş gibi düşünebilirsiniz.
Riley

@LuisMendo Ln¹%êburada eşdeğerdir. s.
Sihirli Ahtapot Urn

6

Swift , 47 35 32 * bayt

* -3 @Alexander sayesinde.

Muhtemelen tarihte ilk kez Swift bağları Python'u yeniyor mu?

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

Çevrimiçi deneyin!


açıklama

  • (0..<m).map{}- Aralık boyunca yinelenir [0...m)ve aşağıdaki sonuçları eşleştirir:

  • $0*$0%m- Her tamsayının karesi taban modulo m.

  • Set(...) - Kopyaları kaldırır.

  • m in - Tabanı bir değişkene atar m


Kullanıcı adı kontrol edilir ... bir saniye bekle.
Rohan Jhunjhunwala

1
Daha çok Python'u yeniyor. Yani etkileyici ! Olacak günü asla göremeyeceğimi düşündüm.
Caleb Kleveter

@CalebKleveter Teşekkürler! Etkileyici bulduğunuza sevindim :)
Bay Xcoder


3

JavaScript (ES6), 52 bayt

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

Test senaryoları


Özyinelemesiz sürüm, 60 58 bayt

@ThePirateBay sayesinde 2 bayt kaydedildi

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

Test senaryoları


Özyinelemesiz 58 bayt:m=>(a=[...Array(m).keys()]).filter(v=>a.some(n=>n*n%m==v))

@ThePirateBay İyi yakaladın. Teşekkürler.
Arnauld

3

Pyth, 6 bayt

{%RQ*R

Çevrimiçi deneyin

Nasıl çalışır

{%RQ*RdQ    implicit variables
       Q    autoinitialized to eval(input())
    *R      over [0, …, Q-1], map d ↦ d times
      d         d
 %R         map d ↦ d modulo
   Q            Q
{           deduplicate

3

Brachylog , 10 9 bayt

>ℕ^₂;?%≜ᶠ

Çevrimiçi deneyin!

açıklama

       ≜ᶠ       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]

{>≜^₂;?%}ᵘAlternatif olarak önermek üzereydim ... o zaman da negatif sayılar olduğunu fark ettim. > _ <
Outgolfer Erik

1
@EriktheOutgolfer Bir taahhüt TIO'ya çekildikten sonra, aslında bu cevabı 9 bayta indirebilirim .
17'de

Tamam ... negatif sayılar da olduğunda nasıl çalışır? Onları ya da bir şeyi görmezden gelir mi?
Outgolfer Erik

@EriktheOutgolfer mod, pozitif olacak olan bölümün geri kalanı olarak tanımlanabilir (bölüm işareti alır). EDIT: ayrıca, kareler pozitif.
jaxad0127

@ jaxad0127 Burada durumun böyle olduğunu düşünmüyorum, çünkü >hala negatif sayıları afaik açıklayacaktır.
Outgolfer Erik

3

Japt , 7 6 bayt

Dz%UÃâ

Dene

Oliver sayesinde 1 bayt kaydedildi


açıklama

Örtük tamsayı girişi U.

Ç   Ã

Gelen tamsayı dizisi oluşturma 0için U-1kapsayıcı ve bir fonksiyonu olsa her geçmektedir.

²

Meydan.

%U

Modulo U.

â

Dizideki tüm benzersiz öğeleri alın ve sonucu dolaylı olarak çıktılayın.


1
Bu aralığın kapsayıcı olması gerektiğini düşünmüyorum. Dz%UÃâiyi çalışıyor gibi görünüyor.
Oliver


2

Aslında 11 bayt

;╗r⌠²╜@%⌡M╔

Çevrimiçi deneyin!

Açıklama:

;╗r⌠²╜@%⌡M╔
;╗           store a copy of m in register 0
  r          range(m)
   ⌠²╜@%⌡M   for n in range:
    ²          n**2
     ╜@%       mod m
          ╔  remove duplicates

2

CJam , 12 bayt

{_,_.*\f%_&}

Bir sayıyı kabul eden ve bir liste döndüren anonim blok.

Çevrimiçi deneyin!

açıklama

_,          Copy n and get the range [0 .. n-1]
  _.*       Multiply each element by itself (square each)
     \f%    Mod each by n
        _&  Deduplicate

Güzel! {:X{_*X%}%_&}13 bayt vardı
Luis Mendo

2

Haskell , 45 bayt

import Data.List
f m=nub[n^2`mod`m|n<-[0..m]]

Anders Kaseorg'dan -4 bayt

Çevrimiçi deneyin!


Ne yazık ki noktasız versiyon f m=nub$map((`mod`m).(^2))[0..m], ekstra parantezlerden kurtulmak için sinsi bir sözdizimi olmadığı sürece uzundur.
shooqie




1

JavaScript (ES6), 48 bayt

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>

SetDizi yerine döndürülüyorsa 43 bayt kabul edilebilir.


1

Scala , 32 30 bayt

OP'nin kolay ucunun basit kullanımı .

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

Çevrimiçi deneyin!

@MrXcoder sayesinde öncelikli -2 bayt ( ()çevrede *çalışmaya gerek yok )

Merak ediyorum: derleyiciye böyle bir şeyi (zorunda kalmadan ) anlamasını dolaylı olarak söylemek mümkün mü?(0 to n-1)map(x=>x*x%n)toSetimport scala.language.postfixOps


1
(0 to n-1).map(x=>x*x%n).toSet30 bayt için. Üstelimin modülota göre daha yüksek önceliği vardır.
Bay Xcoder

@ Mr.Xcoder ooh ~ teşekkürler :)
V. Courtois


0

Retina , 70 bayt

.+
$*

;$`¶$`
1(?=.*;(.*))|;1*
$1
(1+)(?=((.*¶)+\1)?$)

D`1*¶
^|1+
$.&

Çevrimiçi deneyin! Uyarı: Büyük girişler için yavaş. Biraz daha hızlı 72 baytlık sürüm:

.+
$*

$'¶$';
1(?=.*;(.*))|;1*
$1
+s`^((1+)¶.*)\2
$1
^1+

D`1*¶
^|1+
$.&

Çevrimiçi deneyin!




0

Pyth , 13 bayt

VQ aY.^N2Q){Y

Çevrimiçi deneyin.

Topal açıklamaya teşebbüs:

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

Çıktıyı sıralamak için bir S ,{

Bence daha kısa bir yol olmalı ...


1
Evet, Pyth'in fonksiyonel tarzı çok daha özlü olma eğilimindedir . mapsenin arkadaşın!
Anders Kaseorg





0

PHP , 53 bayt

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

n^2 mod baseKullanılan sayıları işaretlemek için formülü kullanarak 0'dan giriş numarasına döngü yapın . Bir dizideki bu konuma gider, artırılıp artırılmadığını kontrol eder ve değilse çıktı verir. Ardından yinelenen değerler yazdırılmaz.

Çevrimiçi deneyin!


0

8 , 138131 bayt

kod

[] 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

açıklama

[] - Çıktı dizisi oluştur

swap dup >r - Daha sonra kullanmak üzere girişi kaydedin

( 2 ^ r@ n:mod a:push ) 1 rot loop - Kare ucu hesapla

rdrop - Temiz r yığını

' n:cmp a:sort - Çıktı dizisini sırala

' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip - Diziden art arda yinelenenlerden kurtulun

SED (Yığın Etkisi Şeması):a -- a

Kullanım ve örnek

: 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]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.