Bagaimana ujungnya?


20

Di Basis-10, semua kuadrat sempurna berakhir dengan 0 , 1 , 4 , 5 , 6 , atau 9 .

Di Basis-16, semua kuadrat sempurna berakhir dengan 0 , 1 , 4 , atau 9 .

Nilknarf menjelaskan mengapa ini dan bagaimana mengerjakannya dengan sangat baik dalam jawaban ini , tetapi saya juga akan memberikan deskripsi singkat di sini:

Saat menguadratkan nomor Base-10, N , digit "yang" tidak terpengaruh oleh apa yang ada di digit "puluhan", atau digit "ratusan", dan sebagainya. Hanya "orang-orang" digit di N mempengaruhi "yang" digit di N 2 , sehingga cara mudah (tapi mungkin tidak golfiest) untuk menemukan semua kemungkinan digit terakhir untuk N 2 adalah untuk menemukan n 2 mod 10 untuk semua 0 <= n < 10 . Setiap hasil adalah kemungkinan digit terakhir. Untuk Base-m, Anda dapat menemukan n 2 mod m untuk semua 0 <= n < m .

Tulis sebuah program yang, ketika diberi input N , mengeluarkan semua digit terakhir yang memungkinkan untuk kuadrat sempurna di Base-N (tanpa duplikat). Anda dapat mengasumsikan N lebih besar dari 0 , dan bahwa N cukup kecil sehingga N 2 tidak akan meluap (Jika Anda dapat menguji sampai N 2 , saya akan memberi Anda jumlah poin brownies yang terbatas, tetapi ketahuilah bahwa nilai tukar poin brownies ke poin nyata adalah infinity ke satu).

Tes:

 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

ini , jadi aturan standar berlaku!

(Jika Anda merasa ini terlalu mudah, atau Anda menginginkan pertanyaan yang lebih mendalam tentang topik ini, pertimbangkan pertanyaan ini: Penutup minimal pangkalan untuk pengujian kuadrat residu kuadrat ).


1
Apakah array output perlu diurutkan?
Shaggy

@Shaggy Tidak! Mego, Duplikasi tidak diizinkan. Secara teoritis, N bisa jadi sangat besar, sehingga duplikat akan membuat outputnya tidak terbaca. Saya akan mengajukan pertanyaan
Lord Farquaad

Apakah mengeluarkan satu set dapat diterima?
totallyhuman

2
@totallyhuman Mengapa itu tidak valid? Set adalah koleksi yang tidak teratur dan tidak boleh disortir , jadi ...
Tn. Xcoder

Jawaban:



19

Google Sheets, 52 51 47 byte

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

Disimpan 4 byte berkat Taylor Scott

Lembar akan secara otomatis menambahkan 4 tanda kurung tutup ke akhir rumus.

Itu tidak mengembalikan hasil dalam urutan menaik tetapi mengembalikan hasil yang benar.

Hasil


Sapi suci, manusia yang merupakan pembunuh yang dilukai! Siapa yang akan berpikir? +1
bearacuda13

1
Ini pasti jawaban favorit saya sejauh ini.
Lord Farquaad

@ LordFarquaad Saya terkejut dan senang ini diterima dengan sangat baik. Saya telah mencoba bermain golf lebih banyak di Sheets dan Excel meskipun - dan sebagian karena - mereka memiliki rentang yang terbatas. Itu menyebabkan banyak formula array.
Engineer Toast

Anda harus dapat menghentikan terminating )s untuk -4 byte
Taylor Scott

@TaylorScott Terima kasih! Saya melihat trik itu di suatu tempat baru-baru ini - mungkin pada salah satu jawaban Anda - dan perlu diingat untuk mulai menggunakannya.
Engineer Toast

6

05AB1E , 5 byte

Lns%ê

Cobalah online! atau sebagai Test Suite

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

Bagaimana cara skerjanya di sini? Apakah input diulang?
Luis Mendo

@LuisMendo sadalah pop a,b; push b,a. Ketika sebuah perintah mencoba mengeluarkan sesuatu dari stack dan tidak ada lagi yang tersisa, input selanjutnya digunakan. Jika tidak ada lagi input, input terakhir digunakan ( ini adalah contoh ). Dalam hal ini saya bisa menggunakan ¹yang mendorong input pertama, tetapi sberfungsi lebih baik untuk test suite.
Riley

Terima kasih. Apakah Anda memiliki info lebih lanjut mengenai kriteria input yang digunakan kembali? (jika ada yang mengatakan tiga input dan Anda mencoba memunculkan dua nilai dari tumpukan kosong)?
Luis Mendo

1
@LuisMendo Input digunakan secara berurutan hingga habis, lalu terus menggunakan elemen terakhir. Anda dapat membayangkannya seperti tumpukan diisi dengan setiap input secara berurutan dan jumlah elemen terakhir yang tidak terbatas.
Riley

@LuisMendo Ln¹%êsetara di sini. s.
Magic Gurita Guci

6

Swift , 47 35 32 * byte

* -3 terima kasih kepada @Alexander.

Mungkin pertama kali dalam sejarah Swift ties mengalahkan Python?

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

Cobalah online!


Penjelasan

  • (0..<m).map{}- Ulangi kisaran [0...m)dan petakan hasil berikut:

  • $0*$0%m- Kuadrat dari setiap bilangan bulat modulo basis m.

  • Set(...) - Menghapus duplikat.

  • m in - Menetapkan basis ke variabel m


Nama pengguna keluar ... tunggu sebentar.
Rohan Jhunjhunwala

