使用密码播放【难度:2级】:
答案1:
using System
;
using System
.Linq
;
public class PlayPass {
private static string lib
= "abcdefghijklmnopqrstuvwxyz";
public static string playPass(string s
, int n
) {
string shifted
= lib
.Substring(n
) + lib
.Substring(0, n
);
return string.Concat(s
.ToLower().Select((c
, i
) => {
if(lib
.Contains(c
)) {
char r
= shifted
[lib
.IndexOf(c
)];
return i
% 2 == 0 ? Char
.ToUpper(r
) : r
;
}
if(Char
.IsDigit(c
)) return (9 - Char
.GetNumericValue(c
)).ToString()[0];
return c
;
}).Reverse());
}
}
答案2:
using System
;
using System
.Linq
;
public class PlayPass {
public static string playPass(string s
, int n
)
{
var chars
= s
.ToCharArray();
var ss
= chars
.Select((c
, idx
) =>
{
if (char.IsLetter(c
))
{
if (char.IsLower(c
))
{
c
= (char) (c
+ n
> 122 ? c
+ n
- 26 : c
+ n
);
}
if (char.IsUpper(c
))
{
c
= (char) (c
+ n
> 90 ? c
+ n
- 26 : c
+ n
);
}
if (idx
%2 == 1)
{
c
= char.ToLower(c
);
}
else
{
c
= char.ToUpper(c
);
}
return c
;
}
if (char.IsNumber(c
))
{
return (char) (105 - c
);
}
return c
;
}).Reverse().ToArray();
return new string(ss
);
}
}
答案3:
using System
;
using System
.Linq
;
public class PlayPass {
public static string playPass(string s
, int n
) {
Func
<char, int> offset
= (c
) => char.IsUpper(c
) ? 65 : 96;
Func
<char, int, char> letter
= (c
, i
) => char.IsLetter(c
) ? (char)(offset(c
) + (c
- offset(c
) + i
) % 26) : c
;
Func
<char, char> digit
= (c
) => char.IsDigit(c
) ? (9 - Int32
.Parse(c
.ToString())).ToString().First() : c
;
Func
<char, int, char> rot
= (c
, i
) => i
% 2 == 0 ? char.ToUpper(c
) : char.ToLower(c
);
return string.Join(String
.Empty
, s
.ToCharArray().Select((c
, i
) => rot(digit(letter(c
, n
)),i
)).Reverse().ToArray());
}
}
答案4:
using System
;
public class PlayPass {
public static string playPass(string s
, int n
) {
bool up
= true;
char[] a
= s
.ToLower().ToCharArray();
for (var i
= 0; i
< a
.Length
; i
++)
{
if (char.IsLetter(a
[i
]))
{
a
[i
] = (char)(a
[i
] + n
);
if (a
[i
] > 'z')
{
a
[i
] = (char)(a
[i
] - 26);
}
else if (a
[i
] < 'a')
{
a
[i
] = (char)(a
[i
] + 26);
}
}
else if (char.IsNumber(a
[i
]))
{
a
[i
] = (9 - (int)Char
.GetNumericValue(a
[i
])).ToString()[0];
}
if (up
) a
[i
] = char.ToUpper(a
[i
]);
up
= !up
;
}
Array
.Reverse(a
);
return new String(a
);
}
}
答案5:
using System
;
public class PlayPass {
public static string playPass(string s
, int n
) {
string res
="";
char tmp
;
for (int i
= 0; i
< s
.Length
; i
++)
{
int cur
=(int)s
[i
] + n
;
if (cur
>90) cur
=cur
-90+64;
if ((s
[i
] >= 'A') &
;&
; (s
[i
] <= 'Z')) tmp
= (char)(cur
);
else
if ((s
[i
] >= '0') &
;&
; (s
[i
] <= '9')) tmp
= (char)((int)'9' - (int)s
[i
] + 48);
else tmp
= s
[i
];
if (i
% 2 == 1) tmp
= char.ToLower(tmp
);
res
+= tmp
;
}
char[] arr
= res
.ToCharArray();
Array
.Reverse(arr
);
return new string(arr
);
}
}
答案6:
using System
;
using System
.Collections
;
using System
.Linq
;
public class PlayPass {
public static string playPass(string s
, int n
)
{
var retValue
= s
.Select(o
=> char.IsLetter(o
) ? char.IsUpper(o
) ? (char)((o
- 'A' + n
) % 26 + 'A') : (char)((o
- 'a' + n
) % 26 + 'a') : o
);
retValue
= retValue
.Select(o
=> char.IsDigit(o
) ? (char)(9 - o
+ 96) : o
);
retValue
= retValue
.Select((o
,i
) => char.IsLetter(o
) ? i
%2==0 ? char.ToUpper(o
) : char.ToLower(o
) : o
);
retValue
= retValue
.Reverse();
return string.Concat(retValue
);
}
}
答案7:
using System
;
using System
.Linq
;
public class PlayPass
{
public static string playPass(string s
, int n
)
{
return String
.Join("", s
.ToLower().ToArray()
.Select(c
=>
Char
.IsDigit(c
) ? (9 - char.GetNumericValue(c
)).ToString()[0] :
Char
.IsLetter(c
) ? (char)( ((int)c
- (int)'a' + n
) % 26 + (int)'a' ) :
c
)
.Select((c
, i
) => i
% 2 == 0 ? char.ToUpper(c
) : char.ToLower(c
))
.Reverse());
}
}
答案8:
using System
;
public class PlayPass {
public static string playPass(string s
, int n
) {
string result
= "";
for (int i
= 0; i
< s
.Length
; i
++)
{
char prefixMe
= s
[i
];
if (char.IsLetter(prefixMe
))
{
prefixMe
= (char)((prefixMe
- 'A' + n
) % ('Z' - 'A' + 1) + 'A');
prefixMe
= i
% 2 == 1 ? char.ToLower(prefixMe
) : char.ToUpper(prefixMe
);
}
else if (char.IsDigit(prefixMe
))
{
prefixMe
= (char)((9 - char.GetNumericValue(prefixMe
)) + '0');
}
result
= prefixMe
+ result
;
}
return result
;
}
}
答案9:
using System
;
using System
.Linq
;
public class PlayPass {
public static String playPass(String Input
, Int32 ShiftPositions
) {
return String
.Join(String
.Empty
, Input
.ToCharArray().Select((Char
, Index
) => {
if (Char
.IsDigit(Char
)){
return (9 - int.Parse(Char
.ToString())).ToString()[0];
}
if (Char
.IsLetter(Char
)){
var newValue
= (Char
+ ShiftPositions
- 65) % 26;
return (Char
)(newValue
+ ((Index
% 2 == 1) ? 97 : 65));
}
return Char
;
}).Reverse());
}
}
答案10:
using System
;
using System
.Linq
;
public class PlayPass {
public static string playPass(string s
, int n
) {
string rs
="";
s
=s
.ToLower();
for (int i
=0;i
<s
.Length
;i
++){
if (char.IsLetter(s
[i
])) rs
=(char)((s
[i
]-97+n
)%26+((i
%2==0)?65:97))+rs
;
else if (char.IsNumber(s
[i
])) rs
=(9-int.Parse(s
[i
].ToString()))+rs
;
else rs
=s
[i
]+rs
;
}
return rs
;
}
}
转载请注明原文地址: https://mac.8miu.com/read-500814.html