Seperti yang kita semua tahu, itu kura-kura sepanjang jalan . Tapi apakah ini juga prima?
Sejumlah dianggap "penyu-prima" jika memenuhi kondisi berikut:
1) It is prime.
2) It is possible to remove a single digit leaving a prime number.
3) Step 2 can be repeated until left with a single digit prime.
Sebagai contoh, 239
adalah "turtle-prime", karena dapat direduksi menjadi 23
salah satu 2
atau 3
keduanya, keduanya prima. Itu juga bisa dikurangi sampai 29
saat itu 2
. 151
bukan penyu, karena mengurangi ke 15
(bukan prime), 51
(bukan prime), atau 11
. 11
adalah prima, tetapi hanya dapat mengurangi menjadi 1
, yang tidak.
Diberi bilangan bulat positif, tentukan apakah bilangan bulat itu "prima-penyu" Keluaran Anda bisa dalam bentuk apa pun asalkan memberikan hasil yang sama untuk nilai apa pun yang benar atau salah.
Kasus uji:
input -> output
1 -> false
2 -> true
17 -> true
19 -> false
239 -> true
389 -> false
Mencetak gol
Ini kode-golf , jadi jawaban tersingkat di setiap bahasa menang!
Jawaban:
Jelly , 16 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Haskell ,
1041029998979591 byteCobalah online!
Penjelasan
Pertama, kami membuat tes primality
Ini menggunakan Teorema Wilson untuk menentukan keutamaan suatu input.
Kami kemudian mendeklarasikan base case, yang akan menyatakan bahwa string kosong itu benar.
Sekarang kita mendefinisikan fungsi sebenarnya
Kami menggunakan penjaga pola untuk mengikat
zip[0..]x
key
, karena kita perlu menggunakannya dua kali kemudian. Kami kemudian menegaskan jawabannya adalah[[snd b|b<-y,b/=a]|a<-y]
adalah semua angka yang merupakan digit yang dihapus dari input kami. Jadi kami menegaskan bahwa setidaknya satu dari angka-angka ini adalah benar untukf
. Untuk memastikan bahwa angka komposit salah, kami menambahkanprime$read x
. Jika angkanya tidak prima, daftar akan kosong danany
daftar kosong salah.sumber
any f[[
↦or[f[
[b|(i,b)<-y,i/=a]|(a,_)<-y
↦[snd b|b<-y,b/=a]|a<-y
R,
1241221201139593106105 byteYang mengevaluasi fungsi:
Solusi rekursif. Mengambil input sebagai daftar digit.
Memiliki 2 pernyataan logis:
Apakah
x
prima saat digabung?Apakah salah satu dari yang berikut
TRUE
:Apakah panjangnya
x
nol? Ini adalah kondisi terminasi terakhir kami.Apakah
f
TRUE
untuk subset darix
?Pernyataan pertama memastikan kami tetap bekerja dengan bilangan prima saja. Yang kedua melakukan rekursi aktual.
Disimpan dua byte berkat @Giuseppe.
Saya harus mengembalikan sebagian golf saya karena bug, di mana saya menguji dengan definisi fungsi sebelumnya secara tidak sengaja.
R, 98 byte, tidak bersaing
Seperti yang saya sebutkan di komentar, saya membuat paket . Karena tantangan sudah ada sebelum itu, ini bukan persaingan, tetapi saya ingin sedikit memamerkannya. Tidak terlalu jauh, tapi kita akan sampai di sana.
C()
adalah fungsi pertama dalam paket, dan mengatur digit angka menjadi angka.sumber
sum(x*10^(((l<-sum(x|1))-1):0))
) sangat buruk. Saya benar-benar mempertimbangkan untuk membuat paket golfR
.sapply
... Juga saya pikir Anda mungkin ingin melakukanf=pryr::f(...)
atau Anda perlu menggunakanf
disapply
.g
atau semacamnya?el(strsplit(x,''))
akan menghemat satu ton byte.Jelly , 19 byte
Cobalah online!
Bagaimana itu bekerja
Rekursi tanpa kasus dasar kaki.
sumber
Jelly ,
2726 byteTautan monadik yang mengambil dan mengembalikan bilangan bulat (
1
untuk penyu0
sebaliknya).Cobalah online!
Bagaimana?
sumber
Ruby ,
7257 + 8 =8065 byteMenggunakan
-rprime
bendera. -15 byte dari histokrat!Cobalah online!
sumber
&&!!
dengan adil&
, itu akan melemparkan hasilnya ke boolean. Panggilan rekursif Anda juga bisa sedikit lebih pendek menggunakan perlisma:!n.scan(/./){f[$`+$']&&break}}
n.scan
triknya bekerja seperti itu?.scan.find
, tetapi kita dapat secara manual keluar dari lingkaran kesuksesan. Jika kita putus,scan
kembalinil
, jika tidak maka akan mengembalikan string yang selalu benar.Java, 220 byte
Cobalah online!
Golf:
Tidak Terkumpul:
sumber
boolean t(String n){int l=n.length(),x=new Integer(n),i;for(i=2;i<x;x=x%i++<1?0:x);if(x>1)if(l<2)return 1>0;else for(i=0;i<l;)if(t(n.substring(0,i)+n.substring(++i,l)))return 1>0;return 1<0;}
( 191 byte )f
?>0
untuk mengonversi int menjadi boolean) yang harus menyimpan 2 * 2 + 1 * 4 = 8 byte dalam versi Kevin Cruijssen.05AB1E ,
2827 byteSolusi berulang.
Cobalah online!
Penjelasan
sumber
Python 2 ,
132124119 byte-8 Terima kasih kepada @WheatWizard
-5 Terima kasih kepada @LeakyNun
Cobalah online!
Tidak bisa memikirkan apa pun untuk mengasahnya tanpa pemeriksa utama bawaan. Mengambil nomor sebagai string (saya berasumsi ini mengingat OP mengizinkan daftar angka, tetapi jika tidak +14 byte untuk lambda lain), dan secara rekursif menghitung setiap turtleness nomor "turtled".
sumber
f=lambda n,i=0:n==''or p(int(n))and i<len(n)and(f(n[:i]+n[i+1:])or f(n,i+1))
menghemat satu byte. Seseorang dengan keterampilan golf Python yang lebih baik mungkin bisa mempersingkat itu lebih jauh.C #, 355 byte
Cobalah online!
Golf kode pertama saya, jadi saya harap saya melakukannya dengan baik. Saya tidak bisa memikirkan cara untuk membuatnya lebih kecil (selain menggunakan int bukan BigInteger, tapi saya melakukannya sehingga akan bekerja untuk semua test case yang disediakan). Bagaimanapun, ini adalah format yang sama:
sumber
Perl 6 , 65 byte
Cobalah online!
sumber
PHP , 164 byte
Cobalah online!
Mulailah dengan menguji angka untuk primality, kemudian loop melalui digit sebagai array, muncul masing-masing dan bergabung dengan sisanya kembali bersama-sama dan memberi makan mereka secara rekursif melalui fungsi lagi. Setiap tautan ke bawah melakukan logika ATAU dengan jalur yang lebih rendah, hanya mengembalikan
true
jika ada setidaknya satu jalur dari semua bilangan prima.sumber
Javascript 167 byte
Penjelasan
Tampilkan cuplikan kode
sumber