Invalid Invali Inval


27

Diese Idee basiert lose auf der Chat-Nachricht von @ TùxCräftîñg .

Schauen Sie sich die folgende Beispielsequenz an:

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

Danach INVALID9geht es so weiter:

INVALI0, INVALI1, INVALI2, INVALI3...INVALI9

Und danach INVALI9ist es so:

INVAL0, INVAL1, INVAL2, INVAL3...INVAL9

Danach ist INVAL9es so:

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

Beachten Sie, wie wir INVALIDjedes Mal einen Buchstaben aus dem Wort entfernt haben.

Sie wiederholen dies so lange, bis Sie einen einzelnen Buchstaben, das heißt den folgenden, gefunden haben I:

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

Ihre Aufgabe ist es nun, ein Wort einzugeben und daraus eine Sequenz wie im obigen Beispiel zu erstellen. Ihr Code muss auch mit einzelnen Buchstaben funktionieren. In diesem Fall ist die resultierende Sequenz kürzer.

Sie können ein beliebiges Eingabe- und Ausgabeformat auswählen (wahlweise mit oder ohne Trennzeichen), müssen jedoch angeben, welches Sie ausgewählt haben.

Die Reihenfolge muss genau angegeben sein.

Der kürzeste Code in Byte, der diese Herausforderung erfolgreich abschließt, gewinnt die Herausforderung.

Vollständige Sequenz im obigen Beispiel:

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

Andere Beispiele:

Eingabe: MAYBE(Groß- und Kleinschreibung spielt keine Rolle)

Ausgabe:

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


Eingang: AFTER

Ausgabe:

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


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

Bestenliste


1
Könnten Sie die vollständige Sequenz auf einmal veröffentlichen? Möglicherweise mit mehr Proben? Auch was darf die Eingabe eventuell enthalten?
DJMcMayhem

1
Ist ein fehlendes Trennzeichen (zB INVALID0INVALID1INVALID2) ein gültiges Ausgabeformat?
DLosc

@ DLosc Ja, das ist es.
Buffer Over Read

3
Nur damit Sie wissen, ist es im Allgemeinen nicht empfehlenswert, eine Antwort so schnell zu akzeptieren, nachdem Sie die Herausforderung gesendet haben. Zu frühes Akzeptieren kann Benutzer davon abhalten, neue Antworten zu veröffentlichen. Das heißt nicht, dass Sie die akzeptierte Antwort nicht behalten können , aber ich möchte Sie ermutigen, das nächste Mal länger zu warten.
DJMcMayhem

@DJMcMayhem Okay!
Buffer Over Read

Antworten:


5

Gelee , 7 Bytes

ḣJṚp⁵Ḷ¤

Probieren Sie es online!

Wie es funktioniert

ḣ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 Bytes. Ich möchte nur wissen, wie jemand auf die Idee gekommen ist, genau diesen Code mit dem Codegolf funktionieren zu lassen.
Haykam

8

05AB1E , 10 8 Bytes

.pžmâ€JR

Erläuterung

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

Probieren Sie es online!

2 Bytes gespart dank Adnan


1
.pist gleichbedeutend mit Œ¹g£:).
Adnan

1
@Adnan: Im Ernst, wie hätte ich das schon wieder vergessen können! Vielen Dank! Scheint, als sollte ich eine Pause machen: P
Emigna

8

Javascript (ES6), 53.47 Byte

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

6 Bytes gespart dank Peanut & Neil

Ausgabe: Alle Wörter als einzelne Zeichenfolge ohne Trennzeichen.

Beispiel

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>


Speichert ein Byte und reduziert es auf 52 Byte , um keine Trennzeichen zu verwenden (was zulässig ist), indem kein Leerzeichen zwischen Elementen im Muster angehängt wird. Probieren Sie es hier aus!
Haykam

Können Sie nicht s&&anstelle von s?... verwenden :''?
Neil

Sie können es auch auf 49 Byte reduzieren, indem Sie den +''Teil aus dem letzten von mir veröffentlichten Code entfernen . Probieren Sie es hier aus!
Haykam

Ich verwende Firefox und der Text wird nicht durch Leerzeichen getrennt. Es ist für die Frage nicht erforderlich, aber ich dachte, ich würde Sie wissen lassen.
Buffer Over Read

1
@TheBitByte - Mein schlechtes. Es gibt kein Trennzeichen mehr (wie von Peanut vorgeschlagen), aber ich habe vergessen, meine Antwort entsprechend zu aktualisieren. Danke fürs bemerken!
Arnauld

7

Perl, 29 Bytes

Beinhaltet +1 für -n

Mit Eingabe auf STDIN ausführen:

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

Nur der Code:

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

Sehr schöner Code. Ich verstehe das zwar nicht zuletzt ^... Es sieht so aus, als ob es den gleichen Job macht (*FAIL), aber ich verstehe nicht warum. Könntest du erklären?
Dada

@Dada Ja, das Erzwingen eines Fehlers ist genau das, was es tut. Da es mit mindestens 1 Zeichen vom Anfang der Zeichenkette übereinstimmte, kann es nicht mehr am Anfang sein, so ^dass das Match fehlschlägt, was den regulären Ausdruck davor zwingt, einen Rückzieher zu machen
Ton Hospel,

OK danke. Ich hatte erwartet, dass es mit jedem Charakter funktioniert, der nicht in der Eingabe enthalten ist, aber es scheint nur mit ^... Ich meine, mit Ihrem Beispiel, warum ,/funktioniert es nicht, aber doch ^/?
Dada

Es ist ein Implementierungsdetail des Regex-Optimierers. Wenn Sie ein bestimmtes Zeichen nicht in die Zeichenfolge einfügen, ist es klug genug zu wissen, dass der Regex niemals übereinstimmen kann und der echte Regex-Abgleich noch nicht einmal gestartet wird. ^ist jenseits des aktuellen Verständnisses des Optimierers. Eines der beiden Verhaltensweisen könnte sich in Zukunft ändern.
Ton Hospel

Ok, ich verstehe, ich dachte, es wäre so etwas, war mir aber nicht sicher. Vielen Dank
Dada

6

Haskell, 47 43 Bytes

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

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

Einfacher rekursiver Ansatz. Fügen Sie jede Ziffer an das Wort an und fügen Sie einen rekursiven Aufruf hinzu, wobei der letzte Buchstabe entfernt wird.


6

Pyth, 9 Bytes

sM*_._QUT

Ein Programm, das die Eingabe einer in Anführungszeichen gesetzten Zeichenfolge in STDIN übernimmt und eine Liste von Zeichenfolgen druckt.

Probieren Sie es online aus

Wie es funktioniert

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 Bytes

Nimmt das Wort als cmdline-Argument. Ausgänge ohne Trennzeichen.

Wa&Oa.,tDQa

Probieren Sie es online!

Erläuterung:

             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 Bytes

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

Probieren Sie es online!

Da dies nicht druckbare Zeichen enthält, ist hier das lesbare Format:

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

Und hier ist ein Hexdump:

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

Erläuterung:

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

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

Durchläuft einfach eine Sequenz [Length of Input,1]und gibt während jeder Iteration das Eingabewort mit der Länge des aktuellen Iterationswerts aus, 9wobei jede Zahl [0,9]an jede der 9Kopien des Wortes angehängt wird . Führen Sie es in einer Datei und das Wort oder die Wörter in Anführungszeichen, dh bash A.sh "blah blah blah".


4

Floroid - 50 47 31 Bytes

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

Verwendet derzeit eine ähnliche Methode wie @JonathanAllan bei seiner zweiten rekursiven Methode.

Könnte habe dies gewesen , wenn ich das kartesische Produkt vorsichtiger in der Sprache implementiert haben würde: Bc:ca([c]+[c[:-a-1]KaIw(Z(c)-1)],hd).

Testfälle

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 Bytes

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

