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 INVALID9
tym zaczyna się tak:
INVALI0
, INVALI1
, INVALI2
, INVALI3
...INVALI9
A potem INVALI9
jest tak:
INVAL0
, INVAL1
, INVAL2
, INVAL3
...INVAL9
Po, INVAL9
to jest tak:
INVA0
, INVA1
, INVA2
, INVA3
, ...INVA9
Zauważ, jak za INVALID
każ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
źródło
INVALID0INVALID1INVALID2
) Jest prawidłowym formatem wyjściowym?Odpowiedzi:
Galaretka , 7 bajtów
Wypróbuj online!
Jak to działa
źródło
05AB1E ,
108 bajtówWyjaśnienie
Wypróbuj online!
Zaoszczędzono 2 bajty dzięki Adnan
źródło
.p
jest równoważne zŒ¹g£
:).JavaScript (ES6),
5347 bajtówZaoszczędź 6 bajtów dzięki Peanut & Neil
Dane wyjściowe: wszystkie słowa jako pojedynczy ciąg bez separatora.
Przykład
źródło
s&&
zamiasts?
...:''
?+''
część z ostatniego kodu, który opublikowałem. Wypróbuj tutaj!Perl, 29 bajtów
Obejmuje +1 dla
-n
Uruchom z wejściem na STDIN:
Tylko kod:
źródło
^
... Wygląda na to, że wykonuje to samo zadanie(*FAIL)
, ale nie rozumiem dlaczego. Czy możesz wytłumaczyć?^
powoduje niepowodzenie dopasowania, co wymusza regex przed^
... Mam na myśli twój przykład, dlaczego,/
nie działa, ale^/
działa?^
wykracza poza obecne rozumienie optymalizatora. Każde z tych dwóch zachowań może się zmienić w przyszłości.Haskell,
4743 bajtówPrzykł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ą.
źródło
Pyth, 9 bajtów
Program, który pobiera ciąg cudzysłowu na STDIN i drukuje listę ciągów.
Wypróbuj online
Jak to działa
źródło
Pip ,
1211 bajtówTraktuje to słowo jako argument cmdline. Wyjścia bez separatorów.
Wypróbuj online!
Wyjaśnienie:
źródło
V , 20 bajtów
Wypróbuj online!
Ponieważ zawiera on znaki niedrukowalne, oto format czytelny:
A oto zrzut heksowy:
Wyjaśnienie:
źródło
Bash + coreutils, 54 bajty:
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 iteracji9
z każdą liczbą[0,9]
dołączoną do każdej z9
kopii tego słowa. Wykonaj go w pliku, a słowo lub słowa w cudzysłowie, tjbash A.sh "blah blah blah"
.źródło
Floroid -
50 4731 bajtówObecnie 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
źródło
(lambdabot) Haskell - 49 bajtów
Lambdabot jest botem IRC na #haskell; automatycznie importuje wiązkę modułów, w tym informacje o tym,
Data.List
gdzie jest miejsceinits
zamieszkania. 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:
źródło
tails
działa?INVALID, NVALID, VALID, ALID, LID, ID, D,
braingasm ,
34333128 bajtówW 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.bg
i drukuje na standardowe wyjście.Wyjaśnienie:
edycja: Wygląda na to, że można
pominąćużycie pustego ciągu jako separatoraźródło
Python 2,
5355 bajtów+2 bajty: zadeklarowanie f jest konieczne przy rekurencji (jak wskazał @Destructible Watermelon)
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,
5456 bajtówPrzetestuj na ideonie
źródło
f=
część (trochę tak, jak nie możesz założyć, że zmienne mają wartości)Swift 3, 150 bajtów
Niezupełnie najkrótsze rozwiązanie, ale nie straszne dla Swift
Przetestuj to online w piaskownicy IBM Swift
Nie golfił
źródło
Ruby, 51 lat
Nie zastosowano separatora.
Dodaj następujące
i%10
separatory dla separatorów:,$/
dla znaku nowej linii,,?|
dla|
(podobnie dla każdego znaku do wydrukowania),,' '
dla spacji.W programie testowym
źródło
PHP,
6456 bajtówźródło
Haskell,
4946 bajtówźródło
f=(>>=(
mapy['0'..'9']).snoc).tail.reverse.inits
. 3 za pomocą fmap:f=(>>=(<$>['0'..'9']).snoc).tail.reverse.inits
reverse.tail.inits
zamiast tego,tail.reverse.inits
otrzymasz również prawidłowy wynik;)tail
, myślę, że miałem na myśliinit
, ale zamiana z odwróceniem działa dobrze :-)C #,
107102 bajtówNie golfił
źródło
k++
w golfa, usuwając w pętli for i dodając++
po użyciuk
, 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;}
Rubinowy,
9085 bajtówJeś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
f
ciąg bez ostatniego znaku.Zaoszczędź 5 bajtów dzięki @LevelRiverSt
źródło
def
iend
. Możesz stworzyć lambda, aby nawet nie nadać jej nazwy, pod warunkiem, że przypiszesz zmienną i wywołasz ją argumentami w nawiasach kwadratowych.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.->
składnif=->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ą()
okolicereturn[]
.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ć.
Służy
-p
do 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 ( ).^10
to lista 0, 1, ... 9.Na koniec lista jest ponownie łączona za pomocą
~
, dając wymagane słowa ze spacją jako separatorem.źródło
PowerShell v2 +, 60 bajtów
Pętle od długości ciągu wejściowego do
1
. W każdej iteracji ustaw pomocnika na$i
równą bieżącej liczbie minus1
. Jest to konieczne, ponieważ.length
całkowita liczba znaków, ale indeksowanie ciągu jest oparte na 0. Następnie zapętlamy od0
do9
. Każdą pętlę wewnętrzną pociąć ciąg wejściowy$n
na podstawie wartości naszej zewnętrznej pętli, z-join
powrotem 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.źródło
Dyalog APL ,
1411 bajtówZwraca listę ciągów.
,
listify (przekształć tabelę w listę)⎕D
wszystkie cyfry∘.,⍨
dołączane do wszystkich (tj. tworzenie wszystkich kombinacji z)⌽
odwrócona lista,\
łączna konkatenacja⍞
wprowadzanie tekstuWypróbuj APL online!
źródło
Groovy (58 bajtów)
Nie mam pojęcia, dlaczego nawet zadaję sobie trud, aby opublikować odpowiedź Groovy ... Minimalny wymagany rozmiar dla Groovy golfa wynosi 2, ponieważ wymaga zamknięcia, więc najlepszą odpowiedzią jest tutaj dwukrotność mojego minimalnego rozmiaru.
Wypróbuj tutaj: https://groovyconsole.appspot.com/script/5148433803378688
źródło
Partia,
8583 bajtówźródło
Java 7,
10598 bajtów-7 bajtów dzięki @Poke .
Nie golfowany :
Kod testowy:
Wypróbuj tutaj.
Wydajność:
źródło
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);}
Python 3, 62 bajty
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,źródło
C,
72, 70 bajtówBierze ciągi jako pary wskaźnik / rozmiar. Test główny:
źródło
Siatkówka , 37 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
Wyjaśnienie
Uzyskaj wszystkie prefiksy wejścia, dopasowując i drukując wszystkie nakładające się dopasowania z prawej strony.
Dołącz a
0
do 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ę).
Zwiększ cyfrę w ostatnim wierszu, wykonując następujące podstawianie znaków:
I w końcu:
Zachowaj tylko pierwsze 10 wierszy, abyśmy mogli usunąć wiersz, który właśnie dodaliśmy po
INPUT9
.źródło
Scala,
7370 bajtówNazwij to jak
f("INVALID")
. Zwraca sekwencję znaków.Wyjaśnienie
Alternatywne rozwiązanie, 73 bajty
definiuje anonimową funkcję. Aby to nazwać, napisz
i nazwij to tak
Zwraca ciąg ciągów, które będą wyglądać tak po wydrukowaniu:
Wyjaśnienie
źródło
CJam,
2928 bajtówWyjaśnienie:
Wypróbuj online
źródło