Длина строки с использованием теории множеств


20

Из Википедии Теоретико-множественное определение натуральных чисел

Множество N натуральных чисел определяется как наименьшее множество, содержащее 0 и замкнутое по преемственной функции S, определенной как S (n) = n ∪ {n}.

Первые несколько чисел, определенных таким образом: 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}}, 3 = {0,1,2 знак равно

Используя это определение натуральных чисел, посчитайте длину строки.

Введите строку символов из a-zA-Z любой длины

Вывести длину строки в заданной нотации без разделителей

Примеры

Введите пустую строку

Выход {}

Ввод

Выход {{}}

Вход аааа

Выходные данные {{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}

Для читабельности вывода «аааа» с разделителями

{ 
    {} 
    {{}} 
    {{} {{}} } 
    {{}   {{}}   {{} {{} } }   }
}

условия

  1. В коде не должно быть цифр от 0 до 9;
  2. Не использовать преобразование кодов символов для генерации чисел;
  3. Не использовать + - * / для арифметических вычислений, включая увеличение и уменьшение;
  4. Никаких математических операций, кроме логической логики;
  5. Входная строка не учитывается при определении длины байта;

Победитель Наименьшая длина кода в байтах.

Поскольку это мой первый вопрос, я надеюсь, что разъяснил его достаточно четко и строго. Дружеский совет принят.


Хм, вы можете реализовать рекурсивное определение без вызова f(n-1)?
Мартин Эндер

1
У меня есть решение (неоптимальное с точки зрения длины байта), которое не использует рекурсию. Если A является массивом, то A.pop (); f (A) является рекурсивным.
jing3142

Неплохо подмечено.
Мартин Эндер

1
@ jing3142 Спасибо за реализацию решения самостоятельно, чтобы убедиться, что это возможно. +1 за отличный вопрос.
Кайл Стрэнд,

Что означает ограничение для a-zA-Z? Должны ли мы обнаружить пробелы / руби? или мы должны просто ожидать этого и сообщать длину строки, относящиеся к содержанию?
VX

Ответы:


7

GolfScript ( 18 17 байт)

'{'\{;.'}'++}/'}'

Принимает данные в стеке (поэтому, если запущен как программа, через stdin). Оставляет вывод в виде двух строк в стеке (поэтому при запуске в виде программы правильный вывод отправляется на стандартный вывод).

Чтобы оставить одну строку в стеке, либо добавьте +к concat, либо используйте альтернативный

'{}'\{;.);\'}'++}/

рассечение

# Stack: input-str
'{'\
# Stack: <0< input-str  where <0< means the string representing 0 without its final }
# Loop over each character of the input string
{
    # Stack: <n< char
    # Discard the input character
    ;
    # Concatenate two copies of <n< and a }
    .'}'++
}/
# Push the final } to the stack
'}'

Альтернатива:

# Stack: input-str
'{}'\
# Stack: <0> input-str  (where <0> means the string representing 0)
# Loop over each character of the input string
{
    # Stack: <n> char
    # Discard the input character
    ;
    # Duplicate <n> and remove the final '}'
    .);
    # Stack manipulations
    \'}'
    # Stack: <n>-less-final-'}' <n> '}'
    # Concatenate the three strings to get <n+1>
    ++
}/

Влияние ограничений

Если бы было разрешено уменьшение, это позволило бы 15-байтовое решение

