Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
commodore.gen.trCommodoreCommodore YazılımC64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Sayfa: 1 ... 10 11 [12] 13 14 ... 30   Aşağı git
Yazdır
Gönderen Konu: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü  (Okunma Sayısı 237827 defa)
0 Üye ve 2 Ziyaretçi konuyu incelemekte.
emarti
Uzman
*****
Mesaj Sayısı: 2.592


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #165 : Mayıs 14, 2017, 11:21:07 ÖÖ »

@emartı: Neredeyse en kısa kodu ASM ile yazacaksın. Yalnız algoritmada ufak bir eksiklik var.

Eğer ilk isimle soyad arasından birden fazla isim varsa hepsini döndürmeli.

COMMODORE AMIGA COMPUTER BASIC ASM girdisi için
AMIGA COMPUTER BASIC döndürmesi lazım.
Hmmm sorudaki ikinci isim beni yanılttı sanırım. ilk isim ve soyad hariç yani. @wizofwor bu nasıl ikinci isim bari ikinci isimler diye belirtseydin 
Logged

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB | https://c64kernal.com Genesis

READY.
SYS(64767): EMARTI
emarti
Uzman
*****
Mesaj Sayısı: 2.592


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #166 : Mayıs 14, 2017, 11:50:14 ÖÖ »

ikinci isimler basic && asm kodlarım
Kod:
0 for x=0to54:readd:poke828+x,d:next:sys828
1 data 169,63,32,210,255,160,0,32
2 data 207,255,201,32,240,2,208,247
3 data 32,207,255,153,115,3,200,201
4 data 32,240,20,201,13,208,241,172
5 data 113,3,169,0,153,115,3,160
6 data 3,169,114,32,30,171,96,140
7 data 113,3,76,76,3,0,13

Kod:
*=$033C

start
        LDA #$3F         ; ?
        JSR $FFD2
       
        LDY #$00         ; input
L2      JSR $FFCF
        CMP #$20         ; ilk space ikinci ada geçiş
        BEQ L3
        BNE L2
L3      JSR $FFCF
        STA name+1,Y     ; ikinci ad saklamaya başla
        INY
        CMP #$20         ; ikinci space ile saklamayı bitir
        BEQ KONUMY
        CMP #$0D         ; return bekle
        BNE L3
       
        LDY SAKLAY
        LDA #$00         ; $AB1E'den dolayı dizi $00 ile bitmeli
        STA name+1,Y
        LDY #>name
        LDA #<name
        JSR $AB1E        ; yazdır
        RTS

KONUMY  STY SAKLAY       ; space ile Y sakla
        JMP L3

SAKLAY  BYTE $00
name    BYTE $0D

Logged

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB | https://c64kernal.com Genesis

READY.
SYS(64767): EMARTI
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #167 : Mayıs 14, 2017, 17:18:51 ÖS »

Henüz kendim kurcalamadım ama ilk optimizasyonu yazayım buraya.

Kod:
1 inputa$:fori=1to81:ifmid$(a$,i,1)=" "thena=a-(a=0)*i:b=i
2 next:printmid$(a$,a,b-a)

String length almaya gerek yok. Max input buffer 80 karakter zaten. Bırak sonuna kadar scan etsin.
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #168 : Mayıs 14, 2017, 17:39:20 ÖS »

Kendi çözümüm.

82 byte with exit

Kod:
0 inputa$
1 i=i+1:c=peek(512+i):ifc=32thenb=b+1
2 ifb=1thenprintchr$(c);
3 ifb<2then1

77 byte infinite loop

Kod:
0 inputa$
1 i=i+1:c=peek(512+i):ifc=32thenb=b+1
2 ifb=1thenprintchr$(c);
3 goto1
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #169 : Mayıs 14, 2017, 17:40:58 ÖS »

"Eğer ilk isimle soyad arasından birden fazla isim varsa hepsini döndürmeli." lafını şimdi fark ettim. Baştan düzgün açıklayacaktın be kardeşim.
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #170 : Mayıs 14, 2017, 18:01:29 ÖS »