Lambdabot ist ein IRC-Bot bei #haskell; Es werden automatisch eine Reihe von Modulen importiert, darunter auch Data.Listdie , in denen sich die Module befinden inits. Und weil eine Sprache durch ihre Implementierung definiert ist, kann ich diese Lambdabot-Haskell nennen und nicht die Bytes für die Importe bezahlen.

Normaler Haskell:

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

Sind Sie sicher, dass es tailsfunktioniert?
Bergi

@Bergi, völlig vergessen über die Importe, danke für den Hinweis darauf :)
BlackCap

Ich meinte nicht den Import, ich meinte, dass es die falsche Ausgabe produziert:INVALID, NVALID, VALID, ALID, LID, ID, D,
Bergi

@Bergi, Huch! Du hast recht. 8 weitere Bytes für mich dann
BlackCap

3

Braingasmus , 34 33 31 28 Bytes

In seiner jetzigen Form ist Braingasm nur ein verherrlichter Brainfuck mit ein paar ( wie 3? ) Zusätzlichen Funktionen. Ich habe die meiste Entwicklungszeit damit verbracht, es so "unternehmungslustig" wie möglich zu machen, anstatt tatsächlich Features hinzuzufügen ...

Auf jeden Fall sollte der folgende Code mit dem neuesten Entwicklungs-Snapshot funktionieren. Es werden zeilenlose Eingaben von stdin, like $ echo -n INVALID | braingasm invalid.bg, und Ausdrucke nach stdout übernommen.

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

Erläuterung:

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

edit: Anscheinend ist es in Ordnung, leere Zeichenketten als Begrenzer zu überspringen


2

Python 2, 53-55 Bytes

+2 Bytes: Deklaration von f bei Rekursion erforderlich (wie von @Destructible Watermelon hervorgehoben)

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

Kehrt zur leeren Zeichenfolge zurück (führt zu einer leeren Liste), schneidet jeweils ein Zeichen ab und stellt eine Liste von zehn Zeichen der aktuellen Zeichenfolge voran, an die jeweils die Ziffern 0-9 angehängt werden.

Test auf Ideone

Python 3, 54 56 Bytes

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

Test auf Ideone


2
Ich bin ziemlich sicher, dass, wenn Ihr Lambda einen Aufruf an sich selbst enthält, Sie den f=Teil haben müssen (ein bisschen wie, wie Sie nicht annehmen können, dass Variablen Werte haben)
Destructible Lemon

2

Schnelle 3, 150 Bytes

Nicht ganz die kürzeste Lösung, aber für Swift nicht schrecklich

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

Testen Sie dies online in der IBM Swift Sandbox

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

2

Rubin, 51

Kein Trennzeichen verwendet.

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

Fügen Sie i%10für Trennzeichen Folgendes nachher hinzu :

,$/für Zeilenvorschub, ,?|für |(ähnlich für jedes druckbare Zeichen), ,' 'für Leerzeichen.

Im Testprogramm

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

f[gets.chomp]

2

PHP, 64 56 Bytes

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


Eine gute Möglichkeit, eine weitere for-Schleife zu verhindern. Sie können ein Byte speichern, indem Sie das Leerzeichen nach echo
aross

2

Haskell, 49 46 Bytes

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

Sie können ein Byte speichern, indem Sie die Map f=(>>=(Map einfügen ['0'..'9']).snoc).tail.reverse.inits. 3 mit fmap:f=(>>=(<$>['0'..'9']).snoc).tail.reverse.inits
BlackCap

Oh, und wenn Sie reverse.tail.initsstattdessen tail.reverse.initsauch die richtige Ausgabe erhalten;)
BlackCap

@BlackCap: Danke, ich habe mich wirklich gefragt, warum es keine gespiegelte (f) Karte in der Standardbibliothek gibt, aber ich habe nicht an Abschnitte gedacht. In Bezug auf tail, ich denke, ich meinte init, aber es mit der Rückseite zu tauschen funktioniert auch gut :-)
Bergi

