Недійсний Invali Inval


27

Ця ідея грунтується на чаті @ T @xCräftîñg .

Подивіться нижче на прикладі послідовності:

INVALID0, INVALID1, INVALID2 INVALID3, INVALID4...INVALID9

Після INVALID9, це продовжується так:

INVALI0, INVALI1, INVALI2, INVALI3...INVALI9

А після INVALI9, це так:

INVAL0, INVAL1, INVAL2, INVAL3...INVAL9

Після, INVAL9це так:

INVA0, INVA1, INVA2, INVA3, ...INVA9

Зауважте, як ми INVALIDкожен раз видаляли букву зі слова .

Ви будете повторювати це, поки не досягнете жодної літери, тобто букви I:

I0, I1, I2, I3, I4...I9

Тепер ваше завдання - взяти слово і створити з нього послідовність, як у наведеному вище прикладі. Ваш код також повинен працювати з однією літерою, і в такому випадку послідовність, що виходить, буде коротшою.

Ви можете вибрати будь-який формат вводу та виводу, який вам більше подобається (з роздільником або без нього, як хочете), але ви повинні вказати, який саме обрали.

Послідовність повинна бути у точно визначеному порядку.

Найбільш короткий код у байтах, який успішно завершує цю задачу, виграє виклик.

Повна послідовність у наведеному вище прикладі:

INVALID0, INVALID1, INVALID2, INVALID3, INVALID4, INVALID5, INVALID6, INVALID7, INVALID8, INVALID9, INVALI0, INVALI1, INVALI2, INVALI3, INVALI4, INVALI5, INVALI6, INVALI7, INVALI8, INVALI9, INVAL0, INVAL1, INVAL2, INVAL3, INVAL4, INVAL5, INVAL6, INVAL7, INVAL8, INVAL9, INVA0, INVA1, INVA2, INVA3, INVA4, INVA5, INVA6, INVA7, INVA8, INVA9, INV0, INV1, INV2, INV3, INV4, INV5, INV6, INV7, INV8, INV9, IN0, IN1, IN2, IN3, IN4, IN5, IN6, IN7, IN8, IN9, I0, I1, I2, I3, I4, I5, I6, I7, I8, I9

Інші приклади:

Введення даних: MAYBE(Великі і малі регістри не мають значення)

Вихід:

MAYBE0, MAYBE1, MAYBE2, MAYBE3, MAYBE4, MAYBE5, MAYBE6, MAYBE7, MAYBE8, MAYBE9, MAYB0, MAYB1, MAYB2, MAYB3, MAYB4, MAYB5, MAYB6, MAYB7, MAYB8, MAYB9, MAY0, MAY1, MAY2, MAY3, MAY4, MAY5, MAY6, MAY7, MAY8, MAY9, MA0, MA1, MA2, MA3, MA4, MA5, MA6, MA7, MA8, MA9, M0, M1, M2, M3, M4, M5, M6, M7, M8, M9


Вхід: AFTER

Вихід:

AFTER0, AFTER1, AFTER2, AFTER3, AFTER4, AFTER5, AFTER6, AFTER7, AFTER8, AFTER9, AFTE0, AFTE1, AFTE2, AFTE3, AFTE4, AFTE5, AFTE6, AFTE7, AFTE8, AFTE9, AFT0, AFT1, AFT2, AFT3, AFT4, AFT5, AFT6, AFT7, AFT8, AFT9, AF0, AF1, AF2, AF3, AF4, AF5, AF6, AF7, AF8, AF9, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9


Вхід: WHAT ARE YOU DOING

