introduction
Observons la chaîne suivante:
ABCDEFGHIJKLMNOP
Si nous échangeons les extrémités de la chaîne , qui sont les suivantes:
ABCDEFGHIJKLMNOP
^^ ^^
On obtient le résultat suivant:
BACDEFGHIJKLMNPO
Après cela, nous supprimons les extrémités de la chaîne, qui dans ce cas sont B
et O
. Le résultat est:
ACDEFGHIJKLMNP
Si nous répétons le processus, nous obtenons la liste suivante:
N Result
2 ADEFGHIJKLMP
3 AEFGHIJKLP
4 AFGHIJKP
5 AGHIJP
6 AHIP
7 AP
Vous pouvez voir que pour N = 5 , le résultat est AGHIJP
. À N = 7 , la longueur de la chaîne est inférieure à 3 , donc N> 7 est considéré invalide dans ce cas.
La tâche
Étant donné une chaîne S avec au moins une longueur 4 et le nombre de répétitions N > 0, sortez le résultat final. Vous pouvez supposer que N est toujours valide .
Cas de test
Input > Output
N = 3, S = ABCDEFGHIJKLMNOP > AEFGHIJKLP
N = 1, S = Hello > Hlo
N = 2, S = 123321 > 11
C'est du code-golf , donc la soumission avec le moins d'octets gagne! Pour plus de simplicité, vous pouvez supposer que la chaîne ne contiendra que des caractères alphanumériques .
'
le personnage de comptage? Par exemple''123321
:?N
, mais peut-il être une chaîne avec des guillemets? Je veux dire, pourN=3
prendre'111'
(par opposition à111
)Réponses:
MATL , 8
91213octetsLes entrées sont: d'abord
N
une chaîne unaire avec des guillemets (autorisée par le défi); secondeS
sous forme de chaîne avec des guillemets (les guillemets dans les chaînes sont autorisés par défaut); séparés par un saut de ligne.Cela fonctionne en retournant la chaîne, en supprimant son deuxième élément et en répétant un total de
2*N
fois.Essayez-le en ligne!
la source
Rétine ,
4420 octetsBarré 44 est toujours régulier 44 :(
Suppose une entrée au format suivant (en caractère de comptage unaire:)
'
:{number of repeats}{string}
Par exemple:
'''''''ABCDEFGHIJKLMNOP
Il n'y a pas d'espace entre le nombre de répétitions et la chaîne.
Merci @ MartinBüttner pour avoir rasé 24 octets!
Essayez-le en ligne!
la source
Python 2, 31 octets
Je pense que cela fonctionne?
la source
Mathematica, 29 octets
Ma première réponse!
Le nœud de Mathematica sans support! Les entrées de fonction sont une liste (de caractères ou autre) et un nombre.
la source
Labyrinthe , 40 octets
L'entrée est
N
suivie de la chaîne, séparée par tout caractère non numérique.Essayez-le en ligne!
Cela a été écrit en collaboration avec Sp3000 (ce qui signifie que je ne pouvais pas être dérangé pour trouver un algorithme, alors il a commencé à travailler dessus, a trouvé une solution de 118 octets mais ne pouvait pas être dérangé par le golf, alors j'ai fait le golf. .. yay pour le travail d'équipe).
Explication
Primaire habituel de Sp (comme d'habitude légèrement modifié):
<>^v
ce qui décale cycliquement une ligne ou une colonne ou la grille."
ne sont pas opérationnels.Et c'est parti.
Le code commence le
<
, ce qui est une astuce de golf que j'ai utilisée à quelques reprises pour commencer avec un long morceau de code linéaire. Il décale la première ligne cycliquement vers la gauche, avec l'IP dessus , donc la source ressemble alors à ceci:Mais maintenant, l'IP ne peut plus se déplacer, donc il exécute à
<
nouveau. Cela continue jusqu'à ce que nous atteignions cet état:À ce stade, l'IP peut quitter la cellule et commencer à exécuter la deuxième ligne à partir de
?
. Voici donc le code linéaire décomposé:L'IP entre maintenant dans cette salle 3x2, qui est en fait deux boucles compressées étroitement (se chevauchant) 2x2 dans le sens des aiguilles d'une montre. La première boucle lit et supprime les
N-1
caractères de STDIN.Maintenant, nous entrons dans la deuxième boucle qui lit le reste de la chaîne d'entrée. Nous pouvons détecter EOF car
,
reviendra-1
dans ce cas, faisant tourner l'IP à gauche.Ce décrément n'est pas vraiment utile, mais nous pouvons l'annuler plus tard gratuitement et ici il nous permet de chevaucher les deux boucles.
Si nous prenons l'
5 ABCDEFGHIJKLMNOP
exemple en entrée, la pile ressemble à ceci:Notez que ceux-ci correspondent en fait aux caractères d'entrée
FGHIJKLMNOP
(parce que nous les avons décrémentés), et que nous ne voulons pas réellement imprimer le premier de ceux-ci (nous avons seulement supprimé lesN-1
caractères, mais nous voulons les ignorerN
).Maintenant, il y a un petit bit linéaire qui prépare la pile pour la prochaine boucle:
Les piles ressemblent maintenant à:
Nous entrons dans une autre boucle 2x2 dans le sens horaire. Cela supprime les premiers
N
personnages de la pile principale:Lorsque nous quittons la boucle, cela
=
permute à nouveau0
le dernier caractère de la chaîne d'entrée. Maintenant, les piles ressemblent à ceci:Nous voulons imprimer le contenu de la pile principale (sauf l'élément du bas et tous incrémentés de 1), à partir de la gauche . Cela signifie que nous devons le transférer vers la pile auxiliaire. C'est ce que fait la prochaine boucle 2x2 (dans le sens des aiguilles d'une montre):
Empile maintenant:
Nous replaçons le premier (celui avec lequel nous ne voulons pas imprimer) dans la pile principale
{
. Et maintenant, nous entrons dans la boucle finale 2x2 ( antihoraire ), qui imprime le reste:Enfin, nous terminons le programme avec
@
.la source
JavaScript (ES6), 39 octets
Il s'avère que je viens de réinventer la réponse de @ Sp3000.
la source
Gelée, 8 octets
Essayez-le en ligne!
Comment ça marche
la source
Gelée , 10 octets
Entrez le nombre via STDIN et la chaîne via les arguments de la ligne de commande . Merci à @Dennis pour beaucoup de conseils / aide pour que cela fonctionne (Jelly m'échappe toujours).
Essayez-le en ligne!
la source
ḢṪḊṖƓ¡
tous utilisent plus d'un octet) ou utilisez-vous une sorte de table de code de caractères pour la lisibilité?Pyth, 13 octets
Explication:
Essayez-le ici
la source
Vitsy,
129 (code) + 1 (nouvelle ligne pour la déclaration de fonction) = 10 octets\ o /
Attend l'entrée sur la pile comme la chaîne suivie du nombre.
Avec qui vous pouvez appeler:
Il s'agit d'une fonction qui laisse la chaîne résultante sur la pile. Je l'ai fourni en tant que programme dans le lien TryItOnline.
TryItOnline!
la source
Python 2,
4948 octetsEssayez-le ici avec des testcases!
Solution récursive simple. Supprime le deuxième et le dernier second élément de la chaîne d'entrée et s'appelle avec ceci et
n-1
jusqu'àn=0
.edit: Se sentir un peu stupide, en regardant l'autre solution python . Je suppose que j'aime trop la récursivité ...
la source
C, 96 octets
Non golfé
la source
Rubis, 29 octets
Très simple.
~
astuce volée à la réponse de Sp , qui économise un octets[n+1..-2-n]
. (Cela fonctionne parce qu'il~n
est-1-n
en complément à deux, puis...
est une gamme exclusive.)la source
Perl,
3632 + 1 = 33 octetsNécessite un
-p
indicateur et prend une entrée sur deux lignes, avec un nombre d'itérations à la fin:Non golfé?
la source
CJam, 12 octets
Essayez-le en ligne!
Comment ça marche
la source
Octave, 28 octets
Indexez la chaîne, en omettant
S(2:N+1)
etS(end-N:end-1)
.Exemple de run sur ideone .
la source
Rouille, 135 octets
Eh bien, c'est une longueur assez terrible.
Assez imprimé:
Vous pouvez le réduire à 104 octets si nous autorisons les octets au lieu des chaînes appropriées.
Assez imprimé:
Curieux de savoir si quelqu'un peut faire mieux.
la source
mSL - 137 octets
Explication:
%l = $len($1)
obtiendra la longueur de la chaîne d'entrée et l'enregistrera dans une variable appelée l$right(<input>,<length>)
et$left(<input>,<length>
peut être utilisé pour renvoyer la partie gauche ou droite de la chaîne d'origine de manière respectable. $ left renvoie toujours le texte à partir du côté très gauche tandis que $ right renvoie toujours le texte à partir du côté droit. Si la longueur spécifiée est un nombre négatif, $ left et $ right renvoient le texte entier moins le nombre de caractères de leurs côtés respectifs.$mid(<string>,<start>,[length])
est utilisé pour obtenir une sous-chaîne au milieu de la chaîne. Début est le début de la sous-chaîne à gauche. Une valeur négative indique un départ par la droite. Dans les deux cas, une longueur facultative peut être spécifiée. Une longueur négative peut être utilisée pour supprimer autant de caractères de la fin. Je l'ai donc utilisé pour récupérer le deuxième caractère et l'avant-dernier caractère en utilisant la longueur de la chaîne d'entrée.$calc(<input>)
est utilisé pour effectuer des calculs mathématiquesla source
Langue encore sans titre (donc nouvelle non compétitive), 9 octets
Vous pouvez trouver le code source ici , le langage est complètement instable (premier défi de test pour lui) alors ne vous attendez pas à ce qu'il fonctionne à l'avenir (commit 7)
Il s'agit d'un langage basé sur la pile avec des fonctions qui ajoutent et suppriment des objets de la pile. Il existe actuellement 2 commandes de manipulation de pile:
D
(dupliquer le haut de la pile N fois) etR
(faire pivoter les N éléments supérieurs de la pile)Explication:
la source
CJam, 14 octets
Testez-le ici.
Explication
la source
Vim, 27 octets
L'entrée devrait être sous la forme
STRING N
sur la première ligne sans aucun autre caractère.Explication:
la source
Brainfuck, 130 octets
Ma première entrée PPCG!
Évidemment, je ne vais pas gagner, mais bon.
Prend une entrée comme: 4ABCDEFGHIJKL, le premier caractère étant N.
Testez-le sur ce merveilleux site.
Limité à N inférieur ou égal à 9, car les nombres à deux chiffres sont une douleur dans le cul.
EDIT: je l'ai aspiré et ajouté la prise en charge des nombres à deux chiffres. Pad avec un zéro pour les chiffres simples.
la source
Perl, 27 octets
Inclure +1 pour
-p
Courir comme
perl -p sdr.pl
Entrée donnée sur STDIN, première ligne de la chaîne, deuxième ligne le nombre Suppose que la chaîne ne contient que des caractères "word"
sdr.pl
:la source
PHP, 60 octets
Cette solution définit de manière itérative les caractères de la chaîne d'entrée en une chaîne vide par index. Je manipule directement la chaîne d'entrée pour éviter une longue
return
.Fondamentalement, en mémoire
$w
ressemble à ceci une fois terminé:Courez comme ceci:
la source
<?for(;$I;)$W[$I--]=$W[strlen($W)-$I-2]="";echo$W;
. Il attend les valeurs sur les touchesW
etI
, sur POST / GET / COOKIE ... Un exemple seraithttp://example.com/a.php?W=MyString&I=5
register globals
plus. Merci pour la suggestion :)Pylônes , 16 octets.
Comment ça marche:
la source
CJam, 15 octets
Je suis sûr qu'il est possible de jouer au golf plus loin ...
la source
Jolf, 13 octets
Une traduction de la réponse JavaScript.
Explication:
Essayez-le ici!
Une version post-question plus intéressante:
la source
Sérieusement, 17 octets
Prend l'entrée comme
s \n n
.Essayez-le en ligne!
Explication:
la source
C #, 129 octets
Puisque nous sautons essentiellement 1 et supprimons N et le scénario inversé
non golfé
la source
Java, 144 octets
la source