2

C #, 107 102 Bytes

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
Sie können ein wenig Golf spielen, indem Sie es k++in der for-Schleife entfernen und ++nach der Verwendung von hinzufügen k, also wie folgt: 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;}Auch das Komma wird von OPs Herausforderung nicht benötigt, obwohl Sie es natürlich behalten können, wenn Sie es vorziehen. Ohne es ist das: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

Rubin, 90 85 Bytes

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

Wenn die Zeichenfolge leer ist, geben Sie ein leeres Array zurück. Andernfalls generieren Sie die Zeichenfolge + die Zahl in jeder Zahl von 0 bis 9 und rufen Sie fmit der Zeichenfolge ohne das letzte Zeichen auf.

5 Bytes gespart dank @LevelRiverSt


Ich nehme an, Sie haben noch nie in Ruby Golf gespielt. Überprüfen Sie meine Antwort auf diese Frage (oder viele andere Ruby-Antworten auf dieser Website), um herauszufinden, wie Sie eine Funktion auf spielerische Weise definieren können, ohne diese defund einzuschließen end. Sie können ein Lambda erstellen, sodass Sie ihm nicht einmal einen Namen geben müssen, solange Sie es einer Variablen zuweisen und mit den Argumenten in eckigen Klammern aufrufen.
Level River St

@LevelRiverSt Mit einem Lambda ist 1 Byte länger
TuxCrafting

Ok, ich habe die Tatsache übersehen, dass Sie es benennen müssen, weil es rekursiv ist. Ist aber immer noch f=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}5 Bytes kürzer.
Level River St

@LevelRiverSt Oh, ich wusste nichts über die ->Syntax
TuxCrafting

f=->s{s==""&&(return[]);(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}Speichert weitere 4 Bytes. Ruby wertet boolesche Ausdrücke von links nach rechts aus und wertet spätere Ausdrücke nur aus, wenn dies zur Ermittlung des Ergebnisses erforderlich ist. Die gleiche Golftechnik kann bei C angewendet werden. Ich weiß nicht, warum in diesem Fall die ()Umgebung return[]erforderlich ist.
Level River St

2

Perl 6, 32 = 31 Bytes + 1 für -p

Ich bin mit Perl 6 nicht so gut vertraut, daher gibt es möglicherweise Möglichkeiten, es noch weiter zu reduzieren.

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

Es wird -peinmal für jede Eingabezeile ausgewertet. Die Zeile wird eingefügt $_und nach Ausführung des Programms gedruckt $_.

Das (~$_,*.chop...^!*)ist es, eine Liste , in der das erste Element Zeichenfolge ( ~) eingegeben wird , jedes nachfolgende Element durch Zerhacken des letzten Zeichens aus dem vorherigen erhalten wird ( *.chop) , und dass weiter , bis die Zeichenfolge leer ist ( !*), mit Ausnahme der leeren String Fall (der ^in ...^) .

X~generiert alle Listenpaare links und rechts unter Verwendung der angegebenen Operation, in diesem Fall der Zeichenfolgenverkettung ( ~).^10ist eine Liste von 0, 1, ... 9.

Abschließend wird die Liste erneut mit einem String versehen ~, wobei die erforderlichen Wörter mit einem Leerzeichen als Trennzeichen versehen werden.


2

PowerShell v2 +, 60 Byte

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

Schleifen von der Länge der Eingabezeichenfolge bis 1. Setzen Sie den Helfer bei jeder Iteration $igleich der aktuellen Zahl minus 1. Dies ist erforderlich, da .lengthes sich um die Gesamtzahl der Zeichen handelt, die Indizierung einer Zeichenfolge jedoch auf 0 basiert. Dann machen wir eine Schleife von 0bis 9. Schneiden Sie die Eingabezeichenfolge für jede innere Schleife $nauf der Grundlage des Werts unserer äußeren Schleife -joinin eine Zeichenfolge und verknüpfen Sie die Zeichenfolge mit der Anzahl der inneren Schleifen. Jedes einzelne Schleifenergebnis wird in die Pipeline gestellt, und die Ausgabe erfolgt implizit bei Programmabschluss.

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 Bytes

Gibt eine Liste von Zeichenfolgen zurück.

,⎕D∘.,⍨⌽,\⍞

, listify (Tabelle zur Liste machen)

⎕D alle Ziffern

∘.,⍨ an alle angehängt (dh alle Kombinationen mit)

die umgekehrte Liste von

,\ die kumulative Verkettung von

die Texteingabe

TryAPL online!


Fest. Ich benutze ein Kochfeld und habe vergessen, es auszufüllen.
Adám

2

Groovy (58 Bytes)

Keine Ahnung, warum ich überhaupt die Mühe habe, eine Groovy-Antwort zu posten ... Die Mindestgröße für einen Groovy-Golf beträgt 2, basierend auf der Notwendigkeit eines Verschlusses. Die beste Antwort hier ist also das Doppelte meiner Mindestgröße.

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

Versuchen Sie es hier: https://groovyconsole.appspot.com/script/5148433803378688


2

Batch, 85 83 Bytes

@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 Bytes

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 Bytes dank @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);
  }
}

