Küme Teorisini Kullanarak Dizginin Uzunluğu


20

Wikipedia'dan Doğal sayıların küme-teorik tanımı

Doğal sayı kümesi N, 0 içeren en küçük küme olarak tanımlanır ve S (n) = n ∪ {n} tarafından tanımlanan ardıl işlev S altında kapatılır.

Bu şekilde tanımlanan ilk birkaç sayı 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}}, 3 = {0,1,2 } = {{}, {{}}, {{}, {{}}}}.

Doğal sayıların bu tanımını kullanmak bir dizenin uzunluğunu sayar.

Herhangi bir uzunlukta a-zA-Z'den bir karakter dizisi girin

Çıktı ayırıcı olmayan set gösterimde dize uzunluğu

Örnekler

Giriş Boş dize

Çıktı {}

Giriş a

Çıktı {{}}

Aaaa girişi

Çıktı {{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}

Ayırıcılı 'aaaa' için okunabilirlik çıkışı:

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

Koşullar

  1. Kodda görünecek 0 ila 9 rakamları yok;
  2. Sayı üretmek için karakter kodu dönüştürme kullanılmaz;
  3. Artış ve eksiltme dahil olmak üzere aritmetik hesaplamalar için + - * / kullanılmaz;
  4. Boole Mantığı dışında hiçbir matematiksel işlem yapılmaz;
  5. Girdi dizesi bayt uzunluğunu belirlemede sayılmaz;

Kazanan Bayt cinsinden en kısa kod uzunluğu.

Bu benim ilk sorum olduğu için umarım bunu yeterince net ve titiz yaptım. Dostça tavsiye kabul edildi.


Hm, çağırmadan özyinelemeli bir tanım uygulayabilir misiniz f(n-1)?
Martin Ender

1
Özyineleme kullanmayan bir çözüm (bayt uzunluğu açısından en uygun olmayan) var. A bir dizi ise, A.pop (); f (A) özyinelemelidir.
jing3142

İyi bir noktaya değindin.
Martin Ender

1
@ jing3142 Kudos, mümkün olduğundan emin olmak için kendiniz bir çözüm uyguladığınız için. Harika bir soru için +1.
Kyle Strand

A-zA-Z kısıtlaması ne anlama geliyor? Boşluk / rubish tespit etmeli miyiz? Yoksa sadece bunu beklemeli ve içerikle ilgili olarak dizenin uzunluğunu bildirmeli miyiz?
VX

Yanıtlar:


7

GolfScript ( 18 17 bayt)

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

Yığına girdi alır (böylece bir program olarak çalıştırılırsa, stdin aracılığıyla). Çıktıyı yığın üzerinde iki dize olarak bırakır (böylece bir program olarak çalıştırılırsa, stdout'a doğru çıktı gönderilir).

Yığında tek bir dize bırakmak için ya +concat öğesine ekleyin ya da alternatifi kullanın

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

teşrih

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

Alternatif:

# 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>
    ++
}/

Kısıtlamaların etkisi

Azalmaya izin verilirse, 15 baytlık çözüme izin verir.

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

12

Haskell işlevi, 35 34 karakter

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

Sabit kod girişli Haskell programı, 48 veya 49 47 veya 48 karakter

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

(Çıktının etrafında fazladan tırnaklara aldırmazsanız 47 karakter; yaparsanız, toplam 48 karakter putStryerine kullanın print)

Haskell programı, 51 50 karakter

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

Bir küme olduğu için siparişi tersine çevirmenizde sorun yoksa, aşağıdakileri kullanabilirsiniz: f [] = "{}"; f (_: x) = '{': f x ++ (tail.f) x karakter.
isaacg

@isaacg İyi biri. OP bize zihinleri olup olmadığını anlatmalı.
John Dvorak

Onun bir dizi sipariş çok önemli değil @isaacg'ın önerisi iyi
jing3142

5

Python 3-64

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

Satır içi satıra izin verilirse:

Python 2-54

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

Raw-input () yöntemi giriş dizesinin kendisini değil. Mümkün olan dil aralığı aşina değil kod içinde w = 'aaaaaaaaaaaa' gibi bir şey gerekiyorsa dize uzunluğu izin vermiyordu. Açık değilse özür dilerim. Yeniden ifade etme sorusunda herhangi bir yardım kabul edildi.
jing3142

Anlıyorum. Kodumu buna göre yeniden yazacağım. Bununla birlikte, genel olarak, sadece bu çizgiyi bırakmanız gerektiğini düşünüyorum. Esasen her dilin bir I / O sistemi vardır.
isaacg

o[-1]o.pop()
aland

1
Msgstr "Kodda görünmesi gereken 0 ila 9 rakamları yok;"
isaacg

1
Birincisi için garip bir karakter kaydetme: Bir adımdan sonra o=[]olan başlat o=['{}'], ve yerine '_'+input()boşluk bırakarak girişi bir tane ile uzat in.
xnor

3

Javascript 70 (karakter)

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

Soruyu ayarlamadan önce bu benim çabamdı. Javascript benden daha fazla bilgiye sahip birinin muhtemelen yenebileceğini varsayarım.

Jan Dvorak ve Peter Taylor'a daha fazla indirim için teşekkür ederim

şimdi 62

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

ve şimdi 61

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

Orijinal Kodun Açıklaması

s'yi boş olarak ayarla

girdi dizesini c'ye ve bir diziye ayır

c'den bir karakteri açmak () ve ardıl olarak s = s {s} 'yi sıfırlamak mümkündür.

çıkış akımı s ancak ayarlanmış braketlerle çevrelenmesi gerekir.


Sonra parantez gerekmez while(bir karakter kaydeder).
John Dvorak

1
Daha fazla JS bilgisi olmadan 7 karakterlik bir tasarruf var: s='{'ikisini başlatın ve bırakın '{'+. (Bu daha sonra GS çözümüm gibi davranır). İki başlatma işleminden birini kullanarak ve for-döngüsü başlatmaya çekerek foryerine kullanarak 1 karakterlik bir tasarruf daha vardır while.
Peter Taylor

@ peter-taylor döngü için nasıl başvurmak istediğinizden emin değilim. Ben sadece saymak için kullandım.
jing3142

3
for(a;b;c){d}a;while(b){d;c}her ikisine de sahip olan birçok dilde doğrudan eşdeğerdir . Dolayısıyla , efekt ve karakter sayısıyla for(;b;)aynı olsa while(b)da, for(a;b;)bir karakter kaydeder a;while(b)ve aslında aynıdır.
Peter Taylor

@ peter-taylor +1 bir yorumda çok net ve kısa açıklama için
jing3142

3

J - 22 20 karakter

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

Bu nasıl türetilebilir:

   #'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
{{{{}}{}}{{}}{}}

Alternatif olarak, bu yazılabilir '{','{'&(,,~)&'}'@#, yani aynı şey.

Kullanımı:

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

2

Haskell - 35 karakter

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

Çözüm, Jan Dvorak'ın çözümünden etkilenir, ancak düzeni tersine çevirmeden.


2

Scala, 64 karakter

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

sBu kodda hem parantezin hem de oynadığı ikili rollere dikkat edin .

EDIT: bir basamak kaldırıldı



@ jing3142 Hata. Artık değil.
Karol S

2

Python 3 (44)

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

Her adımda, sfinal }kaldırılmış olarak seti temsil eden dize bulunur . F (n + 1) = f (n) ∪ {f (n)} ilişkisini n+1temsil eden kümeden temsil eden seti yaratırız n. Birliği dizelerle uygulamak için, {f (n)} dizesini tam olarak sancak son olarak }döndürülmüş olarak ekleriz }ve sonuca finali dahil etmeyi ihmal ederiz . Son olarak, '}'yazdırmadan önce bir final ekliyoruz .