WHAT ARE YOU DOING0, WHAT ARE YOU DOING1, WHAT ARE YOU DOING2, WHAT ARE YOU DOING3, WHAT ARE YOU DOING4, WHAT ARE YOU DOING5, WHAT ARE YOU DOING6, WHAT ARE YOU DOING7, WHAT ARE YOU DOING8, WHAT ARE YOU DOING9, WHAT ARE YOU DOIN0, WHAT ARE YOU DOIN1, WHAT ARE YOU DOIN2, WHAT ARE YOU DOIN3, WHAT ARE YOU DOIN4, WHAT ARE YOU DOIN5, WHAT ARE YOU DOIN6, WHAT ARE YOU DOIN7, WHAT ARE YOU DOIN8, WHAT ARE YOU DOIN9, WHAT ARE YOU DOI0, WHAT ARE YOU DOI1, WHAT ARE YOU DOI2, WHAT ARE YOU DOI3, WHAT ARE YOU DOI4, WHAT ARE YOU DOI5, WHAT ARE YOU DOI6, WHAT ARE YOU DOI7, WHAT ARE YOU DOI8, WHAT ARE YOU DOI9, WHAT ARE YOU DO0, WHAT ARE YOU DO1, WHAT ARE YOU DO2, WHAT ARE YOU DO3, WHAT ARE YOU DO4, WHAT ARE YOU DO5, WHAT ARE YOU DO6, WHAT ARE YOU DO7, WHAT ARE YOU DO8, WHAT ARE YOU DO9, WHAT ARE YOU D0, WHAT ARE YOU D1, WHAT ARE YOU D2, WHAT ARE YOU D3, WHAT ARE YOU D4, WHAT ARE YOU D5, WHAT ARE YOU D6, WHAT ARE YOU D7, WHAT ARE YOU D8, WHAT ARE YOU D9, WHAT ARE YOU 0, WHAT ARE YOU 1, WHAT ARE YOU 2, WHAT ARE YOU 3, WHAT ARE YOU 4, WHAT ARE YOU 5, WHAT ARE YOU 6, WHAT ARE YOU 7, WHAT ARE YOU 8, WHAT ARE YOU 9, WHAT ARE YOU0, WHAT ARE YOU1, WHAT ARE YOU2, WHAT ARE YOU3, WHAT ARE YOU4, WHAT ARE YOU5, WHAT ARE YOU6, WHAT ARE YOU7, WHAT ARE YOU8, WHAT ARE YOU9, WHAT ARE YO0, WHAT ARE YO1, WHAT ARE YO2, WHAT ARE YO3, WHAT ARE YO4, WHAT ARE YO5, WHAT ARE YO6, WHAT ARE YO7, WHAT ARE YO8, WHAT ARE YO9, WHAT ARE Y0, WHAT ARE Y1, WHAT ARE Y2, WHAT ARE Y3, WHAT ARE Y4, WHAT ARE Y5, WHAT ARE Y6, WHAT ARE Y7, WHAT ARE Y8, WHAT ARE Y9, WHAT ARE 0, WHAT ARE 1, WHAT ARE 2, WHAT ARE 3, WHAT ARE 4, WHAT ARE 5, WHAT ARE 6, WHAT ARE 7, WHAT ARE 8, WHAT ARE 9, WHAT ARE0, WHAT ARE1, WHAT ARE2, WHAT ARE3, WHAT ARE4, WHAT ARE5, WHAT ARE6, WHAT ARE7, WHAT ARE8, WHAT ARE9, WHAT AR0, WHAT AR1, WHAT AR2, WHAT AR3, WHAT AR4, WHAT AR5, WHAT AR6, WHAT AR7, WHAT AR8, WHAT AR9, WHAT A0, WHAT A1, WHAT A2, WHAT A3, WHAT A4, WHAT A5, WHAT A6, WHAT A7, WHAT A8, WHAT A9, WHAT 0, WHAT 1, WHAT 2, WHAT 3, WHAT 4, WHAT 5, WHAT 6, WHAT 7, WHAT 8, WHAT 9, WHAT0, WHAT1, WHAT2, WHAT3, WHAT4, WHAT5, WHAT6, WHAT7, WHAT8, WHAT9, WHA0, WHA1, WHA2, WHA3, WHA4, WHA5, WHA6, WHA7, WHA8, WHA9, WH0, WH1, WH2, WH3, WH4, WH5, WH6, WH7, WH8, WH9, W0, W1, W2, W3, W4, W5, W6, W7, W8, W9

Таблиця лідерів


1
Чи можете ви опублікувати повну послідовність усі відразу? Можливо, ще з деякими зразками? Також, що може містити вхід?
DJMcMayhem

1
Чи не вистачає роздільника (наприклад INVALID0INVALID1INVALID2) правильний вихідний формат?
DLosc

@DLosc Так, так.
Буфер над

3
Тільки щоб ви знали, зазвичай не рекомендується так швидко приймати відповідь після публікації виклику. Прийняття занадто рано може відштовхнути користувачів від публікації нових відповідей. Це не означає, що ви не можете зберегти прийняту відповідь, але я б закликав вас наступного разу почекати довше.
DJMcMayhem

@DJMcMayhem Добре!
Буфер над

Відповіді:


5

Желе , 7 байт

ḣJṚp⁵Ḷ¤

Спробуйте в Інтернеті!

Як це працює

ḣJṚp⁵Ḷ¤  Main link. Argument: s (string)

 J       Yield all (1-based) indices of s.
ḣ        Head; for each index k, take the first k characters of s.
  Ṛ      Reverse the result.
      ¤  Combine the two links to the left into a niladic chain.
    ⁵      Yield 10.
     Ḷ     Unlength; yield [0, ..., 9].
   p     Return the Cartesian product of the prefixes and the range.
         (implicit) Print the Cartesian product without separators.

6
7 байт. Я просто хочу знати, як хтось придумав ідею змусити цей точний код працювати з кодом гольфу.
haykam

8

05AB1E , 10 8 байт

.pžmâ€JR

Пояснення

.p        # get prefixes of input
  žmâ     # cartesian product with [9..0]
     €J   # join each
       R  # reverse

Спробуйте в Інтернеті!

Збережено 2 байти завдяки Аднану


