Будь ласка, відпустіть мене!


34

Як кодери в гольф, ми не звикли випускати ( безумовно ). Нам знадобиться кілька інструментів, які допоможуть нам це зробити.

Звичайно, щоб допомогти маркетингу нової версії, нам потрібна приємна і блискуча версія версії. Хто не хвилюється, коли чує про версію 3.0.0?

Завдання

Вашим завданням буде написати програму / розпорядок / ... для збільшення номера версії.

Потрібно збільшити номер версії та скинути "менш важливі" (тобто версію патча).

Ви отримуєте два аргументи: поточну версію (наприклад, "1.0.3") як рядок та індекс, щоб знати, яку саме оновити (0 або 1-індексувати).

Приклад, 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

Версія - рядок, кожна частина - це число, розділене крапкою. Не може бути ні провідних, ні кінцевих, ні послідовних крапок (і нічого, крім цифр / крапок). Немає обмежень у розмірі рядка версії.

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

Випадок помилки (останні два приклади) - невизначена поведінка. Те, що відбувається у випадку неправильних внесків, не має значення для цього завдання.

Як завжди, стандартні лазівки заборонені. Вам дозволено друкувати або повертати рядок.


1
Чи можемо ми попросити отримати в якості спочатку індекс, а потім номер версії?
Лев

@ Так, замовлення не є проблемою.
Вен

Я можу додати тестовий випадок для збільшення кінцевого числа в рядку або приклад чи щось для перевірки.
nmjcman101

@ nmjcman101 як це особливий випадок?
Вен

3
Я б хотів, щоб я міг зробити такий самий виклик із умовою виграшу, що і "найбільш читабельний", щоб хтось написав це для мене, щоб використовувати в реальній роботі. =)
jpmc26

Відповіді:


12

Japt, 16 11 байт

¡V«´V+ÂX}'.

Перевірте його онлайн! Номер введення 1-індексований.

На основі моєї відповіді на JavaScript. Для цього використовується одна з найкорисніших функцій Japt: розділення однієї струни на іншу перед картографуванням кожного елемента, а потім приєднання до цього рядка після відображення.

Необурені і пояснення

¡  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
Мила особливість справді!
Джонатан Аллан

1
Ну драт, я подумав, що це у мене в сумці. Вибачте, я буду одержимим своїм V відповіді і видавлю з нього кожен останній маленький байт. : P
DJMcMayhem

11

Vim 20 25 байт

Я, на жаль, зрозумів, що це не обробляє випадок оновлення останнього числа, тому мені довелося додати байти. Це 1-індексований.

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

TryItOnline

Недруковані матеріали:

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

Це сприймає аргументи у зворотному порядку, як окремі рядки:

3
1.2.3.4.5

Пояснення:

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
Приємно! Пояснення було б корисним
Kritixi Lithos

@KritixiLithos Додано На жаль, мені довелося додати кілька байтів, щоб обробити збільшення кінцевого номера версії, але це буває.
nmjcman101

Я думаю, якщо ви перейшли до 0-індексу, ви можете просто зробити те, DJ@"t.<C-a>qq2wcw0<esc>@qq@qщо повернеться до двадцяти
DJMcMayhem

@DJMcMayhem Я не думаю, що я можу це зробити, тому що тоді я не зміг би розмежовувати 0 і 1.
nmjcman101

1
О так, хороший пункт. Як щодо DJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q?
DJMcMayhem

11

JavaScript (ES6), 44 42 40 37 байт

Збережено 3 байти завдяки @Neil

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

Номер введення 1-індексований.

Фрагмент тесту

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))


2
Закреслено 44 все ще 44 :)
Kritixi Lithos

1
@KritixiLithos Що не так із моїм браузером? cubeupload.com/im/ofJySU.png
Gustavo Rodrigues

n=>i&&+n+!--i
Ніл

@Neil Дякую! Я просто не міг розібратися, як далі
виграти

10

V , 13 , 12 байт

Àñf.ñò2wcw0

Спробуйте в Інтернеті!

