Per favore, lasciami andare!


34

Come golfisti del codice, non siamo abituati a rilasciare ( sicuramente ). Avremo bisogno di alcuni strumenti per aiutarci a farlo.

Naturalmente, per aiutare a commercializzare una nuova versione, abbiamo bisogno di una versione di rilascio bella e brillante. Chi non si eccita quando sente parlare della versione 3.0.0?

Compito

Il tuo compito sarà scrivere un programma / routine / ... per incrementare un numero di versione.

È necessario incrementare il numero di versione e ripristinare quelli "meno importanti" (ovvero la versione della patch).

Vengono visualizzati due argomenti: la versione corrente (ex "1.0.3") come stringa e un indice per sapere quale aggiornare (0 o 1 indicizzato).

Esempio, indicizzato 0:

next-version("1.0.3", 0) # 2.0.0
next-version("1.2.3.4.5", 2) # 1.2.4.0.0
next-version("10.0", 0) # 11.0
next-version("3", 0) # 4
next-version("1", 7) # ERROR
next-version("01", 0) # ERROR

La versione è una stringa, ogni parte è un numero, separato da un punto. Non ci possono essere punti iniziali, finali o punti consecutivi (e niente al di fuori di numeri / punti). Non vi è alcun limite alla dimensione della stringa di versione.

^[1-9]\d*(\.[1-9]\d*)*$

Il caso di errore (ultimi due esempi) è un comportamento indefinito. Ciò che accade in caso di input errati non è rilevante per questa sfida.

Come al solito, sono vietate le scappatoie standard. Puoi stampare o restituire la stringa.


1
Possiamo chiedere di ricevere prima come input l'indice e poi il numero di versione?
Leone,

@Leo sì, l'ordine non è un problema.
Ven

Potrei aggiungere un caso di prova per incrementare il numero finale nella stringa o un esempio o qualcosa per cui testare.
nmjcman101,

@ nmjcman101 come è un caso speciale?
Ven

3
Vorrei poter fare la stessa sfida con la condizione di vittoria del "più leggibile", quindi qualcuno scriverà questi per usarli nel lavoro reale. =)
jpmc26

Risposte:


12

Japt, 16 11 byte

¡V«´V+ÂX}'.

Provalo online! Il numero di input è 1 indicizzato.

Basato sulla mia risposta JavaScript. Questo sfrutta una delle funzionalità più utili di Japt: suddividere una stringa su un'altra prima di mappare ciascun elemento, quindi ricollegarsi a quella stringa dopo aver mappato.

Ungolfed e spiegazione

¡  V«  ´ V+Â X}'.
Um@V&&!--V+~~X}'.
                   Implicit: U = input string, V = input number
Um@           }'.  Split U at periods, then map each item X by this function:
   V&&               If V is 0, return V.
      !--V+~~X       Otherwise, decrement V and return X + !V (increments X iff V was 1).
               '.  Re-join the result with periods.
                   Implicit: output last expression

2
Una caratteristica davvero dolce!
Jonathan Allan,

1
Bene drat, pensavo di averlo nella borsa. Mi scusi, diventerò ossessionato dalla mia V risposta e spremerò fino all'ultimo byte. : P
DJMcMayhem

11

Vim 20 25 byte

Purtroppo mi sono reso conto che non gestiva il caso dell'aggiornamento dell'ultimo numero, quindi ho dovuto aggiungere byte. Questo è 1-indicizzato.

DJA.0@"t.qq2wcw0@qq@qx

TryItOnline

Unprintables:

DJA.^[0@"t.^Aqq2wcw0^[@qq@qx

Questo prende gli argomenti in ordine inverso, come righe separate:

3
1.2.3.4.5

Spiegazione:

DJ                           # Delete the input argument, and join lines
  A.^[0                      # Add a period to the end
       @"t.                  # Move to the "Copy register"th period
           ^A                # Increment the number under the cursor
             qq       @qq@q  # Until an error
               2w            # Move the cursor forward to the next number
                 cw0^[       # Change the number to 0
                           x # Delete the last '.'

1
Bello! Una spiegazione sarebbe utile
Kritixi Lithos l'

@KritixiLithos Aggiunto. Purtroppo ho dovuto aggiungere alcuni byte anche per gestire l'incremento del numero della versione finale, ma succede.
nmjcman101,

Penso che se sei andato a 0-index, potresti semplicemente fare DJ@"t.<C-a>qq2wcw0<esc>@qq@qche è tornato a venti
DJMcMayhem

@DJMcMayhem Non credo di poterlo fare perché non sarei in grado di differenziare 0 e 1.
nmjcman101

1
Oh sì, buon punto. Che ne dici DJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q?
DJMcMayhem

11

JavaScript (ES6), 44 42 40 37 byte

Salvato 3 byte grazie a @Neil

x=>i=>x.replace(/\d+/g,n=>i&&+n+!--i)

Il numero di input è 1 indicizzato.

Test snippet

f = x=>i=>x.replace(/\d+/g,n=>i&&+n+!--i)

console.log(f("1.0.3")(1))
console.log(f("1.2.3.4.5")(3))
console.log(f("10.0")(1))
console.log(f("1")(8))



1
@KritixiLithos Cosa c'è di sbagliato nel mio browser? cubeupload.com/im/ofJySU.png
Gustavo Rodrigues

n=>i&&+n+!--i
Neil,

@Neil Grazie! Non riuscivo a capire come giocare ancora a quell'espressione ...
ETHproductions

10

V , 13 , 12 byte

Àñf.ñò2wcw0

Provalo online!

Questo è 0-indicizzato.

C'è un ctrl-a(ASCII 0x01) lì dentro, quindi ecco una versione leggibile:

Àñf.ñ<C-a>ò2wcw0

Spiegazione:

À                   " 'arg1' times
 ñ  ñ               " Repeat the following:
  f.                "   Move to the next '.' character
     <C-a>          " Increment the next number
          ò         " Recursively:
           2w       "   Move two words forward
              cw    "   Change this word
                0   "   to a '0'

7

Perl, 40 37 34 + 1 = 35 byte

-2 byte grazie a @Dada. -3 byte grazie a un'idea che ho avuto dalla lettura del codice Japt di @ ETHproductions.

Corri con la -pbandiera.

$a=<>;s/\d+/$a--<0?0:$&+!($a+1)/ge

Provalo online!

Analisi del codice

-p          #Wraps the program in a while(<>){ ... print$_} statement.
            #Input is read into the $_ variable
$a=<>;s/\d+/$a--<0?0:$&+!($a+1)/ge
$a=<>;                              #Reads the version update into $a
      s/   /                   /ge  #Substitution regex:
                                g   #Repeats the substitution after first match
                                 e  #Interprets replacement as Perl code
       \d+                          #Matches 1 or more digits, and stores match in $&
                  ? :               #Ternary operation
            $a--<0                  #Checks if $a is negative and then decrements $a
                  ?0                #If negative, we've passed our match; print 0 instead
                    :$&+!($a+1)     #Otherwise, we're either printing $& + 0 (if $a was positive) or $& + 1 (if $a was 0).
#Since substitution implicitly modifies $_, and -p prints $_, it prints our answer

Rimuovi tutte quelle parentesi su entrambi i lati! (e $&invece di $1allora)
Dada l'

Sapevo che mi mancava qualcosa! Grazie!
Gabriel Benamy,

L'uso di numeri con 1 indice può far risparmiare 4 byte: provalo online!
Xcali,

5

Gelatina , 19 17 byte

ṣ”.V€‘⁹¦µJ’<⁹×j”.

1-indicizzati.

TryItOnline!

Come?

ṣ”.V€‘⁹¦µJ’<⁹×j”. - Main link: currentVersion, theIndex
ṣ”.               - ṣplit left (currentVersion) at occurences of '.'
   V€             - eVal €ach (creates a list of integers)
      ⁹           - right argument (theIndex)
       ¦          - apply to given index(es)
     ‘            -    increment
        µ         - monadic chain separation (call the above result z)
         J        - range(length(z))  i.e. ([1,2,3,...,length])
          ’       - decrement         i.e. ([0,1,2,...,length-1])
            ⁹     - right argument (theIndex)
           <      - less than?        i.e. ([1,1,...,(1 at theIndex),0...,0,0,0]
             ×    - multiply by z (vectortises) - zeros out all of z after theIndex
              j”. - join with '.'

3
Complimenti per 10k !!
Luis Mendo,

Non vedo l'ora che arrivi Jelly 2.0, così puoi sbarazzartene V€:).
Ven

@LuisMendo - grazie! Sono così inosservato (Dennis ha notato la mia pietra miliare 1K anche prima di me).
Jonathan Allan,

5

MATLAB, 85 byte

function f(s,j);a=split(s,'.');a(j)=string(double(a(j))+1);a(j+1:end)='0';join(a,'.')

Uno basato e primo tentativo di golf!


Molto bene! La prima volta che vedo il nuovo stringtipo in azione :-)
Luis Mendo il

5

C # 116 104 byte

using System.Linq;(v,i)=>string.Join(".",v.Split('.').Select(int.Parse).Select((x,n)=>n==i?x+1:n>i?0:x));

Spiegazione

using System.Linq;(v,i)=>   //Anonymous function and mandatory using
    string.Join(".",                    //Recreate the version string with the new values
        v.Split('.')                    //Get individual pieces
            .Select(int.Parse)          //Convert to integers
                .Select(            
                    (x,n)=>             //Lambda with x being the part of the version and n being the index in the collection
                        n==i                    
                            ?x+1        //If n is the index to update increment x
                            :n>i        //Else if n is greater than index to update
                                ?0      //Set to zero
                                :x));   //Otherwise return x

Provalo qui


Non è necessario l' stringe intnella firma funzione anonima
TheLethalCoder

@TheLethalCoder ahh sì certo, grazie.
JustinM - Ripristina Monica il

4

Python 2, 84 byte

Penso che questo potrebbe davvero essere più breve. Potrebbe essere necessario un modo per avere un'opzione non elencata.

lambda s,n:'.'.join(str([-~int(x)*(i==n),x][i<n])for i,x in enumerate(s.split('.')))

Se siamo riusciti a prendere la versione come un elenco di stringhe, esiste una soluzione a 75 byte:

g=lambda s,n:(str(-~int(s[0]))+'.0'*~-len(s))*(n<1)or s[0]+'.'+g(s[1:],n-1)

Inoltre, se sia l'input che l'output erano elenchi di numeri, esiste una soluzione a 64 byte:

g=lambda s,n:([-~s[0]]+[0]*~-len(s))*(n<1)or [s[0]]+g(s[1:],n-1)

4

V 14 20 byte

Ancora una volta, ho dovuto aggiungere il codice per il caso d'angolo di incrementare la cifra finale. (1-indicizzati)

DJA.0@"t.ò2wcw0òx

TryItOnline

Unprintables:

DJA.^[0@"t.^Aò2wcw0^[òx

Questo prende gli argomenti in ordine inverso, come righe separate:

3
1.2.3.4.5

1
Bella risposta! Sono sempre felice di vedere qualcun altro usare V! Solo così sai, se metti il ​​primo input in 'args', predefinirà il registro 'a' per quel numero, così potresti farlo @a(o anche più breve À) che dovrebbe farti risparmiare un sacco di byte.
DJMcMayhem

4

Lotto, 119 byte

@set s=%1
@set i=%2
@set t=
@for %%i in (%s:.=,%)do @set/an=!!i*(%%i+!(i-=!!i))&call set t=%%t%%.%%n%%
@echo %t:~1%

1-indicizzati.


4

Perl 6, 67 byte, indicizzato 0

->$v,$i {$v.split('.').map({++$>$i??($++??0!!$_+1)!!$_}).join: '.'}

Spiegazione:

->$v,$i {$v.split('.').map({++$>$i??($++??0!!$_+1)!!$_}).join: '.'}
->$v,$i {                                                         } # function taking version/index to increment
         $v.split('.')                                              # split by dot
                      .map({                          })            # for each version number
                            ++$>$i??                                # if an anonymous variable ($), incremented,
                                                                    #  is greater than $i (index to increment)
                                    ($++??       )                  # if it's not the first time we've been over $i
                                                                    # (using another anonymous value, which gets default-init'd to 0)
                                          0                         # then 0 (reset lower version numbers)
                                           !!$_+1                   # otherwise, increment the number at $i
                                                  !!$_              # otherwise return the number part
                                                        .join: '.'  # join with a dot

3
A proposito, le risposte automatiche sono totalmente ammissibili. In realtà, sono persino incoraggiati
DJMcMayhem

@DJMcMayhem Lo sapevo, ma pensavo non fossero ammissibili
Ven

3

PowerShell 3+, 75 74 byte

($args[0]-split'\.'|%{$m=!$b;$b=$b-or$args[1]-eq$i++;(+$b+$_)*$m})-join'.'

Ungolfed

(
    $args[0] -split '\.' | 
        ForEach-Object -Process {
            $m= -not $b
            $b = $b -or ($args[1] -eq $i++)
            (([int]$b) + $_) * $m
        }
) -join '.'

Spiegazione

I parametri vengono accettati utilizzando l' $argsarray.

  1. Dividi la stringa della versione ., quindi per ogni elemento:
    1. $mè impostato per essere -not $b. Al primo avvio , $bsarà indefinito il quale verrà coalizzato $false, quindi $minizierà come $true. $mè destinato ad essere un moltiplicatore che è sempre 0o 1e verrà utilizzato in seguito. $mdeve essere valutato qui perché vogliamo che sia basato sul $bvalore dell'ultima iterazione .
    2. $bè impostato su se stesso -oril risultato del confronto di un iteratore $icon $args[1](il parametro index). Questo significa $bche verrà impostato $truequi quando saremo sull'elemento che deve essere incrementato. Inoltre, sarà $truein ogni iterazione successiva perché il condizionale è -or'd con il suo valore corrente.
    3. $bviene convertito in un numero utilizzando unario +( $false=> 0, $true=> 1), quindi aggiunto all'elemento versione corrente $_che è a [string], ma PowerShell cerca sempre di fondere l'argomento a destra con il tipo a sinistra, quindi verrà eseguito l'aritmetica, non concatenazione di stringhe. Quindi questo valore verrà moltiplicato per $m, che è comunque [bool]ma sarà implicitamente unito.
  2. Unire nuovamente l'array risultante con ..

Quindi, la prima iterazione in cui $bdiventa $true, $bsarebbe stata $falsequando è $mstata valutata, rendendo $muguale $true, che manterrà il moltiplicatore a 1.

Durante quella corsa $bdiventa $truee viene aggiunto all'elemento versione (as 1), incrementandolo in tal modo, e poiché il moltiplicatore è fermo 1, quello sarà il risultato finale.

Quindi alla prossima iterazione, $bsarà già $true, rendendo $muguale $false, che renderà il moltiplicatore 0. Poiché $bsarà per sempre $trueora, il moltiplicatore sarà sempre 0, quindi lo sarà 0anche ogni elemento restituito .


2

R, 100 95 92 86 byte

Insolitamente per R, questo usa l'indicizzazione 0. Funzione anonima con due argomenti (una stringa e un numero intero). Probabilmente si può giocare a golf un po '.

function(v,i)cat((x=scan(t=el(strsplit(v,"\\."))))+c(rep(0,i),1,-x[-(0:i+1)]),sep=".")

2

05AB1E , 22 byte

'.¡vy²N‹i0*}²NQi>})'.ý

Provalo online!

Non so come fare if-else in 05AB1E, quindi questo è più lungo di quanto dovrebbe essere.


1
If I'm not misunderstanding, I don't think this works. The question says you have to 0-out the minor versions, so 1.0.0.0.3, 3 should produce 1.0.0.1.0 not 1.0.0.1.3.
LambdaBeta

@LambdaBeta misread, fixed.
Magic Octopus Urn

2

Coffee-script: 77 67 Bytes

f=(p,i)->((z<i&&v||z==i&&~~v+1||0)for v,z in p.split '.').join '.'

Woot! Time for cake and coffee for the beta release.

Thanks to @ven and @Cyoce I shaved 10 Bytes!


Nice! Not sure you need the parseInt here though?
Ven

Btw you can save two bytes by using parenless calls (i.e. .join '.' or .split '.')
Ven

Use + instead of parseInt (use ~~ if you need it to be cast to integer)
Cyoce

2

Python 3, 89 86 bytes

lambda v,c:'.'.join((str((int(x)+1)*(i==c)),x)[i<c]for i,x in enumerate(v.split('.')))

very naive way of getting things done

Edit: rewritten the conditional by referring to @kade


2

PHP, 81 bytes

awfully long. At least: the Elephpant still beats the Python.

foreach(explode(".",$argv[1])as$i=>$v)echo"."[!$i],($i<=$n=$argv[2])*$v+($i==$n);

loops through first argument split by dots: "."[!$i] is empty for the first and a dot for every other element; ($i<=$n) and ($i==$n) are implicitly cast to integer 0 or 1 for integer arithmetics.


2

JavaScript (ES6), 57 55 bytes

(s,x)=>s.split`.`.map((j,i)=>i==x?+j+1:i>x?0:j).join`.`

Examples:

n=(s,x)=>s.split`.`.map((j,i)=>i==x?+j+1:i>x?0:j).join`.`

console.log(n('1.0.3', 0))
console.log(n('1.2.3.4.5', 2))
console.log(n('10.0', 0))
console.log(n('3', 0))
console.log(n('1', 7))

Not the best JS implementation but it's fairly simple and follows the logic you'd expect.


Okay, that wasn't terribly clear, thanks.
Florrie

1

Pyth - 21 bytes

j\.++<Kcz\.Qhs@KQmZ>K

Test Suite


3
No, this isn't quite correct. Your 10.0 test case gives 11.0.0, that's one too many part!
Ven

1

Powershell, 80 100 95 92 Bytes

Saved 5 bytes by using a const for the -1..if

Saved 3 bytes by using !$b instead of $b-eq0

filter x($a,$b){[int[]]$y=$a.Split('.');-1..((-$b,-1)[!$b])|%{$y[$_]=0};$y[$b]++;$y-join'.'}

Explanation:

filter x($a,$b){
    [int[]]$y=$a.Split('.') #Split input into integer array
    $y[$b]++ #Increment 'major' version no. ($b) by one
    -1..((-$b,-1)[!$b])|%{$y[$_]=0} #Set all trailing numbers to 0, now also checks for $b=0 cases.
    $y-join'.' #Join back into '.' seperated Array
}

Test Cases:

x "1.0.3" 0
x "1.2.3.4.5" 2
x "10.0" 0
x "1" 7
2.0.0
1.2.4.0.0
11.0
Index was outside the bounds of the array.

Nice! I love seeing more powershell here.
briantist

@briantist honestly a lightweight uncompiled version of C# which can interface with everything is a godsend, I deal with a lot of Microsoft stuff at work and absolutely love it.
colsw

Oh absolutely; PowerShell is my jam, but not a lot of people think to use it for golfing. It has some features that are great for golfing, and others that make it suck for golfing, but overall it's a solid choice! I'm toying with the idea of doing a presentation about golfing in PowerShell at my next PSUG.
briantist

@briantist the default aliases are beautiful, but I'd love to be able to use a pre-defined set of a few common commands as single char aliases f for golfing, if say it could compete with some actual golfing languages if we could use r instead of random
colsw

Funny thing about random, it's not an an alias! It's a result of PowerShell's command evaluation. As it looks to find a command in aliases, functions, cmdlets, native applications, etc., the very last thing it tries to do is prepend Get- to whatever it is. So you're actually calling Get-Random, but technically not as an alias. You can see this working by running service, or childitem, or for maximum irony, alias.
briantist

1

Objective-C 531 Bytes

#import<Foundation/Foundation.h>
int main(int argc,const char *argv[]){@autoreleasepool{NSString *s=[NSString stringWithUTF8String:argv[1]];NSInteger n=strtol(argv[2],NULL,0);NSArray *c=[s componentsSeparatedByString:@"."];if(c.count<=n)NSLog(@"ERROR");else{int i=0;NSMutableString *v=[[NSMutableString alloc]init];for(;i<n;++i)[v appendFormat:@"%@.",[c objectAtIndex:i]];[v appendFormat:@"%li", strtol(((NSString *)[c objectAtIndex:i++]).UTF8String,NULL,0)+1l];for(;i<c.count;++i)[v appendString:@".0"];NSLog(@"%@",v);}}return 0;}

compile:

clang -fobjc-arc -Os main.m -o main

usage:

./main 1.2.3 1

Welcome to CodeGolf. In the title, You should tell the size of the source code, not the byte code. And the source should, of course, be as short as possible (no unnecessary whitespace, single character variable names etc.). Good Luck.
Titus

can probably use 0 instead of NULL and remove the return 0; at the end of the main. NSString *s can probably have the space removed. **argv is 1 byte shorter than *argv[]. @autoreleasepool{} is probably unnecessary.
Ven

1

Javascript ES6: 60 bytes

n.split(".").map((n,r)=>{return r>i?n=0:n}).join("."),n[i]++}

2
Welcome to PPCG! This doesn't seem to be valid, as it is does not take input in any way, and there is an extra } at the end. On golfing: one of the features of arrow functions is implicit return, so you can replace (n,r)=>{return r>i?n=0:n} with (n,r)=>r>i?n=0:n to save some bytes.
ETHproductions

1

R, 75 bytes

f=function(a,b){n=scan(t=a,se=".");m=-n;m[b]=1;m[1:b-1]=0;cat(n+m,sep=".")}

Indexing is 1-based. You can play with it online here.


1

APL (Dyalog), 31 bytes

Requires ⎕IO←0 (Index Origin 0), which is default on many systems. Full program body; prompts for text input (version) and then numeric input (index).

' 'R'.'⍕⎕(⊢∘≢↑↑,1+⊃)⊃⌽'.'VFI

Try it online!

 prompt for text input

'.'⎕VFIVerify and Fix Input using period as field separator (fields' validities, fields' values)

 reverse (to put the values in front)

 pick the first (the values)

⎕(...) apply the following tacit function to that, using evaluated input as left argument:

To explain the non-tacit equivalents of each function application we will now use to indicate the left argument (the index) and to indicate the right argument (the list of individual numbers of the originally inputted current version number).

 equivalent to (⍺⊃⍵) use to pick an element from

1+ add one to that 

↑, equivalent to (⍺↑⍵), prepend numbers taken from

⊢∘≢↑ equivalent to (⍺⊢∘≢⍵)↑ equivalent to (≢⍵)↑ take as many numbers from that as there are elements in , padding with zeros if necessary

 format (stringify with one space between each number)

' '⎕R'.' PCRE Replace spaces with periods


1

Java 8, 130 bytes

s->n->{String r="",a[]=s.split("\\.");for(int l=a.length,i=-1;++i<l;)r+=(i>n?0:new Long(a[i])+(i<n?0:1))+(i<l-1?".":"");return r;}

Explanation:

Try it here.

s->n->{                 // Method with String and Integer parameters and String return-type
  String r="",          //  Result-String
  a[]=s.split("\\.");   //  String-array split by the dots
  for(int l=a.length,   //  Length of the array
      i=-1;++i<l;)      //  Loop from 0 to `l` (exclusive)
    r+=                 //   Append the result-String with:
       (i>n?            //    If index `i` is beyond input `n`:
        0               //     Append a zero
       :                //    Else:
        new Long(a[i])  //     Convert the current String to a number
        +(i<n?          //     If index `i` is before input `n`
           0            //      Leave the number the same by adding 0
          :             //     Else:
           1))          //      Add 1 to raise the version at index `n`
       +(i<l-1?         //    If we've haven't reached the last iteration yet:
          "."           //     Append a dot
         :              //    Else:
          ""            //     Append nothing
   );                   //  End of loop
   return r;            //  Return the result-String
}                       // End of method

1

LiveScript, 53 52 bytes

->(for e,i in it/\.
 [+e+1;0;e][(i>&1)+2*(i<&1)])*\.

-1 byte thanks to @ASCII-only!

Old Explanation:

(a,b)->x=a/\.;x[b]++;(x[to b] ++ [0]*(x.length-1-b))*\.
(a,b)->                                                 # a function taking a and b (version and index)
       x=a/\.;                                          # split a on dot, store in x
              x[b]++;                                   # increment at the given index
                     (x[to b]                           # slice be from 0 to the index
                              ++                        # concat (both spaces are necessary so it's not interpreted as an increment operator
                                 [0]*(x.length-1-b))    # with enough zeros to fill the array back to its original size (x's size)
                                                    *\. # join on dot

Another self-answer... Not that anyone golfes in LiveScript anyway. :P

I was working on another version:

(a,b)->(a/\.=>..[b]++;..[b to *]=0)*\.

But * is too overloaded to be recognized in a splicing index, thus =0 will try to access 0[0]. So you need to write something like ..[b to ..length- b]=[0]*(..length-1-b) and it's longer in the end.


1
sadly f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\. is way longer :(
ASCII-only

@ASCII-only I think it's possible to compress if i<b then e else if i>b then 0 else+e+1 in i.e. [+e+1;0;e;e][i>b+(2*i<b)] or something along those lines, maybe even ([+e;-1][i>b+(2*i<b)]||e-1)+1
Ven

(a,b)->(for e,i in a/\.<newline> [+e+1;0;e][(i>b)+2*(i<b)])*\., 54
ASCII-only

Then let's remove the signature: ->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\. for 52
Ven

btw you can replace ; with space. also... looks like that's basically as far down as it'll go with this approach
ASCII-only

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.