1
.pеквівалент Œ¹g£:).
Аднан

1
@Adnan: Серйозно, як я могла це знову забути! Спасибі! Здається, я повинен зробити перерву: Р
Емінья

8

Javascript (ES6), 53 47 байт

f=(s,n=0)=>s&&s+n+f(n-9?s:s.slice(0,-1),++n%10)

Збережено 6 байт завдяки арахісу та Нілу

Вихідні дані: усі слова як один рядок без роздільника.

Приклад

var f=(s,n=0)=>s&&s+n+f(n-9?s:s.slice(0,-1),++n%10)

document.getElementsByTagName('div')[0].innerHTML = f('INVALID')
<div style="word-wrap:break-word"></div>


Економить вам один байт, зменшуючи його до 52 байт , щоб не використовувати роздільники (що дозволено) , не додаючи пробілу між елементами в шаблоні. Спробуйте тут!
haykam

Не можете використовувати s&&замість s?... :''?
Ніл

Також ви можете зменшити її до 49 байт , видаливши +''частину з останнього коду, який я опублікував. Спробуйте тут!
хайкам

Я використовую Firefox, і текст не розділений пробілами. Це не потрібно для запитання, але я подумав, що дам вам знати.
Буфер над

1
@TheBitByte - Моє погано. Більше немає роздільника (як запропонував Арахіс), але я забув відповідно оновити свою відповідь. Дякуємо, що помітили!
Арнольд

7

Perl, 29 байт

Включає +1 для -n

Запустити з введенням даних STDIN:

perl -nE '/^.+(?{map{say$&.$_}0..9})^/' <<< PERL

Просто код:

/^.+(?{map{say$&.$_}0..9})^/

Дуже приємний код. Я не розумію цього останнього ^... Схоже, це робить таку ж роботу, як (*FAIL)і я, але не розумію, чому. Чи можете ви пояснити?
Дада

@Dada Так, вимушення невдачі - це саме те, що робиться. Оскільки він збігався щонайменше з 1 символом від початку рядка, він більше не може бути на старті, тому ^причини матчу не вдається, що змушує
зворотний відбиток

Добре, дякую. Я очікував, що він буде працювати з будь-яким персонажем, який не входить, але, здається, працює тільки з ^... Я маю на увазі з вашого прикладу, чому ,/це не працює, але ^/так?
Дада

Це деталізація реалізації оптимізатора регулярних виразів. Якщо ви введете конкретний символ не в рядок, він досить розумний, щоб знати, що регулярний вираз не може відповідати, а реальне збіг регулярних виразів навіть не запускається. ^виходить за рамки поточного розуміння оптимізатора. Будь-яка з двох форм поведінки може змінитися в майбутньому ..
Тон Євангелія

Гаразд я розумію, я думав, що це щось подібне, але не був впевнений. Велике спасибі
Дада

6

Haskell, 47 43 байт

f""=[]
f x=map((x++).show)[0..9]++f(init x)

Приклад використання: f "IN"-> ["IN0","IN1","IN2","IN3","IN4","IN5","IN6","IN7","IN8","IN9","I0","I1","I2","I3","I4","I5","I6","I7","I8","I9"].

Простий рекурсивний підхід. Додайте кожну цифру до слова та додайте рекурсивний дзвінок із останньою літерою, вилученою.


6

Pyth, 9 байт

sM*_._QUT

Програма, яка приймає введення цитованого рядка на STDIN і друкує список рядків.

Спробуйте в Інтернеті

Як це працює

sM*_._QUT  Program. Input: Q
    ._     List of prefixes of Q
   _       Reverse
       UT  Unary range up to 10, yielding [0, 1, 2, ..., 9]
  *        Cartesian product of the above two
sM         Map concatenate over the above
           Implicitly print

5

Піп , 12 11 байт

Приймає слово як аргумент cmdline. Виходи без роздільників.

Wa&Oa.,tDQa

Спробуйте в Інтернеті!

Пояснення:

             Implicit: a = 1st cmdline arg, t = 10
Wa           While a (i.e. while it's not the empty string)
   Oa.,t     Concatenate range(10) to a and output
               (Pip concatenates a string to a range itemwise)
  &          The output operation is &-ed to the loop condition to save on curly braces
        DQa  Dequeue from a, removing the final character on each iteration

4

V , 20 байт

A0òYpó.10/0/e
$hòd

Спробуйте в Інтернеті!

Оскільки це містить недруковані символи, ось читабельний формат:

A0<esc>òYp<C-a>ó.10/0/e
$hòd

А ось і шістнадцятка:

0000000: 4130 1bf2 5970 01f3 2e31 302f 302f 650a  A0..Yp...10/0/e.
0000010: 2468 f264                                $h.d

Пояснення:

A0<esc>                 "Append a '0' to the input
       ò                "Recursively:
        Yp              "  Yank this line and paste it
          <C-a>         "  Increment the first number on this line
               ó        "  Substitute:
                .10     "    Any single character followed by '10'
                   /0   "    Replace it with a '0'
                     /e "    Ignore errors if this is not found
$h                      "  Move to the end of the end of this line than back one.
                        "  This makes it so the loop ends once there is only one
                        "  character on this line.
  ò                     "End the loop
   d                    "Delete a line (since we create one too many)  

4

Bash + coreutils, 54 байти:

for i in `seq ${#1} 1`;{ printf "${1:0:i}%s " {0..9};}

Просто циклічне проходження через послідовність [Length of Input,1]і під час кожної ітерації виводить вхідне слово на довжину поточних значень ітерації 9разом із кожним числом, [0,9]доданим до кожної 9копії цього слова. Виконайте його у файлі та слово чи слова в лапках, тобто bash A.sh "blah blah blah".


4

Флороїд - 50 47 31 байт

f=Ba:aM[a+b KbIhd]+f(a[:-1])H[]

В даний час використовується аналогічний метод, який використовує @JonathanAllan у своєму другому рекурсивному методі.

Може я була такою , якщо я б ретельніше реалізований декартовій твір на мові: Bc:ca([c]+[c[:-a-1]KaIw(Z(c)-1)],hd).

Тестові шафи

Input: ABC
Output: ['ABC0', 'ABC1', 'ABC2', 'ABC3', 'ABC4', 'ABC5', 'ABC6', 'ABC7', 'ABC8', 'ABC9', 'AB0', 'AB1', 'AB2', 'AB3', 'AB4', 'AB5', 'AB6', 'AB7', 'AB8', 'AB9', 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9']

Input: M
Output: ['M0', 'M1', 'M2', 'M3', 'M4', 'M5', 'M6', 'M7', 'M8', 'M9']

3

(лямбдабот) Haskell - 49 байт

f q=[x++show n|x<-reverse.tail$inits q,n<-[0..9]]

Lambdabot - бот IRC в #haskell; він автоматично імпортує купу модулів, включаючи те, Data.Listде є в initsпрямому ефірі. І оскільки мова визначається її реалізацією, я можу назвати цей лямбдабот haskell і не платити байти за імпорт.

Регулярний Haskell:

import Data.List
f q=[x++show n|x<-reverse.tail$inits q,n<-[0..9]]

Ви впевнені, що tailsпрацює?
Бергі

@Bergi, повністю забув про імпорт, дякую, що вказав на це :)
BlackCap

Я не мав на увазі імпорт, я мав на увазі, що він дає неправильний вихід:INVALID, NVALID, VALID, ALID, LID, ID, D,
Bergi

@Bergi, Yikes! Ти правий. Ще 8 байт для мене тоді
BlackCap

3

braingasm , 34 33 31 28 байт

У своєму нинішньому стані браїнгазм - це просто прославлений мозковий ебать з кількома ( наприклад, 3? ) Додатковими функціями. Я витрачав більшу частину часу на розробку, роблячи це максимально "підприємливим", а не фактично додаючи функції ...

У будь-якому разі наступний код повинен працювати з останнім знімком розробки. Він вимагає введення рядків без рядків від stdin, як $ echo -n INVALID | braingasm invalid.bg, і друкує до stdout.

,[>,]#[48+10[#<[.>]<+]0,<0,]

Пояснення:

,[>,]                 lay down the input on the tape
#[                    (length of input - 1) times do
  48+                   add '0' at the end of the tape
  10[                   10 times do
     #<[.>]               move to start of tape, then print the tape
     <+                   increase the number at the end of the tape
  ]                     done printing current word with 0 through 9
  0,                    erase the number by writing 0 onto it
  <0,                   likewise, remove one character
]                     done

редагувати: Очевидно, нормально пропустити використання порожнього рядка як роздільника


2

Python 2, 53 55 байт

+2 байти: оголосити f необхідно з рекурсією (як вказував @Destructible Кавун)

f=lambda s:s and[s+`n`for n in range(10)]+f(s[:-1])or[]

Повторюється до порожнього рядка (видаючи порожній список), відсікає символ за один раз і додає до списку десять поточних рядків із цифрами 0-9, доданими до кожного.

Тест на ideone

Python 3, 54 56 байт

f=lambda s:s and[s+n for n in'0123456789']+f(s[:-1])or[]

Тест на ideone


2
Я досить впевнений, що якщо ваша лямбда включає в себе виклик до себе, вам потрібно мати цю f=частину (трохи схоже на те, як ви не можете припустити, що змінні мають значення)
Destructible Lemon

2

Швидкий 3, 150 байт

Не зовсім коротке рішення, але не страшне для Свіфта

func a(s: String){var c=s.characters,r="";while(c.count>0){var k = "";for d in c{k+=String(d)};for i in 0...9{r+="\(k)\(i) "};c.removeLast()};print(r);}

Перевірте це в Інтернеті в пісочниці IBM Swift

Безумовно

