Один 1, два 1, один 2 Один 1


16

Виклик:

Створіть програму, яка приймає введення додатного ненульового цілого числа та виводить 4 наступні числа у послідовності, описаній нижче.

Примітка: Перевірка, чи вхід є дійсно додатним ненульовим цілим числом, не потрібен

Послідовність:

Кожне число у цій послідовності (крім першого, яке є вхідним) має складатися з 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

Приклад вводу / виводу:

Вхід: 75
Вихід:1715 211715 12311715 4112131715

Вхід: 1
Вихід:11 21 1211 3112

Вхід: 111111111111(12 1)
Вихід:9131 192113 31191213 23411912


Це на відміну від питання "Скажи те, що ти бачиш", тому що послідовності різні: https://oeis.org/A005150 <- Цей повертає числа таким чином:
Введення: 1211 Вихід: 111221
Поки послідовність, про яку я запитую зробить
Вхід: 1211 Вихід: 3112

Дві послідовності різні і вимагають різних алгоритмів.
Моя запитувана послідовність: https://oeis.org/A063850
"Можливий дублікат" послідовності: https://oeis.org/A005150


Важлива специфікація:

Оскільки це було недостатньо зрозуміло для деяких людей, які намагалися відповісти на це питання, правильний вихід для k chars, де k> 9 - це не "kc" (де c - char), а 9c (k-9) c тощо. Таким чином, правильний вихід для 12 1 - це не 121(12 1), але 9131(9 1, (12-9) 1 і так далі)

Якщо ви сумніваєтесь, ваш код помиляється, якщо він коли-небудь виводить число з непарною кількістю цифр (наприклад, 121), він повинен мати вихід парних цифр через характер послідовності.


Це таким чином, код з найменшими байтами виграшів.


Пропоновані TestCase: 1111111111111111111(19 1 - х )
тестова скринька Емінья

Більш тісно пов'язаний (все ще не дурний).
ETHproductions

Чи можемо ми виводити як розділений комою список цілих чисел? Чи можна вихід починати з цілого вхідного числа (і, таким чином, мати довжину 5)?
Грег Мартін

У вашому останньому тестовому випадку не має бути 23411912замість останнього номера 23411219?
Грег Мартін

@GregMartin Дійсно. Дякуємо, що вказали. Але ні, вам заборонено повертати список цілих чи вихідних цілих чисел, відокремлених окрім нових рядків чи пробілів. І ні, ви не повинні виводити вхід
П. Ктінос

Відповіді:


6

PowerShell , 111 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 відредагував (спасибі)
британіст

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 формат введення був неправильним, він повинен бути рядком (це повинен бути залишок тестів, які я робив). Виправлено посилання
стрижень

4

05AB1E , 30 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.
Емінья

Ох ... я зараз це зрозумів.
Чарівна восьминога урна

1

Математика, 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.