Dizeyi kodlayabilirsem, karakter sayısı 35 karaktere kadar kısalır ve parantezleri kaydetmek için Python 2'ye geçer print.

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

Tersine çevrilmiş printgibi print'{'+sbir şey yaparak alandan tasarruf etmenin bir yolu olabilir s, ancak bu +=sağdaki ekleme ile karışır.


2

gs2, 12 bayt

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

hafıza geliştirme:

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

1

Mathematica, 115 karakter

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

Gösterilen kodun tamamı 121 karakterden "test"oluşuyor, ancak bunlardan 6 tanesi , kurallara göre sayılmayan giriş dizesi ( ) için kullanılıyor .

Sınırlayıcı olmaması şartı olmadan, kod uzunluğu 24 karakter daha azaltılabilir; dizeye açıkça dönüştürülmeden başka bir 9 karakter daha kaldırılabilir.


1
Genellikle set gösteriminde gerekli olan ayırıcılara olan ihtiyacın kaldırılmasının kod boyutunu azaltmaya yardımcı olduğunu düşündüm. Bu yüzden bunları kullanmak kod boyutunuzu küçültürse devam edin ve kullanın.
jing3142

1

Ruby, 27, bir tür hile

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

Şüpheli şeyler:

  1. Çıktı şuna benzer [[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
  2. Ruby'ye giriş yöntemlerinin çoğu, sayıyı 1 oranında artıran bir son satır içerir.

1
inspectDiziyi el ile trve sonuç olarak verirseniz mükemmel yasal olmalıdır .
John Dvorak

1

Saf Bash, 54

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

Çıktı:

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

1

Julia 43

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

{Z ...} yapısı z dizesini bir diziye genişletir. İçeriği görmezden gelmek ve bunun yerine boş dizeden oluşturmak için dizinin tüm öğelerinin üzerine katlanır. Foldl işlevi Julia 0.30'da kullanılabilir.

Örnek Çıktı

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


1

Mathematica, 45 57 48 bayt

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

36 baytlık bir çözüm:

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

Ancak, bazı aritmetik hesaplamalar kullanır.


0

Delphi XE3 (264)

Tamam ben bile diğer yakın gelmek değil ama yapmak eğlenceliydi :)
Muhtemelen overthinking. Bunu yapmanın daha iyi bir yolu olup olmadığına bakacağız.

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.

Test sonuçları

Test uzunluğu 0..10

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

Denediğiniz için teşekkürler. Bence uzunluğu bir sayı döndürdüğü ve saymayı içeren bir 'for' döngüsünün kullanımı gibi matematiksel bir işlem olarak görüyordum.
jing3142

0

Perl 5: 33 karakter

Çözümün bir parçası olarak hangi karakterleri saymam gerektiği net değil. Muhtemelen echo ... |kısım değil çünkü bu sadece stdin'e bir hat beslemek için kullanılır. Muhtemelen perl ikilisinin adı değil, çünkü ne istersen onu yeniden adlandırabilirsin.

Perl'e aktarılan komut satırı anahtarlarını, teklif işaretlerini Perl kodu ve Perl kodunun etrafına sarılmış saydım.

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

Ayrıca, ilgili .


1
Sen saymalısın plASTANDART olarak ama, anlamaya -eve ücretsiz olarak kod etrafında tırnak. Ref
Peter Taylor

0

Perl 6: 37 karakter

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

veya STDIN'den:

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

{"\{@_.join()\}"}...*doğal sayıların set formlarının tembel bir listesini yapar ve sadece ihtiyacımız olanı alırız get.chars.

Tembel liste daha okunabilir bir şekilde yazılabilir:

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

Hangi tanıma oldukça benzer okur.


0

Dart: 85 karakter

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

(okunabilirlik için ekstra yeni satır ile).

"0" kullanmama şartı gerçekten ısırır, aksi takdirde .firstolur [0]ve (..).isNegativeolur ..<0.


0

Pyth, 13 bayt

+u++GG\}z\{\}

Bu @ xnor'ın Python cevabının golf edilmiş Pyth eşdeğeri. Pyth'in bu sorudan daha yeni olduğuna dikkat edin, bu yüzden bu cevap bu zorluğu kazanmaya uygun değildir.

Gösteri.



0

JavaScript, 171 149 147 142 bayt

(Muhtemelen daha sonra golf oynayacak)

N. = İstemi () bölünmüş ( ""); (a = []; n.pop ();) a.push (a.slice ()); uyarısı (JSON.stringify ({a: a}) [ R '= "yerine"] (/ [^ \ [\]] / g "") üretimi [R] (/ \ [/ g "{") üretimi [R] (/ \] / g "}")) ;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.