Montez les morceaux!

26

Étant donné un entier N, procédez comme suit: (en utilisant 9 comme exemple).

  1. Recevoir l'entrée N. ( 9)
  2. Convertissez N de base10 en base2. ( 1001)
  3. Augmentez chaque bit de 1. ( 2112)
  4. Traitez le résultat comme base3 et reconvertissez-le en base10. ( 68)
  5. Retour / Sortie du résultat.

Contribution

Peut être reçu dans n'importe quel format de nombre raisonnable.
Il vous suffit de gérer les cas où N> 0.


Sortie

Soit retourner sous forme de nombre ou de chaîne, soit imprimer sur stdout.


Règles

  • C'est le , le code le plus court en octets gagne.
  • Les failles par défaut sont interdites.

Cas de test

1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161
Ian H.
la source

Réponses:

15

Python 2 , 31 octets

f=lambda n:n and 3*f(n/2)+n%2+1

Essayez-le en ligne!

Dennis
la source
3
Pourriez-vous expliquer comment cela fonctionne?
+n%2+1ajoute le bit binaire le plus à droite plus 1 à la valeur de retour, n/2décale vers la droite nde 1 bit binaire, 3*f(n/2)ajoute récursivement 3 fois ce calcul sur ces bits décalés vers la droite et n andtermine la récursion quand nest 0
Noodle9
11

JavaScript (Node.js) , 23 octets

f=x=>x&&x%2+1+3*f(x>>1)

Essayez-le en ligne!

l4m2
la source
x>>1est le même que x/2non?
mbomb007
@ mbomb007 J'ai pensé et suggéré la même chose pour l'instant, mais apparemment, cela devient Infinitydans JS .. Essayez-le en ligne. (Vous voudrez peut-être ajouter un lien TIO à votre réponse, I4m2 )
Kevin Cruijssen
2
@ mbomb007 No. 1>>1=0while1/2=0.5
l4m2
4
@ mbomb007 ... Python?
user202729
2
Ouais. Regardez la réponse Python. C'est la raison pour laquelle cela n/2fonctionne, et la raison pour laquelle je l'ai suggéré ici.
mbomb007
9

Java (JDK 10) , 44 octets

long n(long x){return x<1?0:x%2+1+3*n(x/2);}

Essayez-le en ligne!

user202729
la source
1
Peut -~- être aidera-t - il?
user202729
2
Non, règles de priorité.
user202729
Même question pour vous: pourquoi long? :) Et ici, je pensais que mon approche séquentielle était intelligente .. Vous l'avez fait sauter du parc en moins de 5 minutes ..>.>: '(
Kevin Cruijssen
@KevinCruijssen Pour être juste avec vous ...
user202729
6

Gelée , 4 octets

B‘ḅ3

Essayez-le en ligne!

Erik le Outgolfer
la source
Binaire, Incrément, To-base, 3. C'est vraiment tout ce qu'il faut dire.
2018
2
@ Adám Techniquement, c'est From -base, mais oui, c'est trivial dans la plupart, sinon toutes les langues de golf.
Erik the Outgolfer le
6

J , 7 octets

3#.1+#:

Essayez-le en ligne!

Merci Galen Ivanov pour -4 octets! J'ai vraiment besoin d'améliorer mes compétences en golf J ...

user202729
la source
1
7 octets: 3#.1+#: TIO
Galen Ivanov
Merci aussi pour le modèle, j'ai besoin de quelque chose à apprendre : 0.
user202729
Le modèle n'est pas le mien, j'ai oublié qui est son auteur.
Galen Ivanov
2
Ce serait moi :)
Conor O'Brien
6

R , 55 43 octets

function(n)(n%/%2^(x=0:log2(n))%%2+1)%*%3^x

Essayez-le en ligne!

Utilise l'astuce de conversion de base standard dans R, par incréments, puis utilise un produit scalaire avec les pouvoirs de 3pour se reconvertir en entier.

