Sync
This commit is contained in:
parent
6f050a029e
commit
776bba907c
3887 changed files with 59894 additions and 7280 deletions
98
Task/Balanced-brackets/COBOL/balanced-brackets.cobol
Normal file
98
Task/Balanced-brackets/COBOL/balanced-brackets.cobol
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. test-balanced-brackets.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 True-Val CONSTANT 0.
|
||||
01 False-Val CONSTANT 1.
|
||||
|
||||
LOCAL-STORAGE SECTION.
|
||||
01 current-time PIC 9(10).
|
||||
|
||||
01 bracket-type PIC 9.
|
||||
88 add-open-bracket VALUE 1.
|
||||
|
||||
01 bracket-string-area.
|
||||
03 bracket-string PIC X(10) OCCURS 10 TIMES.
|
||||
|
||||
01 i PIC 999.
|
||||
01 j PIC 999.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
*> Seed RANDOM().
|
||||
MOVE FUNCTION CURRENT-DATE (7:10) TO current-time
|
||||
MOVE FUNCTION RANDOM(current-time) TO current-time
|
||||
|
||||
|
||||
*> Generate random strings of brackets.
|
||||
PERFORM VARYING i FROM 1 BY 1 UNTIL 10 < i
|
||||
PERFORM VARYING j FROM 1 BY 1 UNTIL i < j
|
||||
COMPUTE bracket-type =
|
||||
FUNCTION REM(FUNCTION RANDOM * 1000, 2)
|
||||
|
||||
IF add-open-bracket
|
||||
MOVE "[" TO bracket-string (i) (j:1)
|
||||
ELSE
|
||||
MOVE "]" TO bracket-string (i) (j:1)
|
||||
END-IF
|
||||
END-PERFORM
|
||||
END-PERFORM
|
||||
|
||||
*> Display if the strings are balanced or not.
|
||||
PERFORM VARYING i FROM 1 BY 1 UNTIL 10 < i
|
||||
CALL "check-if-balanced" USING bracket-string (i)
|
||||
IF RETURN-CODE = True-Val
|
||||
DISPLAY FUNCTION TRIM(bracket-string (i))
|
||||
" is balanced."
|
||||
ELSE
|
||||
DISPLAY FUNCTION TRIM(bracket-string (i))
|
||||
" is not balanced."
|
||||
END-IF
|
||||
END-PERFORM
|
||||
|
||||
GOBACK
|
||||
.
|
||||
|
||||
END PROGRAM test-balanced-brackets.
|
||||
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. check-if-balanced.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 True-Val CONSTANT 0.
|
||||
01 False-Val CONSTANT 1.
|
||||
|
||||
LOCAL-STORAGE SECTION.
|
||||
01 nesting-level PIC S999.
|
||||
01 i PIC 999.
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 bracket-string PIC X(100).
|
||||
|
||||
PROCEDURE DIVISION USING bracket-string.
|
||||
PERFORM VARYING i FROM 1 BY 1
|
||||
UNTIL (100 < i)
|
||||
OR (bracket-string (i:1) = SPACE)
|
||||
OR (nesting-level < 0)
|
||||
IF bracket-string (i:1) = "["
|
||||
ADD 1 TO nesting-level
|
||||
ELSE
|
||||
SUBTRACT 1 FROM nesting-level
|
||||
IF nesting-level < 0
|
||||
MOVE False-Val TO RETURN-CODE
|
||||
GOBACK
|
||||
END-IF
|
||||
END-IF
|
||||
END-PERFORM
|
||||
|
||||
IF nesting-level = 0
|
||||
MOVE True-Val TO RETURN-CODE
|
||||
ELSE
|
||||
MOVE False-Val TO RETURN-CODE
|
||||
END-IF
|
||||
|
||||
GOBACK
|
||||
.
|
||||
|
||||
END PROGRAM check-if-balanced.
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
MODULE Brackets;
|
||||
IMPORT StdLog, Args, Stacks (* See Task Stacks *);
|
||||
TYPE
|
||||
|
||||
Character = POINTER TO RECORD (Stacks.Object)
|
||||
c: CHAR
|
||||
END;
|
||||
|
||||
PROCEDURE NewCharacter(c: CHAR): Character;
|
||||
VAR
|
||||
n: Character;
|
||||
BEGIN
|
||||
NEW(n);n.c:= c;RETURN n
|
||||
END NewCharacter;
|
||||
|
||||
PROCEDURE (c: Character) Show*;
|
||||
BEGIN
|
||||
StdLog.String("Character(");StdLog.Char(c.c);StdLog.String(");");StdLog.Ln
|
||||
END Show;
|
||||
|
||||
PROCEDURE CheckBalance(str: ARRAY OF CHAR): BOOLEAN;
|
||||
VAR
|
||||
s: Stacks.Stack;
|
||||
n,x: ANYPTR;
|
||||
i: INTEGER;
|
||||
c : CHAR;
|
||||
BEGIN
|
||||
i := 0; s := Stacks.NewStack();
|
||||
WHILE (i < LEN(str$)) & (~Args.IsBlank(str[i])) & (str[i] # 0X) DO
|
||||
IF s.Empty() THEN
|
||||
s.Push(NewCharacter(str[i]));
|
||||
ELSE
|
||||
n := s.top.data;
|
||||
WITH
|
||||
n : Character DO
|
||||
IF (str[i] = ']')& (n.c = '[') THEN
|
||||
x := s.Pop();
|
||||
ELSE
|
||||
s.Push(NewCharacter(str[i]))
|
||||
END;
|
||||
ELSE RETURN FALSE;
|
||||
END;
|
||||
END;
|
||||
INC(i)
|
||||
END;
|
||||
RETURN s.Empty();
|
||||
END CheckBalance;
|
||||
|
||||
PROCEDURE Do*;
|
||||
VAR
|
||||
p : Args.Params;
|
||||
i: INTEGER;
|
||||
BEGIN
|
||||
Args.Get(p); (* Get Params *)
|
||||
FOR i := 0 TO p.argc - 1 DO
|
||||
StdLog.String(p.args[i] + ":>");StdLog.Bool(CheckBalance(p.args[i]));StdLog.Ln
|
||||
END
|
||||
END Do;
|
||||
|
||||
END Brackets.
|
||||
|
|
@ -1,32 +1,33 @@
|
|||
#define std'dictionary'*.
|
||||
#define std'basic'*.
|
||||
#define std'patterns'*.
|
||||
#define ext'utils'*.
|
||||
#define ext'routines'*.
|
||||
#define system.
|
||||
#define extensions.
|
||||
|
||||
#symbol RandomBrackets : aLength =
|
||||
Randomized
|
||||
&&count:(aLength * 2)
|
||||
&base:(FilledWideLiteral &&pattern:"[" &count:aLength + (FilledWideLiteral &&pattern:"]" &count:aLength)).
|
||||
|
||||
#symbol IsBalanced : aLiteral =
|
||||
#symbol randomBrackets = &&:aLength
|
||||
[
|
||||
#var aCounter := Integer::0.
|
||||
#var aBrackets := Array new &type'length:aLength &action: &&:i[ CharValue new:"[" ] + Array new &type'length:aLength &action: &&:i[ CharValue new:"]" ].
|
||||
|
||||
#if Scan::aLiteral seek: aChar = (aCounter append:(aChar ifequal:"[" ^^1 | ^^-1) < 0).
|
||||
randomControl randomize:(aLength * 2) &array:aBrackets.
|
||||
|
||||
^ Summing new:(String new) foreach:aBrackets Literal.
|
||||
].
|
||||
|
||||
#symbol isBalanced = &&:aLiteral
|
||||
[
|
||||
#var aCounter := Integer new:0.
|
||||
|
||||
control foreach:aLiteral &until: &&:aChar [ aCounter append:(aChar => "[" ? [ 1 ] "]" ? [ -1 ]) < 0 ].
|
||||
|
||||
^ (0 == aCounter).
|
||||
].
|
||||
|
||||
#symbol Program =
|
||||
#symbol program =
|
||||
[
|
||||
loop &&from:0 &till:10 run: aLength =
|
||||
control from:0 &till:10 &do: &&:aLength
|
||||
[
|
||||
#var anStr := RandomBrackets::aLength.
|
||||
#var balanced := IsBalanced::anStr.
|
||||
#var anStr := randomBrackets:aLength.
|
||||
#var balanced := isBalanced:anStr.
|
||||
|
||||
'program'output << """" << anStr << (balanced is ^^""" is balanced%n" | ^^""" is not balanced%n").
|
||||
console write:"""" write:anStr write:"""" writeLine:(balanced => true ? [ " is balanced" ] false ? [ " is not balanced" ]).
|
||||
].
|
||||
|
||||
'program'input get.
|
||||
console readChar.
|
||||
].
|
||||
|
|
|
|||
12
Task/Balanced-brackets/Julia/balanced-brackets.julia
Normal file
12
Task/Balanced-brackets/Julia/balanced-brackets.julia
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
function balanced(str)
|
||||
i = 0
|
||||
for c in str
|
||||
if c == '[' i +=1 elseif c == ']' i -=1 end
|
||||
if i < 0 return false end
|
||||
end
|
||||
i == 0 ? true : false
|
||||
end
|
||||
|
||||
brackets(n) = CharString(shuffle([("[]"^n)...]))
|
||||
|
||||
print(map(x -> (x, balanced(x)), [brackets(i) for i = 0:8]))
|
||||
|
|
@ -6,19 +6,12 @@ re = /\A # beginning of string
|
|||
)* # end group, zero or more such groups
|
||||
\z/x # end of string
|
||||
|
||||
(0..9).each do |i|
|
||||
s = "[]" * i
|
||||
|
||||
# There is no String#shuffle! method.
|
||||
# This is a Knuth shuffle.
|
||||
(s.length - 1).downto(1) do |a; b|
|
||||
b = rand(a + 1)
|
||||
s[a], s[b] = s[b], s[a]
|
||||
end
|
||||
|
||||
puts((s =~ re ? " OK: " : "bad: ") + s)
|
||||
10.times do |i|
|
||||
s = (%w{[ ]} * i).shuffle.join
|
||||
puts (s =~ re ? " OK: " : "bad: ") + s
|
||||
end
|
||||
|
||||
["[[]", "[]]", "[letters]"].each do |s|
|
||||
puts((s =~ re ? " OK: " : "bad: ") + s)
|
||||
["[[]", "[]]", "a[ letters[-1] ].xyz[0]"].each do |s|
|
||||
t = s.gsub(/[^\[\]]/, "")
|
||||
puts (t =~ re ? " OK: " : "bad: ") + s
|
||||
end
|
||||
|
|
|
|||
36
Task/Balanced-brackets/Scala/balanced-brackets-1.scala
Normal file
36
Task/Balanced-brackets/Scala/balanced-brackets-1.scala
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import scala.collection.mutable.ListBuffer
|
||||
import scala.util.Random
|
||||
|
||||
object BalancedBrackets extends App {
|
||||
|
||||
val random = new Random()
|
||||
def generateRandom: List[String] = {
|
||||
import scala.util.Random._
|
||||
val shuffleIt: Int => String = i => shuffle(("["*i+"]"*i).toList).foldLeft("")(_+_)
|
||||
(1 to 20).map(i=>(random.nextDouble*100).toInt).filter(_>2).map(shuffleIt(_)).toList
|
||||
}
|
||||
|
||||
def generate(n: Int): List[String] = {
|
||||
val base = "["*n+"]"*n
|
||||
var lb = ListBuffer[String]()
|
||||
base.permutations.foreach(s=>lb+=s)
|
||||
lb.toList.sorted
|
||||
}
|
||||
|
||||
def checkBalance(brackets: String):Boolean = {
|
||||
def balI(brackets: String, depth: Int):Boolean = {
|
||||
if (brackets == "") depth == 0
|
||||
else brackets(0) match {
|
||||
case '[' => ((brackets.size > 1) && balI(brackets.substring(1), depth + 1))
|
||||
case ']' => (depth > 0) && ((brackets.size == 1) || balI(brackets.substring(1), depth -1))
|
||||
case _ => false
|
||||
}
|
||||
}
|
||||
balI(brackets, 0)
|
||||
}
|
||||
|
||||
println("arbitrary random order:")
|
||||
generateRandom.map(s=>Pair(s,checkBalance(s))).foreach(p=>println((if(p._2) "balanced: " else "unbalanced: ")+p._1))
|
||||
println("\n"+"check all permutations of given length:")
|
||||
(1 to 5).map(generate(_)).flatten.map(s=>Pair(s,checkBalance(s))).foreach(p=>println((if(p._2) "balanced: " else "unbalanced: ")+p._1))
|
||||
}
|
||||
32
Task/Balanced-brackets/Scala/balanced-brackets-2.scala
Normal file
32
Task/Balanced-brackets/Scala/balanced-brackets-2.scala
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import scala.util.Random
|
||||
|
||||
object BalancedParensApp extends App {
|
||||
|
||||
val triesCount = 10
|
||||
|
||||
(0 until triesCount).foreach { i =>
|
||||
val str = randomString(length = i)
|
||||
val msg = if (isBalanced(str)) "ok" else "NOT ok"
|
||||
println(s"$str - $msg")
|
||||
}
|
||||
|
||||
def randomString(length: Int) = {
|
||||
val parensPairs = ("[]" * length).toSeq
|
||||
val parensOfGivenLength = parensPairs.take(length)
|
||||
val shuffledParens = Random.shuffle(parensOfGivenLength)
|
||||
shuffledParens.mkString
|
||||
}
|
||||
|
||||
def isBalanced(parensString: String): Boolean = {
|
||||
var balance = 0
|
||||
parensString.foreach { char =>
|
||||
char match {
|
||||
case '[' => balance += 1
|
||||
case ']' => balance -= 1
|
||||
}
|
||||
if (balance < 0) return false;
|
||||
}
|
||||
balance == 0
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue