amarao: (Default)
[personal profile] amarao
Один из нескольких разов, когда rust взрывает мозг и офигенен.

Задача:

Given a pattern and a string s, find if s follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s.

 

Example 1:

Input: pattern = "abba", s = "dog cat cat dog"
Output: true

Example 2:

Input: pattern = "abba", s = "dog cat cat fish"
Output: false

Example 3:

Input: pattern = "aaaa", s = "dog cat cat dog"
Output: false

Constraints:

  • 1 <= pattern.length <= 300
  • pattern contains only lower-case English letters.
  • 1 <= s.length <= 3000
  • s contains only lowercase English letters and spaces ' '.
  • s does not contain any leading or trailing spaces.
  • All the words in s are separated by a single space.

Решение:

impl Solution {
fn abstract_list<T, G>(input: T) -> Vec<usize>
where
T: Iterator<Item = G>,
G: std::hash::Hash + std::cmp::Eq,
{
let mut dict = HashMap::new();
let mut output = Vec::new();
for elem in input {
let id = dict.len();
output.push(*dict.entry(elem).or_insert(id));
}
output
}
pub fn word_pattern(pattern: String, s: String) -> bool {
Self::abstract_list(pattern.chars()) == Self::abstract_list(s.split_whitespace())
}
}

Я чертовски горжусь
abstract_list. Это функция, которую я осмысленно написал
generic'ом, причём с generic'ом для Item.


Date: 2022-09-26 08:03 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

👍

Офигеть как красиво. Задача, конечно, специфическая, но решение гениальное; не очень понимаю, применимо ли оно еще куда-нибудь. Но вот этот уровень абстракции - никто, наверно, так не делал. Бац - и абстрагировались.

Это прекрасно.

Date: 2022-09-27 06:25 pm (UTC)
sab123: (Default)
From: [personal profile] sab123
Это красиво только в математическом смысле. Где красивым считается "выключить огонь, вылить воду, и задача свелась к предыдущей".

Date: 2022-09-27 06:58 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Я с такой "прагматической" точкой зрения не согласен. Абсолютно абстрактное, применимое почти всюду решение - большая ценность.

Profile

amarao: (Default)
amarao

February 2026

S M T W T F S
123456 7
8910111213 14
15161718192021
22232425262728

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 26th, 2026 07:21 pm
Powered by Dreamwidth Studios