Це 0-індексується.

Там є ctrl-a(ASCII 0x01), тому ось читабельна версія:

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

Пояснення:

À                   " '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 байт

-2 байти завдяки @Dada. -3 байти завдяки ідеї, яку я отримав від читання Japt-коду @ ETHproductions.

Біжи з -pпрапором.

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

Спробуйте в Інтернеті!

Розбивка коду

-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

Видаліть усі ці дужки з обох сторін! (і $&замість того $1тоді)
Дада

Я знав, що мені щось не вистачає! Спасибі!
Габріель Бенамі

За допомогою 1-індексованих чисел можна зберегти 4 байти: Спробуйте в Інтернеті!
Xcali

5

Желе , 19 17 байт

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

1-індексований.

СпробуйтеItOnline!

Як?

ṣ”.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
Поздравляю 10k !!
Луїс Мендо

Не можу чекати Jelly 2.0, щоб ви могли позбутися цього V€:).
Вен

@LuisMendo - дякую! Я настільки непомітний (Денніс помітив мій 1-кілометровий рубіж і до мене).
Джонатан Аллан

5

MATLAB, 85 байт

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

Одна заснована, і перша спроба гольфу!


Молодці! Вперше я бачу нового stringтипу в дії :-)
Луїс Мендо

5

C # 116 104 байт

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

Пояснення

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

Спробуйте тут


Вам не потрібен підпис stringі intв анонімній функції
TheLethalCoder

@TheLethalCoder ах так, звичайно, спасибі
JustinM

4

Пітон 2, 84 байт

Я відчуваю, що це дійсно може бути коротшим. Можливо, потрібен спосіб мати ненумерований варіант.

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

Якщо нам вдалося прийняти версію як список рядків, є 75-байтне рішення:

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

Крім того, якщо і вхід, і вихід були списками чисел, існує 64-байтове рішення:

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

4

V 14 20 байт

Знову мені довелося додати код для кутового випадку збільшення кінцевої цифри. (1-індексований)

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

TryItOnline

Недруковані матеріали:

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

Це сприймає аргументи у зворотному порядку, як окремі рядки:

3
1.2.3.4.5

1
Гарна відповідь! Я завжди радий бачити, як хтось ще використовує V! Просто ви знаєте, що якщо ви покладете перший вхід у "args", він заздалегідь заздалегідь зареєструє "a" на це число, щоб ви могли зробити @a(або навіть коротше À), що повинно заощадити купу байтів.
DJMcMayhem

4

Пакет, 119 байт

@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-індексований.


4

Perl 6, 67 байт, 0-індексований

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

Пояснення:

->$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
Тільки фій, самовідповіді цілком придатні. Насправді їх навіть заохочують
DJMcMayhem

@DJMcMayhem Я знав про це, але думав, що вони не мають права
Вен

3

PowerShell 3+, 75 74 байт

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

Безумовно

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

Пояснення

Параметри приймаються за допомогою $argsмасиву.

  1. Розділіть рядок версії на ., а потім на кожен елемент:
    1. $mвстановлено -not $b. Під час першого запуску $bбуде невизначено, що буде узгоджено $false, так $mпочнеться як $true. $mпризначений для мультиплікатора , який завжди 0або , 1і він буде використовуватися в подальшому. $mми повинні оцінюватись тут, тому що ми хочемо, щоб він базувався на останній ітерації$b значенні .
    2. $bвстановлюється для себе -orрезультатом порівняння ітератора $iз $args[1](параметром індексу). Це означає $b, що $trueтут буде встановлено, коли ми перейдемо до елемента, який слід наростити. Крім того, це буде $trueв кожній наступній ітерації, тому що умовне значення - -ord з його поточним значенням.
    3. $bперетворюється в число за допомогою unary +( $false=> 0, $true=> 1), потім додається до поточного елемента версії, $_який є a [string], але PowerShell завжди намагається зв'язати аргумент праворуч на тип зліва, тому арифметика буде виконуватися, не рядкове з'єднання. Тоді ця величина буде помножена на $m, що все ще є, [bool]але буде неявно з'єднана.
  2. Повторно приєднайтеся до отриманого масиву за допомогою ..