Şu optimizasyon bir versiyon olarak dursun, bir şeyler deniyorum.

82 byte

Kod:
1 inputa$:fori=1to81:ifpeek(510+i)=32thena=a-(a=0)*i:b=i
2 next:printmid$(a$,a,b-a)
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #171 : Mayıs 14, 2017, 19:01:24 ÖS »

Henüz arzu ettiğim kıvamda değil ama;

81 byte

Kod:
0 inputa$:fori=1to81:ifpeek(511+i)=32thenprintmid$(a$,a+1,(a>0)*(a-i));:a=i
1 next
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #172 : Mayıs 14, 2017, 19:32:08 ÖS »

Input buffera sığacak hale getirdim, 80 byte. Ama denediğim en az 5 yöntem hüsranla sonuçlandı.

Kod:
0 inputa$:fori=1to81:ifpeek(511+i)=32thenprintmid$(a$,a+1,(a>0)*-i-a);:a=i
1 next
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #173 : Mayıs 14, 2017, 21:41:34 ÖS »

@skate, senin input buffer tatktiğin aklıma gelmişti ama nedense ben onu 10byte lık klavye bufferı diye düşünüp, 10 karakter üzerinde çalışmaz diye doğrudan es geçtim. Şimdi bu gözle bir daha bakim diyecem de sen yapılabilecek herşeyi yapmışsındır...
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #174 : Mayıs 14, 2017, 22:02:52 ÖS »

@skate,
len'e gerek yok diyorsun ama başıma şu geldi.
yeni resetlenmiş makinada önce 12 34 56 78 denedim, düzgün çalıştı.
Sonra örneğin 45 67 denedim, patladı...
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #175 : Mayıs 14, 2017, 23:16:06 ÖS »

45 67 valid input sayılır mı? ortada en az bir kelime bulunması gerekmiyor mu? ortada bir kelime bulunduğu sürece düzgün çalışıyor. önceki yarışma sorularında da inputun düzgün olacağı varsayımı vardı.
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #176 : Mayıs 14, 2017, 23:16:51 ÖS »

şimdi baktım "haluk levent :" örneklerin arasında varmış, o zaman doğru tespit.
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #177 : Mayıs 14, 2017, 23:23:36 ÖS »

Bu durumda 82 byte'a geri dönüyoruz. Ancak hala len kullanmamakta kararlıyım. len kaka, çok ekstra karakter harcıyor.

Kod:
0 inputa$:fori=1to81:ifmid$(a$,i,1)=" "thenprintmid$(a$,a+1,(a>0)*-i-a);:a=i
1 next

Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #178 : Mayıs 14, 2017, 23:50:46 ÖS »

Şu mid$'a da ben gıcığım. string değişkenin karakterlerine dogrudan indexle erişmenin kısa yolnu bulsana. Pascaldaki s[ i ] gibi... Bu string değişkenler hafızada nerede duruyor? Sabit mi ki?
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #179 : Mayıs 14, 2017, 23:55:33 ÖS »

C64 basic Atari ya da diğer basiclerdeki gibi stringlere özel bir memory space ayırmıyorlar. Yanlış hatırlamıyorsam basic source'unun bittiği yerin ucundan mı ne ilerliyordu, öyle saçma salak bir mantığı vardı. Yani o alana access etmeyi düşünüyorsan CBM Basic'in spastik memory allocation'ıyla cebelleşmen gerekir.

Ben daha çok hazır Basic & Kernel rutinlerini kullanmayı tercih ediyorum. Ama basic'den call etmek de zahmetli. Mesela şöyle versiyonlar var elimde ama çok daha uzun.

Kod:
0 poke188,2:inputa$:fori=1to81
1 ifpeek(511+i)=32thenpoke183,i-a:poke187,a:b=a:a=i:ifb>0thensys62917
2 next
Logged
Sayfa: 1 ... 10 11 [12] 13 14 ... 30   Yukarı git
Yazdır
Gitmek istediğiniz yer: