Kita semua tahu bahwa jika Anda google kata "google" itu akan merusak internet.
Tugas Anda adalah membuat fungsi yang menerima satu string dan mengembalikan panjangnya, dengan karakter Unicode yang sesedikit mungkin.
Namun, jika string yang diberikan adalah google
(huruf kecil), itu akan menyebabkan kesalahan.
Misalnya, g('bing')
akan kembali 4
tetapi g('google')
akan menyebabkan kesalahan.
Harap berikan contoh penggunaan, dan kesalahan jika memungkinkan.
Jawaban:
Python 2, 29
Memberi
ZeroDivisionError
on"google"
, dan panjangnya sebaliknya. Ini mengambil keuntungan dari menyamakan boolean Python0
dan1
.sumber
g
ke Andalambda
, atau menyebutnya secara anonim dengan input.Infinity
untuk "google" bukannya melemparkan kesalahan ...return
jika Anda menggunakandef
L/lbnb"google
, 13 byte.Excel, 23 karakter
Rekatkan ini ke sel selain A1 dan ketik permintaan pencarian Anda ke A1.
Sebagai contoh:
sumber
C #, 43 byte
Peningkatan atas jawaban Salah Alami. Berulang-ulang untuk melempar pengecualian stack overflow pada penyediaan "google"
sumber
StackOverflowException
. Bahkan itu tidak akan pernah kembali (berlaku sepertiwhile(true){}
).Pyth,
1413 karakterMenentukan fungsi bernama
y
.Ini membagi panjang dengan 1 jika string bukan google dan 0 sebaliknya. Idenya bukan novel, tetapi saya memunculkannya secara mandiri.
Cobalah online.
Bagaimana itu bekerja
sumber
;
tapi jelas Anda tidak bisa di sini ...y
. " Tapi tidak aday
dalam kode Anda !?L
mendefinisikan kembali fungsiy
.MATLAB,
6341403836 byteTerima kasih kepada Tom Carpenter karena telah menghemat 1 byte!
Terima kasih kepada Stewie Griffin karena mencukur 2 byte!
Berbeda dengan solusi lain yang lebih elegan, melakukan operasi pembagian dengan nol di MATLAB tidak akan memberikan kesalahan, melainkan
Inf
. Solusi ini menemukan panjang stringnnz
. String yang dihasilkan sedemikian rupa sehingga Anda mengindeks dari awal string ke akhir, yang pada dasarnya adalah salinan dari string. Namun, yang penting adalah bahwa awal dari mana mengakses string dihasilkan dengan memeriksa apakah input sama atau tidak'google'
. Jika tidak, ini menghasilkan indeks awal 1 dan kami indeks ke dalam string secara normal ... karena MATLAB mulai mengindeks pada 1. Jika sama, indeks yang dihasilkan adalah 0 dan MATLAB akan melempar kesalahan pengindeksan yang menyatakan bahwa indeks harus bilangan bulat positif. Ekstra+
adalah untuk memastikan bahwa output dari pemeriksaan kesetaraan adalah numerik daripada Boolean /logical
. Menghilangkan+
kehendak akan menghasilkan peringatan, tetapi karena spesifikasi tantangan ini tidak memungkinkan untuk peringatan,+
diperlukan ... dengan demikian melengkapi kode.Penggunaan contoh
Versi yang lebih menyenangkan,
8377767472 byteTerima kasih kepada Tom Carpenter karena telah menghemat 1 byte!
Terima kasih kepada Stewie Griffin karena mencukur 2 byte!
Di atas bukan pengajuan resmi, tapi itu sesuatu yang sedikit lebih menyenangkan untuk dijalankan. Menyalahgunakan
eval
dalam fungsi anonim, yang dilakukan kode adalah memeriksa untuk melihat apakah string input sama dengan'google'
... dan jika ya, ini akan membuka browser web bawaan MATLAB dan menunjukkan halaman kesalahan 404 Google yang mencoba mengakses Subhalaman terletak padai
saat itu tidak ada. Jika tidak, kami menampilkan panjang string secara normal.Penggunaan contoh
Panggilan terakhir menggunakan
'google'
memberi kita layar ini:sumber
strcmp
alih-alihisequal
.strcmp
tetapi akhirnya menggunakanisequal
untuk beberapa alasan .... terima kasih!nnz
dua byte lebih pendek darinumel
. Anda memberikan suara saya beberapa tahun yang lalu :-)JavaScript ES6,
342725 karakterLempar ReferensiError
Δ
ke Google.Tampilkan cuplikan kode
sumber
#
, kesalahan dalam JS afaikTI-BASIC, 15 byte
Heck, sementara kita berada di sana , mungkin juga mendapatkan jawaban TI-BASIC di sini.
Format input adalah
"string":prgmNAME
. Penghargaan untuk Thomas Kwa karena menemukannya pertama kali!(Panduan: tambahkan 1 byte untuk setiap huruf kecil menggantikan huruf besar. Jadi
s/GOOGLE/google/g => +6 bytes
.)uji kasus ahhhhh!
sumber
length(Ans)/(Ans≠"google
. Anda juga memiliki kasus yang salah; jika huruf besar diizinkan 14 byte. Ngomong-ngomong, valid untuk meneruskan argumen melalui Ans.AGOOGLE
harus memberi 7, benar? Dan Anda seharusnya tidak menghitung header program dalam ukuran kode Anda, jadi kurangi 10 byte.length(
adalah dua byte, yang akan membuat angka Anda 21 dan 15 byte.APL (14)
Penjelasan:
⍴
: panjangnya÷
: dibagi dengan'google∘≢
: argumen tidak sama dengan'google
'.⍴
memberikan panjang string, yang dibagi dengan 1 jika string tidak samagoogle
(yang memberikan panjang kembali tidak berubah), atau dengan 0 jika string tidak samagoogle
(memberikan kesalahan).sumber
⍴
dengan≢
. Anda juga dapat membuatnya tampak lebih keren dengan menukar operan∘
. Oh, jangan lupa untuk menghapus parens. All-in-all:≢÷≢∘'google'
Python 3, 30 byte
Mengindeks daftar fungsi 1-elemen, menaikkan
IndexError
jikau=='google'
predikatnya adalahTrue
(= 1). Fungsional seperti itu.Banyak varian. Wow:
sumber
Haskell, 24 byte
g s|s/="google"=length s
Keluaran:
sumber
CJam, 16 karakter
Ini membagi panjang dengan 1 jika string bukan google dan 0 sebaliknya. Idenya bukan novel, tetapi saya memunculkannya secara mandiri.
Cobalah online.
Bagaimana itu bekerja
sumber
q_,\"google"=!/
. Mengembangkannya sebelum melihat posting ini. Perhatikan bahwa ini mengambil seluruh input (yang Anda anggap sebagai argumen fungsi). Sayangnya, Anda tidak dapat menggunakannya, karena ini meminta fungsi :(Oktaf, 63 byte
Saya tahu ini lebih lama dari solusi Matlab (yang akan bekerja di oktaf juga), tetapi itu sangat jahat. Saya membuat fungsi anonim (jahat) menggunakan array sel (jahat) literal (jahat) yang berisi fungsi menangani tergantung pada fungsi callback (itu sendiri, sehingga rekursif, jahat) yang harus dilewatkan melalui argumen. Lalu saya membuat anonim lain yang pada dasarnya mengurangi fungsi argumen string dan memperbaiki argumen kedua
f
sebagaif
(sangat jahat). Setiap manusia waras tidak akan pernah melakukan ini, karena hampir tidak dapat dibaca seperti Perl atau regex (atau cjam / pyth / esolang lainnya).Jadi jika string bukan 'google' argumen kedua dari array sel akan dipanggil yang menampilkan panjang string. Kalau tidak, fungsi pertama akan dipanggil, yang dilewatkan sebagai callback (dan melewati dirinya sebagai callback ke dirinya sendiri juga) yang kemudian adalah fungsi itu sendiri. Kesalahan pada dasarnya adalah beberapa kesalahan kedalaman rekursi maksimum.
sumber
eval
sini untuk membuatnya benar-benar JAHAT :-)JavaScript, 25 Bytes
Contoh JavaScript yang bagus dan sederhana:
Jika "google" dimasukkan maka melewati a
ReferenceError
Contoh
sumber
APL,
1917 byteIni adalah fungsi monadik tanpa nama yang akan menimbulkan kesalahan sintaksis jika inputnya adalah
google
. Ini dicapai dengan berusaha mengambil logaritma natural dari ketiadaan.Cobalah online
Disimpan dua byte berkat Dennis!
sumber
⍟
dikenal secara informal sebagai "percikan". Nama yang sangat tepat untuk penggunaan ini.R, 46 byte
Kecuali saya salah membaca, posting asli tidak pernah menentukan bahwa kode tersebut harus sintaks yang benar.
Contoh:
Saya tidak pernah menambahkan apa pun untuk parameter "tidak" dari pernyataan ifelse sehingga akan mengembalikan kesalahan jika parameter ini ditimbulkan.
sumber
g=function(x)nchar(x)[[x!="google"]]
Perl,
3129 byte-2b terima kasih kepada manatwork
Pemakaian:
Jika saya bisa pergi dengan program daripada fungsi, berikut ini akan valid dengan hanya 20 byte (baris perintah +1 byte)
Kesalahan adalah pembagian dengan nol.
Penjelasan:
y///c
mengembalikan panjangnya, lalu!/^google$/
akan mengembalikan 0 jika input cocok dengan 'google'.Pemakaian:
sumber
sub{…}
. (Kemudian Anda menyebutnya sepertisub{…}->("google")
.)$_!=google
sebagai gantinya!/^google$/
!=
tidak akan bekerja untuk membandingkan string ...Haskell - 30 karakter
sumber
x=x;g"google"=x;g s=length s
, tetapi untuk beberapa alasan, <<loop>> pengecualian tidak dilemparkan ke ghci.g s|s/="google"=length s
menghindari kebutuhan untukerror
Python 3, 35 byte
sumber
(lambda n:len(n)*(n!='google')or d)('')
Java 7:
5352 BytesKode di atas akan membuang
ArithmeticException
untuk pembagian dengan nol danString
selain darigoogle
. Patut dicatat bahwa==
membandingkan referensi dan tidak akan berfungsi untukString
Objek.Java 8: 29 Bytes
(Berdasarkan saran yang diberikan dalam komentar di bawah)
sumber
s->(s.equals("google")?null:s).length();
==
di Jawa pada umumnya tidak akan berfungsi (kecuali jika Anda mengandalkan string interning, yang, yah, buruk). Mungkin Anda bingung dengan JavaScript?C ++ 11, 54 (kode) + 14 (# termasuk) = 68
Nah, pembagian dengan nol hanyalah perilaku yang tidak terdefinisi, yang saya tidak akan menyebut kesalahan. Jadi pendekatan saya.
pemakaian
sumber
size()
untuk menyimpan 2 byte. Di C ++ 14, Anda juga bisa menggunakan lambdas generik dan menggantinyastd::string
denganauto
. Anda harus memberikan yang sebenarnyastd::string
bukanconst char*
.std::string
punyasize()
metode, terima kasih untuk itu. Saya menyadari lambda generik di C ++ 14, tapi saya tidak tahu bagaimana ini akan membantu saya, karena"string"
iniconst char*
dan tidakstd::string
.std::string
memilikisize()
danlength()
karena keduanya merupakan wadah dan string . Adapunauto
, Anda akan memanggil lambda dengan(std::string("google"))
bukan("google")
. Pertanyaannya hanya mengatakan "menerima 1 string" tanpa menentukan apa "string" itu."google"s
membangun sebuahstd::string
:)throw;
memicustd::terminate()
(karena tidak ada pengecualian saat ini di sini).MUMPS, 28 byte
Pemakaian:
Mengapa? Yah,
$S[ELECT]
pada dasarnya adalah pernyataan multi-klausa ringkas jika ada - hampir seperti pencocokan pola dalam bahasa seperti Haskell atau Rust. Kecuali ... tidak seperti di Haskell atau Rust, polanya tidak diperiksa untuk kelengkapannya, karena gagasan "keamanan waktu kompilasi" sama sekali asing bagi MUMPS. Jadi jika input Anda adalah pola yang tidak Anda pertanggungjawabkan, Anda akan mendapatkan error runtime yang bagus<SELECT>
.sumber
Ruby,
34302726Tidak dikenal
t
memunculkan pengecualian.Sunting: versi yang benar-benar mudah dibaca dan jelas yang lebih pendek ...
Lama: Sepertinya mirip dengan ide-ide lain. Akan naik
ArgumentError
jika x adalah 'google'.sumber
x=='google'?t: x.size
JavaScript, 47 byte
Bagus dan sederhana.
Sunting: Sekarang mematuhi aturan
Pengujian
Kesalahan terlempar
Tidak ada kesalahan yang terjadi
sumber
undefined
.C,
6648Asli:
Menggunakan OSX gcc,
l("duck");
mengembalikan4
,l("google");
menyebabkanFloating point exception: 8
.Pada platform lain, konstanta mungkin perlu disesuaikan untuk endianness.
Lebih pendek :
kurang rumit, hasil yang sama.
sumber
0x656c676f6f67
=elgoog
). Saya pikir jawaban ini perlu penjelasan bagi kita yang menghargai hal-hal tingkat rendah yang gila ini.int
, itu 4 karakter.char *
, dengan unit8-bits
, dilemparkan kelong *
, dengan unit64-bits
, tanpa dialokasikan kembali dengan benar, data dalam 8 byte ruang tumpukan menjadi rusak, dan diperlakukan sebagai nomor tunggal (8*8 = 64
). Itu sebabnya Anda mendapatkan 6 karakter pertama, + NUL + sampah. Itu sangat pintar. Berbahaya juga. Bertanya-tanya mengapa itu tidak segfault. Itu byte 8 sampah di luar batas, bukan?Ruby, 29 byte
Saya pertama kali datang dengan sesuatu yang sangat mirip dengan upaya pertama @ Borsunho, tetapi milik saya sedikit lebih lama dan dia mempostingnya sebelum saya selesai. Datang dengan ini sebelum 30 byte editnya :)
Contoh penggunaan:
sunting: Dua tahun dan beberapa versi Ruby kemudian
Ruby , 25 byte
Digantikan
String#size
dengan plus unary baru. Cobalah online!sumber
^
luar matchgroup)..*
pada akhirnya adalah apa yang membuatnya bekerja./\A(?!google\Z).*/m
memperbaikinya (dengan biaya tiga byte, meskipun).^
dan$
cocok dengan awal dan akhir garis, sementara\A
dan\Z
cocok dengan awal dan akhir string secara keseluruhan.> <>, 55 byte
Kupikir aku akan mencobanya, bukan upaya atau algoritme golf terbaikku. Bukan fungsi per se, tapi saya pikir ini masih memenuhi syarat. Saya akan melihat apakah saya dapat mengedit dalam versi yang lebih baik.
Jika Anda diizinkan untuk mencetak panjang dan kemudian kesalahan, inilah solusi 46 byte:
49 byte solusi sebelumnya dari sifat ini:
Saya senang memberikan penjelasan jika ada minat, dan beri tahu saya jika ada yang salah dengan jawaban saya atau jika Anda memiliki saran bermain golf.
sumber
Javascript ES6,
51 2725 byteHai, saya baru mengenal kode golf jadi ini mungkin bisa lebih banyak golf, tapi begini saja:
g=_=>_=="google"?a:_.length
g=_=>{if("google"==_)throw Error();return _.length}
dan beberapa tes:
Edit: Ditambahkan? untuk mengganti jika dan mengganti Kesalahan dengan objek yang tidak ditentukan.Sunting 2: Saya menyadari jumlah byte saya salah, dan menghapus g =
sumber
GolfScript,
1416 KarakterSeperti banyak yang lain, cukup bandingkan input
'google'
dan bagi panjangnya dengan kebalikan dari hasilnya.Contoh program:
'bing'
(output:4
)'google'
(output: Kesalahan: Berusaha membagi dengan nol. )sumber
Terjebak , 16 Bytes
Mengikuti metode yang mirip dengan kebanyakan orang, akan menyebabkan kesalahan pembagian 0 pada "google" sebagai input.
sumber
Windows Batch, 118 karakter
Output adalah% stringlength%.
Kode lengkap:
Dimodifikasi dari jawaban Joshua Honig, di sini .
sumber