Çalışma Uzunluğu Kod Çözme


20

Verilen dizenin çalışma uzunluğu kod çözme işlemini gerçekleştirmek için istediğiniz dilde en kısa kodu yazın.

Dize , stdin formunda girdi olarak sağlanacaktır

CNCNCNCNCNCNCNCN

burada her biri Cyazdırılabilir herhangi bir ASCII karakteri olabilir ve her Nbiri (dahil) 1için bir rakamdır 9.

Örnek giriş:

:144,1'1

Karşılık gelen çıktı:

:4444,'

Yanıtlar:


28

Brainfuck, 34 karakter

,[>,>++++++[<-------->-]<[<.>-]<,]

5
Vay. Diğer çözümlerle rekabet edebilecek bir beyin fırtınası çözümü?
Johannes Kuhn

13

Shakespeare Programlama Dili , 406 bayt

.
Ajax,.
Ford,.
Act I:.
Scene I:.
[Enter Ajax and Ford]
Scene II:.
Ford:
Open your mind.Is sky nicer than you?If so, let us return to scene IV.
Ajax:
Open your mind.You is sum you and sum big big big big big big pig and big big big big cat!
Scene III:.
Ford:
Speak thy mind.
Ajax:
You is sum you and pig!Is you as big as zero?If so, let us return to scene II.Let us return to scene III.
Scene IV:.
[Exeunt]

Ungolfed sürümü:

The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.

Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.

Act I: In which the lengths of runs are decoded.

Scene I: A silent entrance.

[Enter Romeo and Juliet]

Scene II: In which neither Romeo nor Juliet believes the other open-minded.

Juliet:
  Open your mind. Is my mother jollier than thou? If so,
  we must proceed to scene IV.

Romeo:
  Open your mind. Thou art the sum of thyself and the sum of my good aunt and
  the difference between nothing and the quotient of the square of twice the sum
  of thy foul fat-kidneyed goat and thy death and thy evil variable!

Scene III: In which Romeo snaps and brutally insults Juliet.

Juliet:
  Speak thy mind.

Romeo:
  Thou art the sum of thyself and a hog! Art thou as rotten as nothing? If so,
  let us return to scene II. Let us return to scene III.

Scene IV: Finale.

[Exeunt]

Ben birkaç hata olan drsam94 Python SPL derleyici kullanıyorum (bu yüzden, örneğin, Open your mindyerine Open thy mindgolfed sürümünde kullanın).

Bu programı çalıştırmak için şunu kullanın:

$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'

Nasıl çalışır

SPL, programları Shakespeare oyunları gibi göstermek için tasarlanmış ezoterik bir programlama dilidir. Bunu karakterleri değişken olarak kullanarak yapar ve işlem karakterlerin birbirlerine bir şeyler söylemesi ile gerçekleştirilir.

The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.

Bu oyunun başlığı; derleyici tarafından yoksayılır.

Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.

Burada programın geri kalanında kullanılan değişkenleri bildiriyoruz. Her şey betwen ,ve .derleyici tarafından göz ardı edilir. Bu durumda, Romeokodu çözülen karakteri tutmak için kullandığımızı ve karakterin Julietçalışma uzunluğunu tutmak için kullandığımızı beyan ederiz .

Act I: In which the lengths of runs are decoded.

Burada programdaki ilk ve tek eylemi ilan ediyoruz. İşlemler ve sahneler etiketler gibidir; herhangi bir zamanda let us return to scene IIveya bunun bir varyantı kullanılarak atlanabilirler. Sadece tek bir hareket kullanıyoruz, çünkü bu bizim ihtiyaçlarımız için yeterli. Yine, derleyici arasındaki :ve arasındaki herhangi bir şey .göz ardı edilir.

Scene I: A silent entrance.

Burada ilk sahneyi ilan ediyoruz. Sahneler Romen rakamlarıyla numaralandırılmıştır: birincisi, Scene Iikincisi Scene IIvb.

