summaryrefslogtreecommitdiff
path: root/k-th-symbol-in-grammar
diff options
context:
space:
mode:
Diffstat (limited to 'k-th-symbol-in-grammar')
-rw-r--r--k-th-symbol-in-grammar/Cargo.toml8
-rw-r--r--k-th-symbol-in-grammar/src/main.rs28
2 files changed, 36 insertions, 0 deletions
diff --git a/k-th-symbol-in-grammar/Cargo.toml b/k-th-symbol-in-grammar/Cargo.toml
new file mode 100644
index 0000000..4fccf4e
--- /dev/null
+++ b/k-th-symbol-in-grammar/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "k-th-symbol-in-grammar"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/k-th-symbol-in-grammar/src/main.rs b/k-th-symbol-in-grammar/src/main.rs
new file mode 100644
index 0000000..5aaa24c
--- /dev/null
+++ b/k-th-symbol-in-grammar/src/main.rs
@@ -0,0 +1,28 @@
+fn main() {
+ println!("Hello, world!");
+ let tests = vec![
+ (1,1,0),
+ (2,1,0),
+ (2,2,1),
+ (30, 434991989, 0)
+ ];
+ for (n,k,o) in tests {
+ let result = Solution::kth_grammar(n,k);
+ println!("{n} {k} {result} {o}");
+ }
+}
+
+struct Solution;
+
+impl Solution {
+ pub fn kth_grammar(n: i32, k: i32) -> i32 {
+ let mut s: Vec<bool> = vec![false];
+ for _ in 0..n {
+ s = s.iter().flat_map(|x| match x {
+ false => [false,true],
+ true => [true,false]
+ }).collect::<Vec<_>>();
+ }
+ s[(k - 1) as usize] as i32
+ }
+}