Инвалид Инвали Инвал

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

Leaderboard

Буфер над чтением
источник
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 байта благодаря Аднану

Emigna
источник
1
.pэквивалентно Œ¹g£:).
Аднан
1
@Adnan: Серьезно, как я мог забыть это снова! Благодарность! Похоже, я должен сделать перерыв: P
Emigna
8

Javascript (ES6), 53 47 байт

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

Сохранено 6 байтов благодаря Peanut & Neil

Вывод: все слова в виде одной строки без разделителя.

пример

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>

Arnauld
источник
Сохраняет один байт, сокращая его до 52 байт , чтобы не использовать разделители (что разрешено) , не добавляя пробел между элементами в шаблоне. Попробуй это здесь!
haykam
Вы не можете использовать s&&вместо s?... :''?
Нил
Кроме того, вы можете уменьшить его до 49 байт , удалив +''часть из последнего кода, который я опубликовал. Попробуй это здесь!
haykam
Я использую Firefox, и текст не разделен пробелами. Это не требуется для вопроса, но я подумал, что дам вам знать.
Чтение буфера
1
@TheBitByte - мой плохой. Разделителя больше нет (как предложено Peanut), но я забыл соответствующим образом обновить свой ответ. Спасибо, что заметили!
Арно
7

Perl, 29 байт

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

Запустить с вводом на STDIN:

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

Просто код:

/^.+(?{map{say$&.$_}0..9})^/
Тон Хоспел
источник
Очень хороший код Я не понимаю, что в прошлом, ^хотя ... Похоже, что он выполняет ту же работу, что и (*FAIL), но я не понимаю, почему. Могли бы вы объяснить?
Дада
@ Дада Да, принуждение к неудаче - это именно то, что он делает. Поскольку он соответствует по крайней мере 1 символу в начале строки, он больше не может быть в начале, поэтому ^происходит сбой матча, из-за чего перед ним возвращается регулярное выражение
Ton Hospel
Хорошо спасибо. Я ожидал, что он будет работать с любым персонажем, которого нет во входных данных, но, кажется, он работает только с ^... Я имею в виду на вашем примере, почему ,/не работает, но ^/работает?
Дада
Это деталь реализации оптимизатора регулярных выражений. Если вы поместите определенный символ не в строку, он будет достаточно умен, чтобы знать, что регулярное выражение никогда не может совпадать, и реальное сопоставление регулярному выражению даже не запускается. ^находится за пределами текущего понимания оптимизатора. Любое из этих двух типов поведения может измениться в будущем.
Тон Хоспел
Хорошо, я понял, я думал, что это что-то подобное, но не был уверен. Большое спасибо
Дада
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
TheBikingViking
источник
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
DLosc
источник
4

V , 20 байтов

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

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

Поскольку это содержит непечатаемые символы, вот читаемый формат:

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

А вот и hexdump:

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)  
DJMcMayhem
источник
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

Floroid - 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).

Testcases

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']
Yytsi
источник
3

(lambdabot) Haskell - 49 байтов

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

Lambdabot - бот IRC в #haskell; он автоматически импортирует кучу модулей, в том числе и те, Data.Listгде находятся inits. И поскольку язык определяется его реализацией, я могу назвать этот haskell lambdabot и не платить байты за импорт.

Обычный 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,
Берги
@ Берги, Yikes! Вы правы. Тогда еще 8 байтов для меня
BlackCap
3

Braingasm , 34 33 31 28 байт

В своем нынешнем состоянии, braingasm - это просто прославленный мозговой трах с несколькими ( примерно 3? ) Дополнительными функциями. Я тратил большую часть времени на разработку, чтобы сделать его как можно более "предприимчивым", вместо того, чтобы фактически добавлять функции ...

В любом случае следующий код должен работать с последним снимком разработки. Он принимает ввод без строки из stdin, like $ 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

редактировать: по-видимому, это нормально, чтобы пропустить использовать пустую строку в качестве разделителя

daniero
источник
2

Python 2, 53 55 байт

+2 байта: объявление f необходимо с рекурсией (как указано @Destructible Watermelon)

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

Возвращается к пустой строке (получая пустой список), обрезает символ за раз и дополняется списком из десяти текущей строки с цифрами 0-9, добавленными к каждой.

Тест на идеоне

Python 3, 54 56 байт

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

Тест на идеоне

Джонатан Аллан
источник
2
Я вполне уверен, что если ваша лямбда-функция включает в себя вызов, вам нужно иметь f=часть (немного похоже на то, как вы не можете предполагать, что переменные имеют значения)
Destructible Lemon
2

Swift 3, 150 байт

Не совсем самое короткое решение, но не страшное для Swift

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

Ungolfed

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)
}
Jojodmo
источник
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]
Уровень реки St
источник
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++;

крипто-
источник
Хороший способ предотвратить еще один цикл. Вы можете сохранить байты, удалив пробел после эха
aross
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, но замена его с реверсом тоже отлично работает :-)
Bergi
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;}

Ungolfed

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++в гольф, убрав в цикле for и добавив ++после использования 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;}Кроме того, запятые OP не требуются для вызова OP, хотя, если вы предпочитаете, вы, конечно, можете их оставить. Без этого: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

TuxCrafting
источник
Я так понимаю, ты раньше не играл в гольф в Руби. Посмотрите на мой ответ на этот вопрос (или на многие другие ответы Ruby на этом сайте), чтобы увидеть, как в гольфе можно определить функцию, не включая расточительные 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 байт короче.
Уровень Река St
@LevelRiverSt О, я не знал о ->синтаксисе
TuxCrafting
f=->s{s==""&&(return[]);(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}сохраняет еще 4 байта. Ruby оценивает логические выражения слева направо и не оценивает более поздние термины, если это не необходимо для определения результата. Та же самая техника игры в гольф может использоваться в C. Я не знаю, почему ()вокруг return[]требуется в этом случае.
Уровень Река
2

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

Я не настолько опытен в Perl 6, поэтому могут быть способы уменьшить его еще больше.

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

Используется -pдля оценки один раз для каждой строки ввода. Строка помещается в $_и после запуска программы печатается $_.

Это (~$_,*.chop...^!*)список, в котором первый элемент является ~вводом stringified ( ), каждый последующий элемент получается путем удаления последнего символа из предыдущего ( *.chop) и продолжается до тех пор, пока строка не станет пустой ( !*), исключая регистр пустой строки ( ^in ...^) ,

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

Наконец, список снова приводится в строку ~, давая необходимые слова с пробелом в качестве разделителя.

Ramillies
источник
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
AdmBorkBork
источник
2

Дьялог АПЛ , 14 11 байт

Возвращает список строк.

,⎕D∘.,⍨⌽,\⍞

, listify (сделать таблицу в список)

⎕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 .

Ungolfed :

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);}
Poke
1

Python 3, 62 байта

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

Не использует рекурсию как другой ответ.

Причина, по которой "" x+" "находится в: -0, по-прежнему равна нулю, и поэтому мы не можем использовать минус, чтобы получить всю строку таким образом, поэтому самое высокое, что мы можем получить, это минус один, поэтому "" - это заполнение Струна,

Разрушаемый Лимон
источник
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к каждой строке.

%{`$
¶$%`

{Указует на то, что остальные три этапа выполняется в цикле , пока они не не изменить строку. Это %говорит о том, что они должны применяться к каждой строке отдельно.

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

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
corvus_192
источник
Ваше рекурсивное решение на 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

Попробуйте онлайн

Neorej
источник