Invalid Invali Inval


27

Ten pomysł jest luźno oparty na wiadomości czatu @ TùxCräftîñg .

Spójrz na poniższą przykładową sekwencję:

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

Po INVALID9tym zaczyna się tak:

INVALI0, INVALI1, INVALI2, INVALI3...INVALI9

A potem INVALI9jest tak:

INVAL0, INVAL1, INVAL2, INVAL3...INVAL9

Po, INVAL9to jest tak:

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

Zauważ, jak za INVALIDkażdym razem usuwaliśmy literę ze słowa .

Powtarzasz to, aż dojdziesz do jednej litery, to znaczy litery I:

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

Twoim zadaniem jest pobranie słowa i utworzenie z niego sekwencji, tak jak w powyższym przykładzie. Twój kod musi również działać z pojedynczymi literami, w takim przypadku wynikowa sekwencja będzie krótsza.

Możesz wybrać dowolny preferowany format wejściowy i wyjściowy (z separatorem lub bez), ale musisz określić, który z nich wybrałeś.

Sekwencja musi być w dokładnie określonej kolejności.

Najkrótszy kod w bajtach, który pomyślnie ukończył to wyzwanie, wygrywa wyzwanie.

Pełna sekwencja w powyższym przykładzie:

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

Inne przykłady:

Dane wejściowe: MAYBE(wielkie i małe litery nie mają znaczenia)

Wydajność:

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


Wkład: AFTER

Wydajność:

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


Wkład: 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

Tabela liderów


1
Czy możesz opublikować pełną sekwencję naraz? Może z kilkoma próbkami? Co również może zawierać dane wejściowe?
DJMcMayhem

1
Czy brak separatora (np. INVALID0INVALID1INVALID2) Jest prawidłowym formatem wyjściowym?
DLosc

@DLosc Tak, to prawda.
Bufor przed

3
Wiesz, że odradza się tak szybką odpowiedź po opublikowaniu wyzwania. Akceptowanie zbyt wcześnie może zniechęcić użytkowników do publikowania nowych odpowiedzi. Nie oznacza to, że nie możesz zachować przyjętej odpowiedzi, ale zachęcam do następnego oczekiwania.
DJMcMayhem

@DJMcMayhem Dobra!
Bufor przed

Odpowiedzi:


5

Galaretka , 7 bajtów

ḣJṚp⁵Ḷ¤

Wypróbuj online!

Jak to działa

ḣ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 bajtów. Chcę tylko wiedzieć, jak ktoś wpadł na pomysł, aby ten dokładny kod działał z golfem.
haykam

8

05AB1E , 10 8 bajtów

.pžmâ€JR

Wyjaśnienie

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

Wypróbuj online!

Zaoszczędzono 2 bajty dzięki Adnan


1
.pjest równoważne z Œ¹g£:).
Adnan

1
@Adnan: Poważnie, jak mogłem to znowu zapomnieć! Dzięki! Wydaje się, że powinienem zrobić sobie przerwę: P
Emigna

8

JavaScript (ES6), 53 47 bajtów

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

Zaoszczędź 6 bajtów dzięki Peanut & Neil

Dane wyjściowe: wszystkie słowa jako pojedynczy ciąg bez separatora.

Przykład

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>


Oszczędza jeden bajt, zmniejszając go do 52 bajtów , aby nie używać separatorów (co jest dozwolone) przez nie dodawanie spacji między elementami we wzorcu. Wypróbuj tutaj!
haykam

Nie możesz użyć s&&zamiast s?... :''?
Neil

Możesz także zmniejszyć go do 49 bajtów , usuwając +''część z ostatniego kodu, który opublikowałem. Wypróbuj tutaj!
haykam

Korzystam z przeglądarki Firefox, a tekst nie jest oddzielony spacjami. To pytanie nie jest wymagane, ale pomyślałem, że dam ci znać.
Bufor przed

1
@TheBitByte - My bad. Nie ma już separatora (jak sugeruje Peanut), ale zapomniałem odpowiednio zaktualizować swoją odpowiedź. Dzięki za zauważenie!
Arnauld

7

Perl, 29 bajtów

Obejmuje +1 dla -n

Uruchom z wejściem na STDIN:

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

Tylko kod:

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

Bardzo fajny kod. Nie rozumiem jednak tego ostatniego ^... Wygląda na to, że wykonuje to samo zadanie (*FAIL), ale nie rozumiem dlaczego. Czy możesz wytłumaczyć?
Dada,

@Dada Tak, wymuszanie niepowodzenia jest dokładnie tym, co robi. Ponieważ pasował co najmniej 1 znak od początku łańcucha, nie może być już na początku, więc ^powoduje niepowodzenie dopasowania, co wymusza regex przed
powrotem do tyłu

Ok dzięki. Spodziewałem się, że będzie działać z dowolną postacią, której nie ma w danych wejściowych, ale wydaje się, że działa tylko z ^... Mam na myśli twój przykład, dlaczego ,/nie działa, ale ^/działa?
Dada,

Jest to szczegół implementacji optymalizatora wyrażeń regularnych. Jeśli wstawisz określony znak nie w ciągu, jest wystarczająco inteligentny, aby wiedzieć, że wyrażenie regularne nigdy nie pasuje, a prawdziwe dopasowanie wyrażenia regularnego nawet się nie rozpoczyna. ^wykracza poza obecne rozumienie optymalizatora. Każde z tych dwóch zachowań może się zmienić w przyszłości.
Ton Hospel,

Ok, rozumiem, myślałem, że to coś takiego, ale nie byłem pewien. Wielkie dzięki
Dada,

6

Haskell, 47 43 bajtów

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

Przykład użycia: f "IN"-> ["IN0","IN1","IN2","IN3","IN4","IN5","IN6","IN7","IN8","IN9","I0","I1","I2","I3","I4","I5","I6","I7","I8","I9"].

Proste podejście rekurencyjne. Dołącz każdą cyfrę do słowa i dołącz połączenie rekurencyjne z usuniętą ostatnią literą.


6

Pyth, 9 bajtów

sM*_._QUT

Program, który pobiera ciąg cudzysłowu na STDIN i drukuje listę ciągów.

Wypróbuj online

Jak to działa

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

Pip , 12 11 bajtów

Traktuje to słowo jako argument cmdline. Wyjścia bez separatorów.

Wa&Oa.,tDQa

Wypróbuj online!

Wyjaśnienie:

             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 bajtów

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

Wypróbuj online!

Ponieważ zawiera on znaki niedrukowalne, oto format czytelny:

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

A oto zrzut heksowy:

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

Wyjaśnienie:

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 bajty:

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

Po prostu zapętla sekwencję [Length of Input,1]i podczas każdej iteracji wyprowadza słowo wejściowe na długość bieżącej wartości wartości iteracji 9z każdą liczbą [0,9]dołączoną do każdej z 9kopii tego słowa. Wykonaj go w pliku, a słowo lub słowa w cudzysłowie, tj bash A.sh "blah blah blah".


4

Floroid - 50 47 31 bajtów

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

Obecnie używa podobnej metody, jak @JonathanAllan w swojej drugiej metodzie rekurencyjnej.

Mogło być to jeśli bym realizowane iloczyn kartezjański dokładniej w języku: Bc:ca([c]+[c[:-a-1]KaIw(Z(c)-1)],hd).

Przypadki testowe

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

(lambdabot) Haskell - 49 bajtów

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

Lambdabot jest botem IRC na #haskell; automatycznie importuje wiązkę modułów, w tym informacje o tym, Data.Listgdzie jest miejsce initszamieszkania. A ponieważ język jest zdefiniowany przez jego implementację, mogę nazwać ten lambdabot haskell i nie płacić bajtów za import.

Zwykły Haskell:

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

Czy na pewno tailsdziała?
Bergi,

@Bergi, całkowicie zapomniałem o imporcie, dziękuję za zwrócenie na to uwagi :)
BlackCap

Nie miałem na myśli importu, miałem na myśli, że produkuje on niepoprawny wynik:INVALID, NVALID, VALID, ALID, LID, ID, D,
Bergi

@Bergi, Yikes! Masz rację.
Jeszcze

3

braingasm , 34 33 31 28 bajtów

W obecnym stanie braingasm to po prostu uwielbienie dla mózgu z kilkoma ( jak 3? ) Dodatkowymi funkcjami. Większość czasu poświęcam na tworzenie aplikacji tak, aby była jak najbardziej „przedsiębiorcza”, zamiast dodawać funkcje ...

W każdym razie poniższy kod powinien działać z najnowszą migawką programistyczną. Pobiera nowy wiersz ze standardowego wejścia, jak $ echo -n INVALID | braingasm invalid.bgi drukuje na standardowe wyjście.

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

Wyjaśnienie:

,[>,]                 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

edycja: Wygląda na to, że można pominąć użycie pustego ciągu jako separatora


2

Python 2, 53 55 bajtów