Отже, перша ітерація, де $bстає $true, $bбула б $falseтоді, коли $mїї оцінили, зробивши $mрівну $true, що дозволить утримати множник на1 .

Під час цього запуску $bстає $trueі додається до елемента версії (as 1), тим самим збільшуючи його, а оскільки множник все ще є 1, то це буде кінцевим результатом.

Тож на наступній ітерації $bвже буде $true, роблячи $mрівним $false, що зробить множник 0. Оскільки $bвін назавжди буде $trueзараз, множник завжди буде 0, тому кожен повернутий елемент буде 0теж.


2

R, 100 95 92 86 байт

Незвично для R для цього використовується 0-індексація. Анонімна функція з двома аргументами (рядок і ціле число). Ймовірно, можна пограти в гольф.

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

2

05AB1E , 22 байти

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

Спробуйте в Інтернеті!

Я не знаю, як це робити в 05AB1E, тому це довше, ніж має бути.


1
Якщо я не розумію, я не думаю, що це працює. Питання каже , що ви повинні 0-з мінорних версій, тому 1.0.0.0.3, 3слід проводити 1.0.0.1.0НЕ 1.0.0.1.3.
LambdaBeta

@LambdaBeta неправильно прочитано, виправлено.
Чарівна урва восьминога

2

Сценарій кави: 77 67 байт

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

Вуто! Час торта та кави для бета-релізу.

Завдяки @ven та @Cyoce я поголив 10 байт!


Приємно! Не впевнений, що вам тут потрібен розбір?
Вен

До речі, ви можете зберегти два байти, використовуючи бездітні дзвінки (тобто .join '.'або .split '.')
Вен

Використовуйте +замість parseInt(використовуйте, ~~якщо вам потрібно, щоб було
передано

2

Пітон 3, 89 86 байт

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

дуже наївний спосіб зробити справи

Редагувати: переписати умовне, посилаючись на @kade


2

PHP, 81 байт

жахливо довго. Принаймні: Елефант все ще б’є Пітона.

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

цикли через перший аргумент, розділений крапками: "."[!$i]порожній для першого та крапка для кожного іншого елемента; ($i<=$n)і ($i==$n)неявно переносяться на цілі 0чи 1арифметичні числа.


2

JavaScript (ES6), 57 55 байт

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

Приклади:

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))

Не найкраща реалізація JS, але вона досить проста і слідує логіці, яку ви очікували.


Гаразд, це було не дуже зрозуміло, дякую.
Флорі


1

Powershell, 80 100 95 92 байт

Збережено 5 байтів, використовуючи const для -1..if

Збережено 3 байти, використовуючи !$bзамість$b-eq0

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

Пояснення:

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
}

Випробування:

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.

Приємно! Я люблю бачити тут більше повноважень.
британіст

@briantist чесно легка некомпільована версія C #, яка може взаємодіяти з усім, є знахідкою, я маю справу з багатьма матеріалами Microsoft на роботі і абсолютно люблю це.
colsw

О, абсолютно; PowerShell - це моє повидло, але не багато людей думають використовувати його для гольфу. У нього є деякі особливості, які чудово підходять для гольфу, а також інші, які роблять його смоктанням для гольфу, але в цілому це надійний вибір! Я граю з ідеєю зробити презентацію про гольф в PowerShell на своєму наступному PSUG.
брианіст

@briantist псевдоніми за замовчуванням прекрасні, але я хотів би мати можливість використовувати попередньо визначений набір декількох загальних команд як одиночні псевдоніми f для гольфу, якщо сказати, що він міг би конкурувати з деякими мовами гольфу, якщо ми можемо використовувати rзамістьrandom
colsw

