mirror of https://github.com/01-edu/public.git
xpetit
4 years ago
343 changed files with 0 additions and 14185 deletions
@ -1,24 +0,0 @@
|
||||
FROM docker.01-edu.org/golang:1.16.3-alpine3.13 |
||||
|
||||
ENV GIT_TERMINAL_PROMPT=0 |
||||
RUN apk add --no-cache git |
||||
|
||||
RUN go get golang.org/x/tools/cmd/goimports |
||||
RUN go get github.com/01-edu/rc |
||||
|
||||
WORKDIR /piscine-go |
||||
RUN go mod init piscine-go |
||||
RUN go get github.com/01-edu/z01@v0.1.0 |
||||
|
||||
WORKDIR /public/test-go |
||||
COPY go.* ./ |
||||
RUN go mod download |
||||
COPY lib lib |
||||
COPY solutions solutions |
||||
COPY tests tests |
||||
RUN go install $(grep -rl ChallengeMain ./tests | rev | cut -d/ -f2- | rev) |
||||
|
||||
RUN rm -rf /piscine-go |
||||
|
||||
COPY entrypoint.sh /usr/local/bin |
||||
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] |
@ -1,22 +0,0 @@
|
||||
# Tests |
||||
|
||||
To run the tests make sure the two repositories are right next to each other: |
||||
|
||||
- github.com/01-edu/piscine-go |
||||
- github.com/01-edu/public |
||||
|
||||
To test an exercise, run this command in this folder (`public/test-go`): |
||||
|
||||
``` |
||||
go run github.com/01-edu/public/test-go/tests/isnegative_test |
||||
``` |
||||
|
||||
Relative paths work anywhere in `public/test-go`: |
||||
|
||||
``` |
||||
go run ./tests/printalphabet_test |
||||
cd tests |
||||
go run ./isnegative_test |
||||
``` |
||||
|
||||
No output means success. |
@ -1,56 +0,0 @@
|
||||
#!/bin/sh |
||||
|
||||
set -e |
||||
|
||||
cp -r /public . |
||||
cp -a student piscine-go |
||||
cd piscine-go |
||||
|
||||
if test "$EXAM_MODE"; then |
||||
go mod init main 2>/dev/null |
||||
GOSUMDB=off go get github.com/01-edu/z01@v0.1.0 2>/dev/null |
||||
fi |
||||
|
||||
if test "$EXAM_RUN_ONLY" = true; then |
||||
go build -o exe "./$EXERCISE" |
||||
./exe "$@" |
||||
exit |
||||
fi |
||||
|
||||
if ! test "$EXAM_MODE"; then |
||||
s=$(goimports -d .) |
||||
if test "$s"; then |
||||
echo 'Your Go files are not correctly formatted :' |
||||
echo |
||||
echo '$ goimports -d .' |
||||
echo "$s" |
||||
exit 1 |
||||
fi |
||||
fi |
||||
|
||||
if ! find . -type f -name '*.go' | grep -q .; then |
||||
echo "Missing Go file: $FILE" |
||||
exit 1 |
||||
fi |
||||
|
||||
if find . -type f -name '*.go' -exec grep -qE 'print(ln)?\(' {} +; then |
||||
echo "Your Go files cannot use print & println builtins" |
||||
exit 1 |
||||
fi |
||||
|
||||
# Check restrictions |
||||
if test "$ALLOWED_FUNCTIONS" && test "$FILE"; then |
||||
# shellcheck disable=SC2086 |
||||
rc "$FILE" $ALLOWED_FUNCTIONS |
||||
fi |
||||
|
||||
cd ~/public/test-go |
||||
|
||||
# Compile and run test |
||||
if command -v "${EXERCISE}_test" >/dev/null 2>&1; then |
||||
# The exercise is a program |
||||
"${EXERCISE}_test" |
||||
else |
||||
# The exercise is a function |
||||
go run "./tests/${EXERCISE}_test" |
||||
fi |
@ -1,7 +0,0 @@
|
||||
module github.com/01-edu/public/test-go |
||||
|
||||
go 1.16 |
||||
|
||||
require student v0.0.0 |
||||
|
||||
replace student => ../../piscine-go |
@ -1,2 +0,0 @@
|
||||
github.com/01-edu/z01 v0.1.0 h1:Rr1p92CKYXUgVFw872iGDABXpdkuKf2jmS+KV6r1034= |
||||
github.com/01-edu/z01 v0.1.0/go.mod h1:BH7t35JaNFuP83rTJDc5nkSfgmC/HYVcJsUcdFqYZNo= |
@ -1,119 +0,0 @@
|
||||
package base |
||||
|
||||
import ( |
||||
"math/rand" |
||||
"strings" |
||||
|
||||
"github.com/01-edu/public/test-go/lib" |
||||
) |
||||
|
||||
func uniqueChar(s string) bool { |
||||
m := map[rune]struct{}{} |
||||
for _, r := range s { |
||||
if _, ok := m[r]; ok { |
||||
return false |
||||
} |
||||
m[r] = struct{}{} |
||||
} |
||||
return true |
||||
} |
||||
|
||||
func IsValid(base string) bool { |
||||
return len(base) >= 2 && !strings.ContainsAny(base, "+-") && uniqueChar(base) |
||||
} |
||||
|
||||
func power(nbr int, pwr int) int { |
||||
if pwr == 0 { |
||||
return 1 |
||||
} |
||||
if pwr == 1 { |
||||
return nbr |
||||
} |
||||
return nbr * power(nbr, pwr-1) |
||||
} |
||||
|
||||
func Atoi(s string, base string) int { |
||||
var result int |
||||
var i int |
||||
sign := 1 |
||||
lengthBase := len(base) |
||||
lengths := len(s) |
||||
|
||||
if !IsValid(base) { |
||||
return 0 |
||||
} |
||||
if s[i] == '-' { |
||||
sign = -1 |
||||
} |
||||
if s[i] == '-' || s[i] == '+' { |
||||
i++ |
||||
} |
||||
for i < len(s) { |
||||
result += strings.Index(base, string(s[i])) * power(lengthBase, lengths-1) |
||||
i++ |
||||
lengths-- |
||||
} |
||||
return result * sign |
||||
} |
||||
|
||||
func Valid() string { |
||||
valid := []string{ |
||||
"01", |
||||
"CHOUMIisDAcat!", |
||||
"choumi", |
||||
"0123456789", |
||||
"abc", |
||||
"Zone01", |
||||
"0123456789ABCDEF", |
||||
"WhoAmI?", |
||||
} |
||||
i := rand.Intn(len(valid)) |
||||
return valid[i] |
||||
} |
||||
|
||||
func Invalid() string { |
||||
invalid := []string{ |
||||
"0", |
||||
"1", |
||||
"CHOUMIisdacat!", |
||||
"choumiChoumi", |
||||
"01234567890", |
||||
"abca", |
||||
"Zone01Zone01", |
||||
"0123456789ABCDEF0", |
||||
"WhoAmI?IamWhoIam", |
||||
} |
||||
i := rand.Intn(len(invalid)) |
||||
return invalid[i] |
||||
} |
||||
|
||||
func StringFrom(base string) string { |
||||
letters := []rune(base) |
||||
size := lib.RandIntBetween(1, 10) |
||||
runes := make([]rune, size) |
||||
for i := range runes { |
||||
runes[i] = letters[rand.Intn(len(letters))] |
||||
} |
||||
return string(runes) |
||||
} |
||||
|
||||
func ConvertNbr(n int, base string) string { |
||||
var result string |
||||
length := len(base) |
||||
|
||||
for n >= length { |
||||
result = string(base[(n%length)]) + result |
||||
n = n / length |
||||
} |
||||
result = string(base[n]) + result |
||||
|
||||
return result |
||||
} |
||||
|
||||
func Convert(nbr, baseFrom, baseTo string) string { |
||||
resultIntermediary := Atoi(nbr, baseFrom) |
||||
|
||||
resultFinal := ConvertNbr(resultIntermediary, baseTo) |
||||
|
||||
return resultFinal |
||||
} |
@ -1,37 +0,0 @@
|
||||
package is |
||||
|
||||
import ( |
||||
"math/big" |
||||
"unicode" |
||||
) |
||||
|
||||
func Digit(s string) bool { |
||||
for _, r := range s { |
||||
if !unicode.IsDigit(r) { |
||||
return false |
||||
} |
||||
} |
||||
return true |
||||
} |
||||
|
||||
func Lower(s string) bool { |
||||
for _, r := range s { |
||||
if !unicode.IsLower(r) { |
||||
return false |
||||
} |
||||
} |
||||
return true |
||||
} |
||||
|
||||
func Upper(s string) bool { |
||||
for _, r := range s { |
||||
if !unicode.IsUpper(r) { |
||||
return false |
||||
} |
||||
} |
||||
return true |
||||
} |
||||
|
||||
func Prime(i int) bool { |
||||
return big.NewInt(int64(i)).ProbablyPrime(0) |
||||
} |
@ -1,420 +0,0 @@
|
||||
package lib |
||||
|
||||
import ( |
||||
"bytes" |
||||
"fmt" |
||||
"io" |
||||
"math/big" |
||||
"math/rand" |
||||
"os" |
||||
"os/exec" |
||||
"path" |
||||
"reflect" |
||||
"strconv" |
||||
"strings" |
||||
"time" |
||||
"unicode" |
||||
"unicode/utf8" |
||||
) |
||||
|
||||
const ( |
||||
MinInt = ^MaxInt |
||||
MaxInt = 1<<63 - 1 |
||||
|
||||
StrLen = 13 // Default length of random strings
|
||||
SliceLen = 8 // Default length of slices
|
||||
) |
||||
|
||||
var ( |
||||
nsSince1970 = time.Now().UnixNano() |
||||
bigRand = rand.New(rand.NewSource(nsSince1970)) |
||||
|
||||
// charsets
|
||||
Digit = RuneRange('0', '9') // Decimal digit characters
|
||||
Lower = RuneRange('a', 'z') // Lowercase latin alphabet characters
|
||||
Upper = RuneRange('A', 'Z') // Uppercase latin alphabet characters
|
||||
ASCII = RuneRange(' ', '~') // ASCII printable characters
|
||||
Space = strings.Repeat(" ", StrLen) // Spaces characters
|
||||
Basic = Lower + Upper // Lower and Upper characters
|
||||
Alnum = Basic + Digit // Basic and Digit characters
|
||||
Words = Alnum + Space // Alnum and Space characters
|
||||
) |
||||
|
||||
func init() { |
||||
rand.Seed(nsSince1970) |
||||
} |
||||
|
||||
// RuneRange returns a string containing all the valid runes from a to b.
|
||||
func RuneRange(a, b rune) string { |
||||
var s []rune |
||||
for { |
||||
if utf8.ValidRune(a) { |
||||
s = append(s, a) |
||||
} |
||||
if a == b { |
||||
return string(s) |
||||
} |
||||
if a < b { |
||||
a++ |
||||
} else { |
||||
a-- |
||||
} |
||||
} |
||||
} |
||||
|
||||
// IntRange returns a slice containing all the int from a to b.
|
||||
func IntRange(a, b int) (s []int) { |
||||
for { |
||||
s = append(s, a) |
||||
if a == b { |
||||
return |
||||
} |
||||
if a < b { |
||||
a++ |
||||
} else { |
||||
a-- |
||||
} |
||||
} |
||||
} |
||||
|
||||
// RandIntBetween returns a random int between a and b included.
|
||||
func RandIntBetween(a, b int) int { |
||||
if a > b { |
||||
a, b = b, a |
||||
} |
||||
n := big.NewInt(int64(b)) // b
|
||||
n.Sub(n, big.NewInt(int64(a))) // b-a
|
||||
n.Add(n, big.NewInt(1)) // b-a+1
|
||||
n.Rand(bigRand, n) // 0 <= n <= b-a
|
||||
n.Add(n, big.NewInt(int64(a))) // a <= n <= b
|
||||
return int(n.Int64()) |
||||
} |
||||
|
||||
// RandPosZ returns a random int between 0 and MaxInt included.
|
||||
func RandPosZ() int { return RandIntBetween(0, MaxInt) } |
||||
|
||||
// RandPos returns a random int between 1 and MaxInt included.
|
||||
func RandPos() int { return RandIntBetween(1, MaxInt) } |
||||
|
||||
// RandInt returns a random int between MinInt and MaxInt included.
|
||||
func RandInt() int { return RandIntBetween(MinInt, MaxInt) } |
||||
|
||||
// RandNeg returns a random int between MinInt and 1 included.
|
||||
func RandNeg() int { return RandIntBetween(MinInt, 1) } |
||||
|
||||
// RandNegZ returns a random int between MinInt and 0 included.
|
||||
func RandNegZ() int { return RandIntBetween(MinInt, 0) } |
||||
|
||||
// MakeIntFunc returns a slice of ints created by f.
|
||||
func MakeIntFunc(f func() int) (s []int) { |
||||
i := 0 |
||||
for i < SliceLen { |
||||
s = append(s, f()) |
||||
i++ |
||||
} |
||||
return |
||||
} |
||||
|
||||
// MultRandPosZ returns a slice of random ints between 0 and MaxInt included.
|
||||
func MultRandPosZ() []int { return MakeIntFunc(RandPosZ) } |
||||
|
||||
// MultRandPos returns a slice of random ints between 1 and MaxInt included.
|
||||
func MultRandPos() []int { return MakeIntFunc(RandPos) } |
||||
|
||||
// MultRandInt returns a slice of random ints between MinInt and MaxInt included.
|
||||
func MultRandInt() []int { return MakeIntFunc(RandInt) } |
||||
|
||||
// MultRandNeg returns a slice of random ints between MinInt and 1 included.
|
||||
func MultRandNeg() []int { return MakeIntFunc(RandNeg) } |
||||
|
||||
// MultRandNegZ returns a slice of random ints between MinInt and 0 included.
|
||||
func MultRandNegZ() []int { return MakeIntFunc(RandNegZ) } |
||||
|
||||
// MultRandIntBetween returns a slice of random ints between a and b included.
|
||||
func MultRandIntBetween(a, b int) []int { |
||||
return MakeIntFunc(func() int { return RandIntBetween(a, b) }) |
||||
} |
||||
|
||||
// RandRune returns a random printable rune
|
||||
// (although you may not have the corresponding glyph).
|
||||
// One-in-ten chance to get a rune higher than 0x10000 (1<<16).
|
||||
func RandRune() rune { |
||||
ranges := unicode.PrintRanges |
||||
table := ranges[rand.Intn(len(ranges))] |
||||
if rand.Intn(10) == 0 { |
||||
r := table.R32[rand.Intn(len(table.R32))] |
||||
n := uint32(rand.Intn(int((r.Hi-r.Lo)/r.Stride) + 1)) |
||||
return rune(r.Lo + n*r.Stride) |
||||
} |
||||
r := table.R16[rand.Intn(len(table.R16))] |
||||
n := uint16(rand.Intn(int((r.Hi-r.Lo)/r.Stride) + 1)) |
||||
return rune(r.Lo + n*r.Stride) |
||||
} |
||||
|
||||
// RandStr returns a string with l random characters taken from chars.
|
||||
// If chars is empty, the characters are random printable runes.
|
||||
func RandStr(l int, chars string) string { |
||||
if l <= 0 { |
||||
return "" |
||||
} |
||||
dst := make([]rune, l) |
||||
if chars == "" { |
||||
for i := range dst { |
||||
dst[i] = RandRune() |
||||
} |
||||
} else { |
||||
src := []rune(chars) |
||||
for i := range dst { |
||||
r := rand.Intn(len(src)) |
||||
dst[i] = src[r] |
||||
} |
||||
} |
||||
return string(dst) |
||||
} |
||||
|
||||
// RandDigit returns a string containing random decimal digit characters.
|
||||
func RandDigit() string { return RandStr(StrLen, Digit) } |
||||
|
||||
// RandLower returns a string containing random lowercase latin alphabet characters.
|
||||
func RandLower() string { return RandStr(StrLen, Lower) } |
||||
|
||||
// RandUpper returns a string containing random uppercase latin alphabet characters.
|
||||
func RandUpper() string { return RandStr(StrLen, Upper) } |
||||
|
||||
// RandASCII returns a string containing random ASCII printable characters.
|
||||
func RandASCII() string { return RandStr(StrLen, ASCII) } |
||||
|
||||
// RandSpace returns a string containing random spaces characters.
|
||||
func RandSpace() string { return RandStr(StrLen, Space) } |
||||
|
||||
// RandBasic returns a string containing random lower and upper characters.
|
||||
func RandBasic() string { return RandStr(StrLen, Basic) } |
||||
|
||||
// RandAlnum returns a string containing random basic and digit characters.
|
||||
func RandAlnum() string { return RandStr(StrLen, Alnum) } |
||||
|
||||
// RandWords returns a string containing random alphanumeric and space characters.
|
||||
func RandWords() string { return RandStr(StrLen, Words) } |
||||
|
||||
// MakeStrFunc returns a slice of strings created by f.
|
||||
func MakeStrFunc(f func() string) (s []string) { |
||||
i := 0 |
||||
for i < StrLen { |
||||
s = append(s, f()) |
||||
i++ |
||||
} |
||||
return |
||||
} |
||||
|
||||
// MultRandDigit returns a slice of strings containing random Decimal digit characters.
|
||||
func MultRandDigit() []string { return MakeStrFunc(RandDigit) } |
||||
|
||||
// MultRandLower returns a slice of strings containing random Lowercase latin alphabet.
|
||||
func MultRandLower() []string { return MakeStrFunc(RandLower) } |
||||
|
||||
// MultRandUpper returns a slice of strings containing random Uppercase latin alphabet.
|
||||
func MultRandUpper() []string { return MakeStrFunc(RandUpper) } |
||||
|
||||
// MultRandASCII returns a slice of strings containing random ASCII printable characters.
|
||||
func MultRandASCII() []string { return MakeStrFunc(RandASCII) } |
||||
|
||||
// MultRandSpace returns a slice of strings containing random Spaces characters.
|
||||
func MultRandSpace() []string { return MakeStrFunc(RandSpace) } |
||||
|
||||
// MultRandBasic returns a slice of strings containing random Lower and Upper characters.
|
||||
func MultRandBasic() []string { return MakeStrFunc(RandBasic) } |
||||
|
||||
// MultRandAlnum returns a slice of strings containing random Basic and Digit characters.
|
||||
func MultRandAlnum() []string { return MakeStrFunc(RandAlnum) } |
||||
|
||||
// MultRandWords returns a slice of strings containing random Alnum and Space characters.
|
||||
func MultRandWords() []string { return MakeStrFunc(RandWords) } |
||||
|
||||
func Format(a ...interface{}) string { |
||||
ss := make([]string, len(a)) |
||||
for i, v := range a { |
||||
switch v.(type) { |
||||
case nil: |
||||
ss[i] = "nil" // instead of "<nil>"
|
||||
case |
||||
string, |
||||
byte, // uint8
|
||||
rune: // int32
|
||||
|
||||
// string : a double-quoted string safely escaped with Go syntax
|
||||
// byte, rune : a single-quoted character literal safely escaped with Go syntax
|
||||
ss[i] = fmt.Sprintf("%q", v) |
||||
default: |
||||
// a Go-syntax representation of the value
|
||||
ss[i] = fmt.Sprintf("%#v", v) |
||||
} |
||||
} |
||||
return strings.Join(ss, ", ") |
||||
} |
||||
|
||||
var valueOf = reflect.ValueOf |
||||
|
||||
func Call(fn interface{}, args []interface{}) []interface{} { |
||||
// Convert args from []interface{} to []reflect.Value
|
||||
vals := make([]reflect.Value, len(args)) |
||||
for i, v := range args { |
||||
if v != nil { |
||||
vals[i] = valueOf(v) |
||||
} else { |
||||
vals[i] = reflect.Zero(reflect.TypeOf((*interface{})(nil)).Elem()) |
||||
} |
||||
} |
||||
|
||||
vals = valueOf(fn).Call(vals) |
||||
|
||||
// Convert the return values from []reflect.Value to []interface{}
|
||||
result := make([]interface{}, len(vals)) |
||||
for i, v := range vals { |
||||
result[i] = v.Interface() |
||||
} |
||||
return result |
||||
} |
||||
|
||||
type Output struct { |
||||
Results []interface{} |
||||
Stdout string |
||||
} |
||||
|
||||
func Monitor(fn interface{}, args []interface{}) (out Output) { |
||||
old := os.Stdout |
||||
r, w, err := os.Pipe() |
||||
panicIfNotNil(err) |
||||
os.Stdout = w |
||||
out.Results = Call(fn, args) |
||||
outC := make(chan string) |
||||
var buf strings.Builder |
||||
go func() { |
||||
io.Copy(&buf, r) |
||||
outC <- buf.String() |
||||
}() |
||||
os.Stdout = old |
||||
w.Close() |
||||
out.Stdout = <-outC |
||||
return out |
||||
} |
||||
|
||||
func Challenge(name string, fn1, fn2 interface{}, args ...interface{}) { |
||||
st1 := Monitor(fn1, args) |
||||
st2 := Monitor(fn2, args) |
||||
if !reflect.DeepEqual(st1.Results, st2.Results) { |
||||
Fatalf("%s(%s) == %s instead of %s\n", |
||||
name, |
||||
Format(args...), |
||||
Format(st1.Results...), |
||||
Format(st2.Results...), |
||||
) |
||||
} |
||||
if !reflect.DeepEqual(st1.Stdout, st2.Stdout) { |
||||
Fatalf("%s(%s) prints:\n%s\ninstead of:\n%s\n", |
||||
name, |
||||
Format(args...), |
||||
Format(st1.Stdout), |
||||
Format(st2.Stdout), |
||||
) |
||||
} |
||||
} |
||||
|
||||
func Fatal(a ...interface{}) { |
||||
fmt.Fprint(os.Stderr, a...) |
||||
os.Exit(1) |
||||
} |
||||
|
||||
func Fatalln(a ...interface{}) { |
||||
fmt.Fprintln(os.Stderr, a...) |
||||
os.Exit(1) |
||||
} |
||||
|
||||
func Fatalf(format string, a ...interface{}) { |
||||
fmt.Fprintf(os.Stderr, format, a...) |
||||
os.Exit(1) |
||||
} |
||||
|
||||
func panicIfNotNil(err error) { |
||||
if err != nil { |
||||
panic(err) |
||||
} |
||||
} |
||||
|
||||
func ChallengeMainStdin(exercise, input string, args ...string) { |
||||
run := func(pkg string) (string, int) { |
||||
binaryPath := path.Join(os.TempDir(), "binaries", path.Base(pkg)) |
||||
panicIfNotNil(exec.Command("go", "build", "-o", binaryPath, pkg).Run()) |
||||
cmd := exec.Command(binaryPath, args...) |
||||
if input != "" { |
||||
cmd.Stdin = bytes.NewBufferString(input) |
||||
} |
||||
b, err := cmd.CombinedOutput() |
||||
if err != nil { |
||||
if ee, ok := err.(*exec.ExitError); ok { |
||||
return string(b), ee.ExitCode() |
||||
} |
||||
panic(err) |
||||
} |
||||
return string(b), 0 |
||||
} |
||||
console := func(out string) string { |
||||
var quotedArgs []string |
||||
for _, arg := range args { |
||||
quotedArgs = append(quotedArgs, strconv.Quote(arg)) |
||||
} |
||||
s := "\n$ " |
||||
if input != "" { |
||||
s += "echo -ne " + strconv.Quote(input) + " | " |
||||
} |
||||
return fmt.Sprintf(s+"./%s %s\n%s$ ", exercise, strings.Join(quotedArgs, " "), out) |
||||
} |
||||
code := func(code int) string { |
||||
return fmt.Sprintf("echo $?\n%d\n$", code) |
||||
} |
||||
student, studentCode := run(path.Join("student", exercise)) |
||||
solution, solutionCode := run(path.Join("github.com/01-edu/public/test-go/solutions", exercise+"_prog")) |
||||
if solutionCode == 0 { |
||||
if studentCode != 0 { |
||||
Fatalln("Your program fails (non-zero exit status) when it should not :\n" + |
||||
console(student) + |
||||
code(studentCode) + "\n\n" + |
||||
"Expected :\n" + |
||||
console(solution) + |
||||
code(solutionCode)) |
||||
} |
||||
} else { |
||||
if studentCode == 0 { |
||||
Fatalln("Your program does not fail when it should (with a non-zero exit status) :" + "\n" + |
||||
console(student) + |
||||
code(studentCode) + "\n\n" + |
||||
"Expected :\n" + |
||||
console(solution) + |
||||
code(solutionCode)) |
||||
} |
||||
} |
||||
if student != solution { |
||||
Fatalln("Your program output is not correct :\n" + |
||||
console(student) + "\n\n" + |
||||
"Expected :\n" + |
||||
console(solution)) |
||||
} |
||||
} |
||||
|
||||
// GCD returns greatest common divisor of a and b.
|
||||
func GCD(a, b int) int { |
||||
for a != b { |
||||
if a > b { |
||||
a -= b |
||||
} else { |
||||
b -= a |
||||
} |
||||
} |
||||
return a |
||||
} |
||||
|
||||
func ChallengeMain(exercise string, args ...string) { |
||||
ChallengeMainStdin(exercise, "", args...) |
||||
} |
||||
|
||||
// TODO: check unhandled errors on all solutions (it should contains "ERROR" on the first line to prove we correctly handle the error)
|
||||
// TODO: remove the number of rand functions, refactor test cases (aka "table")
|
@ -1,29 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
|
||||
"github.com/01-edu/public/test-go/lib/is" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) != 2 { |
||||
fmt.Println("0") |
||||
} else { |
||||
argument, _ := strconv.Atoi(os.Args[1]) |
||||
|
||||
if argument < 0 { |
||||
fmt.Println("0") |
||||
} else { |
||||
result := 0 |
||||
for ; argument >= 0; argument-- { |
||||
if is.Prime(argument) { |
||||
result += argument |
||||
} |
||||
} |
||||
fmt.Println(result) |
||||
} |
||||
} |
||||
} |
@ -1,22 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
arg := []rune(os.Args[1]) |
||||
for i, ch := range arg { |
||||
if ch >= 'a' && ch <= 'z' { |
||||
arg[i] = 'z' - ch + 'a' |
||||
} else if ch >= 'A' && ch <= 'Z' { |
||||
arg[i] = 'Z' - ch + 'A' |
||||
} |
||||
} |
||||
fmt.Print(string(arg)) |
||||
} |
||||
|
||||
fmt.Println() |
||||
} |
@ -1,31 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func solve(s string) int { |
||||
var count, countC, countD int |
||||
for _, r := range s { |
||||
if r == 'C' { |
||||
countC++ |
||||
} else if r == 'D' { |
||||
countD++ |
||||
} |
||||
if countC == countD { |
||||
count++ |
||||
countC = 0 |
||||
countD = 0 |
||||
} |
||||
} |
||||
return count |
||||
} |
||||
|
||||
func main() { |
||||
args := os.Args[1:] |
||||
if len(args) == 1 { |
||||
result := solve(args[0]) |
||||
fmt.Println(result) |
||||
} |
||||
} |
@ -1,14 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args[1:])%2 == 0 { |
||||
fmt.Println("I have an even number of arguments") |
||||
} else { |
||||
fmt.Println("I have an odd number of arguments") |
||||
} |
||||
} |
@ -1,51 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func matchBrackets(exp string) bool { |
||||
runes := []rune(exp) |
||||
var opened []rune |
||||
ptr := -1 |
||||
for _, c := range runes { |
||||
if c == '(' || c == '[' || c == '{' { |
||||
opened = append(opened, c) |
||||
ptr++ |
||||
} else if c == ')' { |
||||
if ptr < 0 || opened[ptr] != '(' { |
||||
return false |
||||
} |
||||
opened = opened[:len(opened)-1] |
||||
ptr-- |
||||
} else if c == ']' { |
||||
if ptr < 0 || opened[ptr] != '[' { |
||||
return false |
||||
} |
||||
opened = opened[:len(opened)-1] |
||||
ptr-- |
||||
} else if c == '}' { |
||||
if ptr < 0 || opened[ptr] != '{' { |
||||
return false |
||||
} |
||||
opened = opened[:len(opened)-1] |
||||
ptr-- |
||||
} |
||||
} |
||||
return len(opened) == 0 |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) == 1 { |
||||
fmt.Println() |
||||
} else { |
||||
for _, v := range os.Args[1:] { |
||||
if matchBrackets(v) { |
||||
fmt.Println("OK") |
||||
} else { |
||||
fmt.Println("Error") |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,66 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
const SIZE = 2048 |
||||
|
||||
func main() { |
||||
if len(os.Args) != 2 { |
||||
return |
||||
} |
||||
progpoint := []byte(os.Args[1]) |
||||
var arby [SIZE]byte |
||||
pos := 0 |
||||
openBr := 0 // opened brackets
|
||||
i := 0 // iterates through the source code passed in the argument
|
||||
N := len(progpoint) // length of the source code
|
||||
for i >= 0 && i < N { |
||||
switch progpoint[i] { |
||||
case '>': |
||||
// Increment the pointer
|
||||
pos++ |
||||
case '<': |
||||
// decrement the pointes
|
||||
pos-- |
||||
case '+': |
||||
// increment the pointed byte
|
||||
arby[pos]++ |
||||
case '-': |
||||
// decrement the pointed byte
|
||||
arby[pos]-- |
||||
case '.': |
||||
// print the pointed byte on std output
|
||||
fmt.Printf("%c", rune(arby[pos])) |
||||
case '[': |
||||
// go to the matching ']' if the pointed byte is 0 (while start)
|
||||
openBr = 0 |
||||
if arby[pos] == 0 { |
||||
for i < N && (progpoint[i] != byte(']') || openBr > 1) { |
||||
if progpoint[i] == byte('[') { |
||||
openBr++ |
||||
} else if progpoint[i] == byte(']') { |
||||
openBr-- |
||||
} |
||||
i++ |
||||
} |
||||
} |
||||
case ']': |
||||
// go to the matching '[' if the pointed byte is not 0 (while end)
|
||||
openBr = 0 |
||||
if arby[pos] != 0 { |
||||
for i >= 0 && (progpoint[i] != byte('[') || openBr > 1) { |
||||
if progpoint[i] == byte(']') { |
||||
openBr++ |
||||
} else if progpoint[i] == byte('[') { |
||||
openBr-- |
||||
} |
||||
i-- |
||||
} |
||||
} |
||||
} |
||||
i++ |
||||
} |
||||
} |
@ -1,252 +0,0 @@
|
||||
package solutions |
||||
|
||||
type TreeNode struct { |
||||
Left, Right, Parent *TreeNode |
||||
Data string |
||||
} |
||||
|
||||
func BTreeInsertData(bt *TreeNode, elem string) *TreeNode { |
||||
if bt == nil { |
||||
return &TreeNode{Data: elem} |
||||
} |
||||
|
||||
if elem < bt.Data { |
||||
bt.Left = BTreeInsertData(bt.Left, elem) |
||||
bt.Left.Parent = bt |
||||
} else if elem >= bt.Data { |
||||
bt.Right = BTreeInsertData(bt.Right, elem) |
||||
bt.Right.Parent = bt |
||||
} |
||||
return bt |
||||
} |
||||
|
||||
func BTreeApplyInorder(root *TreeNode, f func(...interface{}) (int, error)) { |
||||
if root != nil { |
||||
BTreeApplyInorder(root.Left, f) |
||||
f(root.Data) |
||||
BTreeApplyInorder(root.Right, f) |
||||
} |
||||
} |
||||
|
||||
func BTreeApplyPreorder(root *TreeNode, f func(...interface{}) (int, error)) { |
||||
if root != nil { |
||||
f(root.Data) |
||||
BTreeApplyPreorder(root.Left, f) |
||||
BTreeApplyPreorder(root.Right, f) |
||||
} |
||||
} |
||||
|
||||
func BTreeApplyPostorder(root *TreeNode, f func(...interface{}) (int, error)) { |
||||
if root != nil { |
||||
BTreeApplyPostorder(root.Left, f) |
||||
BTreeApplyPostorder(root.Right, f) |
||||
f(root.Data) |
||||
} |
||||
} |
||||
|
||||
func BTreeSearchItem(root *TreeNode, elem string) *TreeNode { |
||||
if root == nil { |
||||
return nil |
||||
} |
||||
|
||||
if root.Data == elem { |
||||
return root |
||||
} |
||||
|
||||
if elem < root.Data { |
||||
return BTreeSearchItem(root.Left, elem) |
||||
} |
||||
|
||||
return BTreeSearchItem(root.Right, elem) |
||||
} |
||||
|
||||
func BTreeLevelCount(root *TreeNode) int { |
||||
if root == nil { |
||||
return 0 |
||||
} |
||||
|
||||
left := BTreeLevelCount(root.Left) |
||||
right := BTreeLevelCount(root.Right) |
||||
|
||||
if left > right { |
||||
return left + 1 |
||||
} |
||||
|
||||
return right + 1 |
||||
} |
||||
|
||||
func BTreeIsBinary(root *TreeNode) bool { |
||||
condLeft := true |
||||
condRight := true |
||||
|
||||
if root == nil { |
||||
return true |
||||
} |
||||
|
||||
if root.Left != nil { |
||||
condLeft = BTreeIsBinary(root.Left) && root.Data >= root.Left.Data |
||||
} |
||||
|
||||
if root.Right != nil { |
||||
condRight = BTreeIsBinary(root.Right) && root.Data <= root.Right.Data |
||||
} |
||||
|
||||
return condLeft && condRight |
||||
} |
||||
|
||||
func applyGivenOrder(root *TreeNode, level int, f func(...interface{}) (int, error)) { |
||||
if root == nil { |
||||
return |
||||
} |
||||
|
||||
if level == 0 { |
||||
arg := interface{}(root.Data) |
||||
f(arg) |
||||
} else if level > 0 { |
||||
applyGivenOrder(root.Left, level-1, f) |
||||
applyGivenOrder(root.Right, level-1, f) |
||||
} |
||||
} |
||||
|
||||
// Apply the function f level by level
|
||||
func BTreeApplyByLevel(root *TreeNode, f func(...interface{}) (int, error)) { |
||||
h := BTreeLevelCount(root) |
||||
for i := 0; i < h; i++ { |
||||
applyGivenOrder(root, i, f) |
||||
} |
||||
} |
||||
|
||||
/*----------------------------------- |
||||
* node-> (A) (B) |
||||
* / / \
|
||||
* temp-> (B) --------> (C) (A) |
||||
* / \ / |
||||
* (C) [z] [z] |
||||
*------------------------------------*/ |
||||
func BTreeRotateRight(node *TreeNode) *TreeNode { |
||||
if node == nil { |
||||
return nil |
||||
} |
||||
|
||||
if node.Left == nil { |
||||
return node |
||||
} |
||||
|
||||
temp := node.Left |
||||
|
||||
node.Left = temp.Right |
||||
|
||||
if temp.Right != nil { |
||||
temp.Right.Parent = node |
||||
} |
||||
|
||||
if node.Parent != nil { |
||||
if node == node.Parent.Left { |
||||
node.Parent.Left = temp |
||||
} else { |
||||
node.Parent.Right = temp |
||||
} |
||||
} |
||||
|
||||
temp.Right = node |
||||
temp.Parent = node.Parent |
||||
node.Parent = temp |
||||
return temp |
||||
} |
||||
|
||||
/*------------------------------------ |
||||
* node->(A) (B) |
||||
* \ / \
|
||||
* temp-> (B) -------> (A) (C) |
||||
* / \ \
|
||||
* [z] (C) [z] |
||||
*------------------------------------- */ |
||||
func BTreeRotateLeft(node *TreeNode) *TreeNode { |
||||
if node == nil { |
||||
return nil |
||||
} |
||||
|
||||
if node.Right == nil { |
||||
return node |
||||
} |
||||
|
||||
temp := node.Right |
||||
node.Right = temp.Left |
||||
|
||||
if temp.Left != nil { |
||||
temp.Left.Parent = node |
||||
} |
||||
if node.Parent != nil { |
||||
if node == node.Parent.Left { |
||||
node.Parent.Left = temp |
||||
} else { |
||||
node.Parent.Right = temp |
||||
} |
||||
} |
||||
|
||||
temp.Left = node |
||||
temp.Parent = node.Parent |
||||
|
||||
node.Parent = temp |
||||
return temp |
||||
} |
||||
|
||||
// Returns the maximum node in the subtree started by root
|
||||
func BTreeMax(root *TreeNode) *TreeNode { |
||||
if root == nil || root.Right == nil { |
||||
return root |
||||
} |
||||
|
||||
return BTreeMax(root.Right) |
||||
} |
||||
|
||||
// Returns the minimum value in the subtree started by root
|
||||
func BTreeMin(root *TreeNode) *TreeNode { |
||||
if root == nil || root.Left == nil { |
||||
return root |
||||
} |
||||
|
||||
return BTreeMin(root.Left) |
||||
} |
||||
|
||||
func BTreeTransplant(root, node, repla *TreeNode) *TreeNode { |
||||
if root == nil { |
||||
return nil |
||||
} |
||||
|
||||
replacement := node |
||||
if node.Parent == nil { |
||||
root = repla |
||||
} else if node == node.Parent.Left { |
||||
replacement.Parent.Left = repla |
||||
} else { |
||||
replacement.Parent.Right = repla |
||||
} |
||||
if repla != nil { |
||||
repla.Parent = node.Parent |
||||
} |
||||
|
||||
return root |
||||
} |
||||
|
||||
func BTreeDeleteNode(root, node *TreeNode) *TreeNode { |
||||
if node != nil { |
||||
if node.Left == nil { |
||||
root = BTreeTransplant(root, node, node.Right) |
||||
} else if node.Right == nil { |
||||
root = BTreeTransplant(root, node, node.Left) |
||||
} else { |
||||
y := BTreeMin(node.Right) |
||||
if y != nil && y.Parent != node { |
||||
root = BTreeTransplant(root, y, y.Right) |
||||
|
||||
y.Right = node.Right |
||||
y.Right.Parent = y |
||||
} |
||||
root = BTreeTransplant(root, node, y) |
||||
y.Left = node.Left |
||||
y.Left.Parent = y |
||||
} |
||||
} |
||||
return root |
||||
} |
@ -1,25 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"io" |
||||
"io/ioutil" |
||||
"os" |
||||
|
||||
"github.com/01-edu/public/test-go/lib" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 1 { |
||||
if _, err := io.Copy(os.Stdout, os.Stdin); err != nil { |
||||
panic(err) |
||||
} |
||||
} else { |
||||
for _, arg := range os.Args[1:] { |
||||
b, err := ioutil.ReadFile(arg) |
||||
if err != nil { |
||||
lib.Fatalln("ERROR:", err) |
||||
} |
||||
os.Stdout.Write(b) |
||||
} |
||||
} |
||||
} |
@ -1,190 +0,0 @@
|
||||
package solutions |
||||
|
||||
import ( |
||||
"reflect" |
||||
"runtime" |
||||
"strconv" |
||||
"strings" |
||||
|
||||
"github.com/01-edu/public/test-go/lib" |
||||
) |
||||
|
||||
func FormatTree(root *TreeNode) string { |
||||
if root == nil { |
||||
return "" |
||||
} |
||||
res := root.Data + "\n" |
||||
res += formatSubTree(root, "") |
||||
return res |
||||
} |
||||
|
||||
func formatSubTree(root *TreeNode, prefix string) string { |
||||
if root == nil { |
||||
return "" |
||||
} |
||||
|
||||
var res string |
||||
|
||||
hasLeft := root.Left != nil |
||||
hasRight := root.Right != nil |
||||
|
||||
if !hasLeft && !hasRight { |
||||
return res |
||||
} |
||||
|
||||
res += prefix |
||||
if hasLeft && hasRight { |
||||
res += "├── " |
||||
} |
||||
|
||||
if !hasLeft && hasRight { |
||||
res += "└── " |
||||
} |
||||
|
||||
if hasRight { |
||||
printStrand := (hasLeft && hasRight && (root.Right.Right != nil || root.Right.Left != nil)) |
||||
newPrefix := prefix |
||||
if printStrand { |
||||
newPrefix += "│ " |
||||
} else { |
||||
newPrefix += " " |
||||
} |
||||
res += root.Right.Data + "\n" |
||||
res += formatSubTree(root.Right, newPrefix) |
||||
} |
||||
|
||||
if hasLeft { |
||||
if hasRight { |
||||
res += prefix |
||||
} |
||||
res += "└── " + root.Left.Data + "\n" |
||||
res += formatSubTree(root.Left, prefix+" ") |
||||
} |
||||
return res |
||||
} |
||||
|
||||
func ParentList(root *TreeNode) string { |
||||
if root == nil { |
||||
return "" |
||||
} |
||||
|
||||
var parent string |
||||
|
||||
if root.Parent == nil { |
||||
parent = "nil" |
||||
} else { |
||||
parent = root.Parent.Data |
||||
} |
||||
|
||||
r := "Node: " + root.Data + " Parent: " + parent + "\n" |
||||
r += ParentList(root.Left) + ParentList(root.Right) |
||||
return r |
||||
} |
||||
|
||||
func ChallengeTree( |
||||
name string, |
||||
fn1, fn2 interface{}, |
||||
arg1 *TreeNode, arg2 interface{}, |
||||
args ...interface{}, |
||||
) { |
||||
args1 := []interface{}{arg1} |
||||
args2 := []interface{}{arg2} |
||||
|
||||
if args != nil { |
||||
for _, v := range args { |
||||
args1 = append(args1, v) |
||||
args2 = append(args2, v) |
||||
} |
||||
} |
||||
st1 := lib.Monitor(fn1, args1) |
||||
st2 := lib.Monitor(fn2, args2) |
||||
|
||||
if st1.Stdout != st2.Stdout { |
||||
lib.Fatalf("%s(\n%s)\n prints %s instead of %s\n", |
||||
name, |
||||
FormatTree(arg1), |
||||
lib.Format(st2.Stdout), |
||||
lib.Format(st1.Stdout), |
||||
) |
||||
} |
||||
} |
||||
|
||||
func PrintList(n *NodeI) string { |
||||
var res string |
||||
it := n |
||||
for it != nil { |
||||
res += strconv.Itoa(it.Data) + "-> " |
||||
it = it.Next |
||||
} |
||||
res += "<nil>" |
||||
return res |
||||
} |
||||
|
||||
func ListToString(n *NodeL) string { |
||||
var res string |
||||
it := n |
||||
for it != nil { |
||||
switch it.Data.(type) { |
||||
case int: |
||||
res += strconv.Itoa(it.Data.(int)) + "-> " |
||||
case string: |
||||
res += it.Data.(string) + "-> " |
||||
} |
||||
it = it.Next |
||||
} |
||||
res += "<nil>" |
||||
return res |
||||
} |
||||
|
||||
func ConvertIntToInterface(t []int) []interface{} { |
||||
RandLen := lib.RandIntBetween(0, len(t)) |
||||
s := make([]interface{}, RandLen) |
||||
for j := 0; j < RandLen; j++ { |
||||
for i := 0; i < lib.RandIntBetween(1, len(t)); i++ { |
||||
s[j] = t[i] |
||||
} |
||||
} |
||||
return s |
||||
} |
||||
|
||||
func ConvertIntToStringface(t []string) []interface{} { |
||||
RandLen := lib.RandIntBetween(0, len(t)) |
||||
s := make([]interface{}, RandLen) |
||||
for j := 0; j < RandLen; j++ { |
||||
for i := 0; i < lib.RandIntBetween(1, len(t)); i++ { |
||||
s[j] = t[i] |
||||
} |
||||
} |
||||
return s |
||||
} |
||||
|
||||
type NodeTest struct { |
||||
Data []interface{} |
||||
} |
||||
|
||||
func ElementsToTest(table []NodeTest) []NodeTest { |
||||
table = append(table, |
||||
NodeTest{ |
||||
Data: []interface{}{}, |
||||
}, |
||||
) |
||||
for i := 0; i < 3; i++ { |
||||
val := NodeTest{ |
||||
Data: ConvertIntToInterface(lib.MultRandInt()), |
||||
} |
||||
table = append(table, val) |
||||
} |
||||
for i := 0; i < 3; i++ { |
||||
val := NodeTest{ |
||||
Data: ConvertIntToStringface(lib.MultRandWords()), |
||||
} |
||||
table = append(table, val) |
||||
} |
||||
return table |
||||
} |
||||
|
||||
// GetName gets the function name
|
||||
func GetName(f interface{}) string { |
||||
pathFuncUsed := strings.Split(runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name(), "/") |
||||
return pathFuncUsed[len(pathFuncUsed)-1] |
||||
} |
@ -1,16 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"regexp" |
||||
"strings" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
re := regexp.MustCompile(`( +)`) |
||||
fmt.Print(re.ReplaceAllString(strings.Trim(os.Args[1], " "), " ")) |
||||
} |
||||
fmt.Println() |
||||
} |
@ -1,21 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
safeWords := []string{"01", "galaxy", "galaxy 01"} |
||||
count := 0 |
||||
for _, arg := range os.Args[1:] { |
||||
for _, s := range safeWords { |
||||
if s == arg { |
||||
count++ |
||||
} |
||||
} |
||||
} |
||||
if count == 1 || count == 2 { |
||||
fmt.Println("Alert!!!") |
||||
} |
||||
} |
@ -1,55 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
) |
||||
|
||||
func min(numbers ...int) int { |
||||
min := numbers[0] |
||||
for _, i := range numbers { |
||||
if i < min { |
||||
min = i |
||||
} |
||||
} |
||||
return min |
||||
} |
||||
|
||||
func max(numbers ...int) int { |
||||
max := numbers[0] |
||||
for _, i := range numbers { |
||||
if i > max { |
||||
max = i |
||||
} |
||||
} |
||||
return max |
||||
} |
||||
|
||||
func costumeProfit(a, b, c, d, e, f int) int { |
||||
if d == min(a, b, c, d) { |
||||
return d * max(e, f) |
||||
} |
||||
if e > f { |
||||
ans := min(a, d) * e |
||||
d -= min(a, d) |
||||
ans += min(d, b, c) * f |
||||
return ans |
||||
} |
||||
ans := min(b, c, d) * f |
||||
d -= min(b, c, d) |
||||
ans += min(a, d) * e |
||||
return ans |
||||
} |
||||
|
||||
func main() { |
||||
args := os.Args[1:] |
||||
a, _ := strconv.Atoi(args[0]) |
||||
b, _ := strconv.Atoi(args[1]) |
||||
c, _ := strconv.Atoi(args[2]) |
||||
d, _ := strconv.Atoi(args[3]) |
||||
e, _ := strconv.Atoi(args[4]) |
||||
f, _ := strconv.Atoi(args[5]) |
||||
|
||||
fmt.Println(costumeProfit(a, b, c, d, e, f)) |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println(9876543210) |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("a") |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("aBcDeFgHiJkLmNoPqRsTuVwXyZ") |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("zYxWvUtSrQpOnMlKjIhGfEdCbA") |
||||
} |
@ -1,21 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"io/ioutil" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) < 2 { |
||||
fmt.Println("File name missing") |
||||
} else if len(os.Args) > 2 { |
||||
fmt.Println("Too many arguments") |
||||
} else { |
||||
b, err := ioutil.ReadFile(os.Args[1]) |
||||
if err != nil { |
||||
panic(err) |
||||
} |
||||
os.Stdout.Write(b) |
||||
} |
||||
} |
@ -1,12 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) > 1 { |
||||
fmt.Println(os.Args[1]) |
||||
} |
||||
} |
@ -1,13 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
size := len(os.Args) |
||||
if size > 1 { |
||||
fmt.Println(os.Args[size-1]) |
||||
} |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("z") |
||||
} |
@ -1,50 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 4 { |
||||
a, err := strconv.Atoi(os.Args[1]) |
||||
if err != nil { |
||||
return |
||||
} |
||||
b, err := strconv.Atoi(os.Args[3]) |
||||
if err != nil { |
||||
return |
||||
} |
||||
operator := os.Args[2] |
||||
switch operator { |
||||
case "+": |
||||
result := a + b |
||||
if (result > a) == (b > 0) { |
||||
fmt.Println(result) |
||||
} |
||||
case "-": |
||||
result := a - b |
||||
if (result < a) == (b > 0) { |
||||
fmt.Println(result) |
||||
} |
||||
case "*": |
||||
result := a * b |
||||
if a == 0 || (result/a == b) { |
||||
fmt.Println(result) |
||||
} |
||||
case "/": |
||||
if b == 0 { |
||||
fmt.Println("No division by 0") |
||||
} else { |
||||
fmt.Println(a / b) |
||||
} |
||||
case "%": |
||||
if b == 0 { |
||||
fmt.Println("No modulo by 0") |
||||
} else { |
||||
fmt.Println(a % b) |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,24 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
) |
||||
|
||||
func deleteExtraSpaces(a []string) (res []string) { |
||||
for _, v := range a { |
||||
if v != "" { |
||||
res = append(res, v) |
||||
} |
||||
} |
||||
return |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
arg := strings.Split(os.Args[1], " ") |
||||
arg = deleteExtraSpaces(arg) |
||||
fmt.Println(strings.Join(arg, " ")) |
||||
} |
||||
} |
@ -1,16 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
s := strings.Split(strings.TrimSpace(os.Args[1]), " ")[0] |
||||
if s != "" { |
||||
fmt.Println(s) |
||||
} |
||||
} |
||||
} |
@ -1,47 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
const ( |
||||
CLOSE = iota |
||||
OPEN |
||||
) |
||||
|
||||
type Door struct { |
||||
State int |
||||
} |
||||
|
||||
func CloseDoor(ptrDoor *Door) { |
||||
fmt.Println("Door Closing...") |
||||
ptrDoor.State = CLOSE |
||||
} |
||||
|
||||
func OpenDoor(ptrdoor *Door) { |
||||
fmt.Println("Door Opening...") |
||||
ptrdoor.State = OPEN |
||||
} |
||||
|
||||
func IsDoorOpened(ptrDoor *Door) bool { |
||||
fmt.Println("is the Door opened ?") |
||||
return ptrDoor.State == OPEN |
||||
} |
||||
|
||||
func IsDoorClosed(ptrDoor *Door) bool { |
||||
fmt.Println("is the Door closed ?") |
||||
return ptrDoor.State == CLOSE |
||||
} |
||||
|
||||
func main() { |
||||
var door Door |
||||
|
||||
OpenDoor(&door) |
||||
if IsDoorClosed(&door) { |
||||
OpenDoor(&door) |
||||
} |
||||
if IsDoorOpened(&door) { |
||||
CloseDoor(&door) |
||||
} |
||||
if door.State == OPEN { |
||||
CloseDoor(&door) |
||||
} |
||||
} |
@ -1,72 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"sort" |
||||
"strings" |
||||
) |
||||
|
||||
type helpMs struct { |
||||
flag string |
||||
shortenFlag string |
||||
handler string |
||||
} |
||||
|
||||
func obtainValues(value, strsplit string) string { |
||||
values := strings.Split(value, "=") |
||||
return values[len(values)-1] |
||||
} |
||||
|
||||
func setMs(flag, shortenFlag, handler string) *helpMs { |
||||
helpMs := &helpMs{ |
||||
flag: flag, |
||||
shortenFlag: shortenFlag, |
||||
handler: handler, |
||||
} |
||||
return helpMs |
||||
} |
||||
|
||||
func main() { |
||||
size := len(os.Args) |
||||
|
||||
if size == 1 || os.Args[1] == "-h" || os.Args[1] == "--help" { |
||||
table := []helpMs{} |
||||
|
||||
helpMs := setMs("--insert", "-i", "This flag inserts the string into the string passed as argument.") |
||||
table = append(table, *helpMs) |
||||
helpMs = setMs("--order", "-o", "This flag will behave like a boolean, if it is called it will order the argument.") |
||||
table = append(table, *helpMs) |
||||
|
||||
for _, v := range table { |
||||
fmt.Println(v.flag) |
||||
fmt.Println(" ", v.shortenFlag) |
||||
fmt.Println(" ", v.handler) |
||||
} |
||||
} else if size <= 4 { |
||||
var runes []rune |
||||
strToInsert := "" |
||||
var order bool |
||||
|
||||
for i := 1; i < size; i++ { |
||||
if strings.Contains(os.Args[i], "--insert") || strings.Contains(os.Args[i], "-i") { |
||||
strToInsert = obtainValues(os.Args[i], "=") |
||||
} else if strings.Contains(os.Args[i], "--order") || strings.Contains(os.Args[i], "-o") { |
||||
order = true |
||||
} else { |
||||
runes = []rune(os.Args[i]) |
||||
} |
||||
} |
||||
if strToInsert != "" { |
||||
concatStr := string(runes) + strToInsert |
||||
runes = []rune(concatStr) |
||||
} |
||||
if order { |
||||
sort.Slice(runes, func(i, j int) bool { |
||||
return runes[i] < runes[j] |
||||
}) |
||||
} |
||||
|
||||
fmt.Println(string(runes)) |
||||
} |
||||
} |
@ -1,35 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
) |
||||
|
||||
func fprime(value int) { |
||||
if value == 1 { |
||||
return |
||||
} |
||||
divisionIterator := 2 |
||||
for value > 1 { |
||||
if value%divisionIterator == 0 { |
||||
fmt.Print(divisionIterator) |
||||
value = value / divisionIterator |
||||
|
||||
if value > 1 { |
||||
fmt.Print("*") |
||||
} |
||||
divisionIterator-- |
||||
} |
||||
divisionIterator++ |
||||
} |
||||
fmt.Println() |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
if i, err := strconv.Atoi(os.Args[1]); err == nil { |
||||
fprime(i) |
||||
} |
||||
} |
||||
} |
@ -1,17 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
|
||||
"github.com/01-edu/public/test-go/lib" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 3 { |
||||
a, _ := strconv.Atoi(os.Args[1]) |
||||
b, _ := strconv.Atoi(os.Args[2]) |
||||
fmt.Println(lib.GCD(a, b)) |
||||
} |
||||
} |
@ -1,60 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
"unicode" |
||||
) |
||||
|
||||
func singleSearch(exp []string, text string) []string { |
||||
items := strings.Split(text, " ") |
||||
var result []string |
||||
|
||||
for _, item := range items { |
||||
for _, word := range exp { |
||||
if strings.Contains(item, word) { |
||||
result = append(result, item) |
||||
} |
||||
} |
||||
} |
||||
return result |
||||
} |
||||
|
||||
func simpleSearch(runes []rune, text string) []string { |
||||
exp := string(runes) |
||||
|
||||
var result []string |
||||
if !strings.ContainsRune(exp, '|') { |
||||
helper := []string{exp} |
||||
result = append(singleSearch(helper, text)) |
||||
} else { |
||||
expWords := strings.Split(exp, "|") |
||||
result = append(result, singleSearch(expWords, text)...) |
||||
} |
||||
return result |
||||
} |
||||
|
||||
func brackets(regexp, text string) { |
||||
if text == "" || regexp == "" { |
||||
return |
||||
} |
||||
runes := []rune(regexp) |
||||
|
||||
if runes[0] == '(' && runes[len(runes)-1] == ')' { |
||||
runes = runes[1 : len(runes)-1] |
||||
result := simpleSearch(runes, text) |
||||
for i, s := range result { |
||||
if !unicode.IsLetter(rune(s[len(s)-1])) { |
||||
s = s[0 : len(s)-1] |
||||
} |
||||
fmt.Printf("%d: %s\n", i+1, s) |
||||
} |
||||
} |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) == 3 { |
||||
brackets(os.Args[1], os.Args[2]) |
||||
} |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("Hello World!") |
||||
} |
@ -1,51 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) != 3 { |
||||
return |
||||
} |
||||
|
||||
first := os.Args[1] |
||||
second := os.Args[2] |
||||
|
||||
if first == "" { |
||||
fmt.Println("1") |
||||
return |
||||
} |
||||
if second == "" { |
||||
fmt.Println("0") |
||||
return |
||||
} |
||||
|
||||
i := 0 |
||||
j := 0 |
||||
count := 0 |
||||
|
||||
firstA := []rune(first) |
||||
secondA := []rune(second) |
||||
|
||||
for i < len(first) { |
||||
for j < len(second) { |
||||
if firstA[i] == secondA[j] { |
||||
count++ |
||||
i++ |
||||
} |
||||
if i == len(first) { |
||||
break |
||||
} |
||||
j++ |
||||
} |
||||
i++ |
||||
} |
||||
|
||||
if count == len(first) { |
||||
fmt.Println("1") |
||||
} else { |
||||
fmt.Println("0") |
||||
} |
||||
} |
@ -1,25 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
) |
||||
|
||||
func result(s1 string, s2 string) string { |
||||
var rest []rune |
||||
for _, a := range s1 { |
||||
for _, b := range s2 { |
||||
if a == b && !strings.ContainsRune(string(rest), a) { |
||||
rest = append(rest, a) |
||||
} |
||||
} |
||||
} |
||||
return string(rest) |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) == 3 { |
||||
fmt.Println(result(os.Args[1], os.Args[2])) |
||||
} |
||||
} |
@ -1,19 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
) |
||||
|
||||
// computes the logical bitwise AND of its operands.
|
||||
func isPowerOf2(n int) bool { |
||||
return n != 0 && ((n & (n - 1)) == 0) |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
nbr, _ := strconv.Atoi(os.Args[1]) |
||||
fmt.Println(isPowerOf2(nbr)) |
||||
} |
||||
} |
@ -1,16 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
words := strings.Fields(os.Args[1]) |
||||
if len(words) > 0 { |
||||
fmt.Println(words[len(words)-1]) |
||||
} |
||||
} |
||||
} |
@ -1,23 +0,0 @@
|
||||
package solutions |
||||
|
||||
// returs the node in a given position
|
||||
func ListAt(l *NodeL, nbr int) *NodeL { |
||||
index := 0 |
||||
count := 0 |
||||
head := l |
||||
|
||||
for head != nil { |
||||
index++ |
||||
head = head.Next |
||||
} |
||||
if nbr <= index { |
||||
for l != nil { |
||||
if count == nbr { |
||||
return l |
||||
} |
||||
count++ |
||||
l = l.Next |
||||
} |
||||
} |
||||
return nil |
||||
} |
@ -1,13 +0,0 @@
|
||||
package solutions |
||||
|
||||
func ListClear(l *List) { |
||||
temp := l.Head |
||||
next := l.Head |
||||
for temp != nil { |
||||
next = temp.Next |
||||
temp = nil |
||||
temp = next |
||||
} |
||||
|
||||
l.Head = nil |
||||
} |
@ -1,19 +0,0 @@
|
||||
package solutions |
||||
|
||||
// finds the element and returns the first data from the node that is a string
|
||||
func ListFind(l *List, ref interface{}, comp func(a, b interface{}) bool) *interface{} { |
||||
iterator := l.Head |
||||
for iterator != nil { |
||||
if comp(iterator.Data, ref) { |
||||
return &iterator.Data |
||||
} |
||||
|
||||
iterator = iterator.Next |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
// defines for two elements the equality criteria
|
||||
func CompStr(a, b interface{}) bool { |
||||
return a == b |
||||
} |
@ -1,28 +0,0 @@
|
||||
package solutions |
||||
|
||||
// applies a function in argument to each element of the linked list
|
||||
func ListForEach(l *List, f func(*NodeL)) { |
||||
it := l.Head |
||||
for it != nil { |
||||
f(it) |
||||
it = it.Next |
||||
} |
||||
} |
||||
|
||||
func Add2_node(node *NodeL) { |
||||
switch node.Data.(type) { |
||||
case int: |
||||
node.Data = node.Data.(int) + 2 |
||||
case string: |
||||
node.Data = node.Data.(string) + "2" |
||||
} |
||||
} |
||||
|
||||
func Subtract3_node(node *NodeL) { |
||||
switch node.Data.(type) { |
||||
case int: |
||||
node.Data = node.Data.(int) - 3 |
||||
case string: |
||||
node.Data = node.Data.(string) + "-3" |
||||
} |
||||
} |
@ -1,43 +0,0 @@
|
||||
package solutions |
||||
|
||||
// compare each element of the linked list to see if it is a String
|
||||
func IsPositive_node(node *NodeL) bool { |
||||
switch node.Data.(type) { |
||||
case int, float32, float64, byte: |
||||
return node.Data.(int) > 0 |
||||
case string, rune: |
||||
return false |
||||
} |
||||
return false |
||||
} |
||||
|
||||
func IsNegative_node(node *NodeL) bool { |
||||
switch node.Data.(type) { |
||||
case int, float32, float64, byte: |
||||
return node.Data.(int) > 0 |
||||
case string, rune: |
||||
return false |
||||
} |
||||
return false |
||||
} |
||||
|
||||
func IsNumeric_node(node *NodeL) bool { |
||||
switch node.Data.(type) { |
||||
case int, float32, float64, byte: |
||||
return true |
||||
case string, rune: |
||||
return false |
||||
} |
||||
return false |
||||
} |
||||
|
||||
// applies the function f on each string if the boolean function comp returns true
|
||||
func ListForEachIf(l *List, f func(*NodeL), comp func(*NodeL) bool) { |
||||
it := l.Head |
||||
for it != nil { |
||||
if comp(it) { |
||||
f(it) |
||||
} |
||||
it = it.Next |
||||
} |
||||
} |
@ -1,15 +0,0 @@
|
||||
package solutions |
||||
|
||||
// gives the last element of the list
|
||||
func ListLast(l *List) interface{} { |
||||
if l.Head == nil { |
||||
return nil |
||||
} |
||||
for l.Head != nil { |
||||
if l.Head.Next == nil { |
||||
return l.Head.Data |
||||
} |
||||
l.Head = l.Head.Next |
||||
} |
||||
return l.Head.Data |
||||
} |
@ -1,10 +0,0 @@
|
||||
package solutions |
||||
|
||||
// merges the 2 lists in one (in the end of the first list)
|
||||
func ListMerge(l1 *List, l2 *List) { |
||||
if l1.Head == nil { |
||||
l1.Head, l1.Tail = l2.Head, l2.Tail |
||||
return |
||||
} |
||||
l1.Tail.Next = l2.Head |
||||
} |
@ -1,22 +0,0 @@
|
||||
package solutions |
||||
|
||||
type NodeL struct { |
||||
Data interface{} |
||||
Next *NodeL |
||||
} |
||||
|
||||
type List struct { |
||||
Head *NodeL |
||||
Tail *NodeL |
||||
} |
||||
|
||||
func ListPushBack(l *List, data interface{}) { |
||||
n := &NodeL{Data: data} |
||||
|
||||
if l.Head == nil { |
||||
l.Head = n |
||||
} else { |
||||
l.Tail.Next = n |
||||
} |
||||
l.Tail = n |
||||
} |
@ -1,14 +0,0 @@
|
||||
package solutions |
||||
|
||||
// inserts node on the first position of the list
|
||||
func ListPushFront(l *List, data interface{}) { |
||||
n := &NodeL{Data: data} |
||||
|
||||
if l.Head == nil { |
||||
l.Head = n |
||||
return |
||||
} |
||||
|
||||
n.Next = l.Head |
||||
l.Head = n |
||||
} |
@ -1,19 +0,0 @@
|
||||
package solutions |
||||
|
||||
// removes all elements that are equal to the data_ref
|
||||
func ListRemoveIf(l *List, data_ref interface{}) { |
||||
temp := l.Head |
||||
prev := l.Head |
||||
|
||||
for temp != nil && temp.Data == data_ref { |
||||
l.Head = temp.Next |
||||
temp = l.Head |
||||
} |
||||
for temp != nil { |
||||
if temp.Data != data_ref { |
||||
prev = temp |
||||
} |
||||
prev.Next = temp.Next |
||||
temp = prev.Next |
||||
} |
||||
} |
@ -1,15 +0,0 @@
|
||||
package solutions |
||||
|
||||
func ListReverse(l *List) { |
||||
current := l.Head |
||||
prev := l.Head |
||||
prev = nil |
||||
|
||||
for current != nil { |
||||
next := current.Next |
||||
current.Next = prev |
||||
prev = current |
||||
current = next |
||||
} |
||||
l.Head = prev |
||||
} |
@ -1,11 +0,0 @@
|
||||
package solutions |
||||
|
||||
func ListSize(l *List) int { |
||||
count := 0 |
||||
iterator := l.Head |
||||
for iterator != nil { |
||||
count++ |
||||
iterator = iterator.Next |
||||
} |
||||
return count |
||||
} |
@ -1,28 +0,0 @@
|
||||
package solutions |
||||
|
||||
func ListSort(l *NodeI) *NodeI { |
||||
head := l |
||||
if head == nil { |
||||
return nil |
||||
} |
||||
head.Next = ListSort(head.Next) |
||||
|
||||
if head.Next != nil && head.Data > head.Next.Data { |
||||
head = move(head) |
||||
} |
||||
return head |
||||
} |
||||
|
||||
func move(l *NodeI) *NodeI { |
||||
p := l |
||||
n := l.Next |
||||
ret := n |
||||
|
||||
for n != nil && l.Data > n.Data { |
||||
p = n |
||||
n = n.Next |
||||
} |
||||
p.Next = l |
||||
l.Next = n |
||||
return ret |
||||
} |
@ -1,32 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
) |
||||
|
||||
func main() { |
||||
args := os.Args[1:] |
||||
if len(args) == 0 { |
||||
return |
||||
} |
||||
var upper bool |
||||
if args[0] == "--upper" { |
||||
upper = true |
||||
args = args[1:] |
||||
} |
||||
for _, arg := range args { |
||||
if nb, err := strconv.Atoi(arg); err != nil || nb < 1 || nb > 26 { |
||||
fmt.Print(" ") |
||||
} else { |
||||
if upper { |
||||
nb += 'A' - 1 |
||||
} else { |
||||
nb += 'a' - 1 |
||||
} |
||||
fmt.Printf("%c", rune(nb)) |
||||
} |
||||
} |
||||
fmt.Println() |
||||
} |
@ -1,32 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
) |
||||
|
||||
func main() { |
||||
var big string |
||||
args := os.Args[1:] |
||||
|
||||
for _, arg := range args { |
||||
split := strings.Split(arg, " ") |
||||
ch := split[0] |
||||
small := split[1] |
||||
|
||||
if ch == "x" { |
||||
break |
||||
} |
||||
if ch == "A" { |
||||
big += small |
||||
} |
||||
if ch == "?" { |
||||
if strings.Contains(big, small) { |
||||
fmt.Println("YES") |
||||
} else { |
||||
fmt.Println("NO") |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Print("a") |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Print("z") |
||||
} |
@ -1,50 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func printOptions(op [32]int, i int) { |
||||
for _, v := range op { |
||||
if i == 8 { |
||||
fmt.Print(" ") |
||||
i = 0 |
||||
} |
||||
fmt.Print(v) |
||||
i++ |
||||
} |
||||
fmt.Println() |
||||
} |
||||
|
||||
func main() { |
||||
var options [32]int |
||||
pos := 1 |
||||
size := len(os.Args) |
||||
if size < 2 { |
||||
fmt.Println("options: abcdefghijklmnopqrstuvwxyz") |
||||
} else { |
||||
for pos < size { |
||||
j := 1 |
||||
if os.Args[pos][0] == '-' { |
||||
if os.Args[pos][1] == 'h' { |
||||
fmt.Println("options: abcdefghijklmnopqrstuvwxyz") |
||||
return |
||||
} |
||||
for j < len(os.Args[pos]) && os.Args[pos][j] >= 'a' && os.Args[pos][j] <= 'z' { |
||||
posOption := 'z' - os.Args[pos][j] + 6 |
||||
options[posOption] = 1 |
||||
j++ |
||||
} |
||||
|
||||
if j < len(os.Args[pos]) && os.Args[pos][j] <= 'a' && os.Args[pos][j] <= 'z' { |
||||
fmt.Println("Invalid Option") |
||||
return |
||||
} |
||||
j++ |
||||
} |
||||
pos++ |
||||
} |
||||
printOptions(options, 0) |
||||
} |
||||
} |
@ -1,10 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
fmt.Println(len(os.Args) - 1) |
||||
} |
@ -1,20 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) != 2 || os.Args[1] == "" { |
||||
return |
||||
} |
||||
s := os.Args[1] |
||||
vowel := strings.IndexAny(s, "aeiouAEIOU") |
||||
if vowel == -1 { |
||||
fmt.Println("No vowels") |
||||
} else { |
||||
fmt.Println(string(s[vowel:]) + string(s[:vowel]) + "ay") |
||||
} |
||||
} |
@ -1,22 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
type Pilot struct { |
||||
Name string |
||||
Life float32 |
||||
Age int |
||||
Aircraft int |
||||
} |
||||
|
||||
const Aircraft1 = 1 |
||||
|
||||
func main() { |
||||
donnie := Pilot{ |
||||
Name: "Donnie", |
||||
Life: 100.0, |
||||
Age: 24, |
||||
Aircraft: Aircraft1, |
||||
} |
||||
fmt.Println(donnie) |
||||
} |
@ -1,22 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
type point struct { |
||||
x int |
||||
y int |
||||
} |
||||
|
||||
func setPoint(ptr *point) { |
||||
ptr.x = 42 |
||||
ptr.y = 21 |
||||
} |
||||
|
||||
func main() { |
||||
points := &point{} |
||||
|
||||
setPoint(points) |
||||
|
||||
fmt.Printf("x = %d, y = %d", points.x, points.y) |
||||
fmt.Println() |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("abcdefghijklmnopqrstuvwxyz") |
||||
} |
@ -1,8 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("AbCdEfGhIjKlMnOpQrStUvWxYz") |
||||
fmt.Println("ZyXwVuTsRqPoNmLkJiHgFeDcBa") |
||||
} |
@ -1,8 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("aBcDeFgHiJkLmNoPqRsTuVwXyZ") |
||||
fmt.Println("zYxWvUtSrQpOnMlKjIhGfEdCbA") |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("abcdefg") |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("zaybxcwdveuftgshriqjpkolnm") |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("azbycxdwevfugthsirjqkplomn") |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("ZAYBXCWDVEUFTGSHRIQJPKOLNM") |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("AZBYCXDWEVFUGTHSIRJQKPLOMN") |
||||
} |
@ -1,18 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
nbr, _ := strconv.Atoi(os.Args[1]) |
||||
printBits(byte(nbr)) |
||||
} |
||||
} |
||||
|
||||
func printBits(octe byte) { |
||||
fmt.Printf("%08b", octe) |
||||
} |
@ -1,40 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
) |
||||
|
||||
func solve(x, y int) { |
||||
for i := 0; i < x; i++ { |
||||
line := "" |
||||
for j := 0; j < y; j++ { |
||||
if i%2 == 0 && j%2 == 0 { |
||||
line += "#" |
||||
} else if i%2 == 0 && j%2 == 1 { |
||||
line += " " |
||||
} else if i%2 == 1 && j%2 == 1 { |
||||
line += "#" |
||||
} else { |
||||
line += " " |
||||
} |
||||
} |
||||
fmt.Println(line) |
||||
} |
||||
} |
||||
|
||||
func main() { |
||||
args := os.Args[1:] |
||||
if len(args) != 2 { |
||||
fmt.Println("Error") |
||||
return |
||||
} |
||||
x, _ := strconv.Atoi(args[1]) |
||||
y, _ := strconv.Atoi(args[0]) |
||||
if x <= 0 || y <= 0 { |
||||
fmt.Println("Error") |
||||
} else { |
||||
solve(x, y) |
||||
} |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("0123456789") |
||||
} |
@ -1,17 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
if i, err := strconv.Atoi(os.Args[1]); err == nil && i > 0 { |
||||
fmt.Printf("%x\n", i) |
||||
} else { |
||||
fmt.Println("ERROR") |
||||
} |
||||
} |
||||
} |
@ -1,12 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
for _, a := range os.Args[1:] { |
||||
fmt.Println(a) |
||||
} |
||||
} |
@ -1,11 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"path/filepath" |
||||
) |
||||
|
||||
func main() { |
||||
fmt.Println(filepath.Base(os.Args[0])) |
||||
} |
@ -1,17 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
for a := 9; a >= 2; a-- { |
||||
for b := a - 1; b >= 1; b-- { |
||||
for c := b - 1; c >= 0; c-- { |
||||
fmt.Printf("%d%d%d", a, b, c) |
||||
if a+b+c != 3 { |
||||
fmt.Print(", ") |
||||
} |
||||
} |
||||
} |
||||
} |
||||
fmt.Println() |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("zyxwvutsrqponmlkjihgfedcba") |
||||
} |
@ -1,8 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("ZyXwVuTsRqPoNmLkJiHgFeDcBa") |
||||
fmt.Println("AbCdEfGhIjKlMnOpQrStUvWxYz") |
||||
} |
@ -1,8 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("zYxWvUtSrQpOnMlKjIhGfEdCbA") |
||||
fmt.Println("aBcDeFgHiJkLmNoPqRsTuVwXyZ") |
||||
} |
@ -1,7 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("gfedcba") |
||||
} |
@ -1,33 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func printAnswer(letter rune) { |
||||
answer := []rune{} |
||||
for i := letter; i <= 'z'; i++ { |
||||
answer = append(answer, i) |
||||
} |
||||
for j := 'a'; j < letter; j++ { |
||||
answer = append(answer, j) |
||||
} |
||||
fmt.Println(string(answer)) |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
letter := os.Args[1] |
||||
if len(letter) == 1 { |
||||
letterConverted := []rune(letter) |
||||
if letterConverted[0] >= 'a' && letterConverted[0] <= 'z' { |
||||
printAnswer(letterConverted[0]) |
||||
} |
||||
} else { |
||||
fmt.Println() |
||||
} |
||||
} else { |
||||
fmt.Println() |
||||
} |
||||
} |
@ -1,87 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"bufio" |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
"strings" |
||||
) |
||||
|
||||
// counts in the Cartesian coordinates x and y
|
||||
func countXY(output []rune) (x, y int) { |
||||
countX := 0 |
||||
countY := 0 |
||||
flag := false |
||||
for _, s := range output { |
||||
if s == '\n' { |
||||
countY++ |
||||
flag = true |
||||
} else if !flag { |
||||
countX++ |
||||
} |
||||
} |
||||
return countX, countY |
||||
} |
||||
|
||||
func determineInput(output []rune) { |
||||
x, y := countXY(output) |
||||
// the leftC and rightC -> position of the corners
|
||||
// this will be to see what raid1 is being used
|
||||
// for the lower left corner
|
||||
leftC := ((x * y) + y - 1) - x |
||||
// for the lower right corner
|
||||
rightC := (x * y) + y - 2 |
||||
// for the upper right corner
|
||||
rightUpC := x - 1 |
||||
|
||||
X := strconv.Itoa(x) |
||||
Y := strconv.Itoa(y) |
||||
result := isPipedWith(output, leftC, rightC, rightUpC, X, Y) |
||||
fmt.Println(strings.Join(result, " || ")) |
||||
} |
||||
|
||||
func isPipedWith(output []rune, leftC, rightC, rightUpC int, x, y string) []string { |
||||
result := []string{} |
||||
|
||||
if output[0] == 'o' { |
||||
result = append(result, "[raid1a] ["+x+"] ["+y+"]") |
||||
} else if output[0] == '/' { |
||||
result = append(result, "[raid1b] ["+x+"] ["+y+"]") |
||||
} else if output[0] == 'A' { |
||||
if (output[rightUpC] == 'A' && output[rightC] == 'C') || |
||||
(output[rightUpC] == 'A' && y == "1") || |
||||
(x == "1" && y == "1") { |
||||
result = append(result, "[raid1c] ["+x+"] ["+y+"]") |
||||
} |
||||
if (output[rightUpC] == 'C' && output[leftC] == 'A') || |
||||
(output[leftC] == 'A' && x == "1") || |
||||
(x == "1" && y == "1") { |
||||
result = append(result, "[raid1d] ["+x+"] ["+y+"]") |
||||
} |
||||
if (output[leftC] == 'C' && x == "1") || |
||||
(output[rightUpC] == 'C' && y == "1") || |
||||
(output[rightUpC] == 'C' && output[leftC] == 'C') || |
||||
(x == "1" && y == "1") { |
||||
result = append(result, "[raid1e] ["+x+"] ["+y+"]") |
||||
} |
||||
} |
||||
return result |
||||
} |
||||
|
||||
func main() { |
||||
reader := bufio.NewReader(os.Stdin) |
||||
var output []rune |
||||
for { |
||||
input, _, err := reader.ReadRune() |
||||
if err != nil { |
||||
break |
||||
} |
||||
output = append(output, input) |
||||
} |
||||
if output[0] != 'o' && output[0] != '/' && output[0] != 'A' { |
||||
fmt.Println("Not a Raid function") |
||||
return |
||||
} |
||||
determineInput(output) |
||||
} |
@ -1,33 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) != 3 { |
||||
return |
||||
} |
||||
a, err := strconv.Atoi(os.Args[1]) |
||||
if err != nil { |
||||
fmt.Println(err) |
||||
return |
||||
} |
||||
b, err := strconv.Atoi(os.Args[2]) |
||||
if err != nil { |
||||
fmt.Println(err) |
||||
return |
||||
} |
||||
fmt.Print(a) |
||||
for b != a { |
||||
if a < b { |
||||
a++ |
||||
} else { |
||||
a-- |
||||
} |
||||
fmt.Print(" ", a) |
||||
} |
||||
fmt.Println() |
||||
} |
@ -1,64 +0,0 @@
|
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
type point struct { |
||||
x int |
||||
y int |
||||
} |
||||
|
||||
type rectangle struct { |
||||
upLeft point |
||||
downRight point |
||||
} |
||||
|
||||
func defineRectangle(vPoint []point, n int) *rectangle { |
||||
xmin := vPoint[0].x |
||||
xmax := vPoint[0].x |
||||
ymin := vPoint[0].y |
||||
ymax := vPoint[0].y |
||||
|
||||
ptr := &rectangle{} |
||||
|
||||
for i := 0; i < n; i++ { |
||||
if vPoint[i].x < xmin { |
||||
xmin = vPoint[i].x |
||||
} |
||||
if vPoint[i].x > xmax { |
||||
xmax = vPoint[i].x |
||||
} |
||||
if vPoint[i].y < ymin { |
||||
ymin = vPoint[i].y |
||||
} |
||||
if vPoint[i].y > ymax { |
||||
ymax = vPoint[i].y |
||||
} |
||||
} |
||||
ptr.upLeft.x = xmin |
||||
ptr.upLeft.y = ymax |
||||
ptr.downRight.x = xmax |
||||
ptr.downRight.y = ymin |
||||
|
||||
return ptr |
||||
} |
||||
|
||||
func calcArea(ptr *rectangle) int { |
||||
return (ptr.upLeft.x - ptr.downRight.x) * (ptr.downRight.y - ptr.upLeft.y) |
||||
} |
||||
|
||||
func main() { |
||||
vPoint := []point{} |
||||
rectangle := &rectangle{} |
||||
n := 7 |
||||
|
||||
for i := 0; i < n; i++ { |
||||
val := point{ |
||||
x: i%2 + 1, |
||||
y: i + 2, |
||||
} |
||||
vPoint = append(vPoint, val) |
||||
} |
||||
|
||||
rectangle = defineRectangle(vPoint, n) |
||||
fmt.Println("area of the rectangle:", calcArea(rectangle)) |
||||
} |
@ -1,22 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"unicode" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
for _, r := range os.Args[1] { |
||||
fmt.Printf("%c", r) |
||||
if unicode.IsLetter(r) { |
||||
rep := unicode.ToLower(r) - 'a' |
||||
for i := 0; i < int(rep); i++ { |
||||
fmt.Printf("%c", r) |
||||
} |
||||
} |
||||
} |
||||
fmt.Println() |
||||
} |
||||
} |
@ -1,33 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) != 3 { |
||||
return |
||||
} |
||||
a, err := strconv.Atoi(os.Args[1]) |
||||
if err != nil { |
||||
fmt.Println(err) |
||||
return |
||||
} |
||||
b, err := strconv.Atoi(os.Args[2]) |
||||
if err != nil { |
||||
fmt.Println(err) |
||||
return |
||||
} |
||||
fmt.Print(b) |
||||
for a != b { |
||||
if b < a { |
||||
b++ |
||||
} else { |
||||
b-- |
||||
} |
||||
fmt.Print(" ", b) |
||||
} |
||||
fmt.Println() |
||||
} |
@ -1,21 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"unicode" |
||||
) |
||||
|
||||
func main() { |
||||
for _, arg := range os.Args[1:] { |
||||
arg := []rune(arg) |
||||
for j, r := range arg { |
||||
if j+1 == len(arg) || arg[j+1] == ' ' { |
||||
arg[j] = unicode.ToUpper(r) |
||||
} else { |
||||
arg[j] = unicode.ToLower(r) |
||||
} |
||||
} |
||||
fmt.Println(string(arg)) |
||||
} |
||||
} |
@ -1,12 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
for i := len(os.Args) - 1; i >= 1; i-- { |
||||
fmt.Println(os.Args[i]) |
||||
} |
||||
} |
@ -1,20 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
a := strings.Split(os.Args[1], " ") |
||||
for i := len(a) - 1; i >= 0; i-- { |
||||
fmt.Print(a[i]) |
||||
if i != 0 { |
||||
fmt.Print(" ") |
||||
} |
||||
} |
||||
fmt.Println() |
||||
} |
||||
} |
@ -1,31 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func solve(s string) bool { |
||||
x := 0 |
||||
y := 0 |
||||
|
||||
for _, r := range s { |
||||
switch r { |
||||
case 'L': |
||||
x-- |
||||
case 'R': |
||||
x++ |
||||
case 'U': |
||||
y++ |
||||
case 'D': |
||||
y-- |
||||
} |
||||
} |
||||
return x == 0 && y == 0 |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
fmt.Println(solve(os.Args[1])) |
||||
} |
||||
} |
@ -1,66 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
"strings" |
||||
) |
||||
|
||||
type roman struct { |
||||
num int |
||||
romanDigit string |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
nbr, err := strconv.Atoi(os.Args[1]) |
||||
if err != nil || nbr >= 4000 || nbr == 0 { |
||||
fmt.Println("ERROR: can not convert to roman digit") |
||||
return |
||||
} |
||||
patter := []roman{ |
||||
{num: 1000, romanDigit: "M"}, |
||||
{num: 900, romanDigit: "CM"}, |
||||
{num: 500, romanDigit: "D"}, |
||||
{num: 400, romanDigit: "CD"}, |
||||
{num: 100, romanDigit: "C"}, |
||||
{num: 90, romanDigit: "XC"}, |
||||
{num: 50, romanDigit: "L"}, |
||||
{num: 40, romanDigit: "XL"}, |
||||
{num: 10, romanDigit: "X"}, |
||||
{num: 9, romanDigit: "IX"}, |
||||
{num: 5, romanDigit: "V"}, |
||||
{num: 4, romanDigit: "IV"}, |
||||
{num: 1, romanDigit: "I"}, |
||||
} |
||||
sumRoman, romandigit := print(nbr, patter) |
||||
fmt.Println(strings.TrimSuffix(sumRoman, "+")) |
||||
fmt.Println(romandigit) |
||||
} |
||||
} |
||||
|
||||
func print(nbr int, patter []roman) (string, string) { |
||||
var sumRomanDigit, result string |
||||
for _, v := range patter { |
||||
for nbr >= v.num { |
||||
sumRomanDigit += v.romanDigit + "+" |
||||
result += v.romanDigit |
||||
nbr -= v.num |
||||
} |
||||
} |
||||
sumRomanDigit = formatsum(sumRomanDigit, patter) |
||||
return sumRomanDigit, result |
||||
} |
||||
|
||||
func formatsum(a string, patter []roman) string { |
||||
result2 := strings.Split(a, "+") |
||||
|
||||
for i, v := range result2 { |
||||
if len(v) == 2 { |
||||
result2[i] = fmt.Sprintf("(%s-%s)", string(result2[i][1]), string(result2[i][0])) |
||||
} |
||||
} |
||||
a = strings.Join(result2, "+") |
||||
return a |
||||
} |
@ -1,31 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
) |
||||
|
||||
func deleteExtraSpaces(a []string) []string { |
||||
var res []string |
||||
for _, v := range a { |
||||
if v != "" { |
||||
res = append(res, v) |
||||
} |
||||
} |
||||
return res |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
words := strings.Split(os.Args[1], " ") |
||||
words = deleteExtraSpaces(words) |
||||
if len(words) >= 1 { |
||||
for _, v := range words[1:] { |
||||
fmt.Print(v, " ") |
||||
} |
||||
fmt.Print(words[0]) |
||||
} |
||||
} |
||||
fmt.Println() |
||||
} |
@ -1,28 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 2 { |
||||
for _, r := range os.Args[1] { |
||||
if r >= 'a' && r <= 'z' { |
||||
if r >= 'a'+13 { |
||||
r -= 13 |
||||
} else { |
||||
r += 13 |
||||
} |
||||
} else if r >= 'A' && r <= 'Z' { |
||||
if r >= 'A'+13 { |
||||
r -= 13 |
||||
} else { |
||||
r += 13 |
||||
} |
||||
} |
||||
fmt.Printf("%c", r) |
||||
} |
||||
fmt.Println() |
||||
} |
||||
} |
@ -1,37 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
) |
||||
|
||||
func main() { |
||||
var a1, a2, rev []rune |
||||
for _, arg := range os.Args[1:] { |
||||
for _, k := range arg { |
||||
if strings.ContainsRune("aeiouAEIOU", k) { |
||||
a1 = append(a1, k) |
||||
} |
||||
} |
||||
} |
||||
for i := len(a1) - 1; i >= 0; i-- { |
||||
rev = append(rev, a1[i]) |
||||
} |
||||
|
||||
m := 0 |
||||
for i, arg := range os.Args[1:] { |
||||
for _, j := range arg { |
||||
if strings.ContainsRune("aeiouAEIOU", j) { |
||||
a2 = append(a2, rev[m]) |
||||
m++ |
||||
} else { |
||||
a2 = append(a2, j) |
||||
} |
||||
} |
||||
if i != len(os.Args)-1 { |
||||
a2 = append(a2, ' ') |
||||
} |
||||
} |
||||
fmt.Println(string(a2)) |
||||
} |
@ -1,67 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strconv" |
||||
"strings" |
||||
) |
||||
|
||||
func deleteExtraSpaces(a []string) (res []string) { |
||||
for _, v := range a { |
||||
if v != "" { |
||||
res = append(res, v) |
||||
} |
||||
} |
||||
return |
||||
} |
||||
|
||||
func main() { |
||||
if len(os.Args) != 2 { |
||||
fmt.Println("Error") |
||||
return |
||||
} |
||||
var values []int |
||||
op := strings.Split(os.Args[1], " ") |
||||
op = deleteExtraSpaces(op) |
||||
for _, v := range op { |
||||
val, err := strconv.Atoi(v) |
||||
|
||||
if err == nil { |
||||
values = append(values, val) |
||||
continue |
||||
} |
||||
|
||||
n := len(values) |
||||
if n < 2 { |
||||
fmt.Println("Error") |
||||
return |
||||
} |
||||
|
||||
switch v { |
||||
case "+": |
||||
values[n-2] += values[n-1] |
||||
values = values[:n-1] |
||||
case "-": |
||||
values[n-2] -= values[n-1] |
||||
values = values[:n-1] |
||||
case "*": |
||||
values[n-2] *= values[n-1] |
||||
values = values[:n-1] |
||||
case "/": |
||||
values[n-2] /= values[n-1] |
||||
values = values[:n-1] |
||||
case "%": |
||||
values[n-2] %= values[n-1] |
||||
values = values[:n-1] |
||||
default: |
||||
fmt.Println("Error") |
||||
return |
||||
} |
||||
} |
||||
if len(values) == 1 { |
||||
fmt.Println(values[0]) |
||||
} else { |
||||
fmt.Println("Error") |
||||
} |
||||
} |
@ -1,18 +0,0 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
) |
||||
|
||||
func main() { |
||||
if len(os.Args) == 4 { |
||||
fmt.Println(strings.Map(func(r rune) rune { |
||||
if r == []rune(os.Args[2])[0] { |
||||
return []rune(os.Args[3])[0] |
||||
} |
||||
return r |
||||
}, os.Args[1])) |
||||
} |
||||
} |
@ -1,16 +0,0 @@
|
||||
package solutions |
||||
|
||||
func SortedListMerge(l1 *NodeI, l2 *NodeI) *NodeI { |
||||
if l1 == nil { |
||||
return l2 |
||||
} |
||||
if l2 == nil { |
||||
return l1 |
||||
} |
||||
if l1.Data <= l2.Data { |
||||
l1.Next = SortedListMerge(l1.Next, l2) |
||||
return l1 |
||||
} |
||||
l2.Next = SortedListMerge(l1, l2.Next) |
||||
return l2 |
||||
} |
@ -1,25 +0,0 @@
|
||||
package solutions |
||||
|
||||
// structures for the linked lists
|
||||
type NodeI struct { |
||||
Data int |
||||
Next *NodeI |
||||
} |
||||
|
||||
func SortListInsert(l *NodeI, data_ref int) *NodeI { |
||||
n := &NodeI{Data: data_ref} |
||||
n.Next = nil |
||||
|
||||
if l == nil || l.Data >= n.Data { |
||||
n.Next = l |
||||
return n |
||||
} |
||||
temp := l |
||||
for temp.Next != nil && temp.Next.Data < n.Data { |
||||
temp = temp.Next |
||||
} |
||||
n.Next = temp.Next |
||||
temp.Next = n |
||||
|
||||
return l |
||||
} |
Some files were not shown because too many files changed in this diff diff.show_more
Loading…
Reference in new issue