'{}'\{;..,(/*}/

12

Функция Haskell, 35 34 персонажа

f[]="{}";f(_:x)='{':f x++tail(f x)

Программа на Haskell с жестко закодированным вводом, 48 или 49 47 или 48 символов

 f[]="{}";f(_:x)='{':f x++tail(f x);main=print$f"aaaa"

(47 символов, если вы не возражаете против дополнительных кавычек вокруг вывода; если вы это делаете, используйте putStrвместо print48 символов)

Программа на Haskell, 51 50 персонажей

f[]="{}";f(_:x)='{':f x++tail(f x);main=interact f

Если вы в порядке с обратным порядком, поскольку это набор, вы можете использовать: f [] = "{}"; f (_: x) = '{': f x ++ (tail.f) x, чтобы сохранить персонаж.
Исаак

@isaacg Хороший. ОП должен сказать нам, если он возражает, хотя.
Джон Дворак

Поскольку его установленный порядок не имеет значения, предложение
@isaacg

5

Python 3 - 64

o=['{}']
for a in input():o+=['{'+''.join(o)+'}']
print(o.pop())

Если допускается вкладывание:

Python 2 - 54

o=['{}']
for a in'whatever':o+=['{'+''.join(o)+'}']
print o.pop()

Не является ли raw-input () методом ввода, а не самой строкой ввода. Не будучи знакомым с диапазоном возможных языков, я запрещал длину строки, если в коде было необходимо что-то вроде w = 'aaaaaaaaaaaa'. Извините, если не ясно. Любая помощь в переформулировании вопроса принята.
jing3142

Понимаю. Я перепишу свой код соответственно. В целом, однако, я думаю, что вы должны просто оставить эту строку. По сути, каждый язык имеет систему ввода / вывода.
Исаак

Вы можете сохранить символ, используя o[-1]вместоo.pop()
aland

1
Msgstr "В коде нет цифр от 0 до 9;"
Исаак

1
Странный символ - сохранение для первого: инициализация o=[], которая делается o=['{}']после одного шага, и удлинение ввода на единицу путем замены его на '_'+input(), сокращая пространство после in.
xnor

3

Javascript 70 (символы)

s='';c=prompt().split('');while(c.pop()){s+='{'+s+'}'}alert('{'+s+'}')

Это было мое усилие, прежде чем задавать вопрос. Я предположил бы, что кто-то с большим знанием Javascript, чем я, вероятно, сможет победить его.

Спасибо Ян Дворак и Питер Тейлор за дальнейшие сокращения

сейчас 62

s='{';c=prompt().split('');while(c.pop())s+=s+'}';alert(s+'}')

а сейчас 61

s='{';for(c=prompt().split('');c.pop();)s+=s+'}';alert(s+'}')

Объяснение оригинального кода

установить s, чтобы быть пустым

введите строку в c и разбить на массив

в то время как можно использовать pop () для символа c и сбросить s = s {s} в качестве преемника

выходной ток с, но нужно окружить с помощью установленных скобок.


Вам не нужны фигурные скобки после while(сохраняет один символ).
Джон Дворжак

1
Существует 7-символьное сохранение без каких-либо дополнительных знаний JS: инициализируйте s='{'и отбросьте два '{'+. (Это ведет себя как мое решение GS). Существует еще одно сохранение в 1 символ с использованием forвместо whileодной из двух инициализаций инициализации цикла for и ее вытягиванием.
Питер Тейлор

@ Питер-Тейлор не уверен, как вы хотите подать заявку на петлю. Я только когда-либо использовал это для подсчета.
jing3142

3
for(a;b;c){d}прямо эквивалентно a;while(b){d;c}большинству языков, которые имеют оба. Таким образом, хотя значение for(;b;)идентично while(b)значению и количеству символов, оно for(a;b;)сохраняет один символ a;while(b)и фактически одинаково.
Питер Тейлор

@ peter-taylor +1 для очень ясного и краткого объяснения в комментарии
jing3142

3

J - 22 20 символов

'{','}' '{'&(,,~)~#

Как это можно получить:

   #'123'                      NB. string length
3
   'Left' (,,~) 'Right'        NB. dyad to concat L,R,R
LeftRightRight
   '{' (,,~) '}'               NB. using braces
{}}
   '{'&(,,~) '}'               NB. bind left argument, now it's a monad
{}}
   '{'&(,,~) '{'&(,,~) '}'     NB. twice
{{}}{}}
   '{'&(,,~)^:2 '}'            NB. ^: is monad functional power
{{}}{}}
   '{'&(,,~)^:3 '}'            NB. any integer
{{{}}{}}{{}}{}}
   3 '{'&(,,~) '}'             NB. convenient feature of dyadic &
{{{}}{}}{{}}{}}
   '}' '{'&(,,~)~ 3            NB. swap argument order
{{{}}{}}{{}}{}}
   '}' '{'&(,,~)~ #'123'       NB. using string length
{{{}}{}}{{}}{}}
   '{', '}' '{'&(,,~)~ #'123'  NB. add final brace
{{{{}}{}}{{}}{}}
   ('{','}' '{'&(,,~)~#) '123' NB. works as a verb
{{{{}}{}}{{}}{}}

В качестве альтернативы, это может быть написано '{','{'&(,,~)&'}'@# , что означает то же самое.

Использование:

   '{','}' '{'&(,,~)~# 'aaaa'
{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}
   f =: '{','}' '{'&(,,~)~#  NB. can be assigned to a function
   f 'VeryBig'
{{{{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}

2

Хаскель - 35 символов

g[]="{}";g(_:x)=(init.g)x++g x++"}"

Решение под влиянием решения Яна Дворака, но без изменения порядка.


2

Скала, 64 символа

def f(s:String):String=s"{${s.tails.toSeq.tail.map(f)mkString}}"

Обратите внимание на двойные роли, которые и скобки и sиграют в этом коде.

РЕДАКТИРОВАТЬ: убрал цифру


В коде есть цифра
jing3142

@ jing3142 Упс. Уже нет.
Karol S

2

Питон 3 (44)

s='{'
for _ in input():s+=s+'}'
print(s+'}')

На каждом шаге s- строка, представляющая набор с }удаленным финалом . Мы создаем набор, представляющий n+1набор, представляющий nчерез отношение f (n + 1) = f (n) ∪ {f (n)}. Чтобы реализовать объединение со строками, мы добавляем строку для {f (n)}, что в точности совпадает sс }возвращенным финалом , и пренебрегаем включением финала }в результат. Наконец, мы добавляем финал '}'перед печатью.

Если я могу жестко закодировать строку, количество символов сокращается до 35 символов, переключаясь на Python 2, чтобы сохранить парантезы в print.

s='{'
for _ in'string':s+=s+'}'
print s+'}'

Может быть способ сэкономить место после print, выполнив что-то вроде print'{'+sобратного s, но это портит +=добавление справа.


2

gs2, 12 байт

7b 7d 05 27 a0 42 30 30 e4 43 2e 32

мнемоника:

"{}"
right-uncons @0 swap + + b5
rot length times

1

Mathematica, 115 знаков

StringReplace[ToString@Function[s,NestWhile[#~Append~#&,{},(s~Read~Character//StringQ)&]]@StringToStream@"test",", "->""]

Полный код, как показано, имеет 121 символ, но 6 из них используются для входной строки ( "test"), которая, согласно правилам, не считается.

Без требования об отсутствии разделителей длина кода может быть дополнительно уменьшена на 24 символа; без явного преобразования в строку можно удалить еще 9 символов.


1
Я думал, что устраняя необходимость в разделителях, которые обычно требуются в наборах обозначений, я помогал уменьшить размер кода. Поэтому, если их использовать, вы уменьшите размер кода и используйте их.
jing3142

1

Руби, 27 лет, вид измены

a=*a
gets.chars{a=*a,a}
p a

Сомнительные вещи:

  1. Выход выглядит как [[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
  2. Большинство методов ввода в ruby ​​включают в себя завершающий перевод строки, который увеличивает счет на 1.

1
Это должно быть совершенно законно, если вы inspectвручную массив и trрезультат.
Джон Дворак

1

Чистый Баш, 54

f()([ $@ ]&&(a=`f ${@%?}`
echo $a{$a}))
echo {`f $@`}

Выход:

$ ./strlenset.sh
{}
$ ./strlenset.sh a
{{}}
$ ./strlenset.sh aa
{{} {{}}}
$ ./strlenset.sh aaa
{{} {{}} {{} {{}}}}
$ ./strlenset.sh aaaa
{{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}
$ 

1

Юлия 43

f(z)="{"foldl((x,y)->"$x{$x}","",{z...})"}"

Конструкция {z ...} расширяет строку z в массив. Fold циклически перебирает все элементы массива, игнорируя его содержимое и собирая его из пустой строки. Функция сложения доступна в Julia 0.30.

Пример вывода

julia> f("")
"{}"
julia> f("aa")
"{{}{{}}}"
julia> f("aaaa")
"{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}"
julia> f("aaaaaa")
"{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}"


1

Mathematica, 45 57 48 байтов

"{"~~Fold[#~~"{"~~#~~"}"&,"",Characters@#]~~"}"&

36-байтовое решение:

Fold[{##{##}}&@@#&,{},Characters@#]&

Тем не менее, он использует некоторые арифметические расчеты.


0

Delphi XE3 (264)

Хорошо, я даже не подхожу близко к другому, но это было весело делать :)
Наверное, обдумывать это. Посмотрим, есть ли лучший способ сделать это.

Golfed

uses System.SysUtils;var s,f:string;a:TArray<char>;b:TArray<string>;i,x:integer;begin readln(s);a:=s.ToCharArray;f:='{';setlength(b,Length(a));for I:=Low(a)to High(a) do begin s:='{';for x:=Low(b)to High(b)do s:=s+b[x];b[i]:=s+'}';f:=f+b[i];end;writeln(f+'}');end.

Ungolfed

uses
  System.SysUtils;
var
  s,f:string;
  a:TArray<char>;
  b:TArray<string>;
  i,x:integer;
begin
    readln(s);
    a:=s.ToCharArray;
    f:='{';
    setlength(b,Length(a));
    for I:=Low(a)to High(a) do
    begin
      s:='{';
      for x:=Low(b)to High(b)do
        s:=s+b[x];
      b[i]:=s+'}';
      f:=f+b[i];
    end;
    writeln(f+'}');
end.

Результаты тестирования

Протестированные строки длиной 0..10

{}
{{} }
{{} {{}} }
{{} {{}} {{}{{}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}}}} }

Спасибо за попытку. В моем разуме я рассматривал длину как математическую операцию, так как она возвращает число, а также использование цикла for, который включает в себя подсчет.
jing3142

0

Perl 5: 33 персонажа

Не совсем понятно, какие символы я должен считать частью решения. Вероятно, не та echo ... |часть, потому что она просто используется для подачи строки в stdin. Вероятно, не имя бинарного файла perl, потому что вы можете переименовать его как хотите.

Итак, я посчитал, что переключатели командной строки переданы в perl, кавычки обернуты вокруг кода Perl и самого кода Perl.

#                                1         2         3
#                     12  3456789012345678901234567890123
$ echo "aaaa" | perl -ple'$s.="{$s}"while s/.//;$_="{$s}"'

Также связанные .


1
Вы должны считаться plстандартным, но вы получите -eи кавычки вокруг кода бесплатно. Ссылка
Питер Тейлор

0

Perl 6: 37 символов

say ({"\{@_.join()\}"}...*)["(input string)".chars]

или из STDIN:

say ({"\{@_.join()\}"}...*)[get.chars]

{"\{@_.join()\}"}...*делает ленивый список установленных форм натуральных чисел, и мы просто берем тот, который нам нужен get.chars.

Ленивый список может быть написан более читабельно:

-> *@prev { '{'~ @prev.join ~'}' } ... *

Который читается довольно похоже на определение.


0

Дротик: 85 символов

a(p,i)=>(--i).isNegative?p:a("$p{$p}",i);
main(s){print("{${a("",s.first.length)}}");}

(с дополнительной новой строкой для удобства чтения).

Требование не использовать «0» действительно кусает, иначе .firstбыло бы [0]и (..).isNegativeбудет ..<0.



0

Javascript, 171 149 147 142 байта

(Скорее всего будет дальше в гольфе)

. П = строки () дробление ( ""), потому что (а = []; n.pop ();) a.push (a.slice ()); предупреждение (JSON.stringify ({а: а}) [ R = "заменить"] (/ [^ \ [\]] / г "") [R] (/ \ [/ г, "{") [R] (/ \] / г, "}")) ;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.