一1,二1,一2一1


16

挑战:

创建一个程序,该程序接受一个非零正整数的输入,并按照下面描述的顺序输出下四个数字。

注意:不需要检查输入是否实际上是一个非零的正整数

顺序:

此序列中的每个数字(除第一个数字(输入数字)外)均应由n个数字组成,其中n是偶数。如果我们将数字分为n / 2对,则每对数字的第一个数字应为第二个数字在前一个数字中出现的次数

直观说明
考虑此示例“序列启动器”或输入序列中6577
的下一个数字应如下所示,161527
因为输入具有1个“ 6”,1个“ 5”和2个“ 7”。

如果输入的位数太多(单个位数超过9个),您将无法获得正确的输出。
示例:111111111111(12个1)
序列中的下一个数字必须描述12个1。因此,我们将其分为9 1和3 1(总和9 + 3 = 12)
下一个数字:9131

您应该对输入进行4次迭代,然后将其输出(返回一个包含4个整数的列表/数组,或者通过用空格分隔它们来输出它,也可以使用换行符)

“数字可以用很多方式写,我怎么写?”
如果考虑到这一点,示例输入6577也可以写为271516(两个7,一个5,一个六个)。但是,这是无效的输出。您应该从左到右迭代该数字。因此为161527。如果7657您要迭代7的数量,则依次迭代6的数量和5的数量,这样有效的输出将是271615

I / O示例:

输入:75
输出:1715 211715 12311715 4112131715

输入:1
输出:11 21 1211 3112

输入:111111111111(12 1's)
输出:9131 192113 31191213 23411912


这与“说您看到的内容”问题不同,因为序列不同:https
://oeis.org/A005150 <-此返回的数字是这样的:输入:1211输出:111221
当我要输入序列时会做
输入:1211输出:3112

这两个序列不同,需要不同的算法。
我的询问序列:https : //oeis.org/A063850
“可能重复”序列:https : //oeis.org/A005150


重要规格:

由于对于某些试图回答此问题的人来说还不够清楚,因此对于k个字符,其中k> 9的正确输出不是“ kc”(其中c是字符),而是9c(k-9)c等。因此,对于12 1不是121(12 1)而是9131(9 1,(12-9)1等)

如果有疑问,您的代码如果输出的数字是奇数个数字(例如121)是错误的,由于序列的性质,它应该输出偶数数字。


这是因此具有最少字节胜利的代码。


拟议的测试用例:1111111111111111111(19 1's
Emigna'2

相关性更高(尽管仍不欺骗)。
ETHproductions'2

我们可以输出逗号分隔的整数列表吗?输出可以从输入整数开始(因此长度为5)吗?
格雷格·马丁

在您的最后一个测试用例中,不应该使用最后一个数字23411912代替23411219吗?
格雷格·马丁

@GregMartin确实。感谢您指出。但是不可以,您不能返回整数列表或以除换行符或空格以外的任何内容分隔的输出整数。不,您不应该输出输入
P. Ktinos

Answers:


6

PowerShell111104字节

$z=$args;1..4|%{($z=-join($z-split'\B'|group|%{for($c,$n=$_.Count,$_.Name;$c-gt9;$c-=9){"9$n"}"$c$n"}))}

在线尝试!


既然你不使用$i你的循环,为什么不循环,直接$z=$args;0..3|%{...
AdmBorkBork

@AdmBorkBork我曾考虑过,但觉得必须分配后会更长$args(我原本以为会使用$i)。我打算测量它,但是问题就解决了。
briantist

@AdmBorkBork ... aaaand编辑(感谢)
briantist '17

5

Python 2,116字节

x=input()
exec"x=''.join(x.count(n)/9*(`9`+n)+`x.count(n)%9`+n for i,n in enumerate(x)if n not in x[:i]);print x;"*4

在线尝试!


19个的输出1111111111111111111不正确。应该是919111但是给919121
CSharpie '17

许多值输出错误。示例:image.prntscr.com/image/ed4c523b105b41169e8aa8c46a95f963.png,输入11输出应为21 1211 3112 132112,我不明白为什么它111作为第一次迭代输出而导致整个链条运行不佳
P. Ktinos

@ P.Ktinos输入格式错误,它必须是一个字符串(它必须是我正在做的测试的剩余部分)。固定链接

4

05AB1E30 23 21字节

4F©Ùv9y«®y¢9‰`U×XyJ}=

在线尝试!

说明

4F                     # 4 times do:
  ©                    # store a copy of the current number in register
   Ùv                  # for each unique digit y in the number
     9y«               # concatenate 9 with y
        ®y¢            # count occurrences of y in current number
           9‰          # divmod by 9
             `U        # store the result of modulus in X
               ×       # repeat the number "9y" result_of_div times
                X      # push result of modulus
                 y     # push y
                  J    # join everything to one number
                   }   # end inner loop
                    =  # print the current number without popping

@MagicOctopusUrn:不适用于数字重复超过9个的数字,例如我的TIO链接中的示例。
Emigna '17

哦,我明白了。
魔术章鱼缸

1

Mathematica,117个字节

Grid@{Rest@NestList[FromDigits[Join@@(Reverse/@Tally@IntegerDigits@#//.{a_,b_}/;a>9->{9,b}~Sequence~{a-9,b})]&,#,4]}&

好像不需要那么长。


1

C#246字节

namespace System{using Linq;using f=String;class p{static void Main(f[] s){f p=s[0];for(int i=0,n;i++<4;Console.Write(p+" "))p=f.Concat(p.GroupBy(c=>c).SelectMany(g=>new int[(n=g.Count())/9].Select(_ =>"9"+g.Key).Concat(new[]{n%9+""+g.Key})));}}}

取消高尔夫:

namespace System
{
    using Linq;
    using f = String;
    class p
    {
        static void Main(f[] s)
        {
            f p = s[0];
            for (int i = 0, n; i++ < 4; Console.Write(p + " "))

                p = f.Concat(p.GroupBy(c => c).SelectMany(g =>
                    new int[(n = g.Count()) / 9].Select(_ => "9" + g.Key).Concat(new[] { n % 9 + "" + g.Key }
                )));
            Console.ReadKey();
        }
    }
}

在此处尝试(编译后将输入类型输入到底框中,然后按ENTER键)


0

果冻,27个字节

L,Ḣ
D©®i$ÞŒgs9$€Ç€€FḌµ4µÐ¡Ḋ

在线尝试!

连续的s无法嵌套,因为链不能嵌套。

带有单独链接的嵌套:27个字节。

打印而不是累积:27个字节。

说明

L,Ḣ                     - helper function, does the look-and-say. Input is a list of digits
 ,                      - return 2-tuple of:
L                       -   length of input
  Ḣ                     -   first element of input

D©®i$ÞŒgs9$€Ç€€FḌµ4µÐ¡Ḋ - main link, takes input as integer
                 µ4µÐ¡  - repeat 4 times, saving the results of each iteration:
D                       -   convert integer to list of digits
 ©                      -   save into register, for later use
  ®i$Þ                  -   sort list's elements by first occurrence in list
      Œg                -   group runs of equal elements
        s9$€            -   split each run into sets which are at most 9 elements long
            Ç€€         -   do the look-and-say with helper function
               FḌ       -   flatten and convert back into integer for next iteration
                      Ḋ - remove the first element from the list since it includes the
                           initial element

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.