列出号码


19

给定一个实数,将其转换为列表列表,其中负号(如果有)变为空列表,整数部分变为数字列表,而小数部分(如果有)变为数字列表。这些数字必须是实际数字,而不是字符串。

例子

0[[0]]

123[[1,2,3]]

-123[[],[1,2,3]]

123.45[[1,2,3],[4,5]]

0.45[[0],[4,5]]

-0.45[[],[0],[4,5]]

-123.45[[],[1,2,3],[4,5]]


数组中的数字是否允许为单字符字符串?
dzaima

@dzaima不,我将其添加。
亚当

数字可以当作字符串吗?
Uriel's

@Uriel如果您从STDIN获得输入,则可以(没有区别)。如果作为论据,不,我认为。不论Meta共识是什么。
亚当

2
@Quelklef是的,实际上。这是经过长时间设计讨论的结果,您可以在这里看到有关totalhuman的WIP语言Intrntl(侦听)命令的信息
亚当

Answers:


7

C#,60 66字节

using System.Linq;s=>s.Split('-','.').Select(p=>p.Select(c=>c-48))

在线尝试!


没有可见的外部括号。您的结果确实列出了吗?
亚当

@AdámYeah(IEnumerable<char[]>)只是打印代码没有将它们添加到其中
。– TheLethalCoder

@TheLethalCoder要求指出,所需的返回类型是数字列表,而不是显示这些数字的字符串或字符。
卡米尔·德拉卡里

@KamilDrakari哦,还没有看到规格已更新...
TheLethalCoder

@KamilDrakari固定,感谢您通知我有关更新的信息。
TheLethalCoder

7

JavaScript(ES6),33 44 43 41字节

将输入作为字符串。挑战规范更新后,牺牲了11个10字节,将输出中的元素转换为数字。

s=>s.split(/\D/).map(a=>[...a].map(eval))
  • 由于Arnauld建议使用 节省了一个字节eval

测试一下

console.log((
s=>s.split(/\D/).map(a=>[...a].map(eval))
)("-123.45"))


说明

s=>

匿名函数,通过参数将字符串作为参数s
"-123.45"

s.split(/\D/)

使用RegEx将字符串拆分为所有非数字字符上的数组-即,-.
["","123","45"]

.map(a=>)

映射到数组,并通过parameter将每个字符串传递给函数a

[...a]

拆分为单个字符串数组。
[[],["1","2","3"],["4","5"]]

.map(eval)

映射子数组和eval每个字符串,将其转换为整数。
[[],[1,2,3],[4,5]]


2D字符串数组?JSON的外观如何?
亚当

数字必须是数字。
亚当

@Adám:已更新,费用为11个字节。
毛茸茸的


5

果冻 13  10 字节

ŒṘµ<”/œpV€

单数链接,获取数字并返回数字列表的结果列表。

在线尝试!(页脚仅打印python表示形式以显示所有实际列表)
...或查看测试套件

怎么样?

ŒṘµ<”/œpV€ - Link: number
ŒṘ         - Python representation (yields a string representation of the number)
  µ        - monadic chain separation (call that s)
    ”/     - literal '/' character
   <       - less than? (vectorises) ('.' and '-' are, digit characters are not)
      œp   - partition s at truthy indexes of the resulting list discarding the borders
        V€ - evaluate €ach (list of characters) as Jelly code (vectorises)

而且果冻比05AB1E好!
大公埃里克(Erik the Outgolfer)'17年

4

05AB1E12 11字节

感谢Riley节省了一个字节。码:

'-'.:'.¡εSï

使用05AB1E编码。在线尝试!

说明:

'-'.:            # Replace "-" by "."
     '.¡         # Split on "."
        ε        # Apply to each element..
         S       #   Split into a list of characters
          ï      #   Convert back to int

您在技术上需要ï吗?
魔术章鱼缸

@MagicOctopusUrn OP说The digits must be actual numbers, not strings.
dzaima '17

1
我在想,这真是太可惜了:„-.S€¡对于6,但是如果他们必须是整数……不确定。
魔术章鱼缸


2

实际上,23个字节

'.@;)A$s⌠♂≈⌡M[[]]+@s~@t

在线尝试!

说明:

'.@;)A$s⌠♂≈⌡M[[]]+@s~@t
'.                       push "."
  @;)                    make a copy of the input and move it to the bottom of the stack
     A$s                 absolute value of input, stringify, split on periods
        ⌠♂≈⌡M            convert integer and fractional parts to lists of digits
             [[]]+       prepend an empty list
                  @s~    bitwise negation of sign of input (1 -> -2, 0 -> -1, -1 -> 0)
                     @t  elements in the list starting at that 0-based index (drops the leading empty list if the input was positive)

2

SOGL V0.12,11字节

Ζ-.ŗ .Θ⌡č¹r

在这里尝试!

输出到堆栈的顶部(因为SOGL将其转换为多行字符串,因为它是为ascii-art设计的)。要查看结果,请在控制台中查看`r`@10:(后方括号为堆栈数组),或仅οø∑在代码后附加

Ζ-.ŗ         replace "-" with "."
     .Θ      split on "."s
       ⌡     for each
        č      chop into characters (casts to strings :/)
         ¹   wrap in array (this + for each is like map())
          r  reverse types, vectorizing

2

Japt(v2.0a0),12 10 8字节

将输入作为字符串。

q\D ®¬®n

测试它-Q仅出于可视化目的标记。)

  • 多亏贾斯汀节省了2个字节。
  • 多亏了ETH,节省了2个字节。

说明

字符串的隐式输入U

q\D

使用RegEx将(q)拆分为所有非数字字符上的数组。

®

映射到数组。

¬

将每个字符串拆分为单个字符的数组。

®

映射到数组。

n

转换为整数。