+2 bajty: zadeklarowanie f jest konieczne przy rekurencji (jak wskazał @Destructible Watermelon)

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

Powtarza się w dół do pustego ciągu (dając pustą listę), odcina znak na raz, i kontynuuje z listą dziesięciu bieżących ciągów z cyframi 0-9 dołączonymi do każdego.

Przetestuj na ideonie

Python 3, 54 56 bajtów

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

Przetestuj na ideonie


2
Jestem całkiem pewien, że jeśli twoja lambda zawiera wezwanie do siebie, musisz mieć tę f=część (trochę tak, jak nie możesz założyć, że zmienne mają wartości)
Destructible Lemon

2

Swift 3, 150 bajtów

Niezupełnie najkrótsze rozwiązanie, ale nie straszne dla 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);}

Przetestuj to online w piaskownicy IBM Swift

Nie golfił

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

Ruby, 51 lat

Nie zastosowano separatora.

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

Dodaj następujące i%10separatory dla separatorów:

,$/dla znaku nowej linii, ,?|dla |(podobnie dla każdego znaku do wydrukowania), ,' 'dla spacji.

W programie testowym

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

f[gets.chomp]

2

PHP, 64 56 bajtów

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++;


Miły sposób na uniknięcie kolejnej pętli for. Możesz zapisać bajt, usuwając spację po echu
aross

2

Haskell, 49 46 bajtów

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

Możesz zapisać bajt, naprawiając mapę f=(>>=(mapy ['0'..'9']).snoc).tail.reverse.inits. 3 za pomocą fmap:f=(>>=(<$>['0'..'9']).snoc).tail.reverse.inits
BlackCap

Aha, a jeśli zrobisz reverse.tail.initszamiast tego, tail.reverse.initsotrzymasz również prawidłowy wynik;)
BlackCap

@BlackCap: Dzięki, naprawdę zastanawiałem się, dlaczego w standardowej bibliotece nie ma odwróconej (f) mapy, ale nie pomyślałem o sekcjach. Jeśli chodzi o tail, myślę, że miałem na myśli init, ale zamiana z odwróceniem działa dobrze :-)
Bergi

2

C #, 107 102 bajtów

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;}

Nie golfił

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
Możesz trochę zagrać k++w golfa, usuwając w pętli for i dodając ++po użyciu k, więc w ten sposób: 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;}Przecinki nie są wymagane przez wyzwanie OP, chociaż jeśli wolisz, możesz je oczywiście zatrzymać. Bez tego: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;}
Kevin Cruijssen

2

Rubinowy, 90 85 bajtów

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

Jeśli ciąg jest pusty, zwróć pustą tablicę. W przeciwnym razie wygeneruj ciąg + liczbę w każdym numerze od 0 do 9 i wywołaj fciąg bez ostatniego znaku.

Zaoszczędź 5 bajtów dzięki @LevelRiverSt


Rozumiem, że wcześniej nie grałeś w Ruby. Sprawdź moją odpowiedź na to pytanie (lub wiele innych odpowiedzi Ruby na tej stronie), aby zobaczyć golfowy sposób definiowania funkcji bez uwzględniania marnotrawstwa defi end. Możesz stworzyć lambda, aby nawet nie nadać jej nazwy, pod warunkiem, że przypiszesz zmienną i wywołasz ją argumentami w nawiasach kwadratowych.
Level River St

@LevelRiverSt Korzystanie z lambda jest o 1 bajt dłuższy
TuxCrafting

Ok, przeoczyłem fakt, że musisz to nazwać, ponieważ jest rekurencyjne. Ale nadal f=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}jest o 5 bajtów krótszy.
Level River St

@LevelRiverSt Och, nie wiedziałem o ->składni
TuxCrafting,

