Terlepas dari protes Anda, Anda telah dipekerjakan oleh atasan Anda pada sebuah program yang menggunakan bilangan bulat tak bertanda sebagai input dan mencetak string "prima" jika bilangan bulat itu prima dan "tidak prima" jika tidak. Anda dapat memilih bahasa tempat Anda melakukan ini, selama program yang dihasilkan pendek; bos Anda sangat menghargai jumlah karakter yang rendah. (Dia benar-benar akan menghitung karakter secara manual setelah dia mencetak kode sumber.)
Jadi Anda lebih baik mencapainya, jumlah karakter terendah menang.
Bagian yang menyenangkan
Ini hanya antara Anda dan saya, tetapi program Anda juga harus valid dalam bahasa lain. Dalam bahasa ini, ia seharusnya mencetak string "Jika bos menemukan ini, saya berhenti.". Pastikan bos Anda tidak menemukan ada penghinaan tersembunyi ketika membaca kode berulang-ulang karena ia terus lupa jika ia menghitung sampai 17 atau 18 sejauh ini. Untuk alasan itu Anda tidak boleh menggunakan kata apa pun dalam "bos menemukan ini berhenti" di bagian kode juga tidak dapat Anda gunakan dan anagram dari 5 kata itu.
Tantangan bonus yang saya buat untuk hadiah
Menulis program yang benar-benar terlihat seperti itu hanya memecahkan pertanyaan pertama dengan mata yang tidak terlatih dan tampaknya tidak mengandung karakter yang tidak perlu. Ini termasuk komentar dan segmen kode yang jelas tidak berkontribusi apa pun. Idealnya, orang awam akan percaya bahwa program Anda sebenarnya sesingkat mungkin tanpa menjadi tidak terkendali. Komentar yang bermanfaat di sana-sini tidak masalah.
Aturan untuk tantangan bonus sedikit lebih longgar, daripada dinilai berdasarkan kriteria yang mudah diukur, program Anda akan dinilai lebih banyak tentang bagaimana hal itu sampai kepada saya (dan pemilih tentu saja)
Saya akan menjadi hakim terakhir yang entri paling dekat dengan layak mendapatkan hadiah ini.
Sunting:
Setelah beberapa menit penghitungan bos Anda, dia meminta salah satu kolega Anda menulis program penghitungan karakter untuknya. Jadi, bahkan karakter yang tidak terlihat dihitung terhadap jumlah karakter Anda.
Jawaban:
CJam ( GolfScript ),
6059 byteTerima kasih kepada @mnbvmar untuk bermain golf 1 byte!
Bagaimana cara kerjanya (CJam)
Cobalah online!
Bagaimana cara kerjanya (GolfScript)
Cobalah online!
sumber
Python 2 / Python 3 - 128
Mengidentifikasi bilangan prima dengan Python 2 , membuat Anda kesulitan dengan Python 3 .
Bonus
Cobalah dengan Python 2 atau Python 3 ! (Berbeda dengan versi golf di atas peran berubah: Python 3 adalah pengidentifikasi bilangan prima. Python 2 berisi telur Paskah.)
Tolong, maafkan bahasa Inggris saya yang buruk di teks bantuan! ;)
Dan saya menggunakan kata "berhenti". Tapi entah bagaimana saya perlu menjelaskan kapan program saya berakhir. ;)
sumber
/
masalah"? (divisi integer vs divisi floating point)Pengajuan bonus (C / C ++ 11)
Pengujian primality menggunakan metode naif yang biasa begitu mainstream. Itu sebabnya saya telah menemukan metode naif acak baru! Tes ini adalah sebagai berikut:
sqrt(n)
.not prime
.20sqrt(n)
waktu pengujian ini , hasilnyaprime
, ulangi lagi.Jika angkanya gabungan, hanya ada sedikit kemungkinan (sekitar 10 -9 ) yang tidak berfungsi. Tentu saja, saya tidak percaya generator nomor pseudorandom C / C ++ cukup kuat. Itu sebabnya saya menggunakan generator LFSR 256-bit saya sendiri !
C ++ 11 bekerja dengan benar. Namun, kompiler C tampaknya mengeluarkan program yang salah untuk n> 2 ...
Catatan : ingat bahwa C membutuhkan
-lm
opsi (tautan perpustakaan matematika) untuk dikompilasi dengan sukses.Jika Anda menemukan output salah berikut:
salah, cukup hapus
fprintf
baris yang sesuai .sumber
Mathematica / Brainfuck, 260
sumber
Golfscript / Javascript (126
125129130132134205207)Coba Golfscript di sini dan Javascript di sini .
Saya akan mengatakan itu sangat dekat dengan solusi Mathematica yang, bagaimanapun, memiliki pemeriksaan bawaan untuk bilangan prima.
Sunting: Terima kasih kepada Peter karena telah menyimpan
duaenam byte lagi!Berikut beberapa detailnya:
1.
diperlukan karena berikut//
ini adalah komentar dalam Javascript, tetapi melakukan pembagian dua kali dalam Golfscript. Ini akan error jika tidak ada yang ada di stack, jadi kita perlu memberikannya dua angka. Kebetulan,1.
ini adalah sintaks yang benar-benar valid dalam Javascript dan hanya akan diabaikan."…"{(}%
mengambil string, mengurangi nilai kode karakter mereka dengan satu dan mendorongnya sebagai string. Ini menghasilkan string yang perlu kita cetak.'
mulai string dalam Golfscript yang secara default meluas ke beberapa baris, menyebabkan Javascript di bawah ini hanya dimasukkan ke dalam string.';#'
menutup string multi-baris dalam Golfscript, membuangnya dan kemudian mengabaikan sisa baris. Dalam Javascript, ini hanyalah string literal yang akan diabaikan.sumber
1+
adalah)
. Dan1 1
adalah1.
, yang saya menduga JS akan bahagia dengan seperti1
{)}/]""+
bisa saja{)}%
.C ++ / C99 / C90 - 248
Kode akan berjalan dengan baik di C90, tetapi dapat menunjukkan sesuatu yang lain di C99 / C ++.
Hapus golf untuk kejelasan:
Bagaimana ini bekerja: Karena C90 tidak mengenali komentar baris tunggal, string masalah tidak lagi dikalikan dengan nol.
sumber
for
. Ini mencetak "tidak tidak prima" jika Anda memasukkan 6. Juga mencetakprime
untuk nol dan satun
di awal menetapkan nomor utama yang bisa ditemukan.prime
untuk nol dan satu, seperti pqnet perhatikan sebelumnya.CJam / Ruby,
132959187Solusi saya sebelumnya sangat direkayasa secara berlebihan; yang satu ini sangat terinspirasi oleh solusi Martin Büttner, termasuk kesadarannya bahwa
#bytes
metode tersebut tampaknya dapat menghambat.Bagaimana cara kerjanya?
Karakter komentar Ruby (
#
) adalah operator eksponensial di CJam, jadi kita akan membutuhkan setidaknya dua angka pada stack sebelum kita mulai, tetapi dua angka telanjang (0 0
) adalah kesalahan sintaksis dalam Ruby. Namun, satu saja baik-baik saja, dan, sangat membantu, angka-angka Ruby dapat berisi garis bawah sebagai pemisah (1_234
)._
adalah operator duplikasi CJam, jadi kita perlu pop dua kali (;;
) setelah kita berada di dalam komentar.limp
membaca baris dari input standar, mengubahnya menjadi integer, muncul, dan mendorong apakah itu prima atau tidak.Untuk masuk ke mode Ruby, kita membuka sebuah string dan melanjutkan ke baris berikutnya sehingga kita tidak lagi dalam komentar Ruby (dengan demikian, baris baru itu signifikan dan harus dihitung). Setiap karakter pesan diterjemahkan dan dicetak, dan kemudian kita mulai komentar Ruby lainnya sehingga kita dapat menutup string CJam dengan aman sebelum muncul. Apa yang tersisa di tumpukan adalah apakah inputnya prima, yang akan dicetak pada penghentian program CJam.
CJam / Whitespace, 353 (25 bermakna saat dicetak) karakter
Mengingat sifat tantangan yang tidak jelas, dan fakta bahwa bos akan mencetak program kami untuk menghitung karakter, saya menerima saran untuk melakukan solusi yang melibatkan Whitespace .
Bertentangan dengan pernyataan saya sebelumnya bahwa program spasi putih terpendek yang mencetak "Jika bos menemukan ini, saya berhenti." akan menjadi 372 karakter, yang ini melakukannya di 330. Caranya adalah dengan menggunakan
copy
instruksi untuk memetik karakter yang berulang dari suatu tempat di stack daripada mendorong semua nilai ASCII, yang selalu akan menjadi jauh lebih besar dan karenanya membutuhkan lebih banyak ruang dan tab untuk menyandikan. Berikut ini adalah representasi pseudo-assembly program untuk yang penasaran:sumber
#chars
dan#lines
juga, yang harus saya ingat untuk tantangan di masa depan.chars
dan itu tidak berhasil karena suatu alasan.limp4*"not prime">
untuk membuatnya lebih pendekPenyerahan Hadiah Bonus (Perl / B? F? N? E-? 3)
Sunting: Saya awalnya lupa untuk benar-benar mencetak kalimat dan kemudian menyadari itu akan mencetaknya dalam urutan terbalik. Saya perhatikan ini setelah selesai. Saya hampir siap untuk membunuh anak kucing, tetapi saya memperbaikinya sekarang.
Ini sama sekali tidak singkat, tetapi saya percaya bahwa membuatnya tidak mencurigakan dan pendek adalah tugas yang sangat sulit. Sebagian besar saya telah menggunakan kembali salah satu kiriman golf saya yang sebenarnya, tetapi dalam yang ini saya akan mengatakan bahasa kedua sangat sulit dikenali.
Jika bos menemukan ini, saya benar-benar berhenti, karena saya tidak akan pernah bisa secara diam-diam menghinanya dan jika saya tidak bisa melakukan itu, apa gunanya?
Membengkokkan
dan MelanggarAturan:Saya menggunakan kata "the" di sana, tetapi bukan "the" yang dicetak. Mungkin secara teknis tidak valid, saya akan membiarkan OP memutuskan apakah aturannya harus seketat ini untuk tantangan bonus. Jika demikian, maka jadilah itu.sumber
^
= naik). Surat-surat komentar tertentu ditempatkan pada tumpukan, yang dicetak pada akhirnya, dicetakIf the boss finds this, I quit.
Lihat contoh melalui URL dalam reaksi Ingo:"!dlrow olleH">:#,_@
Mathematica / Ruby,
115106 byteBagian Mathematica sedikit terinspirasi oleh pengajuan Peter Olson, tetapi polyglotting dengan Ruby sedikit lebih rumit di sini.
Ruby berfungsi, karena keduanya
#
mengomentari semua yang Mathematica. Alasan mengapa Mathematica bekerja sedikit lebih menarik. Kode yang ingin saya jalankan adalah:Tapi itu bukan Ruby yang valid, jadi saya perlu menambahkan suatu
#
tempat.#
adalah parameter Mathematica untuk fungsi anonim. Jadi saya letakkan#
di depan, yang mengalikan argumen dengan hasilIf
. Ya, itu akan menggandakannya dengan string , apa pun artinya. Kemudian saya mengubahnya menjadi fungsi anonim&
dan langsung menyebutnya dengan argumen1
. Yah, Mathematica cukup pintar untuk mengetahui bahwa perkalian dengan 1 selalu merupakan identitas dan hanya menghasilkan string. Setelah itu, kode Ruby cukup dimasukkan dalam komentar blok.sumber
C (Penyerahan Bonus)
Versi C adalah pemeriksa utama, input array di bagian atas. Coba tebak bahasa apa yang dihasilkan
If the boss finds this, I quit.
(Ini bukan Whitespace).Bahasa lainnya:
sumber
Perl / Befunge-93 (108
106110)Kiriman kedua saya, hanya karena. Juga menggunakan ekspresi reguler. Saya yakin ada pilihan yang lebih baik daripada Perl, misalnya Oktaf, tetapi saya tidak tahu cara mencetak dengan cara yang singkat.
Saya menyalahgunakan aturan untuk string yang akan dicetak karena saya menghindari anagram dengan membaginya menjadi beberapa string.
Nomor yang akan diperiksa diambil dari stdin.
if
bukannyaunless
4 byte yang disimpan.sumber
Lua / PBrain (prosedural Brainf * ck) - 813
Heh ... Maaf, terjebak dalam usaha untuk menjadi licik. PBrain sama seperti BF, tetapi memungkinkan Anda untuk memicu dan mendefinisikan blok kode BF yang dapat digunakan kembali. Penggunaannya sama sekali tidak perlu.
sumber
Python 2 / Rot13 - 270 Bytes (69 tidak termasuk komentar)
Ini menggunakan algoritma yang sangat sederhana (yaitu tidak efisien). Ketika dijalankan dengan rot13 (bisa dibilang bukan bahasa pemrograman), ia menghasilkan kalimat yang diperlukan (bersama dengan omong kosong lainnya).
Bagian terburuknya adalah bahwa komentar menyatakan yang jelas dan tidak berguna sama sekali.
Ini adalah polyglot dengan cara lain, dengan memuat bahasa Inggris dan "Esperanto." Saya harap bosnya sendiri bukan polyglot.
sumber
05AB1E / Jelly , 28 byte
Bukan satu, tapi DUA bahasa golf!
Penjelasan dalam 05AB1E:
Penjelasan dalam Jelly:
Cobalah online! (Jelly) Cobalah secara online! (05AB1E)
sumber
Python, 403 byte
Ini dimaksudkan untuk tantangan bonus. Komentar tidak dihitung dengan bytecount.
Tes di bagian bawah kode cetak:
Max integer yang saya definisikan (mi) menyembunyikan rahasianya. Jika dikonversi menjadi hex, representasi surat ASCII dari setiap dua digit hex menyatakan, "Jika bos menemukan ini, saya berhenti." Bagian licik menggunakan fungsi chr. Jika bos tahu apa yang dilakukannya dan terlihat cukup hati-hati, dia akan tahu bahwa kode itu menyembunyikan pesan rahasia. Namun saya sedikit mengaburkan hal itu dan memberikan penjelasan yang cukup untuk seluruh hal integer maks untuk berharap meyakinkan bos bahwa itu adalah bagian yang sah dari program
Perhatikan bahwa untuk sebagian besar parameter berfungsi seperti yang diinginkan bos, tetapi jika input bukan bilangan bulat atau angkanya lebih besar dari mi, p mengembalikan kesalahan yang berisi string tersembunyi. Saya bisa saja memasukkan panggilan cetak ke dalam fungsi, tetapi saya pikir itu akan terlihat lebih nyata jika dikembalikan.
sumber
C # - 288
Tentu saja bukan yang terpendek, tetapi mungkin melewati banyak bos:
Versi yang dapat dibaca:
sumber