Dalam artikel ini, kami akan menangani dua tugasan yang menarik daripada Cabaran Mingguan Perl #289: mencari maksimum ketiga yang berbeza dalam tatasusunan dan berebut huruf perkataan dalam teks sambil mengekalkan huruf pertama dan terakhir di tempat. Kami akan melaksanakan penyelesaian dalam kedua-dua Perl dan Go.
Tugas pertama melibatkan mencari maksimum ketiga yang berbeza dalam tatasusunan integer tertentu. Jika maksimum ketiga tidak wujud, fungsi harus mengembalikan nombor maksimum.
Input: Tatasusunan integer, @ints.
Output: Maksimum ketiga yang berbeza atau nombor maksimum jika maksimum ketiga tidak wujud.
Input: @ints = (5, 6, 4, 1)
Output: 4
(Maksimum yang berbeza ialah 6, 5 dan 4.)
Input: @ints = (4, 5)
Output: 5
(Maksimum ketiga tidak wujud.)
Input: @ints = (1, 2, 2, 3)
Output: 1
(Maksimum yang berbeza ialah 3, 2 dan 1.)
Dalam pelaksanaan ini, kami mencipta satu set nilai unik dan kemudian mengisihnya dalam tertib menurun untuk mencari maksimum ketiga dengan mudah.
sub third_maximum { my @ints = @_; my %unique = map { $_ => 1 } @ints; my @distinct = sort { $b <=> $a } keys %unique; return @distinct >= 3 ? $distinct[2] : $distinct[0]; }
Pelaksanaan Go mengikut logik yang serupa, menggunakan peta untuk menangkap integer unik dan kemudian mengisihnya.
func thirdMax(ints []int) (int, error) { if len(ints) == 0 { return 0, errors.New("input slice is empty") } unique := make(map[int]struct{}) for _, num := range ints { unique[num] = struct{}{} } numsSorted := make([]int, 0, len(unique)) for num := range unique { numsSorted = append(numsSorted, num) } sort.Slice(numsSorted, func(i, j int) bool { return numsSorted[i] > numsSorted[j] }) if len(numsSorted) >= 3 { return numsSorted[2], nil } return numsSorted[0], nil }
.
Tugas kedua melibatkan mengacak huruf setiap perkataan dalam teks yang diberikan sambil memastikan huruf pertama dan terakhir kekal di tempatnya. Ruang putih dan tanda baca juga harus dikekalkan.
Input: Rentetan teks.
Output: Versi campur aduk bagi teks input.
Untuk tugasan ini, kami mentakrifkan dua fungsi:
use List::Util 'shuffle'; sub jumble_word { my ($word) = @_; return $word if length($word) <= 3; my $middle = substr($word, 1, -1); my @m_chars = split('', $middle); @m_chars = shuffle(@m_chars); my $subst = join('', @m_chars); substr($word, 1, -1, $subst); return $word; } sub jumble_text { my ($text) = @_; my @tokens = split(/(\W+|_)/, $text); for my $token (@tokens) { if ($token =~ /^[A-Za-z]+$/) { $token = jumble_word($token); } } return join('', @tokens); }
.
Pelaksanaan Go menggunakan pendekatan yang sama, menggunakan pakej matematik/rand untuk merombak huruf,
package main import ( "math/rand" "regexp" "strings" "time" ) func jumbleWord(word string) string { if len(word) <= 3 { return word } middle := word[1 : len(word)-1] chars := []rune(middle) rand.Seed(time.Now().UnixNano()) rand.Shuffle(len(chars), func(i, j int) { chars[i], chars[j] = chars[j], chars[i] }) return string(word[0]) + string(chars) + string(word[len(word)-1]) } func jumbleText(text string) string { re := regexp.MustCompile(`(\W+|_)`) tokens := re.Split(text, -1) nonWordTokens := re.FindAllString(text, -1) var result []string for i, token := range tokens { if isAlpha(token) { result = append(result, jumbleWord(token)) } if i < len(nonWordTokens) { result = append(result, nonWordTokens[i]) } } return strings.Join(result, "") } func isAlpha(s string) bool { re := regexp.MustCompile(`^[A-Za-z]+$`) return re.MatchString(s) }
.
Dalam artikel ini, kami meneroka dua cabaran pengekodan yang menyeronokkan: mencari maksimum ketiga yang berbeza dalam tatasusunan dan huruf berebut dalam teks. Tugas-tugas ini menggambarkan bagaimana bahasa pengaturcaraan yang berbeza mendekati masalah yang sama, masing-masing dengan kekuatan dan metodologinya sendiri. Saya harap contoh ini memberi inspirasi kepada anda untuk menangani cabaran yang serupa dan meneroka keupayaan Perl dan Go lebih jauh!
Anda boleh mendapatkan kod lengkap, termasuk ujian, di GitHub.
Atas ialah kandungan terperinci Transformasi Data: Huruf Maksimum Ketiga dan Jumbled. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!