[Enter Romeo and Juliet]

Bu bir sahne yönüdür; İçinde, Romeove Julietdeğişkenlerin "sahneye" gelmelerini söyleriz . Aynı anda sadece iki değişken "sahne" üzerinde olabilir; aşama, derleyicinin hangi değişkenin hangi konuşmayı ele aldığını anlayabilmesi için kullanılır. Yalnızca iki değişkenimiz olduğu için Romeo ve Juliet, program süresince sahnede kalacaklar.

Scene II: In which neither Romeo nor Juliet believes the other open-minded.

Başka bir sahne beyanı. Sahne II, başka bir çalışma uzunluğunun kodunu çözmek için atlanacaktır.

Juliet:

Bu tür bir beyan Juliet'in konuşmaya başlayacağı anlamına gelir. Bir sonraki Romeo:, sahne yönü veya sahne / eylem deklarasyonuna kadar her şey Juliet tarafından konuşulan bir satır olacak ve bu nedenle "ben" Juliet'e, "siz" / "siz Romeo'ya" varacaksınız.

Open your mind.

Bu komut STDIN içindeki tek karakterin sıra değerini saklar Romeo.

Is my mother jollier than thou?

SPL'de isimler, pozitif veya negatif olmalarına bağlı olarak 1 veya -1 olarak tercüme edilir. Bu durumda, my mother1'e çevirir. Sıfatlar (pozitif veya negatif) adlarını 2 ile çarpar.

Bu bir sorudur; İçinde Juliet my mother(AKA 1) 'in Romeo'dan "daha neşeli" olup olmadığını sorar . Karşılaştırıcılar ya less than(eğer negatif ise, gibi worse) ya da greater than(eğer pozitifse, gibi jollier) çevirirler . Bu nedenle, bu soru kaynar Is 1 greater than you?.

Bu soruyu sormamızın nedeni girdinin sonunu tespit etmektir. Değeri EOFplatforma göre değiştiğinden, ancak genellikle 1'den az olduğundan, bunu tespit etmek için kullanırız.

If so, we must proceed to scene IV.

Eğer önceki soru değerlendirilirse true, programın sonu olan IV. Aşamaya geçiyoruz. Kısacası, bir EOF tespit edersek programı sonlandırırız.

Romeo:

Şimdi Romeo'nun çizgisi: "ben" ve "siz" sırasıyla Romeo ve Juliet'e işaret ediyor.

Open your mind.

Yine, bu ifade STDIN'den tek bir karakterin sıra değerini Juliet'e koyar; bu durumda saklanan karakterin çalışma uzunluğu budur Romeo.

Thou art the sum of thyself and the sum of my good aunt and the difference 
between nothing and the quotient of the square of twice the sum of thy foul
fat-kidneyed goat and thy death and thy evil variable!

Bu çok ayrıntılı olarak gözden geçirmek için çok uzun, ama sadece bana dönüştüğü konusunda güven Juliet -= 48. Bunu yaparız çünkü Juliet bir sayının ASCII değerini tutar ve ord('0') == 48; 48 çıkarılırken, bir sayının ASCII değerinden sayının kendisine tercüme edilir.

Scene III: In which Romeo snaps and brutally insults Juliet.

Başka bir sahne beyanı. Bu kimse bizim defalarca karakter değerini yazdırmak hangi döngü içindir Romeo, Julietbazen.

Juliet:
  Speak thy mind.

Bu ifade Romeo'nun değerini bir karakter olarak yazdırmasına neden olur; yani, daha önce Romeo'da saklanan karakter değeri ne olursa olsun çıktı alınır.

Romeo:
  Thou art the sum of thyself and a hog!

Bir domuz negatif bir isimdir, yani -1'ye a hogçevirir; bu nedenle, bu ifade değerlendirir Juliet -= 1.

Art thou as rotten as nothing?

Romeo burada Juliet'in "kadar çürük" veya 0'a eşit olup olmadığını sorar.

