Ini terinspirasi oleh fungsi yang baru-baru ini saya tambahkan ke bahasa saya Tambah ++ . Karena itu saya akan mengirimkan jawaban singkat di Add ++ tetapi saya tidak akan menerimanya jika menang (itu tidak adil)
Tidakkah kamu membencinya ketika kamu bisa melipatgandakan angka tetapi tidak membalikan? Jadi Anda harus memperbaikinya, bukan?
Anda harus menulis fungsi atau program lengkap yang mengambil dua string yang tidak kosong sebagai input dan output versi yang dikalikan.
Bagaimana Anda mengalikan string? Aku akan memberitahu Anda!
Untuk mengalikan dua string, Anda mengambil dua string dan membandingkan setiap karakter. Karakter dengan titik kode tertinggi kemudian ditambahkan ke output. Jika mereka sama, cukup tambahkan karakter ke output.
String tidak dijamin panjangnya sama. Jika panjangnya berbeda, panjang string terakhir adalah panjang string terpendek. Masukan akan selalu huruf kecil dan mungkin mengandung karakter apa pun dalam rentang ASCII yang dapat dicetak ( 0x20 - 0x7E
), tidak termasuk huruf besar.
Anda dapat menampilkan dalam format apa pun yang masuk akal, seperti string, daftar dll. Jadilah masuk akal, bilangan bulat bukanlah cara yang masuk akal untuk menghasilkan dalam tantangan ini.
Dengan input hello,
dan world!
, beginilah cara kerjanya
hello,
world!
w > h so "w" is added ("w")
o > e so "o" is added ("wo")
r > l so "r" is added ("wor")
l = l so "l" is added ("worl")
d < o so "o" is added ("worlo")
! < , so "," is added ("worlo,")
Jadi hasil akhir untuk hello,
dan world!
akan worlo,
!
Lebih banyak kasus uji
(tanpa langkah)
input1
input2 => output
programming puzzles & code golf!?
not yet graduated, needs a rehaul => prtgyetmirgduuzzlesneedsde rolful
king
object => oing
blended
bold => boln
lab0ur win.
the "super bowl" => the0usuwir.
donald j.
trumfefe! => trumlefj.
Ini adalah kode-golf sehingga kode terpendek menang! Luok!
Jawaban:
Haskell, 11 byte
Cobalah online!
Tidak banyak yang bisa dijelaskan.
sumber
zipWith
tidak terlalu aneh. Ini primitif fungsional yang cukup umum. Gagasan "zip" dua daftar bersama muncul dalam banyak masalah, dan begitu Anda melakukannya, Anda sering ingin menerapkan beberapa fungsi ke item 2-elemen yang dihasilkan, maka bagian "dengan".05AB1E , 4 byte
Menggunakan penyandian 05AB1E . Cobalah online!
sumber
ø€à
harus bekerja, tetapi tidak.Perl 6 , 22 byte
Sebagai bonus, ia menerima sejumlah multiplikasi, bukan hanya dua.
sumber
Japt , 16 byte
Uji secara online! Mengambil input sebagai array dari dua string.
Kurangnya min dan max built-in melukai Japt di sini, tetapi masih berhasil melakukan skor yang lumayan ...
Penjelasan
sumber
Jelly , 5 byte
Cobalah online!
Bagaimana itu bekerja
Contoh
Misalkan s = blended dan t = bold .
ż
hasil panen["bb", "lo", "el", "nd", 'd', 'e', 'd']
. Tiga elemen terakhir adalah karakter.«
adalah vektorisasi, minimum diadik, sehingga menghasilkan['b', 'l', 'e', 'd', 'd', 'e', 'd']
.œ-"
menghapus tepat satu kemunculan karakter ke- n di larik kedua dari string ke- n / karakter di larik pertama, menghasilkan . adalah atom pengurangan multiset , dan cepat membuatnya menjadi vektor.["b", "o", "l", "n", "", "", ""]
œ-
"
Saat dicetak, ini hanya membaca boln .
sumber
PHP> = 7.1, 52 Bytes
PHP Sandbox Online
PHP> = 7.1, 69 Bytes
PHP Sandbox Online
PHP> = 7.1, 70 Bytes
PHP Sandbox Online
sumber
for(;$t=min(~$argv[1][$i],~$argv[2][$i++]);)echo~$t;
.Alice , 8 byte
Cobalah online!
Penjelasan
Alice juga memiliki operator ini (yang saya sebut superimpose ) tetapi tidak membatasi output dengan panjang string yang lebih pendek (sebagai gantinya, karakter yang tersisa dari string yang lebih panjang ditambahkan). Namun, ia juga memiliki operator untuk memotong lebih panjang dari dua string dengan panjang yang lebih pendek.
sumber
Retina , 28 byte
Cobalah online!
Penjelasan
The
{
memberitahu Retina untuk menjalankan seluruh program dalam satu lingkaran sampai gagal mengubah string yang berfungsi.O
menjadikan ini tahap penyortiran yang mengurutkan garis-garis yang tidak kosong secara default. The^
pilihan membalikkan hasilnya. Jadi, pada dasarnya, kita mendapatkan dua baris terbalik jika tidak kosong, menempatkan garis dengan karakter utama yang lebih besar di bagian atas.Buang baris kosong jika ada.
Jika hanya satu baris yang tersisa, salah satu baris kosong, dan kami menghapus yang lain juga untuk menghentikan proses.
Banyak konfigurasi terjadi di sini. Ini cocok dengan (
M
) karakter pertama dalam string yang bekerja (^.
), mengembalikannya (!
), mencetaknya tanpa trafeed linefeed (\
) dan kemudian mengembalikan string yang bekerja ke nilai sebelumnya (*
). Dengan kata lain, kita cukup mencetak karakter pertama dari string yang berfungsi (yang merupakan karakter utama maksimal) tanpa benar-benar mengubah string.Akhirnya, kami menghapus karakter pertama dari setiap baris, sehingga iterasi berikutnya memproses karakter berikutnya.
sumber
G`.
tidak perlu, meskipun ini menghasilkan baris baru tambahan yang dapat Anda hapus dengan menggunakan^.+¶$
atau dengan awalan a\
ke awal jawaban.\
).C, 58 byte
Coba Online
sumber
f(s,t)char*s,*t;{
berikan panjang yang sama.JavaScript (ES6),
4745 byteMudah
c>b[i]
mengembalikan false melewati akhirb
. Sunting: Disimpan 2 byte berkat @ETHproductions.sumber
Jelly , 6 byte
Cobalah online!
sumber
żṢ€Ḋ€
danżṢ€ZṪ
keduanya menghemat satu byte.Mathematica, 78 byte
Ada jawaban lain di Mathematica . Jawaban ini mengambil input sebagai daftar string, sehingga
/@
dapat digunakan#
sebagai ganti{##}
. Dan kita bisa hanyaMap
nama fungsi panjang pada objek daripada menugaskannya ke variabel. (pada kenyataannya, setiap nama simbol bawaan Matematika digunakan paling banyak sekali dalam fungsi)sumber
Java 8,
12412011763 byte-4 byte terima kasih kepada @ Khaled.K .
-3 byte terima kasih kepada @Jakob .
Input adalah dua array karakter, dan berhenti dengan
ArrayIndexOutOfBoundsException
.Penjelasan:
Coba di sini.
sumber
C #,
8178 byteC # memiliki implisit
char
untukint
konversi (karenachar
sebenarnya adalah diint
bawahnya) yang bagus, dan alih-alih mencari string terpendek coba saja sampai gagalsumber
a=>b=>
dengan mengkompilasi ke aFunc<string, Func<string, string>>
. Anda dapat menghapus kawat gigi di sekitar loop untuk menyimpan 2 byte.C# has implicit char to int conversion
benar karena achar
adalah diint
bawahnya.sizeof(int) == 4
tapisizeof(char) == 2
.MATL , 8 byte
Input adalah array sel string, dalam format
{'abcd' 'efg'}
Cobalah online!
Selain itu, ini juga berfungsi untuk lebih dari dua string .
Penjelasan
Pertimbangkan input
{'blended' 'bold'}
. Tumpukan ditampilkan terbalik, dengan elemen yang lebih baru di bawah ini.sumber
R, 103 byte
Kode:
Kasus uji:
sumber
Python 2 ,
474434 byte-3 byte terima kasih kepada musicman523. -10 byte terima kasih kepada Blender.
Mengambil input sebagai daftar string.
Cobalah online!
sumber
V ,
28, 24, 21 byteCobalah online!
Hexdump:
Tiga byte disimpan berkat @ nmjcman101!
Penjelasan:
sumber
dG
perlu? Bukankah semua baris baru dihapus denganÍî
anyways?CJam , 12 byte
Input adalah daftar dua string. Program keluar dengan kesalahan (setelah menghasilkan output yang tepat) jika kedua string memiliki panjang yang berbeda.
Cobalah online!
Penjelasan
sumber
Clojure, 31 byte
Yay untuk komposisi fungsi :) Mengembalikan urutan karakter alih-alih string, tetapi sebagian besar bekerja dengan cara yang sama di Clojure kecuali saat mencetak atau mencocokkan regex.
Sedihnya
max
tidak bekerja dengan karakter.sumber
max
tidak bekerja, tetapimax-key
tidak.#(map(partial max-key int)% %2)
Ini adalah jumlah byte yang sama persis.(ffirst (sort-by second ...)
.Javascript (ES2015),
666349 bytePenjelasan:
Versi sebelumnya:
sumber
Retina ,
5536 byteCobalah online! Penjelasan: Baris diawali untuk menampung hasilnya. Sementara kedua string masih memiliki karakter yang tersisa, input diurutkan dan karakter utama dengan titik kode tertinggi dipindahkan ke hasil sementara karakter utama lainnya dihapus. Akhirnya hasilnya dicetak.
sumber
Sekam , 2 byte
Cobalah online!
"Tidak Disatukan" / Dijelaskan
Memanfaatkannya
zip f
memotong daftar yang lebih pendek sehingga selalu ada dua argumen untukf
, misalnyazip f [1,2] [3,4,5] == zip f [1,2] [3,4] == [f 1 3, f 2 4]
:sumber
Kotlin,
504137 byte-9 byte dengan sintaks referensi fungsi -4 byte dengan fungsi ekstensi
Jika s, dan x berada dalam ruang lingkup, dan tidak dalam suatu fungsi, metode ini hanya 16 byte
Demo
sumber
PowerShell, 75 byte
Simpan sebagai file .ps1 dan jalankan
Sebelumnya, 78 byte:
sumber
J, 25 byte
penjelasan
setengah dari byte digunakan untuk menyelesaikan memastikan kedua input memiliki panjang input yang lebih pendek (akan senang melihat peningkatan pada bagian ini, jika ada yang memilikinya):
<.&#
adalah minimum dari dua panjang, dan{."1,:
mengambil banyak karakter dari kedua baris dari tabel 2-baris yang terdiri dari string kiri ditumpuk di atas yang kanan.Gunakan kata kerja Di Bawah
&.
untuk mengonversikan setiap karakter ke indeks ascii-nya, ambil maksimum dua angka, dan kemudian konversikan kembali ke karakter.Cobalah online!
sumber
[:>./&.(3&u:)<.&#$&>;
u:
merupakan TIL untuk saya.Koleksi Java 8 + Eclipse,
7064 bytea
danb
keduanyaMutableList<Character>
dari koleksi gerhana.sumber
Tambahkan ++ , 8 byte
Cobalah online!
Dalam versi 0.4 hingga 1.11,
^
eksponen dua angka atau "mengalikan" dua string, tergantung pada jenis argumen.sumber
Mathematica, 102 byte
memasukkan
sumber
L@a~Min~L@b
menghemat satu byteAPL (Dyalog) , 22 byte
Mengambil dua (atau lebih!) String sebagai argumen yang benar.
Cobalah online!
{
fungsi anonim di mana argumen yang tepat diwakili oleh ⍵⎕UCS
simbol dari U nicode C haracter S et yang sesuai dengan⌈⌿
nilai maksimum di setiap kolom⎕UCS
poin kode dari U nicode C haracter S et untuk↑
matrified (matriks dari daftar string)⍵
argumen↑¨⍨
masing-masing dibatasi pada⌊/
minimum≢¨
panjangnya⍵
argumen}
sumber