La tâche
Ceci est un défi simple. Votre entrée est une seule chaîne non vide, contenant uniquement des chiffres 0123456789
et des hachages #
. Il contiendra exactement une série de chiffres, qui code un entier non négatif et peut entourer la fin de la chaîne, et au moins un #
. L'entier peut avoir des zéros non significatifs. Par exemple, ##44##
, 013####
et 23###1
sont entrées valides, alors que ###
, 0099
et #4#4
ne sont pas.
Votre tâche consiste à extraire l'entier n
de la chaîne et à afficher la chaîne en rotation n
vers la droite.
Exemples
- L'entrée
#1##
doit être tournée d'un pas vers la droite, de sorte que la sortie correcte soit##1#
. - L'entrée
#026###
doit être tournée de 26 pas vers la droite, car le 0 de tête est ignoré. La sortie correcte est26####0
. - L'entrée
1####2
contient l'entier 21 enroulé sur l'extrémité, il doit donc être tourné de 21 pas vers la droite. La sortie correcte est##21##
.
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites.
Vous pouvez supposer que le numéro n
correspond au int
type standard de votre langue. Inversement, si ce int
type standard implémente des entiers de précision arbitraire, vous devez prendre en charge (en théorie) un nombre arbitrairement grand n
.
Cas de test
#1## -> ##1#
##4## -> #4###
1####1 -> ####11
1####2 -> ##21##
#026### -> 26####0
#000### -> #000###
###82399 -> ##82399#
51379#97 -> #9751379
#98##### -> ###98###
#######4## -> #4########
60752#1183 -> 8360752#11
####99366800## -> 366800######99
########9##### -> ###9##########
91#####515694837 -> 1#####5156948379
###6114558###### -> #6114558########
######219088736090042#### -> 9088736090042##########21
#46055080150577874656291186550000138168########### -> 0138168############4605508015057787465629118655000
568375993099127531613012513406622393034741346840434468680494753262730615610086255892915828812820699971764142551702608639695081452206500085233149468399533981039485419872101852######################3680 -> 99533981039485419872101852######################36805683759930991275316130125134066223930347413468404344686804947532627306156100862558929158288128206999717641425517026086396950814522065000852331494683
n
correspondent auint
type natif de votre langue (qui peut être d'une précision arbitraire). Je mettrai à jour le texte du défi plus tard.1234
?Réponses:
CJam, 11 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Notez que cela ne fonctionnera pas pour les deux derniers cas de test, car les nombres impliqués ne tiennent pas sur 64 bits.
Comment ça marche
la source
Julia,
7165 octetsIl s'agit d'une fonction anonyme qui accepte une chaîne et renvoie une chaîne. Pour l'appeler, affectez-le à une variable.
Nous ajoutons l'entrée à elle-même, la divisons en un tableau avec
#
comme séparateur, analysons chaque entier et prenons le maximum. Cela définit le nombre de fois que nous déplaçons la chaîne vers la droite. Nous répartissons la chaîne dans unChar
tableau, la décalons et lajoin
remettons ensemble.la source
Python, 66 octets
la source
Rétine,
6557498 octets enregistrés grâce à Martin!
Essayez-le en ligne!
Notez que cela va expirer / manquer de mémoire pour les très grands cas de test en ligne, et sur la plupart des machines saines, pour certains des plus grands.
Cela prend le dernier numéro de la chaîne et le premier ou aucun numéro de la chaîne et les place devant la chaîne. Il convertit ensuite ce nombre combiné en unaire et pivote à plusieurs reprises tout en supprimant un chiffre unaire.
la source
Gelée,
1210 octetsEssayez-le en ligne! ou vérifiez tous les cas de test .
Contexte
Disons que l'entrée est
51379#97
.En répétant la chaîne deux fois (
51379#9751379#97
), nous pouvons nous assurer qu'elle contiendra une représentation contiguë du nombre.Ensuite, nous appliquons PAS au niveau du bit à tous les caractères. Cela tente de convertir en int, de sorte que «1» est évalué à 1 , puis mappé à ~ 1 = -2 . En cas d'échec (
#
), il renvoie 0 .Pour notre exemple, cela donne
Ensuite, nous nous séparons à zéro pour séparer la partie qui code le nombre du reste.
PAS au niveau du bit mappe n à -n - 1 , nous incrémentons donc chacun pour obtenir -n .
Ensuite, nous convertissons chaque liste de la base 10 en entier.
Le nombre le plus bas est le négatif de celui que nous recherchons. Étant donné que l'atome de
ṙ
rotation de la liste Jelly tourne vers la gauche , cela évite de multiplier par -1 pour tourner vers la droite.Comment ça marche
la source
MATL ,
28251716 octets8 octets de moins en empruntant l'idée de Dennis de diviser le tableau et inverser l'ordre des pièces
Les deux derniers cas de test ne fonctionnent pas car le nombre est trop grand.
EDIT (20 mai 2016) Le code dans le lien utilise à la
Xz
place deXv
, en raison de récents changements dans la langue.Essayez-le en ligne!
la source
PowerShell, 153 octets
(Mais voir la section Extra Credit, ci-dessous)
PowerShell n'a pas le concept de «décalage» d'un tableau, j'ai donc dû rouler ma propre solution. Cela prendra beaucoup de temps pour des nombres plus importants, mais cela devrait finir par compléter tout ce qui tient dans un int 32 bits.
Prend l'entrée
$a
et définit une nouvelle variable en$d
tant qu'objet [System.Collections.ArrayList] . Cela est dû au fait que, techniquement, les tableaux dans PowerShell sont immuables (expliqués plus loin dans Extra Credit) , et ne prennent donc pas en charge les insertions ou les suppressions arbitraires, qui sont nécessaires pour le décalage. Ensuite, nous entrons dans unefor
boucle.La condition initiale est une astuce que j'ai trouvée - si nous concaténons l'entrée ensemble, la divisons
#
et ignorons les vides, le deuxième élément du tableau résultant sera égal à notre nombre, indépendamment de l'habillage. Nous définissons cela sur$b
et décrémentons$b
chaque fois jusqu'à ce qu'il soit nul.À chaque itération, nous définissons helper
$r
comme le dernier élément de la liste, supprimons ce dernier élément, puis insérons l'élément sur le front ... "décalant" effectivement le tableau vers la droite d'un élément.Enfin, nous sortons simplement avec
-join$d
pour qu'il soit concaténé en une seule chaîne.Crédit supplémentaire
Si le problème était de déplacer le tableau vers la gauche plutôt que vers la droite , nous pouvons le faire beaucoup plus rapidement en utilisant plusieurs affectations . Fondamentalement, "Si la valeur d'affectation contient plus d'éléments que de variables, toutes les valeurs restantes sont affectées à la dernière variable."
En substance, cela signifie quelque chose comme
$c=@(1,2,3)
et$a,$b=$c
aura
$a=1
un int et$b=@(2,3)
un tableau.PowerShell, 90 octets, effectue un décalage gauche au lieu d'un décalage droit
Ici, nous prenons à nouveau une entrée et définissons
$b
comme ci-dessus. Nous remanions en$a
tant que tableau de caractères, puis entrons dans la mêmefor
boucle que ci-dessus. Cette fois, cependant, nous n'avons pas eu besoin de prendre en charge la suppression / insertion arbitraire, nous n'avons donc pas besoin d'utiliser l'[System.Collections.ArrayList]
objet coûteux , ni les appels de méthode coûteux. Au lieu de cela, nous définissons simplement$r
le premier élément de$a
, et les éléments restants sont réenregistrés dans$a
. Ensuite, nous+=
pour revenir au bout.(Comme je l'ai dit, les tableaux PowerShell sont techniquement immuables, mais l'
+=
opérateur ici est surchargé - il prend un tableau et un autre objet, les rassemble (terme technique) dans un nouveau tableau, le renvoie et l'enregistre sous le nom de variable, et détruit le tableau d'origine. Fonctionnellement, nous venons d'ajouter un élément à la fin du tableau, mais techniquement (et du point de vue de la mémoire / nettoyage des ordures, etc.) c'est un tout nouveau tableau. Cela peut évidemment devenir une opération coûteuse si le tableau est grand ou complexe. Le revers de la médaille est que, comme les tableaux sont immuables, les indexer ou les parcourir est très bon marché.)La sortie reste la même action, avec une
-join
instruction pour la transformer en une seule chaîne.la source
Sérieusement, 21 octets
Essayez-le en ligne!
Attention: cette solution est très inefficace, donc les cas de test plus grands expireront sur TIO. Utilisez l'interprète local.
Explication:
la source
Mathematica, 69 octets
Trouvez des séquences de nombres dans le, s'il y en a 2, alors leur ordre doit être inversé. Concatène les chaînes (si ce n'est qu'une seule, elle renvoie simplement la chaîne numérique). Convertissez la chaîne en numérique et faites pivoter la chaîne ce nombre de fois.
la source
FromDigits
fonctionne au lieu deToExpression
.Pyth,
2214 octetsEssayez-le ici!
Explication
Cela fonctionne pour tous les testcases et se termine presque instantanément pour les très grands nombres.
la source
-...\#
au lieu deh:..."\d+"1
. De plus, pas besoin de convertirz
en liste de caractères,.>
fonctionne également sur une chaîne.JavaScript (ES6) 66
Pour une fois, le stupide négatif
%
de javascript pour les nombres négatifs est utilela source
b+a
est une concaténation de chaînes.a='32',b='1', (b?b+a:a)=='132', (b|0+a)==33
Pyth, 10 octets
Essayez-le en ligne. Suite de tests.
Ceci est une traduction de la réponse CJam de Dennis . J'en fais un wiki communautaire, car je ne l'ai pas créé.
Explication
la source
JavaScript (ES6),
6764 octetsUn autre port de la réponse CJam de Dennis.
Edit: économisé 3 octets en s'appropriant la partie de la réponse d'edc65 sur laquelle il n'a pas attiré l'attention.
la source
s+s
astuce à la place. (J'ai pensé à ça hier soir mais j'étais trop fatigué pour l'essayer à l'époque.)Perl 5, 41 octets
39 octets plus deux pour les
-lF
drapeaux (-M5.01
est gratuit):perl -lF -M5.01 script.pl
Explication:
-lF
lit l'entrée, supprime la nouvelle ligne de fin, place le reste dans la chaîne$_
, le divise en caractères et place ce fractionnement dans le tableau@F
./#+/
trouve la première chaîne de#
s dans$_
et définit$`
égal à la substance avant et$'
égale à la substance après. Si$`
est vide, alors$'
peut contenir plus de#
s. Cependant,$'.$`
est une chaîne dont la sous-chaîne initiale est le nombre de fois que vous faites pivoter le tableau.1..$'.$`
, qui la traite$'.$`
comme un entier et donc la numère, ce qui supprime tout#
s final , de sorte que la liste va du1
au nombre de fois où faire pivoter le tableau.pop
le dernier élément etunshift
celui - ci au début).say
tous les éléments du tableau pivoté.la source
Rubis -
687270 octetssplit
convertit la chaîne en un tableau(s+s).scan(/\d+/)
concaténer la chaîne à elle-même et obtenir un tableau de nombres (sous forme de chaînes)map(&:to_i)
convertir des chaînes en poucesmax
choisir le plus grand introtate
max
fois*""
reconvertir le tableau en chaîne (raccourci pourjoin
)Utilisation:
ruby scriptname.rb "[string]"
la source
05AB1E ,
1413 octetsEh bien, il est très peu probable que le code se termine pour les nombres supérieurs à 100000, mais si vous êtes assez patient, il y aura une sortie :). Code:
Explication:
Essayez-le en ligne!
Utilise l' encodage CP-1252
la source
VBSCRIPT,
8299 BYTESle code précédent ne gérait pas les cas avec un numéro enveloppé à la fin
NON GOLFE
ça craint un peu ... il y a probablement une meilleure façon de le faire, même dans VBscript
la source
a
trouve l'entrée de la fonction et renvoie-t-elle la sortie? De cette façon, vous n'auriez pas besoin des appelsinputbox
etmsgbox
.b
?Mathematica,
7358 octetsBeaucoup d'octets. 15 octets économisés grâce à IPoiler
la source
StringRotateRight
enregistre ici quelques octets.Matlab (73)
la source
matlab
(86)72La fonction totalise la chaîne deux fois, une fois pour l'extraction de nombres entiers, la seconde pour la tâche souhaitée, cela ne prend pas trop de temps car matlab continue de tourner
(Dim)modulus(Length)
à l'exception qu'il tombe en échec de segmentation pour des plages plus grandes.Aura du mal à jouer au golf plus ....
(86)
la source