func a(s s: String){
    var c = s.characters, r = ""
    while(c.count > 0){
        var k = ""
        for d in c{
            k+=String(d)
        }
        for i in 0...9{
            r+="\(k)\(i) "
        }
        c.removeLast()
    }
    print(r)
}

2

Рубі, 51

Не використовується сепаратор.

->s{(10*n=s.size).times{|i|print s[0,n-i/10],i%10}}

Додайте наступне після i%10для роздільників:

,$/для нового рядка, ,?|для |(подібний до будь-якого символу для друку), ,' 'для місця.

У тестовій програмі

f=->s{(10*n=s.size).times{|i|print s[0,n-i/10],i%10}}

f[gets.chomp]

2

PHP, 64 56 байт

for($i=9;$a=substr($argv[1].a,0,-++$i/10);)echo$a.$i%10;

for(;$a=substr($argv[1].a,$i=0,-++$l);)for(;$i<10;)echo $a.$i++;


Хороший спосіб запобігання чергової петлі. Можна зберегти байт, видаливши пробіл після відлуння
1616

2

Haskell, 49 46 байт

f=(>>=(<$>['0'..'9']).snoc).reverse.tail.inits

Можна зберегти байт, інфіксуючи карту f=(>>=(карти ['0'..'9']).snoc).tail.reverse.inits. 3, використовуючи fmap:f=(>>=(<$>['0'..'9']).snoc).tail.reverse.inits
BlackCap

О, і якщо ви робите reverse.tail.initsзамість tail.reverse.initsвас, ви також отримуєте правильний вихід;)
BlackCap

@BlackCap: Дякую, я дійсно цікавився, чому в стандартній бібліотеці немає перевернутої (f) карти, але не думав про розділи. Стосовноtail , я думаю, я мав на увазі init, але замінити його на зворотній справно добре :-)
Бергі,

2

C #, 107 102 байт

string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k++;i=i.Remove(i.Length-1);}return o;}

Безумовно

string f(string i)
{
   string o = "";
   while(i != "")
   {
      for (int k = 0; k <= 9;)
         o += i + k++;
      i = i.Remove(i.Length - 1);
   }
   return o;
}

1
Ви можете трохи пограти k++в гольф, видаливши фор -петлю та додавши її ++після використання k, так ось так: string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k+++",";i=i.Remove(i.Length-1);}return o;}Також кома не вимагається завданням ОП, хоча якщо ви хочете, ви, звичайно, можете їх зберегти. Без цього:string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k++;i=i.Remove(i.Length-1);}return o;}
Кевін Круїйсен

2

Рубін, 90 85 байт

f=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}

Якщо рядок порожній, поверніть порожній масив. В іншому випадку генеруйте рядок + число у кожному номері від 0 до 9 та дзвоніть fіз рядком без останнього символу.

Збережено 5 байт завдяки @LevelRiverSt


Я вважаю, ви раніше не гуляли в Рубі. Перевірте мою відповідь на це запитання (або багато інших відповідей Рубі на цьому веб-сайті), щоб побачити спосіб гофрингу для визначення функції, не включаючи марнотратне defі end. Ви можете зробити лямбда, щоб вам навіть не довелося давати їй ім'я, доки ви призначаєте змінну і називаєте її аргументами у квадратних дужках.
Рівень Рівер Сент

@LevelRiverSt Використання лямбда на 1 байт довше
TuxCrafting

Гаразд, я пропустив той факт, що вам потрібно його називати, оскільки це рекурсивно. Але все-таки f=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}на 5 байт коротше.
Рівень річки Св.

@LevelRiverSt О, я не знав про ->синтаксис
TuxCrafting

