Karena akhir pekan pertama bulan Oktober semakin dekat, mari kita dapatkan Oktoberfest kita sendiri!
Latar Belakang
Anda dan beberapa programmer lain telah disewa oleh orang-orang sosis lokal di Munich, Jerman. Para sosis menyediakan bagi Oktoberfest semua sosis yang dibutuhkan Volksfest raksasa. Anda berhasil mendengar atasan Anda berbicara kepada karyawan lain tentang mengapa Anda dan yang lain dipekerjakan tanpa pengalaman terkait sosis sebelumnya. Anda sadar bahwa Anda direkrut karena keterampilan pemrograman Anda yang sempurna - dan bos Anda tampaknya ingin Anda membuat kode penganalisa sosis.
Tahun ini, para sosis telah memutuskan untuk menambah variasi sosis di Oktoberfest - tetapi mereka tidak tahu berapa banyak yang mereka impor.
Tantangan
Anda perlu membantu atasan Anda mencari tahu berapa banyak sosis jenis tertentu yang sebenarnya mereka impor. Anda harus memprogram alat analisis sosis yang menghasilkan jenis dan jumlah setiap sosis yang diimpor oleh sosis. Atasan Anda telah membeli sebuah floppy drive khusus untuk kesempatan ini yang, dengan sosis, siapkan stdin
.
Memasukkan
Sejumlah sosis menyala stdin
, masing-masing sosis dipisahkan oleh satu ruang. Sosis diberikan dalam format berikut:
Prinskorv (P)
¤
| |
| |
| |
¤
Salchichón (S)
l
| |
| |
| |
| |
l
Landjäger (L)
\ /
| |
| |
| |
| |
/ \
Kabanos (K)
.
|
|
|
|
|
.
Cotechino Modena (C)
___
| |
| |
| |
|___|
Rød pølse (R)
^
| |
| |
| |
| |
v
Keluaran
Kemunculan sosis yang diberikan bersama dengan pengidentifikasi jenis sosis itu, dipisahkan oleh spasi. Pengenal adalah huruf pertama atas nama sosis. Ketertiban tidak penting.
Keluaran harus ditulis untuk stdout
, mengikuti garis dan ruang baru diizinkan.
Contohnya
Memasukkan
^ ^ ^ ^ .
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
v v v v |
.
Keluaran
4R 1K
Memasukkan
\ / ___ l ¤ ¤
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | |___| | | ¤ ¤
/ \ l
Keluaran
1L 1C 1S 2P
Memasukkan
l ¤ l
| | | | | |
| | | | | |
| | | | | |
| | ¤ | |
l l
Keluaran
2S 1P
Programmer dengan program terpendek dalam byte dibayar oleh orang sosis (menang)!
Trivia sosis
Prinskorv
Prinskorv yang secara langsung diterjemahkan menjadi "pangeran-sosis" adalah sosis Swedia kecil yang sering dijual dengan tautan. Biasanya digoreng dalam wajan dan disajikan dengan mustard yang murah hati.
Salchichón
Salchichón adalah sosis musim panas Spanyol yang sering dibuat dengan daging babi, meskipun beberapa resep menggunakan daging lain termasuk sapi, sapi atau kuda. Daging dan lemak dipotong-potong tipis, dibumbui dengan garam, merica, pala, oregano, dan bawang putih dan kemudian dimasukkan ke dalam usus babi alami yang tebal.
Landjäger
Landjäger adalah sosis semi-kering yang dibuat secara tradisional di Jerman Selatan, Austria, Swiss, dan Alsace. Ini populer sebagai makanan ringan selama kegiatan seperti hiking. Ini juga memiliki sejarah sebagai makanan prajurit karena disimpan tanpa pendingin dan datang dalam porsi sekali makan.
Kabanos
Kabanos adalah sosis kering tipis panjang Polandia yang terbuat dari daging babi atau kalkun halal. Mereka berasap dalam rasa, dan bisa lunak atau sangat kering dalam tekstur tergantung pada kesegaran. Kabanosy sering dibumbui hanya dengan lada. Tidak seperti daging lainnya, sosis ini biasanya dimakan sendiri sebagai hidangan pembuka dan, kecuali saat halal, sering disajikan dengan keju.
Cotechino Modena
Cotechino Modena atau Cotechino di Modena adalah sosis segar yang terbuat dari daging babi, lemak, dan kulit babi, dan berasal dari Modena, Italia, di mana ia memiliki status PGI. Cotechino sering disajikan dengan lentil atau kacang cannellini dengan saus bersama kentang tumbuk, terutama sekitar Tahun Baru.
Rød pølse
Rød pølse (sosis merah) adalah jenis sosis babi merah yang direbus, sangat umum di Denmark. Karena gerai hot dog ada di mana-mana di Denmark, beberapa orang menganggap røde pølser sebagai salah satu hidangan nasional.
Semua informasi sosis tanpa malu-malu disalin dari Wikipedia
Jawaban:
Pyth, 30 byte
Cobalah online: Demonstrasi atau Test Suite
Penjelasan:
Seperti semua peserta lainnya, saya hanya melihat pada baris pertama dari input. Katakanlah baris input pertama adalah
\ / ___ l ¤ ¤ ____
.Pada awalnya saya membaginya dengan spasi, yang memberi saya daftar
Sekarang kita ingin mendapatkan tumpangan dari
'/'
dan''
dan semacam hal yang tersisa.Sekarang saya bisa menjalankan-panjang-menyandikannya.
Ternyata, urutan (nilai ascii) dari karakter ini atau string
'___'
dapat dipetakan dengan baik ke angka[0, 1, 2, 3, 4, 5]
.Dan ini dapat digunakan untuk memetakannya langsung ke huruf
SKLCRP
.sumber
Pyth,
36343230 byteDisimpan belum lagi 2 byte berkat ... tebak siapa? : D
Abaikan semua input kecuali untuk baris pertama, hapus semua
/
s dan spasi, terjemahkan ke pengidentifikasi target, sortir, gunakan pengkodean run-length, dan cetak hasilnya.Demo langsung.
Versi 32 byte
Demo langsung.
Disimpan 2 byte lagi berkat @Jakube!
Versi 34 byte
Demo langsung.
Disimpan 2 byte berkat @Jakube!
Versi 36 byte
Demo langsung.
sumber
hM-czd\\
sama dengan-hMfTczd\\
¤
adalah dua byte.Javascript (ES6), 105
Ini cukup sederhana tapi ini penjelasannya:
sumber
a=>(h=-1,[for(g of'¤l/._^')if(f=(a.split(g).length-1)/'222261'[++h])f+'PSLKCR'[h]].join` `)
Kalau saja saya bisa menyederhanakan deklarasih
...CJam,
383533 byteUji di sini.
Penjelasan
Baris pertama dari setiap jenis sosis unik, dan karena sosis disejajarkan di atas, itu cukup untuk menghitung karakter yang relevan di baris pertama. Dua jenis memerlukan perawatan khusus:
\
dan/
. Kami ingin menyingkirkan salah satu dari mereka, maka kami dapat menghitung yang lain seperti semua karakter lainnya.C
segera.Sekarang untuk kode aktual:
sumber
Mathematica 116
Beberapa byte mungkin bisa dicukur habis, tetapi tidak ada yang mendekati bahasa golf.
ImportString[#,"Table"][[1]]
mengembalikan daftar string yang dipisahkan ruang yang muncul di baris atas input. String dapat menyertakan salah satu elemen dalam daftar{"¤","l","/","___",".","^"}
, termasuk pengulangan. Setiap elemen dikaitkan dengan jenis sosis yang unik.Tally
menghitung berapa kali setiap string tersebut muncul./.{"¤"->"P","l"->"S",...
menggantikan¤
denganP
,l
denganS
dan seterusnya.Reverse
menempatkan setiap penghitungan sebelum item yang dikaitkan dengannya.Keduanya
Row
memformat output.sumber
MATLAB, 113
Dengan asumsi bahwa spasi tambahan diperbolehkan(ya itu), berikut adalah fungsi anonim MATLAB:Dan sebuah penjelasan:
Tampaknya berfungsi dengan benar. Masih memiliki ruang trailing, tetapi sekarang menangani semua sosis dengan benar.
sumber
Perl,
8477 byteSeseorang mungkin bisa mencukur sedikit dari ini ...
84 byte
77 byte
Kerusakan:
Ambil baris pertama STDIN, nilai transliterasi ke dalam kode surat, hapus sampah tambahan. Itu
d
pengubah harus benar-benar diperlukan, tapi aku berlari ke masalah unicode aneh pada¤
karakter tanpa itu.Gunakan referensi simbolis untuk membuat dan / atau menambah variabel untuk setiap karakter yang ditemukan.
Bagilah variabel C dengan 3, karena triple-underscore
Lingkari alfabet dan cetak variabel huruf kapital bersama huruf jika mereka memiliki nilai lebih besar dari nol
Hasil tes: http://ideone.com/alpUlI
Sunting : Memotong 7 byte dengan memiliki transliterasi meneruskan nilai pengembalian anonim langsung ke
split
.sumber
Perl, 172 byte
Daresay masih dapat dipotong sosis ini, tapi ini adalah starter untuk sepuluh.
Versi tidak disatukan
Hasil tes
sumber
Python 3, 120 byte
Saya cukup yakin Anda dapat mempersingkat ini, tetapi belum ada solusi Python jadi di sini kita mulai:
Penjelasan
Ini cukup sederhana, beberapa orang bahkan mengatakan dapat dibaca, tetapi inilah penjelasan singkatnya:
Satu baris input pertama dibaca, karena setiap sosis dapat ditentukan hanya dari baris pertama.
Sekarang
a={z:x.count(y)for y,z in zip('¤l/.^_','PSLKRC')}
adalah pemahaman kamus yang memetakan pengidentifikasi setiap jenis sosis (z
) ke jumlah masing-masing jenis sosis (x.count(y)
, di manay
karakter mendefinisikan sosis).Kami kemudian membagi jumlah sosis Cotechino Modena (C) dengan 3 karena tiga garis bawah.
Akhirnya kami mencetak hasilnya:
print(' '.join(str(a[x])+x for x in a if a[x]))
. Ini menciptakan jumlah output masing-masing sosis satu per satu, tetapi hanya jika sosis itu dilihat setidaknya satu kali (a[x]
bukan nol => Sejati). Setiap string hitung digabungkan dengan spasi dan dicetak.sumber