2
您不能分开吗\D,因为唯一的非数字是.-
贾斯汀·马里纳

最好的部分是,您甚至不需要/s :-)
ETHproductions's

@ETHproductions:现在,这真是太好了。我以为我可能可以/通过多行省略结尾。我从未考虑过尝试将它们都忽略掉。
毛茸茸的

1

八度,54字节

@(x)cellfun(@(c){c-48},strsplit(num2str(x),{'-' '.'}))

接受数字作为输入并产生数字矢量单元格数组的匿名函数。

在线尝试!

说明

@(x)cellfun(@(c){c-48},strsplit(num2str(x),{'-' '.'}))

@(x)                                                    % Function with input x
                                num2str(x)              % Convert x to string
                       strsplit(          ,{'-' '.'})   % Split at '-' or '.'. Gives a
                                                        % cell array of substrings
    cellfun(          ,                               ) % To each substring apply
                                                        % the following function
            @(c){c-48}                                  % Subtract 48 from each char
                                                        % and pack into a cell

1

C(GCC) 170个 164 152 146 144字节

应该可以打下来一点...

#define P printf
#define V *v[1]
main(c,v)char**v;{for(V^45?P("[[%c",V++):P("[[],[%c",V++,V++);V;V^46?P(",%c",V++):P("],[%c",V++,V++));P("]]");}

在线尝试!


我认为您可以通过执行以下操作来节省一些字节#define P printf(,然后在P通话中省略括号
Cyoce


1

实际上,16个字节

$'.'-(Æ'.@s⌠♂≈⌡M

在线尝试!

说明:

$'.'-(Æ'.@s⌠♂≈⌡M Implicit eval'd input
$                Convert to str
 '.              Push '.'
   '-            Push '-'
     (           Rotate stack left
      Æ          Pop a, b, c; push c.replace(b, a)
       '.        Push '.'
         @       Pop a, b; push b, a (swap)
          ⌠♂≈⌡   Push function ♂≈
           ♂       Map
            ≈        Convert to int
              M  Map

1
超越创作者,很好。
扎卡里

@Zacharý只是算法选择的问题。
大公埃里克(Erik the Outgolfer)'17年

而且它的迈戈你打,当然不是丹尼斯:)
扎卡里

@Zacharý好吧,这次挑战是两次,很公平...
Erik the Outgolfer

1

R,51 47 72字节

x=RG::s(strtoi(s(gsub('-','.',scan()),on='\\.')))
x[is.na(x)]=list(NULL)

我爱RG图书馆。

必须添加26个字节以确保空列表实际上是空的。

               gsub('-','.',scan())             # replace - with . in input; also converts to string
             s(                    ,on='\\.')   # split string on '.'
      strtoi(                                )  # convert to numeric
RG::s(                                        ) # convert to lists of digits

    x[is.na(x)]=list(NULL)                      # converts list of `NA` to empty list

输出示例:

> x=RG::s(strtoi(s(gsub('-','.',-123.45),on='\\.')))
> x[is.na(x)]=list(NULL)
> x
[[1]]
NULL

[[2]]
[1] 1 2 3

[[3]]
[1] 4 5

好吧,那里有numeric(0)一个空的数字列表或list()NULL
朱塞佩

我设法解决了这个问题,NULL但是现在我确定有一种高尔夫球手的方法可以做到。也许我会回到它。
BLT

1

Perl 5中56 54 + 1(-p)= 55个字节

$_="[[$_]]";s/\D\K\./0./;s/\d(?=\d)/$&,/g;s/-|\./],[/g

在线尝试!

由于Dom提醒我有关$&的信息,节省了两个字节

说明:

$_="[[$_]]";        # Add opening and closing to ends of strings
s/\D\K\./0./;       # handle the case of .45 or -.45 by inserting 0 before
                    # the decimal.  Otherwise, .45 & 45 would be ambiguous.
s/\d(?=\d)/$&,/g;   # Put a comma between numbers.
s/-|\./],[/g        # Turn - and . into separators between lists

稍微玩了一下,发现分解的时间要短一些。不确定是否可以根据我的目的将其组合以缩小规模?😊 在线试用!
Dom Hastings

1
已使用您的$&。我认为这两个现在基本上是等效的,除了我处理“ .45”与“ 45”的情况。
Xcali

啊,是的,错过了那个!
Dom Hastings

1

Perl 6、23个字节

+«*.split(/\D/)».comb

测试一下

展开式

\            # numify each of the following (possibly in parallel)
*\             # WhateverCode lambda (this is the input)
.split(/\D/)\  # split on non-digits ( . and - )
».comb         # split each of those into individual characters

请注意,…».comb该优先级高于+«…





0

Perl 6、22字节

{m:g/^\d*|\d+/».comb}

在线尝试!

返回列表中的元素是字符串,但与Perl一样,它们可以用作数字,并将被隐式转换。它们是用于所有实际目的的“实际数字”。为了使它们成为最直接表示的数字,只需要在代码块的内容前加上“ +«”前缀再加上三个字节。


挑战明确指出:“ 数字必须是实际数字,而不是字符串。”,因此应该包含在内。
布拉德·吉尔伯特b2gills '17

0

RUBY,75个字节

->(x){(x<0?[[]]:[])+x.abs.to_s.split('.').map{|y|y.chars.map{|z|z.to_i}}}

在线尝试!


1
您可以删除所有空白吗?
TheLethalCoder

是的,您是对的,完成了!
格雷戈里

与某些语法调整相同:在线尝试!(顺便说一句,如果您在TIO上使用“页眉和页脚”,则代码右侧显示的大小将是解决方案的实际大小。)
manatwork

已修复,感谢您提供所有信息。
格雷戈里

您可以.map{z|z.to_i}.map &:to_i
Cyoce '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.