If so, let us return to scene II.

Juliet'in değeri 0 ise, başka bir karakterin çalışma uzunluğunun kodunu çözmek için sahne II'ye geri döneriz.

Let us return to scene III.

Aksi takdirde, Romeo'nun karakterini tekrar çıkarmak için III.

Scene IV: Finale.

[Exeunt]

Bu son sahne beyanı sadece programın sonu için bir belirteçtir. [Exeunt]Sahne yönü aslında son sahneyi oluşturmak için derleyici almak gereklidir.



5

perl, 27 karakter

print<>=~s/(.)(.)/$1x$2/ger

Bu gereksiz ayrıntılı görünüyor: print<>=~s/(.)(.)/$1x$2/ger. Aynı zamanda kastettiğinizden de eminim $1x$2, tersi değil.
primo

@primo true - R bayrağını bilmiyordum ve bulamadım. Teşekkürler. Diğer kısmı gelince - üzgünüm, spec yanlış okudum. Yapabildiğim zaman değiştireceğim.
John Dvorak

BTW perlop/r olarak belgelenmiştir ve v5.14.0'a eklenmiştir
psxls

-pBayrağını kullanarak düşmenize izin verin printve <>böylece cevap basitleşecektir: -> 18 karakter -> 18s/(.)(.)/$1x$2/ge için +1 . -p
F. Hauri

4

R 67

x=strsplit(readline(),"")[[1]];cat(rep(x[c(T,F)],x[c(F,T)]),sep="")

+1 Karakterlerden tamsayılara argümanı otomatik olarak repzorlayacağına dair hiçbir fikrim yoktu times. Parlak.
plannapus

4

Python 3, 52

Python 3, iki python2 çözümümün yaklaşımlarını birleştirmeme izin veriyor.

s=input()
t=''
while s:a,b,*s=s;t+=a*int(b)
print(t)

Python 2, raw_inputPython 3 ile eşleşir input. Yani ilk satırs=input()
AMK

1
49:s=input() while s:a,b,*s=s;print(a*int(b),end='')
Cees Timmerman


3

APL (22)

,/{⍺/⍨⍎⍵}/↑T⊂⍨~⎕D∊⍨T←⍞

Açıklama:

  • T←⍞: girişi giriş T
  • T⊂⍨~⎕D∊⍨T: Trakam olmayan karakterlere bölün
  • : 2-by- N/2matrisine dönüştür
  • {⍺/⍨⍎⍵}/: matrisin ( /) her satırında /, ilk karakterin ( ) ikinci karakterin eval) ( ) ile çoğaltılması ( )
  • ,/: her satırın çıktısını bitiştir

3

Yakut, 30 bayt

gsub!(/(.)(.)/){$1*$2.to_i}

-pBayrağını çalıştırmak için 27 bayt kodu + 3 bayt :

$ ruby -p rld.rb <<< ":144,1'1"
:4444,'

2

8086 montaj, 106 98 karakter

l:
mov ah,8
int 21h
mov bl,al
int 21h
sub al,48
mov cl,al
xor ch,ch
mov al,bl
mov ah,14
p:
int 10h
loop p
jmp l

Sayılar giriş akışındaki karakterlerin önünde olsaydı, bundan iki satır (18 karakter) kesilebilir.


Gereksiz bir "mov ah, 8" kaldırıldı
Mike C

2
Derleyici bayt sayımı yerine derlenmiş bayt sayımı göndermelisiniz. Kurallar istismar FTW
arrdem

dq 21cdc38821cd08b4 d888ed30c188482c e8ebfce210cd14b453 karaktere ne dersin ? Büyük harf olmayan karakterleri nerede işlediğini görmüyorum ya da eof ...
Jason Goemaat

