ワン1、ツー1、ワン2ワン1


16

チャレンジ:

正の非ゼロ整数の入力を受け取り、以下に説明する順序で次の4つの数値を出力するプログラムを作成します。

注:入力が実際にゼロ以外の正の整数であるかどうかを確認する必要はありません

シーケンス:

このシーケンスのすべての数値(入力である最初の数値を除く)は、n桁で構成されます(nは偶数)。番号をn / 2ペアに分割する場合、ペアごとに、最初の数字は前の数字に2番目の数字が現れた回数でなければなりません

視覚的な説明
この例「シーケンススターター」または入力を検討してください。 入力には1 "6"、1 "5"および2 "7"があるため、6577
シーケンスの次の番号は次のように161527
なります。

入力の桁数が多すぎる場合(1桁で9桁以上)、正しい出力を取得することはできません。
例:111111111111(12 1's)
次の番号は、12 1を記述する必要があります。したがって、それを9個の1と3個の1に分割します(合計9 + 3 = 12)
次の数:9131

入力を4回繰り返して出力する必要があります(4つの整数のリスト/配列を返すか、スペースで区切って出力します。改行も使用できます)。

「数字はいろいろな方法で書くことができますが、どうやって書くのですか?」
考えてみると、入力例6577は271516(2つの7、1つの5、1つの6)と書くこともできます。ただし、これは無効な出力です。数値を左から右に繰り返す必要があります。したがって、161527。7の7657量、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: -このようなこの1つのリターン番号<
入力:1211出力:111221
シーケンスは、私が求めているもののどうなる
1211出力::3112入力を

2つのシーケンスは異なり、異なるアルゴリズムが必要です。
私が尋ねたシーケンス:https : //oeis.org/A063850
「可能性のある複製」シーケンス:https : //oeis.org/A005150


重要な仕様:

この質問に答えようとした人にとっては十分に明確ではなかったので、k> 9であるk文字の正しい出力は "kc"(cはchar)ではなく9c(k-9)cなどです。 12 1は121(12 1)ではなく9131(9 1's、(12-9)1'sなど)

疑わしい場合、奇数の数字(121など)を出力するコードが間違っている場合、シーケンスの性質上、偶数の数字を出力する必要があります。


これはため、バイト数が最小のコードが優先されます。


提案されたテストケース:1111111111111111111(19 1's
Emigna

より密接に関連している(まだだまされていない)。
ETHproductions

整数のコンマ区切りリストとして出力できますか?出力は入力整数で開始できます(したがって、長さは5になります)。
グレッグマーティン

最後のテストケースでは、最後の数字をの23411912代わりにすべきではありません23411219か?
グレッグマーティン

@GregMartin確かに。指摘してくれてありがとう。しかし、いいえ、整数のリストを返したり、改行やスペース以外の何かで区切られた整数を出力することはできません。そして、いや、あなたはずの出力入力
P. Ktinos

回答:


6

PowerShell111 104バイト

$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)。私はそれを測定しようとしていましたが、それから質問は終わりました。
ブリアンティスト

@AdmBorkBork ... aaaand編集(ありがとう)
briantist

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

多くの値に対して誤った出力。例: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:これは、たとえばTIOリンクの例のように、数字が9回以上繰り返される数字では機能しません。
エミナ

ああ...今わかった。
魔法のタコUr

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.