kitsu
Чегот не догоняю, где накосячил, кодес: `File::open(fname).expect(&("cannot open ".to_owned() + fname))`
Cat
ну по идее
https://play.rust-lang.org/?gist=6e3c126f929ec25ad1b6910a55662d43&version=stable
Αλεχ
extern crate ndarray; use ndarray::prelude::*; fn get_map(n: usize) -> Result<Array2<Option<char>>, &'static str>{ if n <= 0 || n > 27 { return Err("Invalid input"); } let board_size = 2*n-1; let mut result = Array2::<Option<char>>::default((board_size, board_size)); let middle_index = board_size/2+1; for i in 0..middle_index { for j in 0..middle_index { let index = 2 * n - i - j - 2; let letter = if index >= n { None } else { Some(('a' as u8 + index as u8) as char) }; result[[i, j]] = letter; result[[board_size - i - 1, j]] = letter; result[[i, board_size - j - 1]] = letter; result[[board_size - i - 1, board_size - j - 1]] = letter; } } Ok(result) } fn main() { let arr = get_map(5).unwrap(); for i in 0..arr.len_of(Axis(0)) { for j in 0..arr.len_of(Axis(1)) { print!("{}", arr[[i,j]].unwrap_or('-')); } println!(); } }
Αλεχ
----e---- ---ede--- --edcde-- -edcbcde- edcbabcde -edcbcde- --edcde-- ---ede--- ----e----
Dmitry
а с 0. Ты там юзаешь что то
Dmitry
яне такой осилятор
kitsu
.expect(format!("cannot open {}", fname)) не?
да не, хрен с ним с выводом и так норм, трабла в том, что он файл почему-то не видел
Dmitry
fn draw(data: &VecDeque<char>) { let data = data .into_iter() .map(|c| c.to_string() + "-") .collect::<String>(); println!("{}", data) }
Dmitry
пойдет ?
Cat
пойдет ?
ага, или data.iter().map(|c| c.to_string()).collect::<Vec<String>>().join(" - ");
Dmitry
я сдулся. Пздц
Dmitry
1/4ю только и вывел криво
Cat
а-ля a-b-c-
Dmitry
а почему на чараз не смог джоин сделать
Cat
потому что join можно сделать по коллекции со String
Денис
ага, или data.iter().map(|c| c.to_string()).collect::<Vec<String>>().join(" - ");
то есть вместо того, чтобы сразу собирать строку, ты предлагаешь сначала понавыделять кучу блоков памяти, чтобы потом их таки слить
Dmitry
как иначе
Dmitry
работает
Cat
это разве не работает?
Если c.to_string() + "blah" лучше, то я не против
Денис
ну на мой субъективный взгляд это банально проще :) правда там по-разному с наличием/отсутствием пробелов вокруг дефиса
Dmitry
в map можно интекс узнать ?
Berkus
мап он весь из индексов и состоит
Dmitry
ну как на текущей итерации узнать индекс
Cat
Просто не будет ли последний символ дополнен trailing сепаратором?
Dmitry
что то криво
Dmitry
a-b-c-d-e b-c-d-e- c-d-e-- d-e--- e---- и тут как то не то
Денис
тебе про итертулс уже говорили?
Денис
который умеет вставлять разделитель МЕЖДУ элементами?
Dmitry
вроде нет
Dmitry
как это называется
Денис
тот пример с джойном
-__-
https://play.rust-lang.org/?gist=c01447fa3c72fc0dc09635fb21d6b9ff&version=stable
Денис
https://docs.rs/itertools/0.7.8/itertools/fn.join.html
-__-
Палю "годноту".
Денис
=)))
Денис
в смысле ставить?)
Dmitry
он в коре ? Или это либа ?
Денис
при всём уважении, может перед тем, как что-то пилить, стоит сделать упражнения из гайдбука?)
Dmitry
делал D. И прочитал
Денис
а то так сходу, не зная языка, можно такого наворотить, что всю охоту отобьёт
Dmitry
я самое простое что то сделать даже не могу
Денис
это не самое простое
Денис
самое же
оно и видно)
Денис
я не знаю, что такое вторая часть, но вторую редакцию точно стоит читать
Денис
https://doc.rust-lang.org/book/second-edition/
Cat
Это не самое простое, в C++ было бы не проще
Dmitry
https://doc.rust-lang.org/book/second-edition/
ок. Тогда ну нафиг. Прочитаю. А то как то сложно. И реально отобью охоту
Денис
ок. Тогда ну нафиг. Прочитаю. А то как то сложно. И реально отобью охоту
а у тебя какой бэкграунд? в плане прошлых языков
Денис
@userbq201 зацени https://github.com/rustlings/rustlings
Cat
нет. Пэхапэ и жиес
В js есть join по чарам??
Dmitry
В js есть join по чарам??
в жиес есть массив и его джоинишь и пофиг что там
Αλεχ
extern crate ndarray; use ndarray::prelude::*; fn get_map(n: usize) -> Result<Array2<Option<char>>, &'static str>{ if n <= 0 || n > 27 { return Err("Invalid input"); } let board_size = 2*n-1; let mut result = Array2::<Option<char>>::default((board_size, board_size)); let middle_index = board_size/2+1; for i in 0..middle_index { for j in 0..middle_index { let index = 2 * n - i - j - 2; let letter = if index >= n { None } else { Some(('a' as u8 + index as u8) as char) }; result[[i, j]] = letter; result[[board_size - i - 1, j]] = letter; result[[i, board_size - j - 1]] = letter; result[[board_size - i - 1, board_size - j - 1]] = letter; } } Ok(result) } fn main() { let arr = get_map(5).unwrap(); for i in 0..arr.len_of(Axis(0)) { for j in 0..arr.len_of(Axis(1)) { print!("{}", arr[[i,j]].unwrap_or('-')); } println!(); } }
Αλεχ
----e---- ---ede--- --edcde-- -edcbcde- edcbabcde -edcbcde- --edcde-- ---ede--- ----e----
Αλεχ
блин
Αλεχ
это работает
Αλεχ
@userbq201 что тебе еще надо?)
Dmitry
я и так не осилятор
Dmitry
а еще и либы сторонние
Αλεχ
это потому что раст не умеет в массивы с неизвестным на этапе компиляции N
Cat
в жиес есть массив и его джоинишь и пофиг что там
Ну так он всё в строки конвертнет автоматом, а потом заджоинит В системном яп так низзя
Αλεχ
тут вся сторонняя зависимость - это двумерный массив
Αλεχ
чтобы не трахать мозги с Vec<Vec<>>
Marat
Чому?
Потому что чар банально больше памяти занимает