Considérez le processus de:
Prenant un entier non négatif N.
ex27
.Le diviser en entiers
N - floor(N/2)
etfloor(N/2)
(une moitié «plus grande» et «plus petite») et les écrire dans cet ordre. devient
par exemple .27
14 13
Suppression de l'espace pour joindre les entiers en un nouvel entier beaucoup plus grand. devient
par exemple .14 13
1413
Répétez les étapes 2 et 3 un certain nombre de fois souhaité.
par exemple1413
→707 706
→707706
→353853 353853
→353853353853
→ ...
Ce défi consiste à faire exactement cela, mais pas toujours en base 10.
Défi
Écrivez un programme qui comprend trois nombres, B, N et S:
B est un entier de 2 à 10 qui est la base de N (binaire à décimal).
N est l'entier non négatif auquel appliquer le processus de fractionnement-réassemblage. Pour faciliter la saisie par l'utilisateur, elle est donnée sous forme de chaîne dans la base B, et non sous forme d'entier.
S est un entier non négatif qui est le nombre de fois pour répéter le processus de fractionnement-réassemblage.
Le résultat du programme est la représentation sous forme de chaîne de N dans la base B après S procédures de jointure fractionnée.
Lorsque S est 0
, aucune division n'est effectuée, donc la sortie est toujours N.
Lorsque N est 0
, toutes les divisions ont la forme 0 0
et se réduisent à 0
nouveau, donc la sortie est toujours 0
.
Exemples
B = 10, N = 27, S = 1
→1413
B = 10, N = 27, S = 2
→707706
B = 9, N = 27, S = 1
→1413
B = 9, N = 27, S = 2
→652651
B = anything, N = anything, S = 0
→N
B = anything, N = 0, S = anything
→0
Tableau pour tous les B avec N = 1
pour S = 0
à 7
:
B S=0 S=1 S=2 S=3 S=4 S=5 S=6 S=7
2 1 10 11 101 1110 111111 10000011111 10000100001000001111
3 1 10 21 1110 202201 101101101100 1201201201212012012011 212100212102121002121212100212102121002120
4 1 10 22 1111 223222 111311111311 2232222232322322222322 11131111131311311111311113111113131131111131
5 1 10 32 1413 432431 213441213440 104220331443104220331442 2433241322130211014044424332413221302110140443
6 1 10 33 1514 535535 245550245545 122553122553122553122552 4125434125434125434125441254341254341254341254
7 1 10 43 2221 11111110 40404044040403 2020202202020220202022020201 10101011010101101010110101011010101101010110101011010100
8 1 10 44 2222 11111111 44444454444444 2222222622222222222226222222 11111113111111111111131111111111111311111111111113111111
9 1 10 54 2726 13581357 62851746285173 3142536758708231425367587081 15212633743485606571782880411521263374348560657178288040
10 1 10 55 2827 14141413 70707077070706 3535353853535335353538535353 17676769267676676767692676771767676926767667676769267676
Tableau pour tous les B avec N aléatoire pour S = 0
à 3
:
B S=0 S=1 S=2 S=3
2 11011 11101101 11101111110110 11101111110111110111111011
3 2210 11021101 20102012010200 1001212100121210012121001211
4 1113 230223 112112112111 2302302302323023023022
5 101 2323 11341134 31430423143042
6 120 4040 20202020 1010101010101010
7 134 5252 24612461 1230456412304564
8 22 1111 445444 222622222622
9 4 22 1111 505505
10 92 4646 23232323 1161616211616161
Détails
- Prenez l'entrée via stdin ou la ligne de commande. Sortie vers sortie standard.
- Au lieu d'un programme, vous pouvez écrire une fonction qui prend B, N et S et imprime le résultat normalement ou le renvoie (sous forme de chaîne).
- B, N et S peuvent être pris dans n'importe quel ordre.
- Toutes les entrées qui produisent des sorties dont les valeurs décimales sont inférieures à 2 32 devraient fonctionner.
- N est représenté de la manière habituelle. c'est-à-dire le chiffre le plus significatif en premier et pas de zéros en tête sauf dans le zéro lui-même qui est écrit
0
. (La sortie00
au lieu de0
n'est pas valide.) - Le code le plus court en octets gagne.
Ssi vous apprécierez mes défis, pensez à donner Building Block Bot Troupeaux! un peu d'amour :)
la source
Réponses:
Pyth,
2119 octetsPrend la saisie dans le format
N\nB\nS
. Essayez-le en ligne: démonstration ou test harnaisExplication
la source
Pyth,
2921 octetsMise en œuvre vraiment simple.
Prend l'entrée sur stdin dans le format suivant:
la source
00
pourN=0
.Mathematica, 101 octets
Utilise une
Through
astuce pour appliquer les fonctions de plafond et de plancher. Ignorez simplement les erreurs.la source
CJam, 24 octets
Testez-le ici. Prend l'entrée comme
"N" S B
.Explication
la source
"0" 1 9
sortie00
. J'ai essayé de le jouer au golf:,q~:B;{:~Bb,2/z:,Bfbs}*
mais aussi invalide car il a produit une chaîne vide à la place.i
à la fin s'occuperait de00
. Vous pouvez récupérer l'octet en remplaçant2/:I-I]
par)\]2f/
.JavaScript ( ES6 ) 78
79Fonction récursive. Exécutez l'extrait de code pour tester (Firefox uniquement)
Modifier 1 octet enregistré thx @DocMax
la source
m&&s
parm*s
.ECMAScript 6, 90 octets
Définir une fonction récursive à l'aide d'une variable n'est pas vraiment un bon style, mais c'est le code le plus court que j'ai pu trouver dans ECMAScript 6.
Obtenir le
"00" => "0"
bon cas de coin gaspille trois octets (s(n)
au lieu de simplementN
).Pour l' essayer, vous pouvez utiliser la REPL de Babel : copier / coller l'exemple de code et d' imprimer les résultats d'invocation comme ceci:
console.log(f(9, "27", 2))
.la source
Lisp commun - 113 caractères
Non golfé
~vR
directive format renvoie un entier dans la basev
, oùv
est fourni comme argument pourformat
.parse-integer
accepte un:radix
argument pour convertir à partir d'une base spécifiée.#1=
et#1#
(respectivement assigner et utiliser) sont des variables de lecture qui permettent de partager des sous-expressions communes. Une fois développés, ils donnent le code suivant:la source
Pip , 27 octets
Prend la base, l'entier et le nombre de répétitions comme arguments de ligne de commande. L'algorithme est simple, mais utilise quelques fonctionnalités de langage intéressantes:
Le type scalaire de Pip, qui représente à la fois des nombres et des chaînes, est pratique ici, tout comme les opérations par élément sur les listes; malheureusement, les parenthèses et les opérateurs à deux caractères
FB
,TB
et//
annuler tout avantage.Solution alternative, sans affectation intermédiaire mais toujours 27 octets:
la source
C, 245 octets
Cela ne va rien gagner , mais c'était amusant à faire!
la source
PHP ,
115112 octetsEssayez-le en ligne!
Non golfé:
Production
la source
Japt , 17 octets
Essayez-le en ligne!
Prend les entrées dans l'ordre S, N, B avec N comme liste singleton . Accepter N sans liste unique coûte 2 octets .
Explication:
la source
Forth (gforth) , 105 octets
Essayez-le en ligne!
Explication
Change la base en B, puis en boucle qui s'exécute S fois:
Imprime la chaîne une fois terminé et remet la base à 10 (afin que nous puissions exécuter plusieurs fois de suite)
Explication du code
la source