Étant donné un entier k et soit un bloc de texte, soit un tableau 2d dont les tableaux internes peuvent avoir des longueurs inégales (qui ressemble à un bloc de texte), faites pivoter chaque caractère ou élément de la k- ème colonne vers le haut ou vers le bas jusqu'à la position suivante qui existe.
Exemple
Faites pivoter la 20e colonne du texte suivant (basé sur 1):
A line with more than k characters.
A longer line with more than k character.
A short line.
Rotate here: ------v--
This is long enough.
This is not enough.
Wrapping around to the first line.
Sortie:
A line with more thtn k characters.
A longer line with aore than k character.
A short line.
Rotate here: ------m--
This is long enoughv
This is not enough.
Wrapping around to .he first line.
La rotation de la k la colonne de la même entrée d'où 35 < k <42 donnerait le texte d'entrée sans changement.
Règles
- Vous pouvez utiliser du texte brut, un tableau de lignes, un tableau 2D de caractères ou tout autre format raisonnable pour représenter les données. Vous pouvez également utiliser des types de données autres que des caractères.
- Le nombre de valeurs possibles du type de données des éléments doit être d'au moins 20 si la longueur de votre code en dépend, sinon au moins 2. Il peut s'agir d'un sous-ensemble de caractères ou d'autres valeurs prises en charge dans le type natif.
- Les espaces et tout type de valeurs nulles ne sont que des valeurs normales, si vous les autorisez en entrée. Vous pouvez également simplement les exclure dans le type d'élément.
- Changement de règle: vous êtes autorisé à remplir les tableaux plus courts avec une valeur par défaut générique (comme les espaces), si vous préférez utiliser des tableaux de longueurs égales pour stocker les données.
- k pourrait être basé sur 0 ou basé sur 1. Il est garanti d'être à l'intérieur de la ligne la plus longue de l'entrée (ce qui implique que l'entrée a au moins une ligne non vide).
- Vous pouvez choisir s'il tourne vers le haut ou vers le bas.
- Soit il suffit de faire pivoter une position, soit de faire pivoter n positions où n est un entier positif donné en entrée.
- Le code le plus court gagne.
la source
n~¨⍨↓⍉⎕⌽@(≢¨)@⎕⍉↑⎕,¨⍨n←⊂⊂⍬
. Peut-être pourriez-vous ajouter des modifications↑
↓
dans votre extension pour aider à continuer à jouer au golf (mais je ne sais pas exactement à quel point elles sont utiles).C
etI
sont localisées pour ne pas polluer:{~∘I¨⍨↓⍉⎕⌽@(~⊢∊I←⎕INSTANCES⊢∘C)@⎕⍉↑⎕,¨⍨⎕NEW⎕FIX I←C←':Class C' ':EndClass'}
Python 2 ,
11111010999989694 octetsEssayez-le en ligne!
Prend l'entrée sous la forme d'une liste de lignes et d'une colonne d'index 0 et renvoie une liste de chaînes.
La colonne est tournée vers le haut 1.
-11 octets, merci à Jo King
la source
Java 8,
107106135 135107 octets+29 octets pour une correction de bogue ..
Indexé 0; tourne vers le bas comme dans l'exemple.
Saisie sous forme de matrice de caractères; modifie la matrice de caractères au lieu d'en renvoyer une nouvelle pour économiser des octets.
Essayez-le en ligne.
Explication:
la source
char p=m[0][k]
- si ce n'est pas le cas, cela ne lèvera-t-il pas une exception? Beau boulot. Vous battez ma tentative C # par une large marge :)n
k
n
int p=0,t;
p
m[i%s][k]=(char)(p<1?t:p)
Zsh ,
94 87 78 7469 octets-7 octets en passant à un ternaire arithmétique, -9 octets en changeant le caractère en place (TIL), -4 octets en entrant l'index sur stdin et les chaînes comme arguments, -5 octets en utilisant une chaîne au lieu d'un tableau pour stocker les caractères en rotation.
Old Old Old OldEssayez-le en ligne!Voici les clés pour faire fonctionner cette réponse:
$array[0]
ou$string[0]
est toujours vide$array[n]
ou$string[n]
est vide si n est supérieur à la longueur du tableau / de la chaînearray[i]=c
oustring[i]=c
remplacera l'élément / le caractère.$[$#s<i?0:++j]
,j
n'est pas incrémenté si$#s<i
.Dans la réponse originale de 94 octets, il y avait un problème intéressant concernant l'utilisation
<<<
de l'impression. Je devais utiliserecho
pour le contourner:La raison de ceci peut être vue ici:
Les chaînes ici sont exécutées en sous-coquilles car elles sont données en tant que stdin à un autre programme. Si aucun programme n'est donné, il est implicitement donné à
cat
. Vous pouvez le voir avec<<< $_
.<<< $ZSH_SUBSHELL
est similaire àecho $ZSH_SUBSHELL | cat
. Puisque nous devons incrémenterj
, nous ne pouvons pas être dans un sous-shell.la source
R , 62 octets
Essayez-le en ligne!
Prend l'entrée comme une matrice de caractères à espace rembourré. Pivote vers le haut. Merci à Kirill L. !
R , 74 octets
Essayez-le en ligne!
Cette présentation est antérieure à l'allocation de lignes matelassées.
L'aliasing
substr
ici ne fonctionnera pas car nous appelonssubstr
etsubstr<-
sur la première ligne.E / S sous forme de liste de lignes non remplies; tourne vers le haut.
la source
L
dans l'environnement parent. Je me ferai un plaisir de mettre à jour le remplissage d'espace, cependant!C # (Visual C # Interactive Compiler) , 82 octets
Essayez-le en ligne!
Nous remercions @ASCIIOnly d'avoir suggéré ce
foreach
qui a conduit à une économie de 12 octets!-8 octets grâce à @someone!
-1 octet grâce à @EmbodimentofIgnorance!
la source
foreach
car c'est l'ordre inverse :(dynamic
pour fusionner les déclarations et économiser 2 octets (je n'ai jamais vu cela auparavant!) Essayez-le en ligne!Rubis , 57 octets
Essayez-le en ligne!
Prend l'entrée comme un tableau de lignes
a
. Fait pivoter le texte vers le bas à la position 0k
. Renvoie en modifiant l'entréea
.la source
05AB1E , 21 octets
Peut certainement être joué au golf un peu plus ..
Indexé 0; entrée et sortie sous forme de liste de chaînes.
Il tourne vers le bas comme dans l'exemple, mais
<
peut être remplacé par>
pour tourner vers le haut à la place.Essayez-le en ligne (le pied de page rejoint la liste par des sauts de ligne, supprimez-le pour voir la sortie réelle de la liste).
Explication:
la source
K4 , 41 octets
Solution:
Explication:
Je ne sais pas si je manque quelque chose ... 0 index, tourne vers le haut (changez le
1
pour-1
pour faire pivoter vers le bas)la source
Japt v2.0a0, 18 octets
Basé sur 0 avec entrée et sortie sous forme de chaîne multi-lignes. Tourne vers le haut de 1.
Il doit y avoir une méthode plus courte!
Essayez-le
la source
6
, votre réponse ignorerait l'espace surline with
la première ligne et surRotate here
la quatrième ligne, tandis que la plupart des autres réponses feraient également pivoter cet espace.Gelée , 16 octets
Un lien dyadique acceptant une liste de lignes (listes de caractères ne contenant aucun caractère de nouvelle ligne) à gauche et un entier à droite qui renvoie une liste de lignes.
Essayez-le en ligne! (le pied de page se divise sur les nouvelles lignes, appelle le lien et rejoint à nouveau par les nouvelles lignes)
Comment?
la source
perl 5 (
-p
), 75 octetsk est indexé 0, faites pivoter vers le bas
TIO
la source
Perl 6 ,
3833 octetsModifie le tableau en place (les règles ne l'interdisent pas)
Essayez-le en ligne!
la source
JavaScript (Node.js) , 52 octets
Essayez-le en ligne!
-7 octets grâce à Shaggy!
Vous n'avez pas encore vu de réponse JavaScript! Port de ma réponse C #.
la source
Fusain ,
342821 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Prend un tableau de chaînes en entrée. 0 indexé. Edit: Maintenant que cela
PeekDirection
a été corrigé, je peux le manipuler directement. Explication:Imprimez les chaînes d'entrée.
Sautez en haut de la colonne à faire pivoter.
Extrayez les cellules qui ont été imprimées.
Remplacez chaque cellule imprimée par la valeur de la cellule précédente (cycliquement). De manière pratique, les valeurs des cellules sont lues au moment de l'
PeekDirection
appel, donc le fait que l'MapCommand
appel écrit de nouvelles valeurs dans les cellules n'a pas d'importance.la source
Pip
-rn
, 32 octets0 indexé, tourne vers le bas. Essayez-le en ligne!
Filtre pour trouver les indices de toutes les lignes suffisamment longs pour participer à la rotation. Boucle ensuite sur ces lignes, en échangeant le caractère approprié sur chaque ligne avec une variable temporaire
s
. Visiter à nouveau la première ligne à la fin remplace à nouveau la valeur fictive.la source
Gelée , 19 octets
Essayez-le en ligne!
1 indexé. Pivote vers le bas. Un lien monadique qui prend une première liste de chaînes Jelly (une liste de listes de caractères) comme premier argument et k comme deuxième. Les espaces sont interdits dans l'entrée sauf comme remplissage à droite, mais tous les autres caractères sont autorisés.
Comme implémenté sur TIO, le pied de page divise une entrée de chaîne unique en une liste de chaînes et la place à droite, mais c'est pour plus de commodité; si je comprends bien, le résultat de cette étape est autorisé à entrer pour le lien principal selon les règles.
la source
GFortran , 199 octets
-20 environ en lisant depuis stdin plutôt qu'un fichier
-14 en utilisant des entiers implicites pour
i, k, n
-4 en supprimant les espaces et
::
Nécessite que l'utilisateur entre
k
etn
sur la première ligne, où sek
trouve la colonne à faire pivoter etn
le nombre de lignes de texte. Les entrées suivantes sont les lignes de texte à faire pivoter. C'était pénible à écrire! Fortran est tellement pédant!la source
T-SQL, 195 octets
Essayez-le en ligne version non golfée
la source