pengantar
Anda menggunakan Twitter (mari berpura-pura, jika tidak), di mana Anda dibatasi hingga 140 karakter per tweet individu yang ingin Anda bagikan dengan dunia. Jika Anda ingin mengirim tweet ke alamat Gettysburg dari Abraham Lincoln , maka Anda perlu memecah teks menjadi beberapa bagian 140 karakter untuk mengeluarkan seluruh pesan. Namun, potongan-potongan itu tidak selalu harus tepat 140 karakter. Katakanlah misalnya, kami memecah pidato menjadi potongan 17-karakter, kami akan berakhir dengan tweet ini:
- EMPAT SKOR DAN SE
- VEN TAHUN YANG LALU KAMI
- AYAH DIPEROLEH
- FORTH ON CON INI
- TINENT A NATI BARU
- DI BANDINGKAN DI L
- (dan seterusnya)
Itu tidak baik! Ketika kata-kata individual dipecah, maka akan sulit untuk memahami apa yang ingin Anda katakan. Juga, di twitterverse, salah satu pengikut Anda mungkin menemukan tweet tertentu dan tidak menyadari bahwa ada lebih banyak pesan, sehingga Anda ingin memberi nomor pada tweet Anda sehingga mereka memiliki beberapa konteks untuk bekerja dengan (masih menggunakan potongan 17 karakter ):
- (1/7) EMPAT SKOR DAN
- (2/7) TUJUH TAHUN YANG LALU
- (3/7) AYAH KAMI
- (4/7) DIPEROLEH UNTUK
- (5/7) KONTINEN INI A
- (6/7) BANGSA BARU
- (7/7) DIKONSTRUKSI DI ...
Anda dapat secara manual mengetahui konfigurasi terbaik untuk tweet Anda dengan tangan, tetapi untuk itulah kami memiliki komputer!
Tantangan
Dalam kode sesingkat mungkin, parsing Alamat Gettysburg (atau teks apa pun, tapi kami akan tetap menggunakan yang ini sebagai contoh) ke dalam serangkaian tweet yang terdiri dari tidak lebih dari 140 karakter (asumsikan ASCII, karena teks contoh kami seharusnya tidak memiliki bit yang tidak biasa / tidak biasa di dalamnya).
Detail
- Fungsi / program / etc Anda harus menggunakan argumen string tunggal dan menghasilkan satu baris teks untuk setiap tweet.
- Asumsikan input ini tidak akan pernah menghasilkan lebih dari 99 total tweet ketika diuraikan, terlepas dari bagaimana Anda memilih untuk mengurai (selama pilihan itu masih cocok dengan poin lain dari tantangan).
- Tweet harus menyertakan
tweet number
daritotal tweets
indikator dalam format "(x/y)
" sebelumnya tubuh tweet.- Hitungan ini akan mengambil bagian dari ruang 140 karakter Anda!
- Potongan Tweet hanya dapat dibagi pada baris atau spasi baru.
- Tanda hubung, titik, koma, atau tanda baca lainnya tidak diizinkan, kecuali segera didahului atau diikuti oleh spasi atau baris baru.
- Tweet harus terdiri dari kata-kata lengkap sebanyak mungkin.
- Batasan ini sedikit fleksibel, misalnya ketika tweet terakhir Anda hanya memiliki satu kata
- Ini kode golf, jadi kode terpendek menang.
Teks Lengkap Alamat Gettysburg
(Kode Anda tetap dapat menangani string ASCII yang diteruskan ke sana.)
EMPAT NILAI DAN TUJUH TAHUN YANG LALU, AYAH KITA DIPEROLEH DENGAN KONTINEN INI, SEBUAH BANGSA BARU YANG DITENTUKAN DALAM LIBERTY DAN BERDEDIKASI DENGAN PROPOSISI YANG SEMUA ORANG DICIPTAKAN SECARA EQUAL. SEKARANG KITA TERLIBAT DALAM PERANG SIPIL BESAR PENGUJIAN BAIK BANGSA ATAU BANGSA APA PUN YANG DICIPTAKAN DAN BEGITU BERDEDIKASI BISA TAHAN LAMA. KAMI BERTEMU PADA BATTLEFIELD BESAR DARI PERANG YANG. KAMI TELAH DATANG UNTUK MENYEDIAKAN BAGIAN DARI BIDANG YANG SEBAGAI TEMPAT PENYELESAIAN AKHIR UNTUK MEREKA YANG TELAH MEMBERI HIDUP MEREKA YANG BANGSA YANG MUNGKIN LANGSUNG. ITU SANGAT COCOK DAN PROPER YANG KAMI HARUS MELAKUKAN INI. TETAPI DALAM SENSE YANG LEBIH BESAR KITA TIDAK BISA DEDICATE, KITA TIDAK BISA CONSECRATE, KAMI TIDAK BISA HALLOW, GROUND INI. THE BRAVE PRIA HIDUP DAN MATI SIAPA YANG BERJUANG DI SINI TELAH MENGHADAPI SEJAUH DI ATAS KEKUATAN MISKIN KAMI UNTUK MENAMBAHKAN ATAU DETRAK. DUNIA AKAN KECIL CATATAN NORA PANJANG INGAT APA YANG KITA KATAKAN DI SINI TETAPI TIDAK PERNAH LUPAKAN APA YANG MEREKA LAKUKAN DI SINI. ITU ADALAH BAGI KITA SEPERTI YANG HIDUP UNTUK DEDIKASI DI SINI UNTUK PEKERJAAN YANG TIDAK SELESAI YANG MEREKA YANG TELAH MENCARI DI SINI. LEBIH BANYAK BAGI KITA UNTUK BERADA DI SINI UNTUK BERDEDIKASI DENGAN TUGAS YANG SANGAT TINGGAL SEBELUM KITA, YANG DARI MATI TERHADAP KAMI MENGAMBIL PERUBAHAN YANG MENYEBUTKAN BAHWA MEREKA MEMILIKI TINDAKAN PENUH PENUH UNTUK DEVOSI, BAHWA KITA TIDAK HARUS MENINGGALKANNYA. TELAH MENINGGAL DI VAIN, BAHWA BANGSA INI DI BAWAH ALLAH AKAN MEMILIKI KELAHIRAN KEBEBASAN BARU, DAN BAHWA PEMERINTAH ORANG-ORANG OLEH ORANG-ORANG UNTUK ORANG-ORANG YANG TIDAK AKAN HINGGA DARI BUMI.
Jawaban:
Perl, 51 Karakter
Memerlukan command prompt -p, termasuk 1 karakter.
Penjelasan: masukkan bagian hitung sebelum dan baris baru setelah grup kata hingga 132 karakter. Masukkan placeholder (
~
) untuk total, yang kemudian diganti dengan subtitusi kedua. Ini pecah jika pesan berisi~
, tetapi orang dapat dengan mudah menggunakan karakter yang tidak patut dicetak.Sedikit curang: selalu memungkinkan tujuh karakter untuk bagian hitungan,
(nn/nn)
,. Sungguh, jika(n/n)
itu harus memungkinkan dua karakter tambahan. Namun, solusi sewenang-wenang untuk ini akan sangat meningkatkan kompleksitas masalah.sumber
\G
tidak berguna di sini, bukan?Python, 140
^ 140 karakter sebenarnya adalah kebetulan.
Sementara ada kata-kata yang tersisa, solusinya akan membuat tweet baru dari persediaan kata-kata dan menambahkannya ke daftar. Untuk setiap tweet, ia akan terus mencoba menambahkan kata-kata sampai panjang tweet mencapai lebih dari 140 karakter. Dua karakter dicadangkan untuk
total tweets
, yang diisi kemudian karena setiap tweet dalam daftar dicetak.Contoh output:
sumber
Ruby, 77 karakter
Dikemas logika menjadi ekspresi reguler tunggal. Output dari
f[text]
:sumber
Ruby, 75
Tidak bisa mengalahkan Perl, tapi setidaknya sedikit mengalahkan solusi Ruby lainnya. Perhatikan bahwa ia mencetak tweet dengan urutan terbalik (masalahnya tidak menentukan satu tweet).
sumber
VBA, 251
Mencoba metode lain ... Tidak sebagus yang asli saya, tapi saya masih mengerjakannya ...
Output:
sumber
BASH (88 Chars)
Lipat garis dengan 132 karakter (untuk memungkinkan hitungan tweet kami), pada spasi (
-s
), Baca teks mundur (tac), beri nomor teks (cat -n
), balikkan kembali (tac
). Di dalam Awk: Baris pertama (NR == 1), tetapkan huruf 'a' nilai di yang pertama. Kosongkan kolom nomor. Cetak (NR / 'a') lalu garis.Keluaran:
sumber
Javascript (hanya FF), 92 karakter
Diformat, itu adalah rip-off dari skrip Perl:
sumber
VBA, 227
Output:
sumber
Javascript (hanya FF), 135 karakter
Diformat, yaitu:
sumber
PHP, 233
Apakah saya benar dengan menganggap bahwa ini adalah jawaban pertama yang tidak curang pada bagian jumlah?
(Ini juga berfungsi dengan lebih dari 99 tweet; Saya bisa mencukur dua byte lagi jika saya mengizinkan loop tak terbatas dalam kasus itu.)
ungolfed:
sumber