Pekerjaan rumah saya adalah menulis esai Mars (lihat di bawah) antara 729 dan 810 kata, inklusif. Tugas Anda adalah menulis program yang akan menghasilkan esai.
Sejarah
Sekitar pergantian abad ke-20, spiritualis Catherine-Elise Müller diduga berkomunikasi dengan orang-orang Mars. Selama trannambulasi wajib, dia akan menulis naskah Mars. Psikolog Théodore Flourney menemukan tulisan-tulisan Marsnya sangat mirip dengan bahasa Prancis asalnya, dan dalam bukunya "Dari India ke Planet Mars", ia mendokumentasikan huruf Mars Catherine.
Berikut ini secara longgar didasarkan pada alfabet itu dengan mitos panjang.
Deskripsi Masalah
Bahasa Mars memiliki 21 huruf, ditampilkan di sini di sebelah setiap padanan Latin:
Sayangnya, tidak ada Unicode untuk Mars (meskipun Mars menjadi bagian dari alam semesta), jadi kami terjebak menggunakan karakter Latin.
Sedangkan dalam bahasa Inggris fonem kita terbagi menjadi dua jenis utama (konsonan / vokal) yang secara longgar kita petakan menjadi huruf, Mars memiliki tiga jenis huruf:
- Vokal: aeimnou
- Konsonan keras: bcdgkpt
- Konsonan lunak: fhlrsvz
Selain itu, bahasa Mars berisi tanda baca tunggal - periode.
Sebuah kata Mars adalah satu set 3-9 huruf. Semua kata Mars memiliki setidaknya satu vokal, satu konsonan keras, dan satu konsonan lunak (dalam pengaturan apa pun). Sebagai contoh, fng
, cdaz
, vpi
, dan pascal
adalah kata-kata Mars.
Sebuah kalimat Mars adalah satu set 3-9 kata Mars dibatasi oleh ruang dan diikuti oleh suatu periode.
Sebuah ayat Mars adalah satu set 3-9 kalimat Mars dibatasi oleh ruang dan diikuti oleh baris baru.
Sebuah esai Mars adalah kumpulan paragraf Mars yang tidak mengandung pengulangan kata berdekatan.
Sebuah kata pengulangan contiguous adalah setiap konstruk SS di mana S adalah himpunan bersebelahan kata-kata. Perhatikan bahwa definisi ini mengabaikan batasan kalimat dan paragraf.
Contohnya
Harap dicatat: Ada satu baris baru yang mengikuti setiap contoh (karena semua paragraf Mars diakhiri dengan baris baru)
Bukan esai Mars
lorem ipsum dolor sit amet. latihan nostrud quis ullamco laboris.
...untuk banyak alasan. Contoh ini untuk menggambarkan beberapa aturan lain-lain:
- lorem bukan kata Mars karena tidak memiliki konsonan keras.
- amet bukan kata Mars karena tidak memiliki konsonan lunak. (
m
Adalah vokal Mars). - quis bukan kata Mars karena tidak memiliki konsonan keras
- quis bukan kata Mars karena q bukan huruf Mars
- berolahraga bukan kata Mars karena memiliki lebih dari 9 huruf
- latihan bukan kata Mars karena x bukan huruf Mars
Esai Mars
fng cdaz vpi. pascal patah dasar. rasa poppler enak.
... karena itu adalah paragraf Mars. Paragraf Mars berisi tiga kalimat Mars.
Bukan esai Mars
fng cdaz vpi. pascal patah dasar. aturan pascal gratis.
... karena free pascal rules.
itu bukan hukuman Mars, karena kata Mars juga free
tidak rules
ada, karena mereka tidak memiliki konsonan keras.
Esai Mars
fng cdaz vpi. pascal patah dasar. rasa poppler enak. cdaz vpi fng. istirahat dasar pascal. popplers memukul dengan keras. fng cdaz vpi.
... yang berisi dua paragraf Mars. Kalimat itu fng cdaz vpi.
muncul dua kali, tapi itu tidak masalah.
Bukan esai Mars
rasa poppler fng. cdaz vpi pascal. rusak fng cdaz vpi. pascal memecahkan planet omicron. kambing menakut-nakuti dasar. vpi piv vpi.
... karena konstruk fng. cdaz vpi pascal. broke fng cdaz vpi. [nl] pascal broke
adalah pengulangan kata yang berdekatan.
Tantangan
Tantangan Anda adalah menulis fungsi atau program yang tidak menerima input, yang menghasilkan sebagai hasil pekerjaan rumah saya; yaitu, program Anda harus menghasilkan esai Mars antara 729 dan 810 kata (termasuk). Ingatlah, output program Anda harus berupa esai Mars yang valid, tetapi Anda tidak harus membuatnya secara acak atau berbeda setiap kali. Apa pun yang Anda lakukan untuk menghasilkan esai Mars yang valid akan berarti.
Saya telah menulis program C ++ untuk memeriksa esai yang diizinkan untuk Anda gunakan.
Ini kode golf. Kode terpendek dalam byte menang. Celah standar tidak diijinkan.
Jawaban:
05AB1E ,
25242220 byte-2 byte terima kasih kepada Emigna (refactor yang signifikan, terima kasih man).
Cobalah online!
Ternyata versi 810 kata lebih pendek dari versi 729 kata.
Keluaran:
sumber
"."
bisa'.
untuk 1 byte disimpan.A7£œJðý72ô€¨'.«9ô9£»
untuk 20.Jelly ,
28 26 25 2423 byte-1 byte berkat carusocomputing (ganti kata
thimble
denganabcdefg
)TryItOnline!
Bagaimana?
Membuat daftar semua
362880
permutasi daritujuhsembilan huruf pertama dari alfabet Inggrisabcdefghi
, yang semuanya memiliki sifat kata-kata Mars dan semuanya berbeda, dan memformatnya menjadi esai menggunakan729
kata-kata pertama .* periode
sumber
abcdefg
.Ruby,
86 83 8279 byteCaranya: cetak semua angka antara 102000000 dan 102222222 di basis 3
sumber
Python 3,
121119 byterepl.it
Bagaimana?
Menghitung mundur dari
i=729
dan mendapatkan daftar surat-surat permutasi ke-i'thimble'
sebagai kata Mars yang berbeda berikutnya (list(permutations('thimble'))[i]
).Hindari
''.join(...)
penggunaan a*expression
untuk membongkar daftar sambil mengubah pemisah defaultprint
dari spasi menjadi string kosong (sep=''
).Menggunakan
end
argumenprint
untuk menambahkan spasi, berhenti penuh, dan umpan baris sesuai kebutuhan menggunakan aritmatika modular. Perhentian penuh terjadi setelah setiap kata kesembilan ('.'*(i%9<1)
) dan umpan baris dilakukan setelah setiap kata delapan puluh satu, jika tidak spasi, dicapai dengan mengindeks ke dalam string dua karakter (' \n'[i%81<1]
).sumber
Mathematica, 113 byte
Fungsi tanpa nama yang menghasilkan string sebagai output; string itu adalah esai Mars di mana setiap kalimat memiliki tiga kata dan setiap paragraf memiliki tiga kalimat. (Output deterministiknya di bawah.)
Inti dari algoritma ini menggunakan fakta matematika yang keren bahwa perbedaan sekuens Thue-Morse membentuk urutan tak terbatas dari tiga simbol –1, 0, dan 1 yang tidak memiliki pengulangan digit yang berdekatan.
Differences@Array[ThueMorse,730]
menghasilkan urutan itu, dengan panjang 729.Kemudian
"ark"["bus","car"][[#]]&/@
diterapkan pada urutan ini; ini mengonversi setiap 1 menjadi "bus" (argumen pertama), masing-masing –1 menjadi "mobil" (argumen terakhir), dan masing-masing 0 menjadi "bahtera" (kepala fungsi).(p=Partition)[...,3]~p~3
membagi urutan kata ini menjadi daftar bersarang, masing-masing terdiri dari tiga daftar masing-masing tiga kata. Akhirnya,StringRiffle[...,n=".\n",". "," "]
menggabungkan semua kata bersama-sama, dengan pemisah yang berbeda tergantung pada level daftar; dan<>n
menambahkan periode akhir dan baris baru.Outputnya tidak terlihat bebas dari pengulangan ....
Mathematica, 100 byte
Port langsung dari algoritma Jelly Jonathan Allen.
sumber
Print@"fng cdaz vpi. pascal broke basic. popplers taste great."
PHP, 86 byte
Menghasilkan esai 729 kata acak yang tidak mengulangi kata-kata.
Gunakan seperti:
Penjelasan:
sumber
///, 95 byte
(tambahan baris baru di akhir, tidak terlihat di sini)
Cobalah online!
Karangan:
sumber
JavaScript (ES6), 130 byte
Esai ini berisi 774 kata Mars, dari kamus 308 kata yang berbeda, terbuat dari semua huruf Mars.
Surat diambil dengan cara pseudo-acak, menggunakan rumus berikut:
Di mana
71
prime terkecil [1] yang tidak ada pengulangan kata yang berdekatan dengan modulo ini.Tampilkan cuplikan kode
[1] Saya hanya menguji bilangan prima pada saat saya menulis kode ini. Kandidat non-prime terkecil adalah
56
.sumber
Python 3,
404270332339285266259 byteIni adalah upaya untuk membuat esai Mars acak saya secara acak sampling abjad Mars dan memeriksa kata-kata yang berfungsi.
Sunting: -10 byte dari saran Zachary T untuk digunakan
R=range
. -9 byte berubah.intersection(w)
menjadi&set(w)
. -7 byte dari berubahA[random.randrange(21)]
menjadirandom.choice(A)
.Tidak melakukanolf
sumber
import
)range(9)
ke variabel, dan&
bukan.intersection
?range
, lalu menggunakannya?