arrdem: İyi fikir. Onaltılık bir editörde elle bir araya getirirsem kuralları ihlal edip etmediğini merak ediyorum. Hala kodu asm kaynağından daha düşük bir seviyede doğrudan yazıyordum. :) Jason: Kurallarda EOF hakkında hiçbir şey göremiyorum. Stdin, sadece durdurmak için ctrl-c tuşlarına basın. Ayrıca neden küçük harflerle uğraşmasın ki?
Mike C

Genellikle makine kodu, gerçekten makul bir alternatif olmadığından, yorumlanmış veya derlenmiş diller için kaynak kod sayısına kıyasla bayt sayısı ile sayılır.
Joe Z.

2

GNU SED, 122 + 2 (-r)

#n
s/.*/\n&\a987654321\v\v\v\v\v\v\v\v\v/
:a
s/\n(.)(.)(.*\a.*\2.{9}(.*))/\1\n\4\3/
tb
bc
:b
s/(.)\n\v/\1\1\n/
tb
ba
:c
P

İle çalıştırmak için İhtiyaç -rbayrak
değiştirerek 110 + 2 indirgenebilir \vbasılamaz ile 0x0Bve \aile0x07


+1 ( \2.{9}harika bir fikir) muhteşem!
F. Hauri

2

C, 65 karakter

Girişi parametre olarak alır.

main(p,v)char*p,**v;{
    for(p=v[1];*p;--p[1]<49?p+=2:0)putchar(*p);
}

Ben gcc ile bu geçemiyorum: error: first parameter of 'main' (argument count) must be of type 'int'. Bir komut satırı anahtarı var mı?
Darren Stone

@DarrenStone, bu kod% 100 standart uyumlu değil. İlk parametreyi parametre olarak kullanmıyorum, bu yüzden türü önemli değil. Çoğu derleyici çok fazla umursamaz.
ugoren

Tamam teşekkürler. Golf dostu derleyicinizi kıskanıyorum! :)
Darren Stone

2

Perl, 19 18 karakter

perl -pe 's/(.)(.)/$1x$2/ge'

Komut satırındaki anahtarları saymaya ilişkin kurallar burada .


2

Dördüncü, 45 karakter

BEGIN KEY KEY 48 - 0 DO DUP EMIT LOOP 0 UNTIL

OS X'te pforth ile test edilmiştir.


2

Python, 63 62 karakter

print''.join([c*int(n)for c,n in zip(*[iter(raw_input())]*2)])

iterOrada güzel bir numara ... Sanırım onu ​​kendim kullanacağım!
boothby

2

Windows PowerShell, 55 karakter

-join((read-host)-split'(..)'|%{(""+$_[0])*(""+$_[1])})

Bunun özellikle char'dan string'e ve int'e atmalarla daha fazla golf oynayabileceği hissini alıyorum, ancak şu anda üzerinde çalışmaya devam etmek için zamanım yok.


2

C, 68 karakter

@ ugoren'in C'deki cevabı biraz daha kısadır, ancak bu cevap "dizginin stdin'de girdi olarak sağlanması" şartına uygundur .

n;main(c){for(;;){c=getchar(),n=getchar()-48;while(n--)putchar(c);}}

Bir karakteri "int" 'i bırakarak ve c ve n'yi ana parametreler olarak, diğerini ise while (1) yerine (;;) kullanarak ve son olarak iki tane daha en içteki while döngüsündeki parantezleri bırakarak tıraş edebilirsiniz.
Stuntddude

Teşekkürler, @Stuntddude! Döngü ve küme ayracı önerilerini uyguladım, ancak "main parametresi olarak c ve n bildirimi" ile uğraşıyorum. Yine de, bu 3 karakter traş etti. Şerefe.
Darren Stone

Main () bir işlev olduğundan, şu parametreleri verebilirsiniz: main(c,n){ ... }program çalıştırıldığında varsayılan olarak 1 iletilecektir.
Stuntddude

