Introduction:
Bien que j'avais à l'origine une chanson néerlandaise dans ma tête, où les paroles étaient: " Doe 'n stapje naar voren, en' n stapje terug " (qui se traduisait par " Faites un petit pas en avant et un petit pas en arrière "), quand J'ai cherché les paroles complètes, j'ai réalisé qu'elles ne faisaient que des allers-retours, et jamais de côté.
Donc, à la place, j'utilise maintenant les paroles de Mr C The Slide Man alias DJ Casper - Cha-Cha Slide pour ce défi.
Si nous ignorons tout le reste et ne regardons que les mots "gauche", "droite", "arrière" et "hop" (j'ai compté "hop" comme avant), y compris les montants mentionnés, la chanson complète aura la liste suivante ( J'utilise ici les abréviations LRBH):
LBHRLLBHRLBHHRRLLLRLBHHHHRRLLLBHHHHHRLRLRLHRLLBHHLRLBHH
Voici les paroles complètes de la chanson dans un extrait de code JavaScript caché (pour économiser de l'espace), où les mouvements et les montants sont entourés de crochets bloqués:
Défi:
Passons maintenant au défi lui-même. Nous prenons une, deux ou trois entrées † . L'un d'eux est une liste d'entiers d'index (donc non négatifs pour 0 indexés; ou positifs pour 1 indexés). (Les autres entrées sont facultatives et expliquées dans les règles du défi.)
Chaque scénario de test commencera à une position {x=0, y=0}
.
Maintenant, utilisez la liste des paroles des mouvements et supprimez tous les mouvements aux indices donnés de la liste d'entrée. Ensuite, parcourez les mouvements (jusqu'au plus grand index du tableau d'entrée) et affichez la position dans laquelle vous vous retrouverez.
Les mouvements modifieront les coordonnées comme suit:
- R
: x+1
- L
: x-1
- H
: y+1
- B
:y-1
Règles du défi:
- La liste des déplacements est accessible comme vous le souhaitez. †: peut être une entrée supplémentaire; peut être dans un fichier séparé sur le disque à partir duquel vous lirez; peut être dans une variable de niveau classe à laquelle vous accédez. Il devra être sous la forme de
L
,R
,B
etH
bien (peut être une chaîne ou caractère liste / tableau), de sorte que vous ne pouvez pas enregistrer les mouvements liste que1
s et-1
s ou entiers. - La liste des mouvements donnée ci-dessus est codée en dur et sera toujours la même. (C'est aussi pourquoi il est bon de le mettre comme champ au niveau de la classe au lieu de le prendre comme entrée si cela aide le décompte d'octets de votre réponse.)
- La liste des entrées peut être à la fois indexée 0 ou indexée 1 (à vous de choisir)
- Nous ne «marchons» que les mouvements jusqu'à et en excluant le plus grand index de la liste.
- †: Vous êtes également autorisé à prendre ce dernier élément comme entrée entière séparée, au lieu du dernier élément du tableau d'entrée.
- La sortie des coordonnées x et y où nous nous trouvons peut être dans n'importe quel format raisonnable (tableau d'entiers contenant deux éléments, chaîne délimitée, imprimée sur STDOUT sur deux lignes séparées, etc.)
- Vous pouvez supposer que la liste d'entrée est triée du plus bas au plus élevé (ou du plus haut au plus bas si c'est ce que vous préférez, auquel cas le premier élément est la taille initiale de la liste des déplacements - s'il n'est pas pris comme entrée séparée). Et il ne contiendra pas non plus d'index dupliqués.
- Si le plus grand index de la liste d'entrée est plus grand que la liste des mouvements ci-dessus (55 mouvements sont dans la liste des mouvements ci-dessus), nous revenons au début de la liste (autant de fois que nécessaire en fonction du plus grand index de l'entrée).
- Vous êtes autorisé à produire à la
y,x
place dex,y
, mais veuillez le spécifier dans votre réponse si vous le faites.
Exemple:
Contribution: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
Voici les mouvements et les indices (indexés 0) les uns au-dessus des autres:
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
En supprimant les indices de la liste d'entrée, nous aurons la liste de mouvements suivante:
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
Maintenant, si nous marchons de la position {0, 0}
sur les mouvements restants, nous aurons les nouvelles coordonnées suivantes après chaque mouvement:
{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}
La sortie finale sera donc: {-6, 10}
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- De plus, l'ajout d'une explication à votre réponse est fortement recommandé.
Cas de test:
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}
la source
Réponses:
05AB1E ,
1512 octetsSauvegardé 3 octets grâce à Erik l'Outgolfer
Essayez-le en ligne! ou comme suite de tests
Explication
la source
Æ
. Une façon intelligente de simplement compter tous les mouvements etÆ
de calculer la différence pour les pairesRL
etBH
.Æ
existe depuis toujours, n'est-ce pas? Je suppose que oui, vu que je ne le savais pas. On dirait que les commandes que je pense être "nouvelles" existent depuis le début, mais je n'ai jamais su les utiliser lol. Oh, +1Ruby ,
98 ... 5855 octetsEssayez-le en ligne!
Explication:
L'astuce principale consiste à utiliser des nombres complexes pour représenter les mouvements: «B» est -i, «H» est + i, «L» est -1 et «R» est +1. Si nous convertissons tous les mouvements en nombres complexes, alors avec une seule somme nous obtenons le bon résultat.
J'ai essayé différentes façons, mais j'ai trouvé le numéro magique 19: nous n'avons pas besoin de jouer avec la correspondance regex parce que:
Alors, mettez tout cela ensemble, somme, inversez le signe, et nous avons terminé.
Merci Jakob pour -3 octets
la source
(m*c+m)[c]
parm[c%55]
.JavaScript (ES6), 85 octets
Conformément aux règles de défi, ce code s'attend à ce que la chaîne de portée globale m contienne la liste des mouvements. (Enregistrement de 3 octets, comme suggéré par @KevinCruijssen.)
Prend en entrée une liste d'indices basés sur 0, classés du plus bas au plus élevé.
Essayez-le en ligne!
Comment?
Chaque caractère de déplacement est converti à sa position dans la chaîne de déplacement
"LBHR..."
. On multiplie le résultat par 3 et on applique un modulo 5 , ce qui donne p . On a alors:Où le signe d' un mod b est celui d' un a .
la source
Gelée , 14 octets
Essayez-le en ligne!
Argument 1 / Argument de gauche: index basé sur 1 maximum.
Argument 2 / Argument de droite: indices basés sur 1.
Argument 3: Moves-list sous forme de chaîne. La fonction est toujours réutilisable si le troisième argument de ligne de commande est utilisé à cet effet.
la source
Java 10,
129119112 11210710086 octetsPrend le maximum comme entrée supplémentaire; moves-list est un tableau de caractères au niveau de la classe.
Inspiré par @Emigna réponse 05AB1E de .
-7 octets grâce à @Jakob .
-14 octets grâce à @Geobits .
Essayez-le en ligne.
Explication:
s[m%55]/73
correspond à la coordonnée x ou y selon le personnage ( essayez-le en ligne ):s[m%55]*3%5-2
correspond au bon+1
ou en-1
fonction du personnage ( essayez-le en ligne ):la source
a.add(m)
commeif
condition.int c[]
peut l'êtreint[]c
.int c[]
était d'une version précédente où j'utilisais toujours un indexi
au lieu de l'utiliserm
. Et intelligent d'utiliser un ensemble auadd
lieu de!contains
, merci!c[2]
pour l'axe (avecs[m%55]/73
) et en le parcourant avec quelque chose comme3*s[m%55]%5-2
(j'aimerais pouvoir voir un moyen de raccourcir cela, mais ...). Avec un ternaire, c'esta->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];}
pour 98.int[]
au lieu d'une chaîne. :)Python 3, 85 octets
b
est la liste d'index (aset
) etl
est l'index de fin. La liste des déplacements (une liste de chaînes ou de caractères) apparaît comme libres
. Il s'agit d'un portage de la réponse Ruby de GB , et une explication de l'approche peut être trouvée ici.Essayez-le en ligne
Non golfé
la source
MATL , 16 octets
Essayez-le en ligne!
Prend 3 entrées comme la réponse Jelly, le plus grand index, la liste des index à ignorer et le tableau de 55 caractères.
la source
Nettoyer ,
148... 130 octetsEssayez-le en ligne!
Définit la fonction
$ :: [Int] -> (Int, Int)
, en prenant une liste (triée du plus petit au plus grand) des indices à supprimer des mouvements avant defoldr
terminer les opérations applicables(0,0)
.la source