Наконец то, каноническое решение FizzBuzz на Расте
От: johny5 Новая Зеландия
Дата: 15.02.23 23:51
Оценка: 6 (1)
Буквально открыл для себя новое АПИ (merge_join_by), и решил побаловаться. Выглядит изящно
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=98211454f00ec23f5036d124fee9631d
Re: Наконец то, каноническое решение FizzBuzz на Расте
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.02.23 09:58
Оценка:
Здравствуйте, johny5, Вы писали:

J>Буквально открыл для себя новое АПИ (merge_join_by), и решил побаловаться. Выглядит изящно

J>https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=98211454f00ec23f5036d124fee9631d

Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»

Re: Наконец то, каноническое решение FizzBuzz на Расте
От: ArtDenis Россия  
Дата: 16.02.23 10:25
Оценка:
Здравствуйте, johny5, Вы писали:

J>Буквально открыл для себя новое АПИ (merge_join_by), и решил побаловаться. Выглядит изящно

J>https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=98211454f00ec23f5036d124fee9631d

Без относительно корректности решения задачи: 1) форматирование (сильно) страдает, 2) используются depricated-функции, 3) for_each итератора ничего не возвращает. Не надо его присваивать в переменную ki_ku
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Наконец то, каноническое решение FizzBuzz на Расте
От: kov_serg Россия  
Дата: 16.02.23 10:49
Оценка: +1
Здравствуйте, johny5, Вы писали:

J>Буквально открыл для себя новое АПИ (merge_join_by), и решил побаловаться. Выглядит изящно

J>https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=98211454f00ec23f5036d124fee9631d
Как-бы неправильное решение. Не от 0 а от 1 до 100 и еще цифры надо выводить.

Вот на lua например:
for i=1,100 do
    local a,b,c=i,"",""
    if i%3==0 then a="" b="Fizz" end
    if i%5==0 then a="" c="Buzz" end
    print(a..b..c)
end

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
...


А каноническое решение вот: https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
Re: Наконец то, каноническое решение FizzBuzz на Расте
От: sergii.p  
Дата: 23.02.23 10:27
Оценка:
Здравствуйте, johny5, Вы писали:

может кто знает как с помощью itertools (или есть другие либы) сдедать перебор всех вариантов. Н-р

let it = (0..=1).some_magic_method(2)
itertools::assert_equal(it, vec![
    vec![0, 0],
    vec![0, 1],
    vec![1, 0],
    vec![1, 1]
]);
Re[2]: Наконец то, каноническое решение FizzBuzz на Расте
От: johny5 Новая Зеландия
Дата: 24.02.23 03:03
Оценка: 6 (1)
Здравствуйте, sergii.p, Вы писали:

Не нашёл ничего такого в Itertools, зато ознакомился с кучей крутых адаптеров и всяких разных генераторов. Спасибо

А, ну вот такое можно написать:
use itertools::Itertools;

fn main() {

let multi_prod = (0..4).map(|_| 0..=1)
         .multi_cartesian_product().collect::<Vec<Vec<i32>>>();
    println!("{multi_prod:?}");
}


Оно даст то что вам нужно, но решение — дичь. Я уже молчу про производительность, будь там массив побольше.
Re: Наконец то, каноническое решение FizzBuzz на Расте
От: scf  
Дата: 24.02.23 09:03
Оценка:
Здравствуйте, johny5, Вы писали:

J>Буквально открыл для себя новое АПИ (merge_join_by), и решил побаловаться. Выглядит изящно


Простой критерий пригодности языка для промышленного использования: простые проблемы порождают простой и быстрый код
Re[2]: Наконец то, каноническое решение FizzBuzz на Расте
От: ArtDenis Россия  
Дата: 24.02.23 11:23
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>может кто знает как с помощью itertools (или есть другие либы) сдедать перебор всех вариантов. Н-р


Я не понял перебор чего именно тебе нужен
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[3]: Наконец то, каноническое решение FizzBuzz на Расте
От: sergii.p  
Дата: 24.02.23 13:00
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Я не понял перебор чего именно тебе нужен


все размещения с повторением https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5
Если брать частный пример, из набора двоичных цифр (0,1) получить все числа состоящие н-р из 5 цифр.
Re[2]: Наконец то, каноническое решение FizzBuzz на Расте
От: kov_serg Россия  
Дата: 24.02.23 15:14
Оценка:
Здравствуйте, scf, Вы писали:

scf>Здравствуйте, johny5, Вы писали:


J>>Буквально открыл для себя новое АПИ (merge_join_by), и решил побаловаться. Выглядит изящно


scf>Простой критерий пригодности языка для промышленного использования: простые проблемы порождают простой и быстрый код


Вы промышленные ST видели или LD
Re: Наконец то, каноническое решение FizzBuzz на Расте
От: vaa  
Дата: 25.02.23 03:13
Оценка: 8 (1) +2
Здравствуйте, johny5, Вы писали:

J>Буквально открыл для себя новое АПИ (merge_join_by), и решил побаловаться. Выглядит изящно

J>https://play.rust-lang.org/?version=stable&amp;mode=debug&amp;edition=2021&amp;gist=98211454f00ec23f5036d124fee9631d

[ 1 .. 100 ]
|> List.map (fun x ->
    match (x % 3, x % 5) with
    | (0, 0) -> "FizzBuzz"
    | (0, _) -> "Fizz"
    | (_, 0) -> "Buzz"
    | _ -> $"{x}")
|> List.iter (printfn "%s")

F# |> I ❤️
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Наконец то, каноническое решение FizzBuzz на Расте
От: johny5 Новая Зеландия
Дата: 25.02.23 07:03
Оценка: +1
Оригинально.
Мапится один в один в Раст.
let result : Vec<String> = (1 .. 100).map(|x| {
    match (x % 3, x % 5) {
        (0, 0) => "FizzBuzz".to_string(),
        (0, _) => "Fizz".to_string(),
        (_, 0) => "Buzz".to_string(),
        _ => x.to_string(),
    }
}).collect();

println!("{result:?}");


Или проще сразу печатать на месте, тогда collect() и указывать типы не нужно будет.
Re[3]: Наконец то, каноническое решение FizzBuzz на Расте
От: ArtDenis Россия  
Дата: 25.02.23 17:48
Оценка:
Здравствуйте, johny5, Вы писали:

J>Мапится один в один в Раст.

Один в один с вариантом vaa это:

(1 .. 100)
    .map(|x| { match (x % 3, x % 5) {
        (0, 0) => "FizzBuzz".to_string(),
        (0, _) => "Fizz".to_string(),
        (_, 0) => "Buzz".to_string(),
        _      => x.to_string(),
    }})
    .for_each(|v| println!("{}", v));


Только про форматирование не надо спрашивать. Люблю я так форматировать ))
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Наконец то, каноническое решение FizzBuzz на Расте
От: flаt  
Дата: 26.02.23 05:48
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Только про форматирование не надо спрашивать. Люблю я так форматировать ))


Коллеги с rustfmt не поймут.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.