Teşekkürler @Stuntddude. Bunun farkındayım ve 1. intarg'dan faydalanabiliyorum , ama kullandığım derleyici (ler) şikayetçi error: second parameter of 'main' (argument array) must be of type 'char **'o yüzden kaçamıyorum main(c,n); Kullanmalıyım main(int c,char **n). Bir platform veya gcc şey olabilir.
Darren Stone

Derleyicim yapmamı sağlıyor n;main(c)ama etmiyor main(n,c)- yeterince iyi! :)
Darren Stone

2

Haskell, 58 56 karakter

f[]=[]
f(x:y:s)=replicate(read[y])x++f s
main=interact$f

Bir şey golf yapmak için ilk gerçek girişimim, bu yüzden muhtemelen burada yapılacak bazı iyileştirmeler var.


1
read[y]iki karakter kaydeder
MtnViewMark

@MtnViewMark Teşekkürler. Ben koydum.
Silvio Mayolo

Bunun için 57 bayt alıyorum? Sen yerini alabilir replicate x yile [1..x]>>[y]. Böylece ikinci satırınız f(x:y:s)=(['1'..y]>>[x])++f s53 bayta düşürülebilir.
Angs

2

Japt -P , 8 bayt

Karakter dizisi olarak girin, dize olarak çıktı alın.

ò crÈpY°

Dene

ò crÈpYn     :Implicit input of character array
ò            :Groups of 2
   r         :Reduce each pair
    È        :By passing them through the following function as [X,Y]
     p       :  Repeat X
      Yn     :    Y, converted to an integer, times
             :Implicitly join and output

Ah, c r e EPY!
Khuldraeseth na'Barya

@ Khuldraesethna'Barya, ò crÏ°îXçok ürkütücü bulursanız da olabilir !
Shaggy

2

Malbolge Bağlantısız (20-trit döndürme değişkeni), 4,494e6 bayt

Bu cevabın boyutu, maksimum postalanabilir program boyutunu (eh) aşıyor, bu nedenle kod GitHub veri havuzumda bulunuyor .

Nasıl çalıştırılır?

Bu zor bir kısım olabilir, çünkü saf Haskell tercümanı bunu yapmak için çağlar alacaktır. TIO'nun iyi bir Malbogle Unshackled tercümanı var, ama ne yazık ki kullanamıyorum (sınırlamalar).

Bulabildiğim en iyisi, saatte 360 ​​baytın sıkıştırmasını açarak çok iyi performans gösteren sabit 20-trit dönüş genişliği varyantı .

Tercümanı biraz daha hızlı hale getirmek için Matthias Lutter'in Malbolge Shackled yorumlayıcısından tüm kontrolleri kaldırdım.

Değiştirilmiş sürümüm yaklaşık% 6,3 daha hızlı çalışabilir.

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char* translation = "5z]&gqtyfr$(we4{WP)H-Zn,[%\\3dL+Q;>U!pJS72Fh"
        "OA1CB6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G\"i@";

typedef struct Word {
    unsigned int area;
    unsigned int high;
    unsigned int low;
} Word;

void word2string(Word w, char* s, int min_length) {
    if (!s) return;
    if (min_length < 1) min_length = 1;
    if (min_length > 20) min_length = 20;
    s[0] = (w.area%3) + '0';
    s[1] = 't';
    char tmp[20];
    int i;
    for (i=0;i<10;i++) {
        tmp[19-i] = (w.low % 3) + '0';
        w.low /= 3;
    }
    for (i=0;i<10;i++) {
        tmp[9-i] = (w.high % 3) + '0';
        w.high /= 3;
    }
    i = 0;
    while (tmp[i] == s[0] && i < 20 - min_length) i++;
    int j = 2;
    while (i < 20) {
        s[j] = tmp[i];
        i++;
        j++;
    }
    s[j] = 0;
}

