英文:
Can anybody solve this programming challenge?
问题
有人能使用Go编程语言解决以下问题吗?
James拿到了他朋友Harry为女朋友写的一封情书。作为恶作剧的James,他决定对它进行干预。他将信中的所有单词都改成了回文。
在修改单词的过程中,他遵循以下两个规则:
- 他总是减小字母的值,例如他将'd'改为'c',但不会将'c'改为'd'。
- 如果他需要重复减小字母的值,他可以一直减小直到字母变为'a'。一旦一个字母被改为'a',就不能再改变。
对于任何字母值的减小,都计为一次操作。找出他将给定字符串转换为回文所需的最小操作次数。
输入格式
第一行包含一个整数T,即测试用例的数量。接下来的T行每行包含一个字符串。
输出格式
一行,包含每个测试用例对应的最小操作次数。
约束条件
1 ≤ T ≤ 10
1 ≤ 字符串长度 ≤ 104
所有字符都是小写字母。
示例输入
#00 3 abc abcba abcd
示例输出
#00 2 0 4
解释
对于第一个测试用例,abc -> abb -> aba。对于第二个测试用例,abcba是一个回文字符串。对于第三个测试用例,abcd -> abcc -> abcb -> abca = abca -> abba。
这个谜题来自HackerRank.com。作为一个Go语言的新手,我无法使用这种语言解决这个谜题。
英文:
Can anybody solve the following question using the programming language Go?
> James got hold of a love letter that his friend Harry has written for
> his girlfriend. Being the prankster that James is, he decides to
> meddle with it. He changes all the words in the letter into
> palindromes.
>
> While modifying the letters of the word, he follows 2 rules:
>
> 1. He always reduces the value of a letter, e.g. he changes 'd' to
> 'c', but he does not change 'c' to 'd'.
>
> 2. If he has to repeatedly
> reduce the value of a letter, he can do it until the letter becomes
> 'a'. Once a letter has been changed to 'a', it can no longer be
> changed.
>
> Each reduction in the value of any letter is counted as a single
> operation. Find the minimum number of operations he carries out to
> convert a given string into a palindrome.
>
>
> ### Input Format
> The first line contains an integer T, i.e., the number
> of test cases. The next T lines will contain a string each.
>
> ### Output Format
> A single line containing the number of minimum
> operations corresponding to each test case.
>
> ### Constraints
> 1 ≤ T ≤ 10 1 ≤ length of string ≤ 104 All characters are
> lower cased.
>
> ### Sample Input
> #00 3 abc abcba abcd
>
> ### Sample Output
> #00 2 0 4
>
> ### Explanation
> For the first test case, abc -> abb -> aba. For the
> second test case, abcba is a palindromic string. For the third test
> case, abcd -> abcc -> abcb -> abca = abca -> abba.
The puzzle is taken from HackerRank.com I am a golang newbie and couldn't solve the puzzle using the language.
答案1
得分: 0
我看不出Go编程语言中的解决方案有什么特别之处。例如,
// 爱情信件之谜
// https://www.hackerrank.com/challenges/the-love-letter-mystery
package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
)
// palindrome返回将单词转换为回文所需的最小操作次数。
// 单词是一组小写ASCII字母。
func palindrome(word string) (ops int) {
for i, j := 0, len(word)-1; i < j; i, j = i+1, j-1 {
n := int(word[i]) - int(word[j])
if n < 0 {
n = -n
}
ops += n
}
return ops
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
if scanner.Scan() {
t, err := strconv.Atoi(scanner.Text())
if err != nil {
fmt.Fprintln(os.Stderr, "读取输入:", err)
t = 0
}
for ; t > 0 && scanner.Scan(); t-- {
fmt.Println(palindrome(scanner.Text()))
}
if t > 0 {
fmt.Fprintln(os.Stderr, "读取输入:", io.ErrUnexpectedEOF)
}
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "读取输入:", err)
}
}
输入:
3
abc
abcba
abcd
输出:
2
0
4
输入:
3
cba
cbabc
dcba
输出:
2
0
4
英文:
I don't see anything particularly special about a solution in the Go programming language. For example,
// The Love-Letter Mystery
// https://www.hackerrank.com/challenges/the-love-letter-mystery
package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
)
// palindrome returns the minimum number of operations carried out
// to convert a word into a palindrome.
// A word is a set of lower-case ASCII letters.
func palindrome(word string) (ops int) {
for i, j := 0, len(word)-1; i < j; i, j = i+1, j-1 {
n := int(word[i]) - int(word[j])
if n < 0 {
n = -n
}
ops += n
}
return ops
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
if scanner.Scan() {
t, err := strconv.Atoi(scanner.Text())
if err != nil {
fmt.Fprintln(os.Stderr, "reading input:", err)
t = 0
}
for ; t > 0 && scanner.Scan(); t-- {
fmt.Println(palindrome(scanner.Text()))
}
if t > 0 {
fmt.Fprintln(os.Stderr, "reading input:", io.ErrUnexpectedEOF)
}
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading input:", err)
}
}
Input:
3
abc
abcba
abcd
Output:
2
0
4
Input:
3
cba
cbabc
dcba
Output:
2
0
4
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论