Diberi angka n (0 <= n <= 2642245), periksa apakah n dan n 3 memiliki set digit yang sama, dan berikan nilai yang benar atau salah.
Sebagai contoh, mari kita periksa angka 100.
100 3 adalah 1000000.
Set digit dalam 100 adalah {0, 1}.
Set digit dalam 1000000 adalah {0, 1}.
Karena itu, 100 harus memberikan nilai kebenaran.
Uji kasus
0 -> True
1 -> True
10 -> True
107624 -> True
251894 -> True
251895 -> False
102343 -> False
Ingat, ini adalah kode-golf , jadi kode dengan byte paling sedikit menang.
code-golf
number
decision-problem
Oliver Ni
sumber
sumber
2103869 -> True
. Ini (atau yang lebih besar) diperlukan untuk menguji bahasa denganlong
tipe data.Jawaban:
Python 3,
3632 byteSaya pikir ini hanya berfungsi di Python 3.5 dan yang lebih baru. Empat byte telah hilang, berkat Copper.
sumber
set(`x`)
2097152
(sys.maxint**(1/3.)
) dan kurang dari itusys.maxint+1
akan kembaliFalse
jika Anda menggunakanrepr()
. repl.it/EXs2/1 . Rindu memilikiL
di akhir.lambda x:{*str(x)}=={*str(x**3)}
dengan Python 3.5+.==
dengan^
. Dua set yang sama mengarah ke{}
yang salah.05AB1E , 6 byte
05AB1E menggunakan pengkodean CP-1252 .
Cobalah online!
Penjelasan
sumber
C, 73 byte
Membuat set melalui bit. Pengembalian
0
untuk set yang sama, apa pun untuk set yang berbeda.Tidak Disatukan:
sumber
1 <<
saat mengatur bit dengank |= 1 << i % 10
. Solusi hebat!0
? Saya kirastrcmp
bekerja seperti itu, jadi sepertinya masuk akal dalam C.int
lebih besar dari 64-bit. (Bahkan 64-bit yang ditandatangani tidak cukup, tetapi 64-bit yang tidak ditandatangani adalah). Jadi tidak ada implementasi nyata dari C yang saya tahu di mana ini memenuhi persyaratan pertanyaan. (Itu berfungsi dengan benarunsigned long long
, atau hanyaunsigned long
dalam implementasi di mana itu adalah tipe 64-bit). GNU C mendefinisikan__int128_t
pada mesin 64-bit (tanpa header) ...Perl, 31 + 2 (
-pl
bendera) =2521183433 byteMenggunakan:
Keluaran:
1\n
atau0\n
.Terima kasih kepada @Dada selama 3 byte, Gabriel Benamy untuk 1 byte, & @Zaid untuk laporan bug.
sumber
perl -pe '$_=$_**3!~/[^$_]/'
10
:(-l
bendera dibutuhkan.&&
ke*
untuk menyimpan byteMathematica, 34 byte
Implementasi langsung (fungsi tanpa nama dari satu argumen integer).
sumber
Jelly , 8 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
CJam, 8 byte
Suite uji.
Penjelasan
sumber
JavaScript ES6,
5551 byteTerima kasih untuk Downgoat selama 3 byte! Anda dapat menyimpan satu byte dengan mengonversi ke ES7 dan menggunakan
n**3
alih-alihn*n*n
.Cukup sederhana.
sumber
==
tidak bekerja bahkan pada array.n*n*n
ken**3
, tapi saya kira itu mungkin ES7 dan bukan ES6.2103869
, dan masalahnya secara eksplisit membutuhkan solusi untuk menyelesaikannya2642245
.C #,
241208205201193233222220212203177159 byte (109 alternatif)Lambda's harus secara khusus menggunakan
ulong
tipe:Terima kasih kepada @Corak dan @Dennis_E karena telah menyimpan beberapa byte, dan @TimmyD untuk menemukan masalah dengan solusi asli saya. Terima kasih kepada @SaxxonPike untuk menunjukkan masalah ulong / long / desimal / etc (yang sebenarnya juga menyelamatkan saya beberapa byte).
Ada juga solusi 109 byte menggunakan HashSets, mirip dengan jawaban Java di sini, tapi saya akan tetap berpegang pada solusi asli saya untuk skor saya.
sumber
p<0
bukanp==1
?n=>{Func<string,int[]>x=s=>{var a=new int[10];foreach(var c in s)a[int.Parse(c+"")]++;return a;};var i=x(n);var j=x((long)Math.Pow(int.Parse(n),3)+"");for(var k=0;k<10;)if(i[k]>0^j[k++]>0)return 0>1;return 1>0;};
int.Parse(c+"")
denganc-'0'
long
penggantiulong
dan test case ini menggunakan MSB.)Java 8, 154 karakter
Disebut seperti ini:
Output:
Jawaban yang sangat Java 8-y, menggunakan lambda serta stream termasuk beberapa konversi angka-ke-string.
Sayangnya kita perlu menggunakan
BigInteger.pow(3)
alih-alihMath.pow(a,3)
karena Math.pow menggunakan ganda yang tidak tepat, yang mengembalikan nilai yang salah dengan angka besar (dimulai dengan2103869
).sumber
static Y y
itu adalah sintaks inisialisasi yang aneh, apakah itu ditugaskan secara otomatisy.n
karena antarmuka memiliki tepat satu anggota?@FunctionalInterface
anotasi (antarmuka dengan hanya satu metode, lihat javadoc) yang membuat lambdas berfungsi sebagai ganti instantiasi jenis anonim yang biasa.Y y = new Y() { @Override public boolean n(int x) { return Arrays.equals((a+"").chars().distinct().sorted().toArray(),(new BigInteger(a+"").pow(3)+"").chars().distinct().sorted().toArray()); } }
danstatic
pengubah hanya ada untuk memungkinkan panggilany.n(int)
dari metode utama statis.PESTA,
69, 59 byteMEMPERBARUI
Cara lain yang bagus untuk melakukan ini di bash adalah dengan menggunakan tr (62 byte, tetapi mungkin bisa diperas sedikit lagi)
EDIT: Beberapa lagi optimasi (Thx! @Manatwork)
Golf
Uji
0 - untuk sukses (kode keluar) 1 - untuk kegagalan (kode keluar)
sumber
T <<< 11
. Akan mengatakan set digit sama hanya karena 11 ** 3 == 1331 berisi digit yang tidak ada dalam angka asli dua kali.-w
secara eksplisit kefold
. Jikauniq
digunakan tanpa opsi,sort -u
bisa menggantinya. Dan memberi makan panggilan S 2 dengan-string di sini. Dan saya pikir tidak perlu mengutip formula yang diteruskanbc
.cmp
bukannyadiff
menyimpan 1 byte.fungsi kode mesin x86-64, 40 byte.
Atau 37 byte jika 0 vs non-nol diizinkan sebagai "benar", seperti strcmp.
Berkat jawaban Karl Napf C untuk ide bitmap, yang x86 dapat lakukan dengan sangat efisien dengan BTS .
Fungsi tanda tangan
_Bool cube_digits_same(uint64_t n);
:, menggunakan ABI Sistem x86-64. (n
dalam RDI, nilai pengembalian boolean (0 atau 1) dalam AL)._Bool
didefinisikan oleh ISO C11, dan biasanya digunakan oleh#include <stdbool.h>
untuk mendefinisikanbool
dengan semantik yang sama dengan C ++bool
.Potensi penghematan:
Semua ini dimungkinkan jika ini adalah fragmen inline-asm alih-alih fungsi, yang akan membuatnya 35 byte untuk inline-asm .
LOOP sepertinya merupakan cara terkecil untuk mengulang sekali. Saya juga melihat hanya mengulangi loop (tanpa awalan REX, dan register bitmap yang berbeda), tapi itu sedikit lebih besar. Saya juga mencoba menggunakan PUSH RSI, dan menggunakan
test spl, 0xf
/jz
untuk loop sekali (karena ABI mensyaratkan bahwa RSP adalah 16B disejajarkan sebelum CALL, jadi satu dorongan menyelaraskannya, dan satu lagi menyelaraskannya lagi). Tidak adatest r32, imm8
pengkodean, jadi cara terkecil adalah dengan instruksi TEST 4B (termasuk awalan REX) untuk menguji hanya byte rendah RSP terhadap imm8. Ukurannya sama dengan LEA + LOOP, tetapi dengan instruksi PUSH / POP tambahan diperlukan.Diuji untuk semua n dalam rentang tes, vs implementasi C steadybox (karena menggunakan algoritma yang berbeda). Dalam dua kasus hasil berbeda yang saya lihat, kode saya benar dan steadybox salah. Saya pikir kode saya benar untuk semua n.
Satu-satunya garis yang dicetak memiliki c = 1 asm = 0: false-positif untuk algoritma C.
Juga diuji terhadap
uint64_t
versi implementasi Karl C dari algoritma yang sama, dan hasilnya cocok untuk semua input.sumber
objdump -drwC -Mintel
pada file objek, dan menyalin komentar). Ini adalah bahasa tempat mengoptimalkan ukuran kode sebenarnya berguna dalam kehidupan nyata. (Tetapi meskipun demikian, hanya dalam kasus-kasus yang jarang seperti bootloader atau demo. Biasanya itu hanya layak menyimpan ukuran kode ketika tidak merusak kinerja dalam kasus yang sudah di-cache, tetapi kemudian berguna untuk menghindari decode bottlenecks + cache misses)Haskell, 47 byte
Sangat lambat. Tes dengan
c<-['0'..'9']
.Menguji setiap karakter untuk dimasukkan dalam representasi string
n
, dan membuat daftar yang disertakan. Apakah demikian untukn^3
dan memeriksa apakah daftar itu sama.sumber
nub
(mendapatkan elemen unik) dansort
, tetapi keduanya membutuhkan impor yang panjangimport Data.List
. Meski begitu, ia datang sangat dekat pada 48 byte:import Data.List;q=sort.nub.show;f n=q n==q(n^3)
.nub
menjaga ketertiban dengan penampilan pertama, yaitunub [3,1,3,2,1,2] == [3,1,2]
. Itu tidak mengkonversi ke tipe yang ditetapkan (tidak ada), tetapi memberikan daftar.Dyalog APL , 10 byte
⍕≡
adalah representasi teks argumen yang identik dengan⍕∪
penyatuan representasi teks argumen dan(⍕*∘3)
representasi teks dari argumen dadu?TryAPL online!
Catatan: Untuk angka besar, atur
⎕PP←34 ⋄ ⎕FR←1287
(34 digit signifikan, float 128 bit)sumber
Clojure, 35 byte
sumber
Java 7,
185178 karakterPanggil sebagai:
Keluaran:
(Saya tidak pernah yakin apakah saya harus menghitung impor dan definisi metode juga ... Saya sudah pernah melihat kedua cara. Kode itu sendiri hanya akan panjang 141 byte.)
sumber
static
.static
.Jelly , 8 byte
Cobalah online!
Penjelasan:
sumber
*3ṢQ⁼ṢQ$
berfungsi sebagaimana dimaksud, karena dengan cepat$
mengelompokkan dua atom di sebelah kirinya menjadi rantai monadik.Pyth, 10 byte
Karena kita tidak memiliki cukup variasi dengan jawaban Pyth, mari kita tambahkan bukan hanya satu, tetapi dua lagi! Keduanya 10 byte, dan telah diuji dengan
106239
sebagai sampel input (yang beberapa jawaban lainnya gagal).Penjelasan:
Coba jawaban pertama menggunakan test suite online.
Jawaban kedua:
Penjelasan:
Coba jawaban kedua menggunakan test suite online.
sumber
Kotlin: 46/88/96 byte
Pertanyaannya tidak menentukan dari mana input berasal, jadi inilah 3 sumber input yang biasa.
Fungsi: 46 byte
main () menggunakan argumen program pertama: 88 byte
fun main(a:Array<String>){val i=a[0].toLong();println("$i".toSet()=="${i*i*i}".toSet())}
main () menggunakan input standar: 96 byte
fun main(a:Array<String>){val i=readLine()!!.toLong();println("$i".toSet()=="${i*i*i}".toSet())}
sumber
Haskell,
5452 byteTerima kasih @Laikoni karena menyimpan dua byte.
sumber
a%b=all(
elema)b
sebagai fungsi dan kemudian memanggil denganb%a&&a%b
harus menyimpan dua byte.JavaScript (ES6), 44 byte
Port jawaban @ KarlNapf yang sangat baik. ES7 menyimpan byte melalui
n**3
. Hanya berfungsi hingga 208063 karena ketepatan numerik JavaScript terbatas; jika Anda hanya membutuhkannya hingga 1290, Anda dapat menyimpan byte lain.sumber
Perl 6 , 22 byte
Diperluas:
Perbedaan Set Symmetric 「⊖」 operator mengembalikan Set kosong jika kedua belah pihak Set setara (secara otomatis mengubah daftar menjadi Set). Pada saat itu satu-satunya yang tersisa untuk dilakukan adalah membalikkannya secara logis.
sumber
$_
dengan hanya.
C ++, 82 byte
Fungsi t (a) mengembalikan jawabannya. Menggunakan int sebagai set. Dicetak dengan baik:
sumber
#include<set>
danusing namespace std;
dalam kode golf dan hitungan byte#include<set>
bukannyaalgorithm
R,
657970 byteDiambil
n
dari stdin, splitn
dann^3
menjadi digit tunggal, dan membandingkan dua set. Menggunakangmp
paket untuk menangani bilangan bulat besar (terima kasih kepada Billywob karena telah menunjukkan kekurangan itu). Sekarang digunakansubstring
untuk memotongn
dann^3
, terima kasih kepada @MickyT untuk sarannya. (Versi sebelumnya digunakanscan
dangsub
dengan cara hacky.)sumber
n
) kecuali jika Anda menggunakan semacam paket BigInt. Lihat?.Machine
detail pada bilangan bulat terbesar dan float dll. Untuk melihat perbandingan ini, misalnya2600001^3
dalam R ke wolframalphagmp
paket tersebut dapat menyelesaikan masalah ini.gmp::as.bigz()
untuk menangani bilangan bulat besar.s=substring;setequal(s(n<-gmp::as.bigz(scan()),p<-1:1e4,p),s(n^3,p,p))
substring
bisa digunakan seperti itu (saya hanya pernah menggunakansubstr
). Jawaban telah diedit untuk memasukkan saran Anda sekarang.C ++ 14, 93 byte
Port jawaban C saya , berfungsi untuk angka besar (panggilan dengan
L
akhiran).sumber
Haskell, 47 byte
Contoh penggunaan:
f 102343
->False
.Menggunakan set dari
Data.Set
modul. Fungsi helpers
mengubah angka menjadi representasi string dan daripada membuat seperangkat karakter.sumber
s$n^3
?(s n==s) (n^3)
yang memberikan kesalahan tipe.Brachylog , 11 byte
Cobalah online!
Terima kasih kepada @DestructibleWatermelon karena menunjukkan masalah dengan jawaban asli saya.
Penjelasan
sumber
PowerShell v2 +,
9493 byte(Baris baru untuk kejelasan, tidak termasuk dalam bytecount)
Baris pertama didefinisikan
f
sebagaifilter
(mirip-ish cukup untuk fungsi untuk tujuan kita di sini untuk tidak masuk ke spesifik) yang mengambil input$n
dan melakukan hal berikut:Baris kedua mengambil input
$args
, melakukanf
di atasnya, dan memeriksa apakah itu-eq
akanf
dilakukan pada$x
potong dadu. Perhatikan[bigint]
pemeran eksplisit , yang diperlukan kalau tidak kita akan mendapatkan hasilnya kembali dalam notasi ilmiah, yang jelas tidak akan berhasil.Hasil Boolean ditinggalkan di jalur pipa, dan hasilnya tersirat.
Menyimpan satu byte berkat @ConnorLSW
sumber
"$n"[0..99]
alih-alih[char[]]"$n"
menyimpan satu byte, karena jumlah terbesar yang harus Anda tangani hanya sekitar 20 karakter.char[]
konversi normal , sisa kode Anda sebaik yang saya bisa mendapatkannya, jika ada cara singkat untuk membandingkan array, Anda bisa gunakan sesuatu seperti("$n"[0..99]|group).Name
untuk menghemat banyak tetapicompare
tidak persis cepat dan mudah untuk golf.Groovy, 35
51karakter / byteSaya sedih tidak melihat Groovy dimasukkan, jadi inilah upaya 51 byte asli saya:
def x(def n){"$n".toSet()=="${n.power(3)}".toSet()}
Ditulis ulang sebagai penutupan anonim 35-byte dan dengan
**
untuk eksponensial, terima kasih kepada manatwork:{"$it".toSet()=="${it**3}".toSet()}
Beberapa test case untuk fungsi aslinya:
Sebuah penutupan bernama
c
bisa disebut seperti ini:println c.call(107624)
. Penutupan 35 byte anonim dapat disebut seperti ini:println ({"$it".toSet()=="${it**3}".toSet()}(107624))
Output:
Harap dicatat: Saya mengetahui bahwa sesuatu seperti golf kode ada sekarang, jadi semoga saya benar!
sumber
def c={"$it".toSet()=="${it.power(3)}".toSet()}
**
operator untuk eksponensial.x(107624)
denganc.call(107624)
**
membawanya ke indah 35 karakter / byte:{"$it".toSet()=="${it**3}".toSet()}
Ruby, 48 byte
sumber