unsigned int crazy_low(unsigned int a, unsigned int d){
    unsigned int crz[] = {1,0,0,1,0,2,2,2,1};
    int position = 0;
    unsigned int output = 0;
    while (position < 10){
        unsigned int i = a%3;
        unsigned int j = d%3;
        unsigned int out = crz[i+3*j];
        unsigned int multiple = 1;
        int k;
        for (k=0;k<position;k++)
            multiple *= 3;
        output += multiple*out;
        a /= 3;
        d /= 3;
        position++;
    }
    return output;
}

Word zero() {
    Word result = {0, 0, 0};
    return result;
}

Word increment(Word d) {
    d.low++;
    if (d.low >= 59049) {
        d.low = 0;
        d.high++;
        if (d.high >= 59049) {
            fprintf(stderr,"error: overflow\n");
            exit(1);
        }
    }
    return d;
}

Word decrement(Word d) {
    if (d.low == 0) {
        d.low = 59048;
        d.high--;
    }else{
        d.low--;
    }
    return d;
}

Word crazy(Word a, Word d){
    Word output;
    unsigned int crz[] = {1,0,0,1,0,2,2,2,1};
    output.area = crz[a.area+3*d.area];
    output.high = crazy_low(a.high, d.high);
    output.low = crazy_low(a.low, d.low);
    return output;
}

Word rotate_r(Word d){
    unsigned int carry_h = d.high%3;
    unsigned int carry_l = d.low%3;
    d.high = 19683 * carry_l + d.high / 3;
    d.low = 19683 * carry_h + d.low / 3;
    return d;
}

// last_initialized: if set, use to fill newly generated memory with preinitial values...
Word* ptr_to(Word** mem[], Word d, unsigned int last_initialized) {
    if ((mem[d.area])[d.high]) {
        return &(((mem[d.area])[d.high])[d.low]);
    }
    (mem[d.area])[d.high] = (Word*)malloc(59049 * sizeof(Word));
    if (!(mem[d.area])[d.high]) {
        fprintf(stderr,"error: out of memory.\n");
        exit(1);
    }
    if (last_initialized) {
        Word repitition[6];
        repitition[(last_initialized-1) % 6] =
                ((mem[0])[(last_initialized-1) / 59049])
                    [(last_initialized-1) % 59049];
        repitition[(last_initialized) % 6] =
                ((mem[0])[last_initialized / 59049])
                    [last_initialized % 59049];
        unsigned int i;
        for (i=0;i<6;i++) {
            repitition[(last_initialized+1+i) % 6] =
                    crazy(repitition[(last_initialized+i) % 6],
                        repitition[(last_initialized-1+i) % 6]);
        }
        unsigned int offset = (59049*d.high) % 6;
        i = 0;
        while (1){
            ((mem[d.area])[d.high])[i] = repitition[(i+offset)%6];
            if (i == 59048) {
                break;
            }
            i++;
        }
    }
    return &(((mem[d.area])[d.high])[d.low]);
}

unsigned int get_instruction(Word** mem[], Word c,
        unsigned int last_initialized,
        int ignore_invalid) {
    Word* instr = ptr_to(mem, c, last_initialized);
    unsigned int instruction = instr->low;
    instruction = (instruction+c.low + 59049 * c.high
            + (c.area==1?52:(c.area==2?10:0)))%94;
    return instruction;
}

