Catatan: Ini terinspirasi oleh pertanyaan ini oleh @ Willilling di mana tugasnya adalah untuk menghitung jumlah lempeng sempurna dengan panjang tertentu, tetapi sedikit berbeda.
Kami menyebutnya plat nomor sempurna yang plat yang teksnya memenuhi ketentuan berikut:
- Ini terdiri dari karakter, yang bisa berupa huruf besar (
[A-Z]
) atau digit ([0-9]
) - Menjumlahkan posisi huruf-hurufnya dalam alfabet Inggris, 1-diindeks (yaitu:)
A=1,B=2,...,Z=26
memberikan bilangan bulat n - Mendapatkan setiap potongan angka, menjumlahkannya dan kemudian mengalikan semua hasil memberikan hasil yang sama, n
- n adalah kuadrat sempurna (mis:
49
(7 2 ) ,16
(4 2 ) )
Sebuah plat hampir sempurna memenuhi kondisi untuk plat sempurna, kecuali bahwa n adalah tidak persegi sempurna.
Memasukkan
String yang mewakili teks plat, diambil sebagai input dalam bentuk standar apa pun, kecuali untuk hardcoding.
Keluaran
Jika string yang diberikan merupakan hampir sempurna plat, mengembalikan nilai truthy (misalnya: True
/ 1
), jika tidak mengembalikan falsy nilai (misalnya: False
/ 0
). Segala bentuk standar keluaran diterima sambil memperhatikan bahwa celah ini dilarang keras.
Contohnya
licence plate -> output
A1B2C3 -> 1
A + B + C = 1 + 2 + 3 = 6
1 * 2 * 3 = 6
6 is not a perfect square, 6 = 6 => nearly perfect plate
01G61 -> 1
(0 + 1) * (6 + 1) = 7
G = 7
7 is not a perfect square, 7 = 7 => nearly perfect plate
11BB2 -> 0
(1 + 1) * 2 = 4
B + B = 2 + 2 = 4
4 = 4, but 4 is the square of 2 => perfect license plate (not what we want)
67FF1 -> 0
(6 + 7) * 1 = 13
F + F = 6 + 6 = 12
12 != 13 => not perfect at all!
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang!
sumber
n
adalah tidak persegi sempurna?s/licence/license/ig
hal ini, ketahuilah bahwa "lisensi" adalah ejaan yang benar dalam bahasa Inggris Inggris (dan juga bahasa Inggris di bagian lain dunia).Jawaban:
Jelly ,
29 2830 byte1 byte untuk memperbaiki bug ditemukan oleh ChristianSievers (salah berurusan dengan substring hanya nol) 1 byte untuk memperbaiki positif palsu untuk
"0"
,"00"
, ... ditemukan selama fixing atas (0 adalah persegi sempurna).Cobalah online! , atau menjalankan tes
Bagaimana?
sumber
11AA0
?MATL,
36343335 byteCobalah di MATL Online
Penjelasan
sumber
'0'
atau'00'
(FWIW saya baru saja memperbaikinya dalam kode saya).Python 2,
120118 byteCobalah online!
Menafsirkan masing-masing karakter sebagai angka dalam basis-36 (
h
). Konversi ke desimal dan tambahkan ke penjumlahan ifh>9
(artinya itu surat), jika tidak, tambahkan ke variabel yang dikalikan untuk membentuk produk yang sedang berjalan nanti.sumber
Perl 5 , 80 byte
79 byte kode +
-p
bendera.Cobalah online!
$.*=eval s/./+$&/gr for/\d+/g;
mengalikan jumlah digit berturut-turut. (Saya menggunakan$.
karena nilai awalnya adalah1
, yang berarti itu adalah elemen netral untuk perkalian). Lebih tepatnya, untuk setiap potongan digit (for/\d+/g
),s/./+$&/gr
tempatkan+
sebelum setiap digit, kemudian string tersebuteval
dinotasikan, dan dikalikan dengan produk saat ini.Kedua,
$t-=64-ord for/\pl/g;
jumlah dalam$t
setiap huruf (for/\pl/g
). (ord
kembalikan kode ascii untuk surat itu, dan64-..
buat itu antara 1 dan 26.Akhirnya,
$.==$t
periksa bahwa kedua nilai sama, dan($.**.5|0)**2!=$.
itu bukan kotak yang sempurna.sumber
Python 2,
267207 byteDisimpan 60 byte berkat ovs
Fungsi dengan penggunaan:
print(g('A1B2C3'))
Cobalah online!
sumber
Python 3 ,
163 156 155 164161 byteCobalah online!
sumber
from math import*
lebih pendeka
, gunakan sajafor x in input():
. Anda dapat memiliki positif palsu untuk pelat yang diakhiri dengan string nol (misalnya11AA00
), karena finalm*=t
tidak dieksekusi.Retina, 143 byte
Mengembalikan 1 untuk true, 0 untuk false
Cobalah secara Online!
Penjelasan:
Pertama, kami mengganti semua digit non-nol dengan representasi unary mereka. Kami menghapus nol apa pun dengan angka yang berdekatan sehingga tidak memengaruhi operasi unary kami
Pisahkan string yang dihasilkan pada huruf, hati-hati untuk mengecualikan baris kosong (ini adalah masalah ketika dua huruf berturut-turut
AA
).Urutkan string secara leksikografis. Kemudian berulang kali lakukan hal berikut:
1) Ganti masing
1
- masing dengan jumlah1
s pada baris berikut (ini meniru multiplikasi)2) Hapus baris kedua
1
sGanti surat
J-S
dengan1J
,1K
, dll dan mengganti hurufT-Z
dengan2T
,2U
, dll Kemudian, ganti masing-masing kelompokA-I
,J-S
danT-Z
dengan1-9
. Kami akan dibiarkan dengan nilai numerik setiap huruf (mis.13
UntukM
).Konversi setiap baris tetapi yang pertama menjadi unary (baris pertama sudah di unary). Gabungkan garis-garis ini. Kita sekarang dibiarkan dengan string formulir
<product of digits>\n<sum of letters>
.Ganti nomor kuadrat dengan string kosong. Ini menggunakan metode "pohon perbedaan" .
Kembali
1
jika kedua string di kedua sisi\n
pertandingan. Kalau tidak, kembalilah0
.sumber
11AA0
,,0AA11
dll.