Tulis program yang mendefinisikan fungsi yang dapat memeriksa apakah variabel string yang disebut "apa pun yang Anda inginkan atau masukkan oleh pengguna" adalah piem. (piem = cerita atau puisi di mana panjang kata mewakili angka π ( dari Wikipedia ))
Beberapa contoh:
myfunction("I am clearly wrong") # False
myfunction("How I want a drink, alcoholic of course, after the heavy lectures involving quantum mechanics") #True (Taken from Wikipedia)
myfunction("Law ' s fine") # True
Anda harus menghapus tanda baca atau baris baru apa pun sebelum memproses. Golf kode murni, kemenangan terpendek
Tanggal akhir: malam hari 1/10/2014
Berbagai jawaban
- Berapa banyak digit yang perlu kita tangani? Lebih dari 10
- Yang menarik, bagaimana seharusnya 0's di PI ditafsirkan? Dilewati atau 10 kata kata? Seperti 10 huruf kata
- "variabel yang disebut piem" - jadi nama parameter harus piem? Tidak, belum, teks pertanyaan diperbaiki
- Bonus yang menyenangkan mungkin solusi yang merupakan piem itu sendiri. Jika solusi Anda adalah piem, Anda mendapat bonus * 0,5
- Demi argumen, apakah _ selalu tanda baca? Anda dapat memutuskan apakah itu tanda baca atau tidak
- Tidak jelas apa yang dimaksud dengan "tanda baca apa pun" Maksudku,. '"?! ;; ()
- Jadi digit harus dihitung? Dan denda Law akan salah? Digit harus diperlakukan sebagai huruf, Law's fine = False; Law's fine = Benar
Komentar
- Solusi APL harus dihitung dalam Bytes
- Jika solusi Anda bekerja untuk 100+ pi, Anda mendapat bonus * 0,8
- Karena minat besar tanggal akhir adalah satu hari lebih banyak di masa depan.
piem
? Itu membuat semua jawaban saat ini salah.Jawaban:
APL (39)
Ia menggunakan semua digit yang disediakan oleh pi penerjemah APL yang konstan, hingga batas 99. Dalam kasus saya (Dyalog APL 14 32-bit) yaitu 16 digit. Versi 64-bit kemungkinan memiliki lebih banyak digit. 16 digit sudah cukup untuk contoh yang diberikan untuk bekerja.
String yang memiliki jumlah kata lebih dari itu akan gagal , bahkan jika semua digit yang bisa diperiksa itu benar. (Hal yang sama berlaku untuk posting lain, pada tulisan ini.) Misalnya, jika hanya ada 10 digit, yang 'Bagaimana saya ingin minum' satu akan gagal. Ini dapat diperbaiki, tetapi dengan biaya 14 karakter:
Versi itu akan menerima string apa pun di mana digit N pertama benar.
sumber
JavaScript
(169) (140) (137) (135)(63) untuk 17 digit piDalam versi saya
Law's fine
danLaw ' s fine
mengembalikan keduanya benar.Versi terbaru (63) oleh Ingo Bürk dan hsl
Versi Baru (135) untuk 17 digit pi (Terima kasih kepada Ingo Bürk):
Versi lama (169) untuk 32 digit pi:
sumber
1e15*Math.PI+"2384626433832795"
for
Loop tidak dapat ditambahkan dengan cara ini.r=0
dan kemudian hanya mengulangr+=s[a].length!=p[a]
(Anda dapat menghilangkan;
pada akhirnya). Lalu, kembali!r
.Ruby,
11310179 (98 * 0.8)Penjelasan
String
.999
desimal dan berubah menjadi String dengan.
dihapus."Let's"
dihitung sebagai dua kata:"Let"
dan"s"
.Array#map
untuk mengubah setiap kata menjadi ukuran kata, menggabungkannya menjadi aString
.String
dimulai dengan karakter yang sama.Saya telah menerapkan bonus untuk menangani 100+ digit.
_
tidak ditangani sebagai tanda baca dalam solusi ini.sumber
_
sebagai tanda baca._
selalu tanda baca? Bagaimana dengan kalimat sepertiMy nickname on Stack Overflow is britishtea_500
.Mathematica, 123 byte * 0.8 = 98.4
Hampir pengajuan terpanjang sejauh ini, tetapi:
sumber
Python -
130 127116 - 17 digit piSeperti pada jawaban @ flawr ,
Law ' s fine
danLaw's fine
keduanya mengembalikan True.Terima kasih kepada @Emil karena menghapus 12 karakter dari program.
sumber
l
dalam variabel dan dengan mendefinisikan fungsi menggunakan lambda.Jawa, 185
sumber
python 3, 17 digit pi, 104
sumber
;
dengan baris baru agar mudah dibaca. Juga, sejumlah ruang dapat dihilangkan.Python 3 - 129
Tidak memperhitungkan tanda baca:
sumber
T-SQL
488383Dan sekarang untuk solusi T-SQL besar :)
Ini menciptakan fungsi bernilai tabel inline yang menggunakan CTE rekursif untuk mendeteksi batas kata.Membuat fungsi skalar yang mengunyahnya melalui kata-kata dan PI hingga 31 desimal (0 pertama). Itu disebut dengan cara berikut
sumber
CJam, 40
Tidak jelas apa yang dimaksud dengan "tanda baca apa pun"; solusi ini menghilangkan
,.'"?!;;
karakter.sumber
Alat bash dan unix, 111
sumber
NodeJS 32 digit 230 Bytes
Saya tidak bisa lebih pendek dengan JS: D
sumber