int main(int argc, char* argv[]) {
    Word** memory[3];
    int i,j;
    for (i=0; i<3; i++) {
        memory[i] = (Word**)malloc(59049 * sizeof(Word*));
        if (!memory) {
            fprintf(stderr,"not enough memory.\n");
            return 1;
        }
        for (j=0; j<59049; j++) {
            (memory[i])[j] = 0;
        }
    }
    Word a, c, d;
    unsigned int result;
    FILE* file;
    if (argc < 2) {
        // read program code from STDIN
        file = stdin;
    }else{
        file = fopen(argv[1],"rb");
    }
    if (file == NULL) {
        fprintf(stderr, "File not found: %s\n",argv[1]);
        return 1;
    }
    a = zero();
    c = zero();
    d = zero();
    result = 0;
    while (!feof(file)){
        unsigned int instr;
        Word* cell = ptr_to(memory, d, 0);
        (*cell) = zero();
        result = fread(&cell->low,1,1,file);
        if (result > 1)
            return 1;
        if (result == 0 || cell->low == 0x1a || cell->low == 0x04)
            break;
        instr = (cell->low + d.low + 59049*d.high)%94;
        if (cell->low == ' ' || cell->low == '\t' || cell->low == '\r'
                || cell->low == '\n');
        else if (cell->low >= 33 && cell->low < 127 &&
                (instr == 4 || instr == 5 || instr == 23 || instr == 39
                    || instr == 40 || instr == 62 || instr == 68
                    || instr == 81)) {
            d = increment(d);
        }
    }
    if (file != stdin) {
        fclose(file);
    }
    unsigned int last_initialized = 0;
    while (1){
        *ptr_to(memory, d, 0) = crazy(*ptr_to(memory, decrement(d), 0),
                *ptr_to(memory, decrement(decrement(d)), 0));
        last_initialized = d.low + 59049*d.high;
        if (d.low == 59048) {
            break;
        }
        d = increment(d);
    }
    d = zero();

    unsigned int step = 0;
    while (1) {
        unsigned int instruction = get_instruction(memory, c,
                last_initialized, 0);
        step++;
        switch (instruction){
            case 4:
                c = *ptr_to(memory,d,last_initialized);
                break;
            case 5:
                if (!a.area) {
                    printf("%c",(char)(a.low + 59049*a.high));
                }else if (a.area == 2 && a.low == 59047
                        && a.high == 59048) {
                    printf("\n");
                }
                break;
            case 23:
                a = zero();
                a.low = getchar();
                if (a.low == EOF) {
                    a.low = 59048;
                    a.high = 59048;
                    a.area = 2;
                }else if (a.low == '\n'){
                    a.low = 59047;
                    a.high = 59048;
                    a.area = 2;
                }
                break;
            case 39:
                a = (*ptr_to(memory,d,last_initialized)
                        = rotate_r(*ptr_to(memory,d,last_initialized)));
                break;
            case 40:
                d = *ptr_to(memory,d,last_initialized);
                break;
            case 62:
                a = (*ptr_to(memory,d,last_initialized)
                        = crazy(a, *ptr_to(memory,d,last_initialized)));
                break;
            case 81:
                return 0;
            case 68:
            default:
                break;
        }

        Word* mem_c = ptr_to(memory, c, last_initialized);
        mem_c->low = translation[mem_c->low - 33];

        c = increment(c);
        d = increment(d);
    }
    return 0;
}

İşe yarıyor!

İşe yarıyor


2

05AB1E , 6 5 bayt

2ι`ÅΓ

@Grimy sayesinde -1 bayt .

Karakter listesi olarak çıktılar.

Çevrimiçi deneyin.

Çalışma uzunluğu kod çözme yerleşik olmadan eski 6 bayt cevap:

2ôε`×?

Çevrimiçi deneyin.

Açıklama:

2ι      # Uninterleave the (implicit) input-string in two parts
        #  i.e. ":144,1'3" → [":4,'","1413"]
  `     # Push both separated to the stack
   ÅΓ   # Run-length decode
        #  i.e. ":4,'" and "1413" → [":","4","4","4","4",",","'","'","'"]
        # (after which the result is output implicitly)

2ô      # Split the (implicit) input-string into parts of size 2
        #  i.e. ":144,1'3" → [":1","44",",1","'3"]
  ε     # Loop over each of these pairs:
   `    #  Push both characters separated to the stack
    ×   #  Repeat the first character the digit amount of times as string
        #   i.e. "'" and "3" → "'''"
     ?  #  And print it without trailing newline

