Tantangan ini terdiri dari dua bagian. Pemenang akan menjadi solusi dengan jumlah byte total terendah. Bahasa yang sama harus digunakan untuk kedua tantangan.
Bagian 1:
Tulis fungsi atau program yang mengambil kalimat dengan hanya kata - kata yang valid sebagai input, dan menampilkan daftar karakter yang digunakan, berapa kali setiap huruf digunakan, dan jumlah huruf di setiap kata dalam kalimat asli. Output dari program ini harus merupakan input yang valid ke program berikutnya (persis seperti yang dikeluarkan)
Saya akan menambahkan contoh dan aturan rinci lebih jauh ke bawah.
Bagian 2:
Tulis fungsi atau program yang mengambil output dari program pertama sebagai input dan menggunakan daftar kata - kata bahasa Inggris ini dan membuat ulang kalimat dengan informasi dari output. Kalimat tidak harus sama dengan kalimat aslinya.
Informasi lebih lanjut aturan dan batasan:
Bagian 1:
- Input pertama dapat berupa format yang sesuai, dengan atau tanpa tanda kutip, sebagai argumen fungsi atau dari STDIN, dengan atau tanpa tanda kurung dll.
- Kalimat input tidak akan berisi tanda baca atau karakter khusus, kecuali titik / titik pada akhirnya. Kecuali untuk simbol periode, semua karakter yang ada dalam input akan ada dalam daftar kata.
- Huruf pertama dari kalimat akan menjadi huruf besar, sisanya akan menjadi huruf kecil.
- Keluaran dari bagian 2 harus dimulai dengan huruf besar yang sama dengan kalimat asli (jadi mengonversi input ke huruf kecil tidak dianjurkan (tapi OK).
- Outputnya bisa dalam format apa saja yang sesuai:
- Harus dimungkinkan untuk menyalin-menempelkan output langsung ke program / fungsi berikutnya
- Tidak ada perubahan yang dapat dilakukan saat copy-paste, seluruh output harus disalin dan ditempelkan secara keseluruhan, bukan sebagian.
- Misalnya, Anda dapat menampilkan histogram dari semua huruf dalam alfabet, atau hanya huruf yang digunakan (secara umum, apa pun yang diperlukan untuk menyelesaikan bagian 2)
- Anda tidak dapat menampilkan daftar karakter di mana beberapa kejadian berulang. Misalnya,
The queue
tidak dapat menghasilkan output:Teeehquu (3,5)
, itu harus sesuatu seperti:Tehqu, (1 3 1 1 2),(3 5)
.
Bagian 2:
- Program / fungsi harus menerima input persis seperti dari bagian 1 (satu pengecualian, lihat komentar di bawah tentang mengambil nama file sebagai input.).
- Jika tanda kurung di sekelilingnya, tanda kutip atau yang serupa diperlukan untuk mengurai input maka ini harus menjadi bagian dari output dari bagian 1.
- Daftar kata dapat ditemukan di sini.
- Daftar kata dapat disimpan secara lokal sebagai
w.txt
, atau dapat diambil dari url. Url hanya akan dihitung sebagai 5 byte, jadi Anda tidak perlu pemendek-url. - Jika program tidak dapat membuka file tanpa membaca nama sebagai input dari STDIN (saya percaya ini
adalahkasus untuk Pyth setidaknya), maka nama file dapat diambil sebagai argumen input yang terpisah.
- Daftar kata dapat disimpan secara lokal sebagai
- Output harus hanya berupa kalimat (daftar kata yang valid), diakhiri dengan titik dan baris opsional.
- Output harus memiliki kata-kata dengan jumlah huruf yang sama dengan kalimat asli di bagian 1 (dalam urutan yang benar)
- Semua huruf yang digunakan dalam kalimat asli harus digunakan dalam output baru.
- Kalimat harus dimulai dengan huruf besar sama dengan kalimat input asli dan diakhiri dengan tanda titik.
Kedua bagian:
- Tidak satu pun dari bagian-bagian itu harus memakan waktu lebih dari 2 menit untuk dieksekusi (memilih secara acak kata-kata sampai solusi tercapai tidak diterima).
Dengan aturan yang tercantum di atas, harus ada peluang yang adil bahwa kalimat yang sama persis direproduksi, namun itu bukan persyaratan.
Contoh:
Dalam contoh di bawah ini, beberapa format input dan output yang berbeda ditampilkan. Banyak lagi yang diterima.
Bagian 1:
Memasukkan:
Zulus win.
Tipe output 1:
Z i l n s u w
1 1 1 1 1 2 1
5 3
Tipe output 2:
(('Z',1),('i',1),('l',1),('n',1),('s',1),('u',2),('w',1)), (5,2)
Tipe output 3:
'Zilnsuuw',[1,1,1,1,1,2,1],[5,2]
Bagian 2:
Input: Salinan persis dari output dari bagian 1. Output:
Zulus win.
Perhatikan bahwa kombinasi kata lain diterima selama mereka mulai dengan a Z
, dan kata pertama memiliki 5 huruf dan yang kedua memiliki 3.
Kode terpendek dalam byte menang.
f1
yang disisipkan kef2
harus berisi semua data yang ditentukan dalam tantangan. Tidak ada data tambahan yang dapat menjadi bagian dari output darif1
. Tidak ada data yang dapat "disimpan" dalamf1
membuat informasi tersedia saat memanggilnyaf2
.f1
hanya dapat mengambil satu string sebagai input per panggilan.Jawaban:
LabVIEW, 166 LabVIEW Primitif
Pertama-tama saya tidak membuat 2 program terpisah karena Labview melakukan aliran data sehingga benar-benar tidak perlu.
Menyimpan histogram dengan elemen pertama = kode ASCI dari istirahat huruf pertama dari 1-26 pergi dengan jumlah. Panjang cukup disimpan dalam array.
Kata pertama memiliki 3 cek, huruf pertama, panjang dan huruf yang tersedia dalam histogram. Pemeriksaan huruf pertama berhenti setelah kata pertama.
Saya memeriksa histogram dengan menurunkannya untuk setiap huruf dan memeriksa apakah itu akan jatuh di bawah 0.
Jika saya menemukan kata ke-N saya dan tidak ada kata-kata yang dapat dibangun dari huruf sisa saya akan mulai menghapus kata-kata dari kamus dan mengulang kata ke-N dan seterusnya sampai saya menemukan solusi.
Ini mungkin atau mungkin tidak berfungsi untuk kalimat yang ada, karena itu akan memakan waktu lama untuk dihitung (contoh saya sudah beberapa detik)
Apa yang saya coba
sumber
Python 2.7, 353 byte
Sayangnya, saya tidak dapat mengujinya dengan file ATM w.txt yang sebenarnya karena QPython untuk Android sepertinya tidak dapat menangani file I / O. Ini bekerja dengan data yang saya salin dan tempel.
Bagian 1, 76 byte
Di:
'Hi there.'
Di luar:
{'H':1, 'i':1, 't':1, 'h':1, 'e':2, 'r':1}, (2, 5)
jadi, daftar berisi:
sebuah hashmap dengan histogram
daftar jumlah surat
Bagian 2, 277 byte
Saya sangat senang saya berhasil membuatnya 100% murni fungsional. Tidak yakin apakah itu membantu dengan bermain golf yang sebenarnya, tetapi saya benar-benar mendapatkan bagian kebingungan: D Inilah versi pt yang lebih ramah manusia. 2 (aliran yang persis sama, tetapi dengan nama variabel):
sumber
Perl,
516504 bytetermasuk 2x +1 untuk
-p
Harus ada
w.txt
dalam format unix (\n
akhir baris). Menggunakancat
untuk membaca file; ubah ketype
untuk windows.Simpan oneliner di atas
534.pl
dan jalankan sebagaiecho Test. | perl -p 534.pl
.Cukup besar, tapi ini awal - banyak peluang bermain golf, tapi saya hanya ingin mempostingnya untuk membuat LabVIEW menjawab lebih sedikit kesepian ;-). Saya telah menghilangkan optimisasi untuk eksekusi sub-detik, menghemat 30+ byte.
Cuplikan pertama (73 byte):
Ini menghasilkan histogram dan kata lenghts dalam format yang kompak. Untuk input
Zulus win.
itu menghasilkan output tipe-2 tanpa(,)
, yang tidak perlu di sini:Ini dia, ungolfed:
Cuplikan kedua (441 byte)
Bagian utama ini berkaitan dengan I / O dan perlakuan khusus dari huruf pertama, menggunakan subrutin
g
danh
yang tercantum di bawah ini.Fungsi rekursif ini mengambil salinan histogram, salinan jumlah kata yang tersisa, dan kata saat ini. Jika array kata-panjang kosong, mengembalikan true. Jika tidak, maka akan mengurangi hitungan histogram untuk huruf dalam kata yang diberikan, mengambil panjang kata berikutnya, dan menemukan daftar kata yang sesuai dari daftar kata. Untuk setiap kata yang cocok, kata itu berulang.
Dan akhirnya, subrutin ini diberi kata dan kalimat histogram. Ini menghitung histogram baru untuk kata dan memeriksa apakah semua huruf tidak muncul lebih sering daripada yang diizinkan oleh histogram kalimat.
Anda dapat menempelkan cuplikan yang tidak dipisahkan (
sub i/o/g/h
) dalam satu file dan menambahkan kode tes di bawah ini.substr
dan parameter untuksub g
.sumber