Testcode:

Probieren Sie es hier aus.

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

Ausgabe:

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
Sie können 7 Bytes einsparen, indem Sie die for-Schleifen kombinieren und eine zusätzliche Logik ausführen, um das Suffix und die Teilzeichenfolge implizit zu bestimmen. 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 Bytes

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

Verwendet keine Rekursion wie die andere Antwort.

Der "" Grund, warum das x+" "Feld "" vorhanden ist: -0 ist immer noch Null, und daher können wir nicht die Minus-Notation verwenden, um den gesamten String auf diese Weise abzurufen, sodass das höchste Feld, das wir verwenden können, minus eins ist die Saite,


1

C, 72 , 70 Bytes

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

Nimmt Zeichenketten als Zeiger / Größen-Paare. Testleitung:

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

Retina , 37 Bytes

Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.

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

Probieren Sie es online!

Erläuterung

M&!r`.+

Holen Sie sich alle Präfixe der Eingabe, indem Sie alle überlappenden Übereinstimmungen von rechts abgleichen und ausdrucken.

m`$
0

Fügen Sie 0an jede Zeile ein an.

%{`$
¶$%`

Das {zeigt an, dass die verbleibenden drei Phasen in einer Schleife ausgeführt werden, bis die Zeichenfolge nicht mehr geändert werden kann. Die %besagt, dass sie für jede Zeile separat angewendet werden sollten.

Die Stufe selbst dupliziert einfach die letzte Zeile (anfänglich ist dies nur die Zeile, auf der diese ausgeführt wird, aber jede Iteration der drei Stufen fügt eine weitere Zeile hinzu).

T`w`d`.$

Erhöhen Sie die Ziffer in der letzten Zeile, indem Sie die folgenden Zeichen ersetzen:

from: _0123456789AB...
to:   0123456789

Und schlussendlich:

G10`

Behalten Sie nur die ersten 10 Zeilen bei, damit wir die gerade hinzugefügte Zeile entfernen INPUT9.


1

Scala, 73-70 Bytes

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

Nenne es so f("INVALID"). Gibt eine Folge von Zeichen zurück.

Erläuterung

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

Alternative Lösung, 73 Bytes

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

definiert eine anonyme Funktion. Um es zu nennen, schreiben Sie

val f = ...

und nenne es so

f("INVALID")

Es wird eine Folge von Zeichenfolgen zurückgegeben, die beim Drucken wie folgt aussehen:

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)

Erläuterung

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

Ihre rekursive Lösung ist 3 Byte kleiner als die iterative
TuxCrafting

Du hast recht, ich muss es nach dem Zählen optimiert haben.
corvus_192

1

CJam, 29 28 Bytes

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

Erläuterung:

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

Probieren Sie es online aus

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.