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.