gpt4 book ai didi

haskell - 如何从列表末尾开始的列表中读取3个元素的 block ?

转载 作者:行者123 更新时间:2023-12-01 08:14:45 25 4
gpt4 key购买 nike

这是我的函数签名:

foo :: Integer -> [String]

此功能的工作方式:
  • foo 1234567应该返回["567", "234", "001"]
  • foo 12345678应该返回["678", "345", "012"]
  • f oo 123456789应该返回["789", "456", "123"]

  • 我当前的解决方案:
    zeichenreihenBlock :: Integer -> [String]
    zeichenreihenBlock x = reverse (partition (show x))

    partition :: String -> [String]
    partition [] = []
    partition x
    | length x `mod` 3 == 2 = take 3 ("0" ++ x) : partition (drop 3 ("0" ++ x))
    | length x `mod` 3 == 1 = take 3 ("00" ++ x) : partition (drop 3 ("00" ++ x))
    | length x `mod` 3 == 0 = take 3 x : partition (drop 3 x)

    将“zeichenreihenBlock”替换为“foo”。您将如何实施?有更有效的解决方案吗?

    真的很感谢一些新想法。

    干杯

    最佳答案

    仅使用数字来获取组会更容易,而根本不使用字符串。

    digitGroups group 0 = []
    digitGroups group n = r : digitGroups group q
    where (q,r) = n `divMod` (10^group)

    -- > digitGroups 3 1234567
    -- [567,234,1]

    然后使用填充显示是一个单独的问题:
    pad char len str = replicate (len - length str) char ++ str

    -- > pad '0' 3 "12"
    -- "012"

    他们一起为最终解决方案:
    foo = map (pad '0' 3 . show) . digitGroups 3

    -- > foo 1234567
    -- ["567","234","001"]

    关于haskell - 如何从列表末尾开始的列表中读取3个元素的 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935469/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com