Einführung:
Obwohl ich ursprünglich ein niederländisches Lied im Kopf hatte, in dem die Texte lauten: " Doe 'n stapje naar voren, en' n stapje terug " (was übersetzt bedeutet " Mach einen kleinen Schritt vorwärts und einen kleinen Schritt zurück ") Ich suchte nach den vollständigen Texten und stellte fest, dass sie nur hin und her gingen und nie seitwärts.
Also benutze ich jetzt stattdessen den Text von Mr. C. The Slide Man, auch bekannt als DJ Casper - Cha-Cha Slide, für diese Herausforderung.
Wenn wir alles andere ignorieren und nur die Wörter "left", "right", "back" und "hop" (ich habe "hop" als vorwärts gezählt) einschließlich der genannten Beträge betrachten, enthält das vollständige Lied die folgende Liste ( Ich verwende hier die Abkürzungen LRBH):
LBHRLLBHRLBHHRRLLLRLBHHHHRRLLLBHHHHHRLRLRLHRLLBHHLRLBHH
Hier die vollständigen Songtexte in einem versteckbaren JavaScript-Code-Snippet (um Platz zu sparen), in dem die Züge und Beträge in sperrigen Klammern stehen:
Herausforderung:
Nun zur eigentlichen Herausforderung. Wir nehmen einen, zwei oder drei Eingänge † . Eine davon ist eine Liste von Index-Ganzzahlen (also entweder nicht negativ für 0-indexiert oder positiv für 1-indexiert). (Die anderen Eingaben sind optional und werden in den Herausforderungsregeln erläutert.)
Jeder Testfall startet an einer Position {x=0, y=0}
.
Verwenden Sie nun die Lyrics-Liste der Züge und entfernen Sie diese alle Moves an den angegebenen Indizes der Input-Liste. Gehen Sie dann über die Bewegungen (bis zum größten Index des Eingabe-Arrays) und geben Sie die Position aus, an der Sie landen werden.
Die Bewegungen ändern die Koordinaten wie folgt:
- R
: x+1
- L
: x-1
- H
: y+1
- B
:y-1
Herausforderungsregeln:
- Sie können auf die Zugliste zugreifen, wie Sie möchten. †: Kann eine zusätzliche Eingabe sein; Kann sich in einer separaten Datei auf der Festplatte befinden, von der Sie lesen werden. kann sich in einer Variablen auf Klassenebene befinden, auf die Sie zugreifen. Es wird in Form sein
L
,R
,B
undH
obwohl (kann eine Zeichenfolge oder Zeichenliste / Array), so kann man nicht speichern Sie die Bewegungen Liste als1
s und-1
s oder ganze Zahlen. - Die oben angegebene Zugliste ist fest codiert und bleibt immer gleich. (Aus diesem Grund ist es auch in Ordnung, es als Feld auf Klassenebene zu platzieren, anstatt es als Eingabe zu verwenden, wenn dies die Byteanzahl Ihrer Antwort verbessert.)
- Input-Liste kann sowohl 0-indiziert als auch 1-indiziert sein (bis zu Ihnen)
- Wir gehen nur die Schritte bis zum größten Index der Liste und schließen ihn aus.
- †: Sie können dieses letzte Element auch als getrennte Ganzzahleingabe anstelle des letzten Elements des Eingabe-Arrays verwenden.
- Die Ausgabe der x- und y-Koordinaten, bei denen wir landen, kann in einem beliebigen vernünftigen Format erfolgen (Integer-Array mit zwei Elementen, durch Trennzeichen getrennte Zeichenfolge, STDOUT-Ausdruck in zwei getrennten Zeilen usw.).
- Sie können davon ausgehen, dass die Eingabeliste vom niedrigsten zum höchsten sortiert ist (oder vom höchsten zum niedrigsten, wenn Sie dies bevorzugen. In diesem Fall ist das erste Element die Anfangsgröße der Verschiebeliste - falls nicht als separate Eingabe verwendet). Und es werden auch keine doppelten Indizes enthalten.
- Wenn der größte Index der Eingabeliste größer ist als die Liste der Züge (55 Züge sind in der Liste der Züge), werden wir erneut an den Anfang der Liste springen (je nach dem größten Index so oft wie nötig) der Eingabe).
- Sie können
y,x
statt ausgebenx,y
, aber geben Sie dies bitte in Ihrer Antwort an, wenn Sie dies tun.
Beispiel:
Eingang: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
Hier die Bewegungen und (0-indizierten) Indizes übereinander:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
L, B, H, R, L, L, B, H, R, L, B, H, H, R, R, L, L, L, R, L, B, H, H, H, H, R, R, L, L, L, B, H, H, H, H, H, R, L, R, L, R, L, H, R, L, L, B, H, H, L, R, L, B, H, H, L, B, H, R, L, L, B, H, R, L
Wenn wir die Indizes der Eingabeliste entfernen, haben wir die folgende Bewegungsliste übrig:
1, 2, 3, 5, 6, 7, 9,11,12,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,35,36,37,38,39,40,41,45,46,47,48,49,51,52,54,55,57,58,61,62,63
B, H, R, L, B, H, L, H, H, L, L, L, R, L, B, H, H, H, H, R, R, L, L, B, H, H, H, H, R, L, R, L, R, L, L, B, H, H, L, L, B, H, L, H, R, B, H, R
Wenn wir nun von der Position {0, 0}
über die verbleibenden Züge gehen, haben wir nach jedem Zug die folgenden neuen Koordinaten:
{0,0};B,{0,-1};H,{0,0};R,{1,0};L,{0,0};B,{0,-1};H,{0,0};L,{-1,0};H,{-1,1};H,{-1,2};L,{-2,2};L,{-3,2};L,{-4,2};R,{-3,2};L,{-4,2};B,{-4,1};H,{-4,2};H,{-4,3};H,{-4,3};H,{-4,5};R,{-3,5};R,{-2,5};L,{-3,5};L,{-4,5};B,{-4,4};H,{-4,5};H,{-4,6};H,{-4,7};H,{-4,8};R,{-3,8};L,{-4,8};R,{-3,8};L,{-4,8};R,{-3,8};L,{-4,8};L,{-5,8};B,{-5,7};H,{-5,8};H,{-5,9};L,{-6,9};L,{-7,9};B,{-7,8};H,{-7,9};L,{-8,9};H,{-8,10};R,{-7,10};B,{-7,9};H,{-7,10};R,{-6,10}
Die endgültige Ausgabe lautet also: {-6, 10}
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Es wird außerdem dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
0-indexed input: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
1-indexed input: [1,5,9,11,14,15,28,35,43,44,45,51,54,57,60,61,65]
Output: {-6, 10}
0-indexed input: [55] (Note: There are 55 moves in the unmodified list)
1-indexed input: [56] (Note: There are 55 moves in the unmodified list)
Output: {-6, 11}
0-indexed input: [0,1,4,5,6,9,10,15,16,17,19,20,27,29,30,37,38,39,41,44,45,46,49,51,52]
1-indexed input: [1,2,5,6,7,10,11,16,17,18,20,21,28,30,31,38,39,40,42,45,46,47,50,52,53]
Output: {10, 16}
0-indexed input: [2,3,7,8,11,12,13,14,18,21,22,23,24,25,26,31,32,33,34,35,36,38,40,42,43,47,48,50,53]
1-indexed input: [3,4,8,9,12,13,14,15,19,22,23,24,25,26,27,32,33,34,35,36,37,39,41,43,44,48,49,51,54]
Output: {-18, -7}
0-indexed input: [0]
1-indexed input: [1]
Output: {0, 0}
0-indexed input: [4,6,7,11,12,13,15,17,20,28,31,36,40,51,59,66,73,74,80,89,92,112,113,114,116,120,122,125,129,134,136,140,145,156,161,162,165,169,171,175,176,178,187,191,200]
1-indexed input: [5,7,8,12,13,14,16,18,21,29,32,37,41,52,60,67,74,75,81,90,93,113,114,115,117,121,123,126,130,135,137,141,146,157,162,163,166,170,172,176,177,179,188,192,201]
Output: {-17, 37}
0-indexed input: [25,50,75,100,125,150,175,200,225,250]
1-indexed input: [26,51,76,101,126,151,176,201,226,251]
Output: {-28, 49}
quelle
Antworten:
05AB1E ,
1512 BytesDank Erik the Outgolfer 3 Bytes gespart
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
Æ
. Intelligente Art und Weise, nur alle Bewegungen zu zählen und die VerwendungÆ
der Differenz für die berechnenRL
undBH
Paare.Æ
hat es für immer gegeben, nicht wahr? Ich würde es annehmen, da ich nichts davon wusste. Es scheint, als ob die Befehle, die ich für "neu" halte, seit ihrer Einführung existieren, aber ich wusste nie, wie ich sie verwenden sollte, lol. Oh, +1Ruby ,
98 ... 5855 BytesProbieren Sie es online!
Erläuterung:
Der Haupttrick besteht darin, komplexe Zahlen zur Darstellung von Zügen zu verwenden: 'B' ist -i, 'H' ist + i, 'L' ist -1 und 'R' ist +1. Wenn wir alle Züge in komplexe Zahlen umwandeln, erhalten wir mit einer einzigen Summe das richtige Ergebnis.
Ich habe verschiedene Methoden ausprobiert, aber dann habe ich die magische Nummer 19 gefunden: Wir müssen nicht mit Regex-Übereinstimmungen herumspielen, weil:
Also, füge das alles zusammen, summiere, invertiere das Vorzeichen und wir sind fertig.
Danke Jakob für -3 Bytes
quelle
(m*c+m)[c]
mitm[c%55]
.JavaScript (ES6), 85 Byte
Gemäß den Herausforderungsregeln erwartet dieser Code, dass die Zeichenfolge m für den globalen Bereich die Liste der Bewegungen enthält. (Speichern von 3 Bytes, wie von @KevinCruijssen vorgeschlagen.)
Nimmt die Eingabe als Liste von 0-basierten Indizes in der Reihenfolge vom niedrigsten zum höchsten.
Probieren Sie es online!
Wie?
Jedes Zugzeichen wird in seine Position in der Zugzeichenfolge konvertiert
"LBHR..."
. Wir multiplizieren das Ergebnis mit 3 und wenden ein Modulo 5 an , das p ergibt . Wir haben dann:Wo das Vorzeichen eines Mods b das von a ist .
quelle
Gelee , 14 Bytes
Probieren Sie es online!
Argument 1 / Linkes Argument: Maximal 1-basierter Index.
Argument 2 / Rechtes Argument: 1-basierte Indizes.
Argument 3: Moves-Liste als String. Die Funktion kann weiterhin verwendet werden, wenn das dritte Befehlszeilenargument für diesen Zweck verwendet wird.
quelle
Java 10,
12911911210710086 BytesNimmt das Maximum als zusätzliche Eingabe; Moves-List ist ein Zeichen-Array auf Klassenebene.
Inspiriert von @Emignas 05AB1E Antwort .
-7 Bytes dank @Jakob .
-14 Bytes dank @Geobits .
Probieren Sie es online aus.
Erläuterung:
s[m%55]/73
Ordnet je nach Charakter entweder die x- oder die y-Koordinate zu ( Online ausprobieren ):s[m%55]*3%5-2
Ordnet dem richtigen Charakter+1
oder-1
je nach Charakter zu ( Online ausprobieren ):quelle
a.add(m)
alsif
Bedingung verwenden.int c[]
kann seinint[]c
.int c[]
war von einer früheren Version, in der ich immer noch einen Index verwendet habe,i
anstatt ihn zu verwendenm
. Und schlau, ein Set zu verwenden,add
anstatt!contains
, danke!c[2]
für axis (withs[m%55]/73
) verwenden und mit so etwas wie3*s[m%55]%5-2
(ich wünschte, ich könnte einen Weg finden, das zu verkürzen, aber ...) gehen. Zusammen mit einem Ternär ist esa->m->{var c=new int[2];for(;m-->0;)c[s[m%55]/73]-=a.add(m)?3*s[m%55]%5-2:0;return c[1]+","+c[0];}
für 98.int[]
statt eines Strings einfach den zurückgeben . :)Python 3, 85 Bytes
b
ist die Indexliste (aset
) undl
ist der Endindex. Die Verschiebungsliste (eine Zeichenfolge oder eine Zeichenliste) erscheint frei alss
. Dies ist eine Portierung der Ruby-Antwort von GB , und eine Erklärung des Ansatzes finden Sie dort.Probieren Sie es online
Ungolfed
quelle
MATL , 16 Bytes
Probieren Sie es online!
Nimmt 3 Eingaben wie die Jelly-Antwort, den größten Index, die Liste der zu überspringenden Indizes und das Array mit 55 Zeichen auf.
quelle
Sauber ,
148... 130 BytesProbieren Sie es online!
Definiert die Funktion
$ :: [Int] -> (Int, Int)
, indem eine Liste von (vom kleinsten zum größten) Indizes erstellt wird, die aus den Zügen entfernt werden sollen, bevorfoldr
die entsprechenden Operationen ausgeführt werden(0,0)
.quelle