1
2ι`ÅΓ5 bayttır. Dahili RLE bir RLE mücadelesi kazanamazsa üzücü olur.
Grimmy

@Grimy Ah, bu gerçekten daha iyi, teşekkürler! :)
Kevin Cruijssen

1

Python, 78 72 66 karakter

d = raw_input ()
print "". join ([x * int (d [i + 1]) i için i, x numaralandırılırken (d) ~ i & 1 ise))

s = raw_input ()
print "". birleştirme (i * int (j) için i, j zip (s [:: 2], s [1 :: 2]))


1

J - 24

;@(_2(<@#~".)/\])@1!:1 3

Bu sunumun amacı, ek zarfını kullanmaktır.


1

Befunge, 49 karakter

>~:25*-      v
$>\1-:v:-*68~_@
$^ ,:\_v
^      <


1

Python 2, 58

Bu, Darren Stone'un python çözümünden ilham alıyor - yineleyici kötüye kullanımı!

x=iter(raw_input())
print''.join(a*int(next(x))for a in x)

Bu benim orijinal çözümüm (60 karakter)

s=raw_input()
t=''
while s:t+=s[0]*int(s[1]);s=s[2:]
print t

Farklı bir yaklaşım 3 karakter daha uzundur:

f=lambda a,b,*x:a*int(b)+(x and f(*x)or'')
print f(raw_input())

1

Java: 285 karakter

import java.util.Scanner;public class A{public static void main(String args[]){Scanner s = new Scanner(System.in);while(s.hasNext()){String t=s.next();for(int i=0;i<t.length();i++) {for(int j=0; j<(Byte.valueOf(t.substring(i+1,i+2)));j++){System.out.print(t.substring(i,i+1));}i++;}}}}

Main yerine statik bloklar kullanın ve Java6 ile derleyin!
Fabinout


1

Boşluk, 135

LSSSLSSSSLSLSTLTSTTTSLSSSSTSSSSLTSSTLTTTTLSSSSLSLSTLTSTTTSSSTTSSSSLTSSTLSSSSLSLSLTSTLSSSTLTSSTSTSSTLTLSSLSLSSLLSSTLSLLSLLLSLSLLSSTTLLLL

(S, T, L'yi Boşluk, Sekme, Satır Besleme karakterleriyle değiştirin.)

Çevrimiçi deneyin [burada] .

Açıklama:

"assembly"      whitespace                                      stack
----------      ----------                                      -----
s:              LSS SL      ;input loop                         []
    push 0      SS SSL                                          [0]
    dup         SLS                                             [0,0]
    getc        TLTS        ;input & store char c               [0]
    rcl         TTT         ;recall c                           [c]
    dup         SLS                                             [c,c]
    push 16     SS STSSSSL                                      [c,c,16]
    sub         TSST                                            [c,c-16]
    jlt  tt     LTT TTL     ;exit if ord(c) < 16                [c]       
    push 0      SS SSL                                          [c,0]
    dup         SLS                                             [c,0,0]
    getc        TLTS        ;input & store char n               [c,0]
    rcl         TTT         ;recall n                           [c,n]
    push 48     SS STTSSSSL ;convert n to m = ord(n)-ord('0')   [c,n,48]
    sub         TSST                                            [c,m]

ss:             LSS SSL     ;inner loop outputs c, m times      [c,m]
    dup         SLS                                             [c,m,m]
    jeq  t      LTS TL      ;if m==0, stop outputting this c    [c,m]
    push 1      SS STL      ;otherwise decr m                   [c,m,1]
    sub         TSST                                            [c,m-1]
    copy 1      STS STL     ;copy c to tos                      [c,m-1,c]
    putc        TLSS        ;output this c                      [c,m-1]
    jmp  ss     LSL SSL     ;loop back to output this c again   [c,m-1]

t:              LSS TL                                          [c,m]
    pop         SLL                                             [c]
    pop         SLL                                             []
    jmp  s      LSL SL      ;loop back to get the next c,n      []

tt:             LSS TTL                                         [c]
    end         LLL         ;exit

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.