f=->s{s==""&&(return[]);(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}зберігає ще 4 байти. Рубі оцінює булові вирази зліва направо і не оцінює пізніші терміни, якщо це не потрібно для визначення результату. Цю саму техніку гольфу можна використовувати і в C. Я не знаю, чому в цьому випадку потрібні ()навколо return[].
Рівень Рівер Сент

2

Perl 6, 32 = 31 байт + 1 для -p

Я не дуже досвідчений в Perl 6, тому можуть бути способи зменшити його ще більше.

$_= ~((~$_,*.chop...^!*)X~ ^10)

Він використовує -pдля оцінки один раз для кожного рядка введення. Рядок розміщується у програмі $_та після запуску програми надрукується $_.

Це (~$_,*.chop...^!*)список, у якому перший елемент є ~вхідним рядком ( ), кожен наступний елемент отримується шляхом відсікання останнього символу від попереднього ( *.chop) і продовжується до тих пір, поки рядок не буде порожнім ( !*), виключаючи регістр порожнього рядка ( ^in ...^) .

X~генерує всі пари списків зліва та справа, використовуючи вказану операцію, в цьому випадку конкатенацію рядків ( ~) на них. ^10- це список 0, 1, ... 9.

Нарешті, список знову впорядковується ~, даючи потрібні слова з пробілом як роздільник.


2

PowerShell v2 +, 60 байт

param($n)$n.length..1|%{$i=$_-1;0..9|%{-join$n[0..$i]+"$_"}}

Петлі від довжини вхідного рядка до 1. Кожну ітерацію встановлюйте помічником, $iрівним поточному числу мінус 1. Це необхідно, оскільки .lengthзагальна кількість символів, але індексація рядка заснована на 0. Потім, ми петлю від 0до 9. Кожен внутрішній цикл розрізає вхідний рядок, $nвиходячи зі значення нашої зовнішньої петлі, -joinповертається назад у рядок і з'єднується з рядком на кількість внутрішніх циклів. Кожен результат певного циклу розміщується на конвеєрі, а результат завершення програми неявний.

PS C:\Tools\Scripts\golfing> .\invalid-invali-inval.ps1 'foo'
foo0
foo1
foo2
foo3
foo4
foo5
foo6
foo7
foo8
foo9
fo0
fo1
fo2
fo3
fo4
fo5
fo6
fo7
fo8
fo9
f0
f1
f2
f3
f4
f5
f6
f7
f8
f9

2

Діалог APL , 14 11 байт

Повертає список рядків.

,⎕D∘.,⍨⌽,\⍞

, listafy (внести таблицю в список)

⎕D всі цифри

∘.,⍨ додається до всіх (тобто створення всіх комбінацій з)

перевернутий список

,\ кумулятивна конкатенація

введення тексту

СпробуйтеAPL онлайн!


Виправлено. Я використовую
котельну плиту

2

Groovy (58 байт)

Не маю жодної ідеї, чому я навіть намагаюся розмістити відповідь Groovy ... Мінімальний необхідний розмір для гольфу Groovy - це 2, залежно від необхідності закриття, тому найкраща відповідь тут - це подвійний мій мінімальний розмір.

   {s->(s.length()-1..0).each{c->10.times{print s[0..c]+it}}}

Спробуйте тут: https://groovyconsole.appspot.com/script/5148433803378688


2

Пакетна, 85 83 байт

@for /l %%i in (0,1,9)do @echo %1%%i
@set s=%1
@if not "%s:~,-1%"=="" %0 %s:~,-1%

2

Java 7, 105 98 байт

void c(String s){for(int x=0,l=s.length();x<l*10;)System.out.print(s.substring(0,l-x/10)+x++%10);}

-7 байт завдяки @Poke .

Безголівки :

void c(String s){
  for(int x = 0, l = s.length(); x < l*10; ){
    System.out.print(s.substring(0, l - x/10) + x++ % 10);
  }
}

Код тесту:

Спробуйте тут.

class M{
  static void c(String s){for(int x=0,l=s.length();x<l*10;)System.out.print(s.substring(0,l-x/10)+x++%10);}

  public static void main(String[] a){
    c("INVALID");
    System.out.println();
    c("MAYBE");
    System.out.println();
    c("AFTER");
    System.out.println();
    c("WHAT ARE YOU DOING");
  }
}

Вихід:

INVALID0INVALID1INVALID2INVALID3INVALID4INVALID5INVALID6INVALID7INVALID8INVALID9INVALID0INVALID1INVALID2INVALID3INVALID4INVALID5INVALID6INVALID7INVALID8INVALID9INVALI0INVALI1INVALI2INVALI3INVALI4INVALI5INVALI6INVALI7INVALI8INVALI9INVAL0INVAL1INVAL2INVAL3INVAL4INVAL5INVAL6INVAL7INVAL8INVAL9INVA0INVA1INVA2INVA3INVA4INVA5INVA6INVA7INVA8INVA9INV0INV1INV2INV3INV4INV5INV6INV7INV8INV9IN0IN1IN2IN3IN4IN5IN6IN7IN8IN9I0I1I2I3I4I5I6I7I8I9
MAYBE0MAYBE1MAYBE2MAYBE3MAYBE4MAYBE5MAYBE6MAYBE7MAYBE8MAYBE9MAYBE0MAYBE1MAYBE2MAYBE3MAYBE4MAYBE5MAYBE6MAYBE7MAYBE8MAYBE9MAYB0MAYB1MAYB2MAYB3MAYB4MAYB5MAYB6MAYB7MAYB8MAYB9MAY0MAY1MAY2MAY3MAY4MAY5MAY6MAY7MAY8MAY9MA0MA1MA2MA3MA4MA5MA6MA7MA8MA9M0M1M2M3M4M5M6M7M8M9
AFTER0AFTER1AFTER2AFTER3AFTER4AFTER5AFTER6AFTER7AFTER8AFTER9AFTER0AFTER1AFTER2AFTER3AFTER4AFTER5AFTER6AFTER7AFTER8AFTER9AFTE0AFTE1AFTE2AFTE3AFTE4AFTE5AFTE6AFTE7AFTE8AFTE9AFT0AFT1AFT2AFT3AFT4AFT5AFT6AFT7AFT8AFT9AF0AF1AF2AF3AF4AF5AF6AF7AF8AF9A0A1A2A3A4A5A6A7A8A9
WHAT ARE YOU DOING0WHAT ARE YOU DOING1WHAT ARE YOU DOING2WHAT ARE YOU DOING3WHAT ARE YOU DOING4WHAT ARE YOU DOING5WHAT ARE YOU DOING6WHAT ARE YOU DOING7WHAT ARE YOU DOING8WHAT ARE YOU DOING9WHAT ARE YOU DOING0WHAT ARE YOU DOING1WHAT ARE YOU DOING2WHAT ARE YOU DOING3WHAT ARE YOU DOING4WHAT ARE YOU DOING5WHAT ARE YOU DOING6WHAT ARE YOU DOING7WHAT ARE YOU DOING8WHAT ARE YOU DOING9WHAT ARE YOU DOIN0WHAT ARE YOU DOIN1WHAT ARE YOU DOIN2WHAT ARE YOU DOIN3WHAT ARE YOU DOIN4WHAT ARE YOU DOIN5WHAT ARE YOU DOIN6WHAT ARE YOU DOIN7WHAT ARE YOU DOIN8WHAT ARE YOU DOIN9WHAT ARE YOU DOI0WHAT ARE YOU DOI1WHAT ARE YOU DOI2WHAT ARE YOU DOI3WHAT ARE YOU DOI4WHAT ARE YOU DOI5WHAT ARE YOU DOI6WHAT ARE YOU DOI7WHAT ARE YOU DOI8WHAT ARE YOU DOI9WHAT ARE YOU DO0WHAT ARE YOU DO1WHAT ARE YOU DO2WHAT ARE YOU DO3WHAT ARE YOU DO4WHAT ARE YOU DO5WHAT ARE YOU DO6WHAT ARE YOU DO7WHAT ARE YOU DO8WHAT ARE YOU DO9WHAT ARE YOU D0WHAT ARE YOU D1WHAT ARE YOU D2WHAT ARE YOU D3WHAT ARE YOU D4WHAT ARE YOU D5WHAT ARE YOU D6WHAT ARE YOU D7WHAT ARE YOU D8WHAT ARE YOU D9WHAT ARE YOU 0WHAT ARE YOU 1WHAT ARE YOU 2WHAT ARE YOU 3WHAT ARE YOU 4WHAT ARE YOU 5WHAT ARE YOU 6WHAT ARE YOU 7WHAT ARE YOU 8WHAT ARE YOU 9WHAT ARE YOU0WHAT ARE YOU1WHAT ARE YOU2WHAT ARE YOU3WHAT ARE YOU4WHAT ARE YOU5WHAT ARE YOU6WHAT ARE YOU7WHAT ARE YOU8WHAT ARE YOU9WHAT ARE YO0WHAT ARE YO1WHAT ARE YO2WHAT ARE YO3WHAT ARE YO4WHAT ARE YO5WHAT ARE YO6WHAT ARE YO7WHAT ARE YO8WHAT ARE YO9WHAT ARE Y0WHAT ARE Y1WHAT ARE Y2WHAT ARE Y3WHAT ARE Y4WHAT ARE Y5WHAT ARE Y6WHAT ARE Y7WHAT ARE Y8WHAT ARE Y9WHAT ARE 0WHAT ARE 1WHAT ARE 2WHAT ARE 3WHAT ARE 4WHAT ARE 5WHAT ARE 6WHAT ARE 7WHAT ARE 8WHAT ARE 9WHAT ARE0WHAT ARE1WHAT ARE2WHAT ARE3WHAT ARE4WHAT ARE5WHAT ARE6WHAT ARE7WHAT ARE8WHAT ARE9WHAT AR0WHAT AR1WHAT AR2WHAT AR3WHAT AR4WHAT AR5WHAT AR6WHAT AR7WHAT AR8WHAT AR9WHAT A0WHAT A1WHAT A2WHAT A3WHAT A4WHAT A5WHAT A6WHAT A7WHAT A8WHAT A9WHAT 0WHAT 1WHAT 2WHAT 3WHAT 4WHAT 5WHAT 6WHAT 7WHAT 8WHAT 9WHAT0WHAT1WHAT2WHAT3WHAT4WHAT5WHAT6WHAT7WHAT8WHAT9WHA0WHA1WHA2WHA3WHA4WHA5WHA6WHA7WHA8WHA9WH0WH1WH2WH3WH4WH5WH6WH7WH8WH9W0W1W2W3W4W5W6W7W8W9

1
Ви можете зберегти 7 байт, комбінуючи цикли for і виконавши додаткову логіку, щоб неявно визначити суфікс та підрядку. void c(String s){for(int x=0,l=s.length();x<l*10;)System.out.print(s.substring(0,l-x/10)+x++%10);}
Кука

1

Python 3, 62 байти

lambda x:[(x+" ")[:~i//10]+str(i%10)for i in range(len(x)*10)]

Не використовується рекурсія, як інша відповідь.

Причина "" в x+" "є: -0 все одно дорівнює нулю, і тому ми не можемо використовувати мінус-позначення, щоб отримати всю рядку таким чином, тож найвищий рівень, який ми можемо пройти, - мінус один, тому "" - це "pad" рядок,


1

C, 72 , 70 байт

j;F(char*s,int l){while(l--)for(j=0;j<10;)printf("%.*s%d",l+1,s,j++);}

Приймає рядки як пари вказівника / розміру. Основний тест:

int main() {
  F("INVALID", 7); putchar('\n');
  F("MAYBE", 5); putchar('\n');
  F("AFTER", 5); putchar('\n');
  F("WHAT ARE YOU DOING", 18); putchar('\n');
}

1

Сітківка , 37 байт

Кількість байтів передбачає кодування ISO 8859-1.

M&!r`.+
m`$
0
%{`$
¶$%`
T`w`d`.$
G10`

Спробуйте в Інтернеті!

Пояснення

M&!r`.+

Отримайте всі префікси введення шляхом зіставлення та друку всіх збігів, що перекриваються праворуч.

m`$
0

Додайте а 0до кожного рядка.

%{`$
¶$%`

The {Вказує на те, що інші три етапи виконуються в циклі , поки вони не не змінити рядок. %Каже , що вони повинні бути застосовані до кожного рядка окремо.

Сам етап просто дублює останній рядок (спочатку це просто рядок, по якому він виконується, але кожна ітерація трьох етапів додає ще один рядок).

T`w`d`.$

Збільште цифру в останньому рядку, виконавши таку підстановку символів:

from: _0123456789AB...
to:   0123456789

І, нарешті:

G10`

Зберігайте лише перші 10 рядків, щоб видалити рядок, який ми тільки що додали після INPUT9.


1

Scala, 73 70 байт

def g(s:String):String=if(s=="")""else(0 to 9 flatMap(s+_))++g(s.init)

Називай це так f("INVALID") . Повертає послідовність знаків.

Пояснення

def g(s:String):String= //defines a method g taking a String as a parameter
                        //and returning a String
if(s=="")""             //guard to prevent infinite recursion
else
    (0 to 9             //create a Range from 0 to 9 (inclusive)
    flatMap(            //map:
        s+_                 //append each number to the string
    ))                  //and flatten
    ++ g(s.init)        //concatenate with g applied to everything but the last element of s

Альтернативне рішення, 73 байти

(s:String)=>s.scanLeft("")(_+_).tail.reverse.flatMap(x=>(0 to 9)map(x+_))

визначає анонімну функцію. Щоб зателефонувати, напишіть

val f = ...

і називати це так

f("INVALID")

Він повертає послідовність рядків, яка буде виглядати приблизно так:

Vector(INVALID0, INVALID1, INVALID2, INVALID3, INVALID4, INVALID5, INVALID6, INVALID7, INVALID8, INVALID9, INVALI0, INVALI1, INVALI2, INVALI3, INVALI4, INVALI5, INVALI6, INVALI7, INVALI8, INVALI9, INVAL0, INVAL1, INVAL2, INVAL3, INVAL4, INVAL5, INVAL6, INVAL7, INVAL8, INVAL9, INVA0, INVA1, INVA2, INVA3, INVA4, INVA5, INVA6, INVA7, INVA8, INVA9, INV0, INV1, INV2, INV3, INV4, INV5, INV6, INV7, INV8, INV9, IN0, IN1, IN2, IN3, IN4, IN5, IN6, IN7, IN8, IN9, I0, I1, I2, I3, I4, I5, I6, I7, I8, I9)

Пояснення

s.scanLeft("")(_+_)    //accumulate letters from left to right -> Vector("", "I", "IN", "INV", "INVA", "INVAL", "INVALI", "INVALID")
.tail                  //drop the first element
.reverse               //reverse it
.flatMap(x =>          //map each element called x
    (0 to 9)           //create a Range from 0 to 9 (inclusive)
    map(x+_)           //append each number to x
)                      //and flatten

Ваше рекурсивне рішення на 3 байти менше, ніж ітеративне
TuxCrafting

Ти маєш рацію, я, мабуть, оптимізував це після підрахунку.
corvus_192

1

CJam, 29 28 байт

ls_,,:)W%]~{_[X<aA*A,]zo}fX;

Пояснення:

ls                              read input as string
  _                             duplicate input
   ,,                           create range of length input
      :)W%]                     add 1 to all elements and reverse
           ~                    dump array on stack
            {            }fX    for loop
             _                  duplicate input string
              [X<aA*            slice input string and multiply by 10
                    A,]         range(10)
                       zo       zip array and print (no separator)
                            ;   clear stack

Спробуйте в Інтернеті

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