1
Lebih seperti itu mengalahkan Python. Itu mengesankan ! Saya pikir saya tidak akan pernah melihat hari yang akan terjadi.
Caleb Kleveter

@ CalebKleveter Terima kasih! Saya senang Anda menemukannya mengesankan :)
Tn. Xcoder


3

JavaScript (ES6), 52 byte

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

Uji kasus


Versi non-rekursif, 60 58 byte

Disimpan 2 byte berkat @ThePirateBay

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

Uji kasus


Non-rekursif 58 byte:m=>(a=[...Array(m).keys()]).filter(v=>a.some(n=>n*n%m==v))

@ThePirateBay Tangkapan yang bagus. Terima kasih.
Arnauld

3

Pyth, 6 byte

{%RQ*R

Cobalah online

Bagaimana itu bekerja

{%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 byte

>ℕ^₂;?%≜ᶠ

Cobalah online!

Penjelasan

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

Saya akan menyarankan {>≜^₂;?%}ᵘsebagai alternatif ... kemudian saya menyadari ada angka negatif juga. > _ <
Erik the Outgolfer

1
@EriktheOutgolfer Setelah komit ditarik ke TIO, saya benar-benar dapat mengurangi jawaban ini menjadi 9 byte memang menggunakan .
Fatalkan

OK ... bagaimana cara kerjanya ketika ada angka negatif juga? Apakah itu hanya mengabaikan mereka atau sesuatu?
Erik the Outgolfer

@EriktheOutgolfer mod dapat didefinisikan sebagai sisa pembagian, yang akan menjadi positif (hasil bagi mengambil tanda). SUNTING: juga, kotak positif.
jaxad0127

@ jaxad0127 Saya tidak berpikir itu yang terjadi di sini, karena >masih akan menjelaskan angka negatif afaik.
Erik the Outgolfer

3

Japt , 7 6 byte

Dz%UÃâ

Menguji

1 byte disimpan berkat Oliver


Penjelasan

Input bilangan bulat implisit U.

Ç   Ã

Buat array bilangan bulat dari 0hingga U-1, inklusif, dan berikan masing-masing fungsi.

²

Kotak.

%U

Modulo U.

â

Dapatkan semua elemen unik dalam array dan secara implisit menampilkan hasilnya.


1
Saya tidak berpikir rentang perlu inklusif. Dz%UÃâtampaknya berfungsi dengan baik.
Oliver


2

Sebenarnya , 11 byte

;╗r⌠²╜@%⌡M╔

Cobalah online!

Penjelasan:

;╗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 byte

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

Blok anonim menerima nomor dan mengembalikan daftar.

Cobalah online!

Penjelasan

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

Bagus! Saya punya {:X{_*X%}%_&}untuk 13 byte
Luis Mendo

2

Haskell , 45 byte

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

-4 byte dari Anders Kaseorg

Cobalah online!


Sedihnya, versi point-free f m=nub$map((`mod`m).(^2))[0..m]sama panjangnya, kecuali ada sintaks yang licik untuk menghilangkan tanda kurung tambahan.
shooqie




1

JavaScript (ES6), 48 byte

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>

43 byte jika mengembalikan Setbukan array dapat diterima.


1

Scala , 32 30 byte

Penggunaan sederhana tip mudah dari OP.

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

Cobalah online!

-2 byte terima kasih kepada @MrXcoder, dengan prioritas (tidak perlu ()sekitar* operasi )

Bertanya-tanya: apakah ini mungkin secara implisit memberitahu kompiler untuk memahami hal-hal seperti (0 to n-1)map(x=>x*x%n)toSet(tanpa harus import scala.language.postfixOps)?


1
(0 to n-1).map(x=>x*x%n).toSetselama 30 byte. Eksponensial memiliki prioritas lebih tinggi daripada modulo.
Tn. Xcoder

@ Mr.Xcoder ooh ~ terima kasih :)
V. Courtois


0

Retina , 70 byte

.+
$*

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

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

Cobalah online! Peringatan: Lambat untuk input besar. Versi 72 byte yang sedikit lebih cepat:

.+
$*

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

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

Cobalah online!



0

Perl 6 , 19 byte

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

Menguji

Diperluas:

{ # 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 byte

VQ aY.^N2Q){Y

Coba online.

Usaha yang lemah untuk menjelaskan:

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

Untuk mengurutkan output, masukkan sebuah Sdi sisi mana saja dari{

Saya pikir harus ada cara yang lebih pendek ...


1
Ya, gaya fungsional Pyth cenderung jauh lebih ringkas . mapadalah temanmu!
Anders Kaseorg





0

PHP , 53 byte

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

Ulangi dari 0 ke nomor input, menggunakan n^2 mod baserumus untuk menandai nomor yang telah digunakan. Itu pergi ke posisi itu dalam sebuah array, memeriksa apakah sudah bertambah dan mengeluarkannya jika belum. Itu kemudian bertambah setelah itu sehingga nilai duplikat tidak bisa dicetak.

Cobalah online!


0

8 , 138 131 byte

Kode

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

Penjelasan

[] - Buat array output

swap dup >r - Simpan input untuk digunakan nanti

( 2 ^ r@ n:mod a:push ) 1 rot loop - Hitung ujung kuadrat

rdrop - Bersihkan r-stack

' n:cmp a:sort - Urutkan susunan keluaran

' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip - Singkirkan duplikat berturut-turut dari array

SED (Stack Effect Diagram) adalah:a -- a

Penggunaan dan contoh

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.