Merci à @ user2390246 d'avoir perdu 12 octets!

Giuseppe
la source
Parce que la conversion en binaire n'est pas la sortie finale, l'ordre des chiffres n'a pas d'importance. Donc, au lieu de l'étage (log (n)): 0, vous pouvez faire 0: log (n) et enregistrer quelques octets: 43 octets
user2390246
@ user2390246 bien sûr, merci.
Giuseppe
6

Java 10, 81 52 octets (conversion de base)

n->n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)

Essayez-le en ligne.

-29 octets grâce à @Holger .

Explication:

n->{                         // Method with Long as both parameter and return-type
  n.toString(n,2)            //  Convert the input to a Base-2 String
  .chars().reduce(0,(r,c)->  //  Loop over its digits as bytes
    r*3+c-47)                //  Multiply the current result by 3, and add the digit + 1
                             //  (which is equal to increasing each digit by 1,
                             //  and then converting from Base-3 to Base-10)

Java 10, 171 167 151 151 150 149 octets (séquence)

n->{int t=31-n.numberOfLeadingZeros(n);return a(t+1)+b(n-(1<<t));};int a(int n){return--n<1?n+2:3*a(n)+1;}int b(int n){return n<1?0:n+3*b(n/=2)+n*2;}

-16 octets grâce à @ musicman523 , passant (int)Math.pow(2,t)à (1<<t).
-1 octet grâce à @Holger , en changeant (int)(Math.log(n)/Math.log(2))en 31-n.numberOfLeadingZeros(n).

Essayez-le en ligne.

Explication:

n->{                         // Method with Integer as both parameter and return-type
  int t=31-n.numberOfLeadingZeros(n);
                             //  2_log(n)
  return a(t+1)              //  Return A060816(2_log(n)+1)
         +b(n-(1<<t));}      //   + A005836(n-2^2_log(n))

// A060816: a(n) = 3*a(n-1) + 1; a(0)=1, a(1)=2
int a(int n){return--n<1?n+2:3*a(n)+1;}

// A005836: a(n+1) = 3*a(floor(n/2)) + n - 2*floor(n/2).
int b(int n){return n<1?0:n+3*b(n/=2)+n*2;}

Quand on regarde la séquence:

2,  7,8,  22,23,25,26,  67,68,70,71,76,77,79,80,  202,203,205,206,211,212,214,215,229,230,232,233,238,239,241,242, ...

Nous pouvons voir plusieurs sous-séquences:

A053645(n):
0,  0,1,  0,1,2,3,  0,1,2,3,4,5,6,7,  0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,  ...

A060816(A053645(n)):
2,  7,7,  22,22,22,22,  67,67,67,67,67,67,67,67,  202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,  ...

A005836(A053645(n)+1)
0,  0,1,  0,1,3,4,  0,1,3,4,9,10,12,13,  0,1,3,4,9,10,12,13,27,28,30,31,36,37,39,40,  ...

La séquence demandée est donc:

A060816(A053645(n)) + A005836(A053645(n)+1)

Je crains de trouver des modèles, donc je suis fier de ce que j'ai trouvé ci-dessus .. Cela dit, @ user202729 a trouvé une approche meilleure et plus courte en Java en quelques minutes ..: '(

Kevin Cruijssen
la source
Re n.toString(n,2).getBytes()... Je pense que la conversion manuelle peut être plus courte.
user202729
1
BTW pourquoi longet non int?
user202729
1
Je pense que dans la version séquence, vous pouvez changer (int)Math.pow(2,t)pour 1<<t... puis insérez cette expression et supprimez la variable i ( 152 octets )
musicman523
1
Dans la vraie vie, j'utiliserais 31-Integer.numberOfLeadingZeros(n)plutôt (int)(Math.log(n)/Math.log(2)), mais ce n'est pas plus court. Sauf si vous utilisez import staticdans l'en-tête, ce qui pourrait étirer les règles trop loin.
Holger
1
Je viens d'essayer de convertir la boucle de votre première variante en une solution de flux, avec succès:n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
Holger
4

Brachylog , 7 octets

ḃ+₁ᵐ~ḃ₃

Essayez-le en ligne!

Explication

Pas que vous en ayez vraiment besoin, mais…

ḃ            To binary
 +₁ᵐ         Map increment
    ~ḃ₃      From ternary
Fatalize
la source
3

Attaché , 19 octets

FromBase&3@1&`+@Bin

Essayez-le en ligne!

Il s'agit d'une composition de trois fonctions:

  • FromBase&3
  • 1&`+
  • Bin

Cela convertit d'abord en binaire ( Bin), l'incrémente ( 1&`+), puis convertit en ternaire (FromBase&3 ).

Alternatives

Non-pointfree, 21 octets: {FromBase[Bin!_+1,3]}

Sans builtins, 57 octets: Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}

Conor O'Brien
la source
3

Retina 0.8.2 , 36 octets

.+
$*
+`^(1+)\1
$1;1
^
1
+`1;
;111
1

Essayez-le en ligne! Explication:

.+
$*

Convertissez de décimal en unaire.

+`^(1+)\1
$1;1

Divmod à plusieurs reprises par 2, et ajoutez 1 au résultat du modulo.

^
1

Ajoutez également 1 au premier chiffre.

+`1;
;111

Conversion de la base codée unaire 3 en base unaire.

1

Convertissez en décimal.

Neil
la source
3

Japt , 6 octets

¤cÄ n3
¤      // Convert the input to a base-2 string,
 c     // then map over it as charcodes.
  Ä    // For each item, add one to its charcode
       // and when that's done,
    n3 // parse the string as a base 3 number.

Prend l'entrée comme un nombre, sort un nombre.

Essayez-le en ligne!

Lente
la source
Bon sang! Pourquoi n'y ai-je pas pensé? Bien fait.
Shaggy
3

MATL , 12 7 6 octets

BQ3_ZA

Essayez-le en ligne!

5 octets enregistrés grâce à Giuseppe et un autre grâce à Luis Mendo.

Ancienne réponse de 7 octets:

YBQc3ZA

Essayez-le en ligne!

Explication:

YB        % Convert to binary string
  Q       % Increment each element
   c      % Convert ASCII values to characters
    3     % Push 3
     ZA   % Convert from base 3 to decimal.

Ancien pour 12 octets:

BQtz:q3w^!Y*

Essayez-le en ligne!

Oh mon Dieu, c'était désordonné ... Voici donc: `BQ3GBn: q ^! Y *.

Explication:

               % Implicit input
B              % Convert to binary vector
 Q             % Increment all numbers
  t            % Duplicate
   z           % Number of element in vector
    :          % Range from 1 to that number
     q         % Decrement to get the range from 0 instead of 1
      3        % Push 3
       w       % Swap order of stack
        ^      % Raise 3 to the power of 0, 1, ...
         !     % Transpose
          Y*   % Matrix multiplication
               % Implicit output
Stewie Griffin
la source
3

C # (Visual C # Compiler) , 128 octets

using System;using System.Linq;i=>{int z=0;return Convert.ToString(i,2).Reverse().Select(a=>(a-47)*(int)Math.Pow(3,z++)).Sum();}

Essayez-le en ligne!

Je compte Systemcar j'utilise Convertet Math.

Hyarus
la source
Select vous donne l'index comme paramètre facultatif. Vous pouvez donc vous débarrasser de votre zvariable. De plus dans le corps d'expression , vous pouvez vous débarrasser des {, }et des returndéclarations. Donc quelque chose comme çan=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
NtFreX
2

C, 32 27 octets

n(x){x=x?x%2+1+3*n(x/2):0;}

Basé sur la réponse Java de user202729 . Essayez-le en ligne ici . Merci à Kevin Cruijssen d' avoir joué au golf 5 octets.

Version non golfée:

n(x) { // recursive function; both argument and return type are implicitly int
    x = // implicit return
    x ? x % 2 + 1 + 3*n(x/2) // if x != 0 return x % 2 + 1 + 3*n(x/2) (recursive call)
    : 0; // else return 0
}
OOBalance
la source
Vous pouvez économiser 5 octets en remplaçant le returnavec x=et en inversant le ternaire afin que ce !ne soit plus nécessaire:n(x){x=x?x%2+1+3*n(x/2):0;}
Kevin Cruijssen
@KevinCruijssen Nice. Merci!
OOBalance le
2

Husk , 5 octets

B3m→ḋ

Essayez-le en ligne!

Explication

B3m→ḋ
    ḋ  Convert to base 2
  m→   Map increment
B3     Convert from base 3
Fyr
la source
2

Octave avec la boîte à outils de communication, 33 32 octets

@(x)(de2bi(x)+1)*3.^(0:log2(x))'

Essayez-le en ligne!

Convertit l'entrée en un vecteur binaire en utilisant de2biet en incrémentant tous les nombres. Est-ce que la multiplication matricielle avec un vecteur vertical de 3 élevé aux puissances appropriées:, 1, 3, 9, ...obtenant ainsi la somme sans appel explicite à sum.

Stewie Griffin
la source
Bien que cela soit extrêmement intelligent, vous pouvez également le faire pour 32 octets: Essayez-le en ligne!
Sanchises
Et avec MATLAB, vous pouvez même le faire @(x)base2dec(de2bi(x)+49,3)pour 27 (une rare occasion où MATLAB est plus indulgent qu'Octave)
Sanchises
2

PHP, 84 64 octets

Essayez-le en ligne !!

Code ORIGINAL

function f($n){$b=decbin($n);echo base_convert($b+str_repeat('1',strlen($b)),3,10);}

Essayez-le en ligne !!

Merci à Cristoph , moins d'octets s'il est exécuté avec php -R

function f($n){echo base_convert(strtr(decbin($n),10,21),3,10);}

Explication

function f($n){
$b=decbin($n);                    #Convert the iteger to base 2
echo base_convert(                  #base conversion PHP function
    $b+str_repeat('1',strlen($b)),  #It adds to our base 2 number
    3,                              #a number of the same digits length
    10);                            #with purely '1's
}
Francisco Hahn
la source
Voici quand je vois que j'ai un chemin loooogn pour aller à la programmation .... n'avait aucune idée de l'existence destrtr
Francisco Hahn
1
Fera !!, désolé<?="Will do!!"
Francisco Hahn
2

CJam , 8 octets

ri2b:)3b

Essayez-le en ligne!

Explication

ri   e# Read input as an integer
2b   e# Convert to base 2. Gives a list containing 0 and 1
:)   e# Add 1 to each number in that list
3b   e# Convert list from base 3 to decimal. Implicitly display
Luis Mendo
la source
J'aime un peu :)..
Ian H.
2

Espace , 117 octets

[S S S N
_Push_0][S N
S _Duplicate_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_number][T    T   T   _Retrieve][N
S S S N
_Create_Label_OUTER_LOOP][S N
S _Duplicate][S S S T   S N
_Push_2][T  S T T   _Modulo][S S S T    N
_Push_1][T  S S S _Add][S N
T   _Swap][S S S T  S N
_Push_2][T  S T S _Integer_division][S N
S _Duplicate][N
T   S N
_If_0_jump_to_Label_INNER_LOOP][N
S N
S N
_Jump_to_Label_OUTER_LOOP][N
S S N
_Create_Label_INNER_LOOP][S S S T   T   N
_Push_3][T  S S N
_Multiply][T    S S S _Add][S N
T   _Swap][S N
S _Duplicate][N
T   S T N
_If_0_jump_to_Label_PRINT_AND_EXIT][S N
T   _Swap][N
S N
N
_Jump_to_Label_INNER_LOOP][N
S S T   N
_Create_Label_PRINT_AND_EXIT][S N
T   _Swap][T    N
S T _Output_integer_to_STDOUT]

Lettres S(espace), T(tabulation) et N(nouvelle ligne) ajoutées uniquement en surbrillance.
[..._some_action]ajouté à titre d'explication uniquement.

Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).

Explication en pseudo-code:

J'ai d'abord converti la fonction récursive int f(int n){return n<1?0:n%2+1+3*f(n/2);}en sa forme itérative (en pseudo-code):

Integer n = STDIN as integer
Add starting_value 0 to the stack
function OUTER_LOOP:
  while(true){
    Add n%2+1 to the stack
    n = n/2
    if(n == 0):
      Jump to INNER_LOOP
    Else:
      Jump to next iteration OUTER_LOOP

function INNER_LOOP:
  while(true){
    n = 3*n
    n = n + Value at the top of the stack (the ones we calculated with n%2+1)
    Swap top two items
    Check if the top is now 0 (starting value):
      Jump to PRINT_AND_EXIT
    Else:
      Swap top two items back
      Jump to next iteration INNER_LOOP

function PRINT_AND_EXIT:
  Swap top two items back
  Print top to STDOUT as integer
  Exit program with error: Exit not defined

Et j'ai ensuite implémenté cette approche itérative dans l'espace de langage basé sur la pile, en utilisant sa pile par défaut.

L'exemple s'exécute:

Contribution: 1

Command    Explanation                   Stack           Heap    STDIN   STDOUT   STDERR

SSSN       Push 0                        [0]
SNS        Duplicate top (0)             [0,0]
SNS        Duplicate top (0)             [0,0,0]
TNTT       Read STDIN as integer         [0,0]           {0:1}   1
TTT        Retrieve                      [0,1]           {0:1}
NSSSN      Create Label OUTER_LOOP       [0,1]           {0:1}
 SNS       Duplicate top (1)             [0,1,1]         {0:1}
 SSSTSN    Push 2                        [0,1,1,2]       {0:1}
 TSTT      Modulo top two (1%2)          [0,1,1]         {0:1}
 SSSTN     Push 1                        [0,1,1,1]       {0:1}
 TSSS      Add top two (1+1)             [0,1,2]         {0:1}
 SNT       Swap top two                  [0,2,1]         {0:1}
 SSSTSN    Push 2                        [0,2,1,2]       {0:1}
 TSTS      Int-divide top two (1/2)      [0,2,0]         {0:1}
 SNS       Duplicate top (0)             [0,2,0,0]       {0:1}
 NTSN      If 0: Go to Label INNER_LOOP  [0,2,0]         {0:1}
 NSSN      Create Label INNER_LOOP       [0,2,0]         {0:1}
  SSSTTN   Push 3                        [0,2,0,3]       {0:1}
  TSSN     Multiply top two (0*3)        [0,2,0]         {0:1}
  TSSS     Add top two (2+0)             [0,2]           {0:1}
  SNT      Swap top two                  [2,0]           {0:1}
  SNS      Duplicate top (0)             [2,0,0]         {0:1}
  NTSTN    If 0: Jump to Label PRINT     [2,0]           {0:1}
  NSSTN    Create Label PRINT            [2,0]           {0:1}
   SNT     Swap top two                  [0,2]           {0:1}
   TNST    Print top to STDOUT           [0]             {0:1}           2
                                                                                  error

Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Arrête avec erreur: sortie non définie.

Contribution: 4

Command    Explanation                   Stack           Heap    STDIN   STDOUT   STDERR

SSSN       Push 0                        [0]
SNS        Duplicate top (0)             [0,0]
SNS        Duplicate top (0)             [0,0,0]
TNTT       Read STDIN as integer         [0,0]           {0:4}   4
TTT        Retrieve                      [0,4]           {0:4}
NSSSN      Create Label OUTER_LOOP       [0,4]           {0:4}
 SNS       Duplicate top (4)             [0,4,4]         {0:4}
 SSSTSN    Push 2                        [0,4,4,2]       {0:4}
 TSTT      Modulo top two (4%2)          [0,4,0]         {0:4}
 SSSTN     Push 1                        [0,4,0,1]       {0:4}
 TSSS      Add top two (0+1)             [0,4,1]         {0:4}
 SNT       Swap top two                  [0,1,4]         {0:4}
 SSSTSN    Push 2                        [0,1,4,2]       {0:4}
 TSTS      Int-divide top two (4/2)      [0,1,2]         {0:4}
 SNS       Duplicate top (2)             [0,1,2,2]       {0:4}
 NTSN      If 0: Go to Label INNER_LOOP  [0,1,2]         {0:4}
 NSNSN     Jump to Label OUTER_LOOP      [0,1,2]         {0:4}
 SNS       Duplicate top (2)             [0,1,2,2]       {0:4}
 SSSTSN    Push 2                        [0,1,2,2,2]     {0:4}
 TSTT      Modulo top two (2%2)          [0,1,2,0]       {0:4}
 SSSTN     Push 1                        [0,1,2,0,1]     {0:4}
 TSSS      Add top two (0+1)             [0,1,2,1]       {0:4}
 SNT       Swap top two                  [0,1,1,2]       {0:4}
 SSSTSN    Push 2                        [0,1,1,2,2]     {0:4}
 TSTS      Int-divide top two (2/2)      [0,1,1,1]       {0:4}
 SNS       Duplicate top (1)             [0,1,1,1,1]     {0:4}
 NTSN      If 0: Go to Label INNER_LOOP  [0,1,1,1]       {0:4}
 NSNSN     Jump to Label OUTER_LOOP      [0,1,1,1]       {0:4}
 SNS       Duplicate top (1)             [0,1,1,1,1]     {0:4}
 SSSTSN    Push 2                        [0,1,1,1,1,2]   {0:4}
 TSTT      Modulo top two (1%2)          [0,1,1,1,1]     {0:4}
 SSSTN     Push 1                        [0,1,1,1,1,1]   {0:4}
 TSSS      Add top two (1+1)             [0,1,1,1,2]     {0:4}
 SNT       Swap top two                  [0,1,1,2,1]     {0:4}
 SSSTSN    Push 2                        [0,1,1,2,1,2]   {0:4}
 TSTS      Int-divide top two (1/2)      [0,1,1,2,0]     {0:4}
 SNS       Duplicate top (0)             [0,1,1,2,0,0]   {0:4}
 NTSN      If 0: Go to Label INNER_LOOP  [0,1,1,2,0]     {0:4}
 NSSN      Create Label INNER_LOOP       [0,1,1,2,0]     {0:4}
  SSSTTN   Push 3                        [0,1,1,2,0,3]   {0:4}
  TSSN     Multiply top two (0*3)        [0,1,1,2,0]     {0:4}
  TSSS     Add top two (2+0)             [0,1,1,2]       {0:4}
  SNT      Swap top two                  [0,1,2,1]       {0:4}
  SNS      Duplicate top (1)             [0,1,2,1,1]     {0:4}
  NTSTN    If 0: Jump to Label PRINT     [0,1,2,1]       {0:4}
  SNT      Swap top two                  [0,1,1,2]       {0:4}
  NSNN     Jump to Label INNER_LOOP      [0,1,1,2]       {0:4}
  SSSTTN   Push 3                        [0,1,1,2,3]     {0:4}
  TSSN     Multiply top two (2*3)        [0,1,1,6]       {0:4}
  TSSS     Add top two (1+6)             [0,1,7]         {0:4}
  SNT      Swap top two                  [0,7,1]         {0:4}
  SNS      Duplicate top (1)             [0,7,1,1]       {0:4}
  NTSTN    If 0: Jump to Label PRINT     [0,7,1]         {0:4}
  SNT      Swap top two                  [0,1,7]         {0:4}
  NSNN     Jump to Label INNER_LOOP      [0,1,7]         {0:4}
  SSSTTN   Push 3                        [0,1,7,3]       {0:4}
  TSSN     Multiply top two (7*3)        [0,1,21]        {0:4}
  TSSS     Add top two (1+21)            [0,22]          {0:4}
  SNT      Swap top two                  [22,0]          {0:4}
  SNS      Duplicate top (0)             [22,0,0]        {0:4}
  NTSTN    If 0: Jump to Label PRINT     [22,0]          {0:4}
  NSSTN    Create Label PRINT            [22,0]          {0:4}
   SNT     Swap top two                  [0,22]          {0:4}
   TNST    Print top to STDOUT           [0]             {0:4}           22
                                                                                  error

Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Arrête avec erreur: sortie non définie.

Kevin Cruijssen
la source
À ce stade, pourquoi ne pas écrire l'assemblage? J'ai également une méthode itérative légèrement plus simple dans ma réponse codegolf.stackexchange.com/a/161833/17360
qwr
J'ai encore simplifié mon pseudocode python.
qwr
1
@qwr Votre code Python est presque le même que le code Java affiché. Java est juste plus verbeux et sujet aux erreurs. La seule différence est que mon code Java est une boucle while imbriquée et que le vôtre est séparé. Je pourrais le faire aussi en Java, mais comme il est imbriqué dans Whitespace, j'ai choisi de l'écrire comme tel dans le pseudo-code Java. De plus, Whitespace n'a aucun moyen de connaître le nombre d'éléments restants sur la pile, c'est pourquoi j'appuie sur le 0 au début, et dans la partie INNER_LOOP du code, faites: swap, vérifiez si 0, swap back. Belle réponse de l'Assemblée, cependant. Je l'ai donc +1. :)
Kevin Cruijssen
Je pense toujours que vous pouvez vous débarrasser de la n < 1vérification en poussant les valeurs jusqu'à ce que n soit 0, puis en les sautant jusqu'à ce que vous atteigniez votre valeur limite (0). La profondeur de la pile n'a pas besoin d'être stockée explicitement et il ne devrait même pas avoir besoin d'être échangé (si vous voulez échanger les deux premières valeurs comme dans lisp)
qwr
@qwr " Je pense toujours que vous pouvez vous débarrasser du contrôle n <1 en poussant les valeurs jusqu'à ce que n soit 0 " Umm .. vérifier si n < 1(ou n == 0) IS pousser les valeurs jusqu'à ce que nsoit 0 .. Ou suis-je en train de mal interpréter quelque chose ici ..: S " La profondeur de la pile n'a pas besoin d'être stockée explicitement " En Java, c'est le cas, sinon je ne peux pas créer le tableau. J'aurais pu utiliser un à la java.util.Stackplace, mais j'ai juste utilisé un tableau pour le rendre moins verbeux. Dans les espaces blancs, la pile est de taille indéfinie.
Kevin Cruijssen
2

Brain-Flak , 74 octets

({<>(())<>({<({}[()])><>([{}]())<>})}(<>)){{}((({})()){}{}[{}])([][()])}{}

Essayez-le en ligne!

Version "lisible"

({<>(())<>
  ({
    <({}[()])>
    <>
    ([{}]())
    <>
  })
}
# At this point we have a inverted binary string on the stack
(<>)
)
{
  {}
  (
    (({})()){}{}[{}]
  )
  ([][()])
}{}
MegaTom
la source
-2 octets
Jo King
1

Pyth, 8

ihMjQ2 3

Comment éliminer l'espace et rendre l' Qimplicite?

Pyth en ligne .

Traumatisme numérique
la source
Je crois que c'est en fait 8 octets
hakr14
@ hakr14 Oui, vous avez raison
Digital Trauma
Comment éliminer l'espace et rendre l' Qimplicite? Je ne pense pas que vous puissiez.
Erik the Outgolfer le