Смішно про те random, що це не псевдонім! Це результат оцінки команди PowerShell. Оскільки, схоже, знайти команду в псевдонімах, функціях, командлетах, нативних програмах тощо, саме останнє, що вона намагається зробити, - це Get-передбачити все, що вона є. Отже, ви насправді телефонуєте Get-Random, але технічно не як псевдонім. Ви можете побачити цю роботу, запустивши service, або childitem, або для максимальної іронії alias.
британіст

1

Objective-C 531 байт

#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;}

скласти:

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

використання:

./main 1.2.3 1

Ласкаво просимо до CodeGolf. У заголовку слід вказати розмір вихідного коду, а не байт-код. І джерело, звичайно, має бути якомога короткішим (без зайвих пробілів, назв змінних одиночних символів тощо). Щасти.
Тит

можливо, можна використовувати 0замість NULLта видалити return 0;кінець головного. NSString *sможливо, буде видалено простір. **argvна 1 байт коротше *argv[]. @autoreleasepool{}ймовірно, непотрібне.
Вен

1

Javascript ES6: 60 байт

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

2
Ласкаво просимо до PPCG! Це здається неправдивим, оскільки воно ні в якому разі не приймає вклад, а }в кінці є додаткове . На гольфі: одна з особливостей функцій стрілки мається на увазі повернення, так що ви можете замінити (n,r)=>{return r>i?n=0:n}з , (n,r)=>r>i?n=0:nщоб заощадити кілька байт.
ETHproductions

1

R, 75 байт

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

Індексація базується на 1. Ви можете грати з ним онлайн тут .


1

APL (Діалог) , 31 байт

Потрібен ⎕IO←0( I ndex O rigin 0), який є типовим для багатьох систем. Повний орган програми; запити для введення тексту (версія), а потім числового введення (індекс).

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

Спробуйте в Інтернеті!

 підказка для введення тексту

'.'⎕VFIУ erify і Р їй I Nput використовуючи період як роздільник полів (закон полів полів значення)

 реверс (щоб поставити значення спереду)

 вибрати перший (значення)

⎕(... ) застосувати до цього таку негласну функцію, використовуючи оцінений вхід як лівий аргумент:

Для пояснення негласних еквівалентів кожної програми функції ми зараз використаємо для позначення лівого аргументу (індексу) та для позначення правого аргументу (список окремих номерів початково введеного номера поточної версії).

 еквівалент  (⍺⊃⍵) використовувати для вибору елемента

1+ додати до цього 

↑, еквівалентно  номерам (⍺↑⍵), препендії, узятим з

⊢∘≢↑ еквівалентний  (⍺⊢∘≢⍵)↑ еквіваленту, щоб  (≢⍵)↑ взяти стільки чисел від числа, скільки є елементів , засипавши нулями, якщо потрібно

 формат (укажіть один пробіл між кожним номером)

' '⎕R'.' PCRE R замінює проміжки з періодами


1

Java 8, 130 байт

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;}

Пояснення:

Спробуйте тут.

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 байти

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

-1 байт завдяки @ ASCII!

Старе пояснення:

(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

Ще одна відповідь ... Не те, що в LiveScript ніхто не займається гольфуванням. : P

Я працював над іншою версією:

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

Але *занадто перевантажений, щоб його розпізнати в індексі сплайсінгу, тому =0спробуємо отримати доступ 0[0]. Тому потрібно написати щось на кшталт, ..[b to ..length- b]=[0]*(..length-1-b)і це зрештою довше.


1
на жаль, f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.це довше :(
ASCII-тільки

@ ASCII - тільки я думаю, що можна стиснути if i<b then e else if i>b then 0 else+e+1тобто, [+e+1;0;e;e][i>b+(2*i<b)]або щось за цими лініями, можливо, навіть([+e;-1][i>b+(2*i<b)]||e-1)+1
Вересень

(a,b)->(for e,i in a/\.<newline> [+e+1;0;e][(i>b)+2*(i<b)])*\., 54
лише для ASCII

Тоді знімемо підпис: ->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\.для 52
Вн

btw ви можете замінити ;пробілом. також ... виглядає, що це в основному настільки далеко, наскільки це піде з таким підходом
лише ASCII

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.