f=->s{s==""&&(return[]);(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}oszczędza kolejne 4 bajty. Ruby ocenia wyrażenia logiczne od lewej do prawej i nie ocenia późniejszych terminów, chyba że jest to konieczne do ustalenia wyniku. Tę samą technikę gry w golfa można zastosować w C. Nie wiem, dlaczego w tym przypadku potrzebne są ()okolice return[].
Level River St

2

Perl 6, 32 = 31 bajtów + 1 dla -p

Nie jestem aż tak biegły w Perlu 6, więc mogą istnieć sposoby, aby go jeszcze bardziej zmniejszyć.

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

Służy -pdo oceny raz dla każdej linii wejściowej. Linia jest umieszczana $_i po uruchomieniu programu drukuje się $_.

(~$_,*.chop...^!*)Jest lista, gdzie pierwszym elementem jest stringified ( ~) wejście, każdy następny element jest otrzymany przez siekanie ostatni znak off poprzedniego ( *.chop) i trwa aż łańcuch jest pusty ( !*), z wyłączeniem pustej przypadku strunowy ( ^w ...^) .

X~generuje wszystkie pary list po lewej i prawej stronie, używając określonej operacji, w tym przypadku ~na nich konkatenacji ciągu ( ). ^10to lista 0, 1, ... 9.

Na koniec lista jest ponownie łączona za pomocą ~, dając wymagane słowa ze spacją jako separatorem.


2

PowerShell v2 +, 60 bajtów

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

Pętle od długości ciągu wejściowego do 1. W każdej iteracji ustaw pomocnika na $irówną bieżącej liczbie minus 1. Jest to konieczne, ponieważ .lengthcałkowita liczba znaków, ale indeksowanie ciągu jest oparte na 0. Następnie zapętlamy od 0do 9. Każdą pętlę wewnętrzną pociąć ciąg wejściowy $nna podstawie wartości naszej zewnętrznej pętli, z -joinpowrotem na ciąg i konkatenować ciąg na podstawie liczby wewnętrznych pętli. Każdy wynik pętli jest umieszczany w potoku, a wynik jest domyślny po zakończeniu programu.

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

Dyalog APL , 14 11 bajtów

Zwraca listę ciągów.

,⎕D∘.,⍨⌽,\⍞

, listify (przekształć tabelę w listę)

⎕D wszystkie cyfry

∘.,⍨ dołączane do wszystkich (tj. tworzenie wszystkich kombinacji z)

odwrócona lista

,\ łączna konkatenacja

wprowadzanie tekstu

Wypróbuj APL online!


Naprawiony. Używam bojlera i zapomniałem go wypełnić.
Adám


2

Partia, 85 83 bajtów

@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 bajtów

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 bajtów dzięki @Poke .

Nie golfowany :

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

Kod testowy:

Wypróbuj tutaj.

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");
  }
}

Wydajność:

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
Możesz zapisać 7 bajtów, łącząc pętle for i wykonując dodatkową logikę, aby niejawnie określić przyrostek i podłańcuch. 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 bajty

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

Nie używa rekurencji jak inna odpowiedź.

Powód „” x+" "jest tutaj: -0 wciąż wynosi zero, więc nie możemy użyć notacji ujemnej, aby uzyskać cały ciąg znaków w ten sposób, więc najwyższą możliwą wartością jest minus jeden, więc „” to pad sznurek,


1

C, 72 , 70 bajtów

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

Bierze ciągi jako pary wskaźnik / rozmiar. Test główny:

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

Siatkówka , 37 bajtów

Liczba bajtów zakłada kodowanie ISO 8859-1.

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

Wypróbuj online!

Wyjaśnienie

M&!r`.+

Uzyskaj wszystkie prefiksy wejścia, dopasowując i drukując wszystkie nakładające się dopasowania z prawej strony.

m`$
0

Dołącz a 0do każdej linii.

%{`$
¶$%`

{Wskazuje, że pozostałe trzy etapy są wykonywane w pętli, dopóki nie uda im się zmienić ciąg. %Mówi, że powinny one być stosowane do każdej linii oddzielnie.

Sam etap po prostu powiela ostatnią linię (początkowo jest to tylko linia, na której jest uruchamiany, ale każda iteracja trzech etapów dodaje inną linię).

T`w`d`.$

Zwiększ cyfrę w ostatnim wierszu, wykonując następujące podstawianie znaków:

from: _0123456789AB...
to:   0123456789

I w końcu:

G10`

Zachowaj tylko pierwsze 10 wierszy, abyśmy mogli usunąć wiersz, który właśnie dodaliśmy po INPUT9.


1

Scala, 73 70 bajtów

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

Nazwij to jak f("INVALID"). Zwraca sekwencję znaków.

Wyjaśnienie

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

Alternatywne rozwiązanie, 73 bajty

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

definiuje anonimową funkcję. Aby to nazwać, napisz

val f = ...

i nazwij to tak

f("INVALID")

Zwraca ciąg ciągów, które będą wyglądać tak po wydrukowaniu:

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)

Wyjaśnienie

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

Twoje rekurencyjne rozwiązanie jest o 3 bajty mniejsze niż iteracyjne
TuxCrafting

Masz rację, musiałem go zoptymalizować po liczeniu.
corvus_192

1

CJam, 29 28 bajtów

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

Wyjaśnienie:

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

Wypróbuj online

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.