commodore.gen.tr

Commodore => Commodore Yazılım => Konuyu başlatan: wizofwor üzerinde Nisan 22, 2017, 00:29:09 ÖÖ



Konu Başlığı: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Nisan 22, 2017, 00:29:09 ÖÖ
Uzun süredir aklımda bir programlama yarışması düzenlemek vardı. Bu güne kısmetmiş.
Karşınızda C64 BASIC Kısa Kod Yarışması kodlama yarışması.

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=14154.0;attach=20999;image)

Kurallar
1. Yarışmanın amacı sorulan soruya cevap veren en kısa programı yazmak.
2. Her hafta cuma akşamı yeni bir soru soru soracağım.
3. Cevap vermek için bir sonraki soruya kadar süreniz olacak.
4. Programlar C64 BASIC ile yazılacak. (POKE, PEEK vb. komutlar serbest.)
6. Komut kısaltmaları kullanılmayacak. (Okunabilirliği yüksek tutmak için)
5. Kaynak kodlarınız PETCAT uyumlu olacak. Kodları CBM Prg Studio'ya kopyalayarak çalıştıracağım.
6. İlk 4 soru 10 son 3 soru 20'şey puanlık olmak üzere toplamda 7 soru soracağım.
7. En kısa kodu yazan o haftaki puanın sahibi olacak.

Ödül
Elimdeki fazla olan irqHack64 kartuşlardan birini ödül olarak vermeyi düşündüm.
Yalnız elimdeki kartuşların üzerindeki arduino yazılımı güncel değil. Ben güncelleyemiyorum. Kazanan arkadaşın bu yazılımı güncellemesi gerekiyor.



İlk soru: Tek mi çift mi?
Sadece tam sayı girdiler için verilen sayının tek mi çift mi olduğunu bulan bir program yazın.
Program tek sayılar için 'TEK' çift sayılar için 'CIFT' yazmalı.

Örnekler
Kod:

Girdi: 1; Çıktı: TEK
Girdi: 2; Çıktı: CIFT


İkinci soru: Eksik rakamı bul
Tüm basamakları birbirinden farklı olmak üzere, girilen 9 karakterlik bir sayıda hanki rakamın eksik olduğunu bulan bir program yazın.

Not: Girdi olarak sadece 9 haneli ve rakamları birbirinden farklı sayılar test edilecektir.

Örnekler:
Kod:

Girdi: 123456789; Çıktı: 0
Girdi: 124560789; Çıktı: 3
Girdi: 098762345; Çıktı: 1



Üçüncü soru: n basamaklı rastgele sayı

0<n<10 olmak üzere girilen rakam için: n basamaklı, her basamağı birbirinden farklı ve sıfırla başlamayan rastgele bir sayı üretin.
Programınızın n'in koşullara uymadığı kontrol etmesine gerek yok. Üretilen rastgele sayının dağılımı önemli değil. Yani RND() fonksiyonun ürettiği sayılar yeterli.

Dördüncü soru: İkinci ismi bul

Girilen bir ismin içinden varsa ikinci ismi bulan bir program yazın.
Program ikinci isim yoksa boş değer döndürmeli.
Eğer ilk isimle soyad arasından birden fazla isim varsa hepsini döndürmeli.

Örnekler:
fatma sezen aksu : sezen
rabia demet sağıroğlu : demet
fatma yonca evcimik : yonca
haluk levent :

Not: "Pablo Diego José Francisco de Paula Juan Nepomuceno María de los Remedios Cipriano de la Santísima Trinidad Ruiz y Picasso" gibi uzun isimleri denemeyeceğim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 22, 2017, 00:45:56 ÖÖ
Ooo.. çarşı karışır :)

Performans önemli değil di mi? (İlk soruda söz konusu değil muhtemelen de)

Bence "iyi" kelimesini tariflemelisin. Tabii subjektif olarak değerlendireceksen o zaman bir şey diyemem.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Nisan 22, 2017, 01:18:00 ÖÖ
Oradaki iyi hatalı olmuş. Sadece doğru çıktıyı veren en kısa koda bakacağım. Performans önemli değil. Zaten çok ağır hesaplama gerektiren şeyler sormayacağım.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: WildLord üzerinde Nisan 22, 2017, 01:35:39 ÖÖ
Programcı değilim daha kısası ve mantıklısı nasıl olur bilemiyorum :) Ama sanırım en ilkel haliyle aşağıdaki şekilde olur.

5 input "sayi :";sayi
7 sayi$=str$(sayi/2)
9 if mid$(sayi$,len(sayi$)-1,1)="." then print "tek":end
11 print"cift"


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: AmigaMan üzerinde Nisan 22, 2017, 02:12:34 ÖÖ
Sevdim bu fikri ödüle gerek her hafta devam etsin. Odul biterse kazananın adını şampiyon ilan edin yeter.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 22, 2017, 02:27:53 ÖÖ
eminim daha kısası vardır ancak katılım sağlayalım. sorsan basic bilirim, unutmuşum :)

1 print"sayi?":inputa%:ifa%and1thenprint"tek":goto1
2 print"cift":goto1

ps1: Hediyeye talip değilim :)
ps2: Dönüp durmasın, bir defa işini yapsın denirse şu şekilde

1 print"sayi?":inputa%:ifa%and1thenprint"tek":end
2 print"cift"

ps3: print yerine soru işareti girince daha sonra listelendiğinde tekrar print'e çeviriyormuş meret. bence kısaltma kullanılmasın.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 22, 2017, 02:42:09 ÖÖ
Bu da if sevmeyenlere gelsin,

1 a$(1)="tek":a$(0)="cift":print "sayi?":inputa%:printa$(a%and1)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Simon (Özay Turay) üzerinde Nisan 22, 2017, 03:31:28 ÖÖ
@i_r_on: Seninkiler kadar kısa değil ama alternatif bir yol. ???

1 poke19,65:input"sayi:";s:y=int(s/2):t=y*2:ift=sthenprint"cift":goto1
2 print"tek":goto1


Bu arada ilk print'e ve ?'ne gerek yok

1 poke19,65:input"sayi:";a%:ifa%and1thenprint"tek":goto1
2 print"cift":goto1


ve

1 poke19,65:a$(1)="tek":a$(0)="cift":input"sayi:";a%:printa$(a%and1):goto1

şeklinde kısaltabilirsin.

Not: Hediyeye ben de talip değilim. ::)
Edit: VICE'a kopyala yapıştır yapılabilir hale getirildi. 8)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: june8efe üzerinde Nisan 22, 2017, 10:54:07 ÖÖ
hediye benimdir ;D


10 print "x"
run
x


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: WildLord üzerinde Nisan 22, 2017, 11:00:00 ÖÖ
Benim kodumda şöyle bir hata var rakam hanesi 11 basamağa ulaştığında örn. 11111111111 program sayının tek ya da çift olmasını karıştırıyor yani yuvarlama hatası yapıyor. 10 haneye kadar yuvarlama hatası yok doğru hesaplıyor. Aynı durum Simon'un ilk örneğinde de var.

i_r_on'un kodlarında bir de Simon'un son iki örneği de basamak sayısı 6 hane olduğunda ILLEGAL QUANTITY ERROR veriyor.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 22, 2017, 11:19:06 ÖÖ
@wildlord : c64 basic'te tam sayılar 16 bit signed. Yani alabilecekleri değerler -32768 ile +32767 arası..

Senin programa 700000.1 gibi bir değer ver bakalım doğru sonuç veriyor mu :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: WildLord üzerinde Nisan 22, 2017, 11:48:48 ÖÖ
Benim programımın syntax error vermemesi bile sevindirici :) Açıklama için sağol bu konu sayesinde yeni bir şeyler öğreneceğim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: skonac üzerinde Nisan 22, 2017, 11:49:54 ÖÖ
En sevdiğim :)

Kod:
1 INPUTA%:PRINTMID$("CIFTTEK ",(A%AND1)*4+1,4)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Simon (Özay Turay) üzerinde Nisan 22, 2017, 12:01:30 ÖS
@skonac: Bu zekice olmuş. ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: skonac üzerinde Nisan 22, 2017, 12:06:44 ÖS
@skonac: Bu zekice olmuş. ;)
Teşekkürler  :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Simon (Özay Turay) üzerinde Nisan 22, 2017, 12:10:57 ÖS
Kodu küçük harflerle yazarsan VICE'a yapıştırılabiliyor. ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Nisan 22, 2017, 23:04:24 ÖS
İlk soruyu ısınma sorusu olarak düşünmüştüm. Çok basit bir soru olmasına rağmen çok güzel cevaplar geldi.

Özellikle sconac'ın MID$(..,AND(),..) combinasyonu kırk yıl düşünsem aklıma gelmeyecek cinstendi. Simon senin çözümde de 16bit limitine takılmıyor rakam ne kadar büyük olursa olsun doğru çalışmaya devam ediyor.

Kodların okunabilirliği açısından i_ron'un önerisine uyarak kısaltma kullanmayalım diyorum. Kuralları da bu şekilde değiştireceğim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: juda üzerinde Nisan 22, 2017, 23:38:51 ÖS
10 print chr($)5;poke53280,0;poke53281,0;print"press ctrl to continue";wait653,4

Denemesi bedava :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Alpyre üzerinde Nisan 22, 2017, 23:53:43 ÖS
skonac alır. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: ibeser (Ayak Takımı) üzerinde Nisan 22, 2017, 23:56:23 ÖS
En sevdiğim :)

Kod:
1 INPUTA%:PRINTMID$("CIFTTEK ",(A%AND1)*4+1,4)
Tebrikler abim. Bu performansını Ankara buluşmalarında da görmek istiyoruz ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Nisan 23, 2017, 00:41:51 ÖÖ
Muhtemelen küfür yiyeceğim ama görünce yazmadan edemedim. 1 karakter daha kısası mümkün... :D

1 inputa%:printmid$("ciftek ",(a%and1)*3+1,4)

EDIT: cifttek sonrasındaki boşluk da gerekesiz bu arada. Oldu mu sana -2 byte ...

Kod:
1 inputa%:printmid$("ciftek",(a%and1)*3+1,4)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wolfiem üzerinde Nisan 23, 2017, 00:45:33 ÖÖ
Muhtemelen küfür yiyeceğim ama görünce yazmadan edemedim. 1 karakter daha kısası mümkün... :D

1 inputa%:printmid$("ciftek ", (a%and1)*3+1,4)
Hahahaa, süper :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wolfiem üzerinde Nisan 23, 2017, 00:57:06 ÖÖ
Simon senin çözümde de 16bit limitine takılmıyor rakam ne kadar büyük olursa olsun doğru çalışmaya devam ediyor.

Simon'ın çözümü 16 bit üzerindeki rakamlarda hep CIFT olarak sonuç dönüyor ::)

Skonac'ın kısa yaklaşımı üstüne delimawi'nin 1 karakterlik tunningini katarak geliştirdiğim, 255 karaktere kadar girilen tüm sayılara doğru cevap veren sürüm şöyle :D

Kod:
1 inputa$:printmid$("ciftek ",(val(mid$(a$,len(a$),1))and1)*3+1,4)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Nisan 23, 2017, 01:08:08 ÖÖ
Hiç acımam yaklaşım buysa 6 karakter keserim... :D
Kod:
1 inputa$:printmid$("ciftek ",(val(right$(a$,1))and1)*3+1,4)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 23, 2017, 01:16:25 ÖÖ
Madem girdiyi alırken string yazmıyoruz, daha önce yazdığımın biraz değişiği epey kısa :)

Kod:
1 a$(1)="tek":a$(0)="cift":inputa%:printa$(a%and1)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Nisan 23, 2017, 01:20:32 ÖÖ
Benim tune ettiğim daha kısa sanki...

Kod:
1 a$(1)="tek":a$(0)="cift":inputa%:printa$(a%and1)
1 inputa%:printmid$("ciftek",(a%and1)*3+1,4)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wolfiem üzerinde Nisan 23, 2017, 01:40:25 ÖÖ
Hiç acımam yaklaşım buysa 6 karakter keserim... :D
Kod:
1 inputa$:printmid$("ciftek ",(val(right$(a$,1))and1)*3+1,4)

Tabi ya! right$ :D

Bu arada string sınırını düşünerek 255 karaktere kadar demiştim ama az önce test ettim 20000 karakter ile bile çalışıyormuş :)
Vice'a 20000 karakterlik sayıyı copy-paste etmesi çok uzun sürüyor :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 23, 2017, 01:44:08 ÖÖ
Muhtemelen küfür yiyeceğim ama görünce yazmadan edemedim. 1 karakter daha kısası mümkün... :D

1 inputa%:printmid$("ciftek ",(a%and1)*3+1,4)

EDIT: cifttek sonrasındaki boşluk da gerekesiz bu arada. Oldu mu sana -2 byte ...

Kod:
1 inputa%:printmid$("ciftek",(a%and1)*3+1,4)

Yalnız bu kod $0000-$7FFF arası sayılar için çalışır 32767'den büyük girdi için ILLEGAL QUANTITY ERROR alır. Kod yattı :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 23, 2017, 01:56:34 ÖÖ
ben o koda kod demem, kod tek satıra sığmadıkça.

Kod:
0 inputa:printmid$("ciftek",4^(aand1),4)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Nisan 23, 2017, 01:58:22 ÖÖ
@emarti, dediğin sorunun cözümünü de wolfiem yazdı. Ama skate gelmiş bence dağılalım. Bu işi 3 byte da bitirir... İyi geceler...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Nisan 23, 2017, 01:58:59 ÖÖ
Al işte... ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 23, 2017, 02:01:34 ÖÖ
Uzun olduğunu biliyorum ama alternatif çözümüm  :P

Kod:
10 INPUT S$
20 POKE 780,VAL(RIGHT$(S$,1))
25 FOR X=0 TO 30: READ A: POKE 4099+X,A: NEXT
30 SYS 4099
40 END
1000 DATA 41,1,201,0,240
1010 DATA 8,169,25,160,16,32,30,171
1020 DATA 96,169,29,160,16,32,30,171
1030 DATA 96,84,69,75,0,67,73,70,84,0

(https://s10.postimg.org/3tvxepgqx/2017-04-23_01-59-25.png)



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Nisan 23, 2017, 02:03:37 ÖÖ
Sen de "END"in den 10 lu 1000 li satır numaralarına kadar ola ilecek en uzun nasıl yazarım diye uğraşmışsın resmen... ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 23, 2017, 02:04:35 ÖÖ
uzun sayılarla çalışsın istiyorsanız en pratik yol string olarak sayıyı girdirip, sadece son basamağını alıp kontrol etmek olacaktır.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 23, 2017, 02:06:29 ÖÖ
ben o koda kod demem, kod tek satıra sığmadıkça.

Kod:
0 inputa:printmid$("ciftek",4^(aand1),4)

32767'den büyük sayılarda ILLEGAL QUANTITY ERROR


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 23, 2017, 02:07:16 ÖÖ
Bir üstteki yorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 23, 2017, 02:07:25 ÖÖ
Sen de "END"in den 10 lu 1000 li satır numaralarına kadar ola ilecek en uzun nasıl yazarım diye uğraşmışsın resmen... ;)

END'i seviyorum BASIC'te :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 23, 2017, 02:07:41 ÖÖ
skate'in çözümü kesinlikle olayı kısaltmış ancak tam sayılar demiş soruda, o yüzden değişken a% olarak tanımlanmalı.

c64'ün basic'inde başka tam sayı yok, reel sayı input alırsınız tam sayı sonuç verirsiniz amenna :)

ps: demek istediğim şu

run
? 100.5
cift

integer tanımlarsanız zaten girdiyi kabul etmeyip baştan gir diyor (redo from start)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 23, 2017, 02:10:45 ÖÖ
skate'in çözümü kesinlikle olayı kısaltmış ancak tam sayılar demiş soruda, o yüzden değişken a% olarak tanımlanmalı.

c64'ün basic'inde başka tam sayı yok, reel sayı input alırsınız tam sayı sonuç verirsiniz amenna :)

ps: demek istediğim şu

run
? 100.5
cift

integer tanımlarsanız zaten girdiyi kabul etmeyip baştan gir diyor (redo from start)

O vakit soru iptal


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 23, 2017, 02:12:03 ÖÖ
a ile a% arasında herhangi bir davranış farkı olmaması lazım. a% ile de cift alırsın.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 23, 2017, 02:15:30 ÖÖ
a ile a% arasında herhangi bir davranış farkı olmaması lazım. a% ile de cift alırsın.

demek istediğim, tanımsız değerler için de sonuç üretmesi. 100.5 çift midir yoksa tek midir? tek/çift tam sayı değerler için tanımlıdır.

senin çözüm delimawi'nin post ettiği en kısadan daha kısa ona lafım yok :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Simon (Özay Turay) üzerinde Nisan 23, 2017, 02:17:09 ÖÖ
@wizofwor: Hay aklınla bin yaşa, çok eğlenceli bir başlık oldu. Durup durup daha kısa veya daha farklı bir yöntem kullanan var mı diye kontrol etme ihtiyacı duyuyorum. :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 23, 2017, 02:21:41 ÖÖ
@delimavi kodu tüm tam sayılarda illegal quantity error vermeden çalışıyor bence onun hakkı.

Kod:
1 inputa$:printmid$("ciftek ",(val(right$(a$,1))and1)*3+1,4)



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 23, 2017, 02:25:26 ÖÖ
@delimavi kodu tüm tam sayılarda illegal quantity error vermeden çalışıyor bence onun hakkı.

Kod:
1 inputa$:printmid$("ciftek ",(val(right$(a$,1))and1)*3+1,4)



bundaki problem şu, reel sayı girince (sallıyorum 1233.55) dağılıyor. wizofwor keşke tam sayının ötesinde tam sayı aralığını da verseydi.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 23, 2017, 02:26:47 ÖÖ
i_r_on, a% kullandığında da 100.5 için değer üretir. a% ile sen input anında casting yapıyorsun. and operatörü ise ileride otomatik casting yapıyor. sonuç her iki kodda da aynı.

uzun sayılar için çözüm isteyenler daha uzun bir koda katlanmak zorundalar.

Kod:
0 inputa$:printmid$("ciftek",4^(val(mid$(a$,len(a$)))and1),4)

ama günümüzde 64 bit mimaride de bir üst sınır var. bu yüzden 16 bit integer limitine takılmak anlamsız.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 23, 2017, 02:27:16 ÖÖ
@delimavi kodu tüm tam sayılarda illegal quantity error vermeden çalışıyor bence onun hakkı.

Kod:
1 inputa$:printmid$("ciftek ",(val(right$(a$,1))and1)*3+1,4)



bundaki problem şu, reel sayı girince (sallıyorum 1233.55) dağılıyor. wizofwor keşke tam sayının ötesinde tam sayı aralığını da verseydi.

sayı değil karakter girişinde de çift olarak algılıyor yani soruya göre zaten girdi tamsayı olmalı ondalık olmamalı.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Nisan 23, 2017, 02:28:41 ÖÖ
Alıntı
Sadece tam sayı girdiler için verilen sayının tek mi çift mi olduğunu bulan bir program yazın.
Program tek sayılar için 'TEK' çift sayılar için 'CIFT' yazmalı.

Soru sadece tam sayı girdiler için geçerli. Yani programları sadece tam sayılarla test ediyorum. Bu durumda Skate'in cevabı geçerli oluyor.

32767'den büyük sayılarda hata vermesi'de BASIC'in integer tanımından gelen bir kısıtlama olduğu için sorun değil.



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Simon (Özay Turay) üzerinde Nisan 23, 2017, 02:32:11 ÖÖ
Abi platform C64 olduğuna göre bence integer 16 bit signed'dır, bu aralıkta (-32768 ile 32767 aralığı) girilen sayıları girdiğimizde doğru sonuç dönüyorsa geçerlidir bence.

Edit: Gökhan da aynısını yazmış zaten. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 23, 2017, 02:32:31 ÖÖ
Alıntı
Sadece tam sayı girdiler için verilen sayının tek mi çift mi olduğunu bulan bir program yazın.
Program tek sayılar için 'TEK' çift sayılar için 'CIFT' yazmalı.

Soru sadece tam sayı girdiler için geçerli. Yani programları sadece tam sayılarla test ediyorum. Bu durumda Skate'in cevabı geçerli oluyor.

32767'den büyük sayılarda hata vermesi'de BASIC'in integer tanımından gelen bir kısıtlama olduğu için sorun değil.



Tam sayı C64 için 16 bit ama son kullanıcı için sonsuz. Soru o zaman 16 bitlik tamsayılarda geçerli olmak şartı ile sorulmalıydı.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Nisan 23, 2017, 02:36:50 ÖÖ
1 inputc:printmid$("21",2^(cand1),1)

Bende tek çift yazısını alıyorum ve 2 / 1 olarak değiştiriyorum (Kodun sahibine de şapka çıkarıp saygılarımı ileterek) 32767 'ye kadar çalışıyor sonrası illegal felan, kodu arakladığımızı anlıyor sanırım :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 23, 2017, 02:38:11 ÖÖ
emarti, c64'ün input buffer'ı 80 karakterdir. yani iki satırı geçemez. bu durumda kullanıcı 81 basamaklı bir sayıyı hiç bir zaman test edemez. hani bu tür detaylara takılacaksak diye söylüyorum. basic'i override edip, kendi input yöntemini kullanmaya başladığın zaman da 60k basamağı geçen sayılar hafızaya sığmayacaktır. ince düşünceyi sınırlandırmak gerekiyor anlayacağın. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 23, 2017, 02:42:05 ÖÖ
1 inputc:printmid$("21",2^(cand1),1)

Bende tek çift yazısını alıyorum ve 2 / 1 olarak değiştiriyorum (Kodun sahibine de şapka çıkarıp saygılarımı ileterek) 32767 'ye kadar çalışıyor sonrası illegal felan, kodu arakladığımızı anlıyor sanırım :)

2 / 1 yerine 1 / 0 kullansak? :)
Kod:
1 inputc:print(cand1)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Nisan 23, 2017, 02:45:19 ÖÖ
 ;D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 23, 2017, 02:50:15 ÖÖ
Şöyle diyeyim "Sadece tam sayı girdiler için" dendiği zaman şu iki şey anlanabilir,

1. Program tam sayı girdi kabul edecek
2. Program'a input her zaman tam sayı olarak verilecek.

Ben ilki gibi anlamışım. Yorum farkı.

@wizofwor : sorularda tümevarım yaparken kullanılan yöntemdeki gibi input için minimum değer, sonra gelen bir kaç değer, maksimum değer ve her biri için beklenen sonuç şeklinde belirtilirse hepimiz aynı noktada oluruz.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wolfiem üzerinde Nisan 23, 2017, 02:51:10 ÖÖ
16bit üstündeki sayılar için en kısa versiyonu da not düşelim:
Kod:
1 inputa$:printmid$("ciftek",4^(val(right$(a$,1))and1),4)

Bu yaklaşım @wizofwor @Simon'ın kodunun 16bit üzeri sayılarda çalıştığını söylediği zaman aklıma gelmişti. Sonuçta yarışma c64 üzerindeyse onun limitlerini dikkate almalıyız. Benim yaklaşım işin eğlencesi olsun. Bu turun sonuna kadar daha kısası çıkmazsa @skate bu turun galibidir bence :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 23, 2017, 02:58:07 ÖÖ
i_r_on, a% kullandığında da 100.5 için değer üretir. a% ile sen input anında casting yapıyorsun. and operatörü ise ileride otomatik casting yapıyor. sonuç her iki kodda da aynı.

uzun sayılar için çözüm isteyenler daha uzun bir koda katlanmak zorundalar.

Kod:
0 inputa$:printmid$("ciftek",4^(val(mid$(a$,len(a$)))and1),4)

ama günümüzde 64 bit mimaride de bir üst sınır var. bu yüzden 16 bit integer limitine takılmak anlamsız.

yok ben 16 bit sınırına takılmadım. wizofwor'un son açıklamasına göre zaten onun niyeti programı tam sayılarla denemekmiş. benim anladığım ise program tam sayı input kabul edecek şekildeydi.

hani 100.5 dediğinde ne çift ne de tek demesi lazım şeklinde yorumladım. bu tabii tamamen benim koda yaklaşımım ile alakalı :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Nisan 23, 2017, 02:59:10 ÖÖ
Bu turun sonuna kadar daha kısası çıkmazsa @skate bu turun galibidir bence :)
Kesinlikle katılıyorum :)

Son bir zorlama olarak:(Print listeleyince uzuyor biliyorum ama son bir ümit :D )

0 inputz:?(zand1)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 23, 2017, 03:19:40 ÖÖ
Bu turun sonuna kadar daha kısası çıkmazsa @skate bu turun galibidir bence :)
Kesinlikle katılıyorum :)

Son bir zorlama olarak:(Print listeleyince uzuyor biliyorum ama son bir ümit :D )

0 inputz:?(zand1)

Kod:
0inputz:?(zaN1)

input# sağolsun, en kısası bu. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Nisan 23, 2017, 04:21:36 ÖÖ
0inputa:?(aaN1)

evet input için iN kısaltması INPUT# ile sonuçlanıyor ve kurtarmıyor, z değişkenini a yapıyor bi daha da kodu mıncıklamıyorum. Zaten a yapmışsın b yapmışsın farketmeyecek bir değişiklik. (6 nolu kuralı da iç ettik :) )



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Oğuzhan üzerinde Nisan 23, 2017, 14:18:41 ÖS
1PRINT"TEK"
run

11 karakter :) Deneyen kişinin bir kere deneyeceği, kod içeriğini önemsemeyeceğini düşünürsek %50 ödül benim değil mi anlamadım :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 25, 2017, 13:12:15 ÖS
Kim kazandı? Ne zaman sonuçlanacak? Diğer soruya ne zaman geçilecek?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: phantom üzerinde Nisan 25, 2017, 15:36:41 ÖS
Kim kazandı? Ne zaman sonuçlanacak? Diğer soruya ne zaman geçilecek?
Bakınız ilk mesaj :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 26, 2017, 08:11:06 ÖÖ
Kim kazandı? Ne zaman sonuçlanacak? Diğer soruya ne zaman geçilecek?
Bakınız ilk mesaj :)

Sorularımın tümünün cevabı ilk mesajda yazmıyor ki...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Nisan 26, 2017, 08:43:59 ÖÖ
Bence kazanan belli ama yine de sonuçlar için Cuma akşamını beklemeniz lazım.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: skonac üzerinde Nisan 26, 2017, 10:01:12 ÖÖ
Bence katılımcılar yazdıkları kodları buradan paylaşmamalı. O zaman yarışma gibi olmuyor çünkü.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wolfiem üzerinde Nisan 26, 2017, 11:52:55 ÖÖ
Bence katılımcılar yazdıkları kodları buradan paylaşmamalı. O zaman yarışma gibi olmuyor çünkü.
Baştan ben de öyle düşünüyordum ama böyle açık olması daha eğlenceli oldu. Ayrı bir heyecan kattı sanki :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Nisan 26, 2017, 12:17:50 ÖS
Bu tip yarışmalar genelde açık düzenleniyor. Amaç birazda diğer kodları görerek kendini geliştirmek. Tabi isterseniz ilk etapta sadece (misal) 20 karakterlik bir çözümüm var deyip kodu göndermeyebilir, son dakikayı bekleyebilirsiniz.

Ufak bir not: Skate'in ikinci cevabı, hakankaptan ve oguzog'nin cevapları değerlendirme dışı oldu. Juda'nın cevabını ise hiç dahil etmedim. Zira sözdizim hatası var, sözdizim hatasını düzeltsek de sondaki WAIT komutu yanlış SPACE değil CTRL tuşunu bekliyor.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wolfiem üzerinde Nisan 26, 2017, 12:53:15 ÖS
Tabi isterseniz ilk etapta sadece (misal) 20 karakterlik bir çözümüm var deyip kodu göndermeyebilir, son dakikayı bekleyebilirsiniz.

Evet ama o zaman da bir başkası aynı cevabı sizden önce gönderirse, siz okey'e dönerken karşıdaki bitmiş gibi kalırsınız :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 26, 2017, 17:46:17 ÖS
Kim kaldı ki benim uzun cevap olmasın :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Nisan 27, 2017, 16:08:08 ÖS
Kazanan kesinlikle belliydi zaten, ben biraz muziplik yapayım dedim  :) Söz bir daha yapmayacağım  ::)

Yarışma ve düşünce gerçekten harika, başka kulvarlarda başka yarışmaların da tertiplenmesi dileklerimle, tebrik ediyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Nisan 28, 2017, 22:05:35 ÖS
İlk soruya en kısa cevabı veren skate oldu.

Katılan herkese teşekkürler. Sıralama ve gelen cevapları d64 dosyasında topladım. İlk mesaja ekliyorum. Oradan indirebilirsiniz.

Şu an soru listemi gözden geçiriyorum. Birazdan ikinci soru gelecek.

 


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Nisan 28, 2017, 22:24:02 ÖS
İkinci soru: Eksik rakamı bul
Tüm basamakları birbirinden farklı olmak üzere, girilen 9 karakterlik bir sayıda hanki rakamın eksik olduğunu bulan bir program yazın.

Not: Girdi olarak sadece 9 haneli ve rakamları birbirinden farklı sayılar test edilecektir.

Örnekler:

Kod:

Girdi: 123456789; Çıktı: 0
Girdi: 124560789; Çıktı: 3
Girdi: 098762345; Çıktı: 1



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 28, 2017, 22:46:04 ÖS
ilk aklıma gelen

Kod:
0 inputa$:fori=1to9:t=t+val(mid$(a$,i,1)):next:print45-t


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: AmigaMan üzerinde Nisan 28, 2017, 22:46:24 ÖS
Vay soru supermiş


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: AmigaMan üzerinde Nisan 28, 2017, 22:47:13 ÖS
ilk aklıma gelen

Kod:
0 inputa$:fori=1to9:t=t+val(mid$(a$,i,1)):next:print45-t
ustad hemen yapıştırdınız.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 28, 2017, 22:52:02 ÖS
Daha kısası olabilir. Ufaklığı yatıriim, bakıcam. Annesi şehirdışında, hem analık, hem babalık yapıyorum. (itinayla Yeşilçam'a bağlanır)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 28, 2017, 23:05:06 ÖS
Bu tricke başvuran olur ihtimaline karşı hemen paylaşayım.

Bence legal değil ama problemi bu da çözüyor. Sayıyı rakam rakam tek tek girmenizi bekliyor. dediğim gibi ben bunu legal bulmuyorum. ama çözüm sağlıyor.

Kod:
0 fori=1to9:inputa:t=t+a:next:print45-t


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 28, 2017, 23:23:08 ÖS
Biraz daha kısası legalinden. Hadi kurcalayın bakalım. :) Bunda trickler devreye girmeye başladı.

edit: a$'a gerek yok a yeterli. 1 byte uçurdum.

Kod:
0 inputa:fori=0to8:t=t+peek(512+i):next:print477-t


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Nisan 28, 2017, 23:51:08 ÖS
Biraz daha kısası legalinden. Hadi kurcalayın bakalım. :) Bunda trickler devreye girmeye başladı.

edit: a$'a gerek yok a yeterli. 1 byte uçurdum.

Kod:
0 inputa:fori=0to8:t=t+peek(512+i):next:print477-t


Daha neyini kurcalayalım hocam, sen bitirmişin işi :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 28, 2017, 23:55:50 ÖS
Daha neyini kurcalayalım hocam, sen bitirmişin işi :)

Bazen çok basit şeyler gözden kaçabiliyor. Örneğin şu ikisi aynı uzunlukta ama daha kısa da olabilirdi ikincisi.

Kod:
0 inputa:fori=0to8:t=t+peek(512+i):next:print477-t
Kod:
0 inputa:fori=512to520:t=t+peek(i):next:print477-t

Böyle şeylerle de daha kısası bulunabiliyor. Şu an için bulamadım ama en kısası budur demiyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 28, 2017, 23:58:13 ÖS
Fikir vermek açısından, aynı uzunlukta bir örnek daha;

Kod:
0 inputa:fori=0to8:t=t+peek(2^9+i):next:print477-t

Hep buralardan çıkıyor size optimizasyon olayları.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Nisan 29, 2017, 02:10:07 ÖÖ
Çok uykum var umarım bir hata yapmamışımdır.
Konuyu görünce yatamadım...

Kod:
0 inputa:fori=0to8:t=t+peek(2^9+i):next:print477-t
vs
0 inputa:fori=0to8:t=t+53-peek(512+i):next:printt



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 29, 2017, 02:27:08 ÖÖ
Denediklerim arasında bunu bulup da senin versiyonunu bulamamak da ekstra salaklık tabii. :D En kısası seninki kesinlikle.

Kod:
0 inputa:fori=49to57:t=t+i-peek(463+i):next:printt


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 29, 2017, 12:27:38 ÖS
Hibrit ve uzun çözümlere devam benden size

Kod:
9 REM *** HANGI RAKAM EKSIK ***
10 INPUT A$:PRINT CHR$(147)A$
30 FOR X=0 TO 31: READ D:POKE 49152+X,D: NEXT
40 SYS 49152:END
1000 DATA 162,0,142,31,192,189,0,4
1010 DATA 41,15,24,109,31,192,141,31
1020 DATA 192,232,224,9,208,239,169,93
1030 DATA 237,31,192,141,10,4,96,0

$C000'dan başlayan assembler kodu
Kod:
*=$C000

start
        LDX #$00
        STX sonuc
loop
        LDA $0400,X
        AND #$0F
        CLC
        ADC sonuc
        STA sonuc
        INX
        CPX #$09
        BNE loop
       
        LDA #$5D
        SBC sonuc
        STA $040A
        RTS
 
sonuc
        BYTE $00

R1jWwyywUkw


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: WildLord üzerinde Nisan 29, 2017, 16:23:24 ÖS
Upuzun kod çözümü :)

10 a$="0123456789"
15 input b$
20 for i=1 to 10
25 for j=1 to len(b$)
30 if mid$(a$,i,1)=mid$(b$,j,1) then z=1
35 next
40 if z=0 then print mid$(a$,i,1)
45 z=0
50 next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Decypher üzerinde Nisan 29, 2017, 17:39:54 ÖS
Zamanında C64'te Basic ile yeterince vakit geçirdiğim için mesela WildLord'un verdiği örnekte olduğu gibi "upuzun" çözümleri rahatça anlayabiliyorum ama diğer kısa kodlar gözüme çok yabancı görünüyor.

Bu kısa kodların, özellikle de Peek ve Poke kullananların çalışma prensibini de yazsanız, o kısımları da anlasak fena mı olur ki?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 29, 2017, 17:44:57 ÖS
@Decypher dediği gibi aslında kısa kod sonrası ayrıca satır satır açıklama yapılarak az bilen bilmeyenin de dikkati çekilebilir konuya.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wolfiem üzerinde Nisan 29, 2017, 18:00:28 ÖS
Daha biz soruyu görmeden cevaplar gelmiş, bu tur bitmiş :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wolfiem üzerinde Nisan 29, 2017, 18:07:22 ÖS
İlk soruya en kısa cevabı veren skate oldu.

Katılan herkese teşekkürler. Sıralama ve gelen cevapları d64 dosyasında topladım. Aşağıdan indirebilirsiniz.

Şu an soru listemi gözden geçiriyorum. Birazdan ikinci soru gelecek.

Benim cevapları göremedim listede ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 29, 2017, 18:23:18 ÖS
512, yani 0x0200 basic'in input buffer adresi. siz input ile bir değişkene veri aktardığınızda hafızada geçici olarak burada tutuluyor veriler. dolayısıyla inputtan sonraki değişkenin tipine, basic tarafından nasıl yorumlandığına bakmaksızın 512'den itibaren yer alan alana petscii karakter değerleri diziliyor.

bu değerlere göre 0-9 0x30-0x39 yani 10'luk düzende 48-57 arasında yer alıyor. Toplamlarını aldığınızda her bir rakam için 45 toplamının üzerine 480 fazladan petscii index değerleri binmesi gerektiği için de 480+45 = 525'den çıkarmamız gerekiyor kalan değeri bulmak için. Ancak bu durumda bulacağımız değer yine petscii olacak. Rakamsal değerini bulmak için ters yönde bir 48 daha ilerlemek lazım. 525-48 = 477

Delimawi'nin tricki de 477'yi 9'luk loopta parça parça çıkarmak/eklemekten ibaret.

477/9 = 53


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 29, 2017, 20:00:25 ÖS
İkinci sürümüm farklı çözüm (uzun kodun kısası)  :D

Asıl BASIC kodu

Kod:
0 INPUTS:FORX=0TO27:READD:POKE828+X,D:NEXT:SYS828
2 DATA 162,0,189,0,2,240,12,41
3 DATA 15,24,109,83,3,141,83,3
4 DATA 232,208,239,169,93,56,233,0
5 DATA 32,210,255,96

Assembler kod bölümü
Kod:
*=$033C

start
        LDX#$00
loop
        LDA$0200,x
        BEQ sonuc
        AND#$0F
        CLC
        ADC sonuc+4
        STA sonuc+4
        INX
        BNE loop
sonuc
        LDA #$5D
        SEC
        SBC #$00
        JSR$FFD2
        RTS
       

Basic dataları $033C ile başlayan adrese yerleştirilir. Input ile girilen değer $0200'dan işlenip sonuç yazılması için SYS828 ile çalıştırılır.


Ekran görüntüsü
(https://s13.postimg.org/7xaiyl16f/Ekran_Al_nt_s.png)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 29, 2017, 21:23:11 ÖS
Asm kullandığın durumda input komutunu basic'den kullanmana gerek yok. jsr $abf9 ile o kısmı da Assembly'e taşıyabilirsin. Ama parametresiz çağırdığın için basic'e döndüğünde arıza çıkarabilir, denemek lazım. Örneğin basic'de sadece "input" olarak da kullanabiliyorsun ve bizim işimizi görüyor, $0200'e yazılıyor değerler. Ama angut interpretter parametre göremediği için input'u aldıktan sonra syntax error veriyor. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 29, 2017, 21:40:21 ÖS
Asm kullandığın durumda input komutunu basic'den kullanmana gerek yok. jsr $abf9 ile o kısmı da Assembly'e taşıyabilirsin. Ama parametresiz çağırdığın için basic'e döndüğünde arıza çıkarabilir, denemek lazım. Örneğin basic'de sadece "input" olarak da kullanabiliyorsun ve bizim işimizi görülyor, $0200'e yazılıyor değerler. Ama angut interpretter parametre göremediği için input'u aldıktan sonra syntax error veriyor. :)
Bunun üstüne bir kafa yorayim skate. Bazı kernel rutinleri ile de denedim lakin çok uzun oluyor zaten uzun. O yüzden basic'ten input kolay geldi.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Nisan 29, 2017, 22:03:27 ÖS
Toplama yerine xor ile cozum uretmek uzerine kafa yorduktan sonra fark ettim ki cbm basic deki ^ isareti xor degil ussu imis. :D c de xor bu operator. Isim icabi pascal c ve assembler arasinda gidip gelirken bir de yillar sonra ilk goz agrim basic girince isin icine kafa daginikken karisiyor syntaxlar...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 29, 2017, 22:39:47 ÖS
CBM Basic'de XOR'un alternatifi de yok (en azından C64'ün kullandığı versiyonda). Benim nice tricklerimi öldürüyor şerefsiz CBM Basic. Interpretted language'e uyuz oluyorum. Mesela next'in işlevini gören ve ekstra bir işe yarayan ROM callları yapmak istiyorum. Ama for komutu olacak şerefsiz next'i string olarak search ediyor. Next'e kadar olan alanı string olarak alıp ona göre loop ediyor iç bloğu da tekrar intrepretter'dan geçirerek. Boynu altında kalsın bu şerefsiz basic'in. Tüm optimizasyonlarıma kapalı. :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Nisan 30, 2017, 01:08:00 ÖÖ
Asm kullandığın durumda input komutunu basic'den kullanmana gerek yok. jsr $abf9 ile o kısmı da Assembly'e taşıyabilirsin. Ama parametresiz çağırdığın için basic'e döndüğünde arıza çıkarabilir, denemek lazım. Örneğin basic'de sadece "input" olarak da kullanabiliyorsun ve bizim işimizi görüyor, $0200'e yazılıyor değerler. Ama angut interpretter parametre göremediği için input'u aldıktan sonra syntax error veriyor. :)

@skate abi jsr$abf9 ile ?syntax error olayı oluşsada turin dediğin gibi çalışıyor. asm'nin byte sayısı da az oluyor. Lakin syntax error sinir bozucu. JSR$CHRIN ($FFCF) kernel rutini ile klavyeden girişleri istediğimiz bellek adresinde saklayabiliyoruz. Bunu denedim INPUTtan kurtuldum.

Yeni 3. sürüm BASIC kodum ve karşılığı ASM aşağıdadır.

BASIC
Kod:
0 FORX=0TO48:READD:POKE828+X,D:NEXT:SYS828
2 DATA 169,63,32,210,255,160,0,32
3 DATA 207,255,153,108,3,200,201,13
4 DATA 208,245,162,0,189,108,3,201
5 DATA 13,240,12,41,15,24,109,103
6 DATA 3,141,103,3,232,208,237,169
7 DATA 93,56,233,0,32,210,255,96,0

ASM
Kod:
*=$033C

start
        LDA#$3F
        JSR$FFD2
        LDY#$00
l1
        JSR$FFCF
        STA sakla,Y
        INY
        CMP#$0D
        BNE l1

        LDX#$00
l2
        LDA sakla,X
        CMP#$0D
        BEQ sonuc
        AND#$0F
        CLC
        ADC sonuc+4
        STA sonuc+4
        INX
        BNE l2
sonuc
        LDA #$5D
        SEC
        SBC #$00
        JSR$FFD2
        RTS
     
sakla
        BYTE $00

(https://s11.postimg.org/91acpsj1f/2017-04-30_01-06-40.png)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Nisan 30, 2017, 04:44:34 ÖÖ
Süper, eline sağlık.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Nisan 30, 2017, 14:56:20 ÖS
Aynen dediğiniz gibi ne olduğunu anlamak için şöyle bir kod eklemesi yapmıştım kendimce.

Kod:
0 inputa:fori=0to8:t=t+peek(2^9+i):printi;") ";"477 -";t;"=";477-t:next

Çıkan neticelerden karşılaştırmalar yaptım ama pek bir anlam çıkaramamıştım yine de :P

Skate 'in yazdığın koddan sonra bize düşen o kodu nasıl kısaltırız ona kafa yormak olacak galiba  ;D

Ayrıca çok eğitici ve güzel bilgiler mevcut. Tebrikler SKATE!





Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 02, 2017, 16:12:18 ÖS
Yarışmnın amaçlarından biri de aynı işi yapan alternatif yöntemleri görmekti. Bu yüzden ilk dakikalarda süper kısa bir cevap gelmesine rağmen alternatif cevaplarla başlığa katkıda bulunan herkese özellikle teşekkür ediyorum.

delimawi'nin Skate'in cevabını 1 karakter kısaltan cevabını geçerli kabul ettiğimi de söylemiş olayım. Daha iyisi gelmezse o kazanıyor yani.

@wolfiem senin cevap nasıl olduysa aradan kaynamış. Listeye ekledim. Başığın ilk mesajındaki linkten disketin son halini indirebilirsin.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 05, 2017, 22:12:00 ÖS
İkinci sorunun ek kısa cevabı delimawi'ye ait. Sonuc disketini hazırlıyorum ama biraz vakti var. Sizi bekletmeden üçüncü soruyu vereyim.

Üçüncü soru: n basamaklı rastgele sayı

0<n<10 olmak üzere girilen rakam için: n basamaklı, her basamağı birbirinden farklı ve sıfırla başlamayan rastgele bir sayı üretin.
Programınızın n'in koşullara uymadığı kontrol etmesine gerek yok. Üretilen rastgele sayının dağılımı önemli değil. Yani RND() fonksiyonun ürettiği sayılar yeterli.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 05, 2017, 23:26:00 ÖS
Kod:
1 inputn
2 x=int(n*rnd(1)):ifa(x)<>0goto2
3 i=i+1:a(x)=i:printx:ifi<ngoto2

daha kısası mutlaka vardır ama maksat katılım olsun.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 05, 2017, 23:42:35 ÖS
Kod:
1 inputn
2 x=int(n*rnd(1)):ifa(x)<>0goto2
3 i=i+1:a(x)=i:printx:ifi<ngoto2

daha kısası mutlaka vardır ama maksat katılım olsun.

Abi kodlamada ilk rakamın 0 olma ihtimali var.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 05, 2017, 23:52:36 ÖS
Abi kodlamada ilk rakamın 0 olma ihtimali var.

Şöyle yapalım o zaman :)
Kod:
1 inputn
2 x=int(n*rnd(1)+1):ifa(x)<>0goto2
3 i=i+1:a(x)=i:printx:ifi<ngoto2

ps: 1 seed'i bilgisayarı açınca en azından ilk sayıyı sıfır getirmiyor diye düşünüyordum ancak bu da kural ihlali olur biraz.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 06, 2017, 00:08:58 ÖÖ
Senin program rakamları satır satır veriyor. Tek bir sayı olarak yan yana yazması lazım.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 06, 2017, 00:12:57 ÖÖ
Şimdilik şu dursun, daha kısası yolda...
Kod:
0 inputn:fori=0ton-1
1 a=int(rnd(1)*10):if(2^a)andtthen1
2 b=b*10+a:ifb=0then1
3 t=t+2^a:next:printb


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 06, 2017, 00:17:19 ÖÖ
Senin program rakamları satır satır veriyor. Tek bir sayı olarak yan yana yazması lazım.
Arada bir boşlukla olur herhalde?

Kod:
1 inputn
2 x=int(n*rnd(1)+1):ifa(x)<>0goto2
3 i=i+1:a(x)=i:printx;:ifi<ngoto2


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 06, 2017, 00:25:44 ÖÖ
rnd() yok ama bütün kurallara uyuyor şartta değil zaten.
Kod:
0 inputa:print(left$("987654321",a))


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 06, 2017, 00:36:44 ÖÖ
Kod:
1 inputn
2 x=int(9*rnd(1)+1):ifa(x)goto2
3 i=i+1:a(x)=i:printx;:ifi<ngoto2

Şöyle düzeltip kısaltayım biraz. (N'e kadar sayı basamak üretiyordu)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 06, 2017, 01:29:01 ÖÖ
Kendi çözümümün biraz daha kısası. Bu arada i_r_on'un çözümüne iki ayrı itirazım var. :)

Kod:
0 inputn
3 a=int(rnd(1)*10):c=2^a:ifcandtthen3
4 t=t+c:b=b*10+a:ifb<10^(n-1)then3
5 printb


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 06, 2017, 01:44:19 ÖÖ
Bu arada çözümü kısaca açıklamak gerekirse,

3 nolu satırda 0 ila 9 arası random bir integer deger belirleniyor.

Bu arada o ana kadar kullanılmış olan degerlerler t degiskeninde ikilik düzende işaretleniyor. Yani 0 rakamı kullanılmış ise t değişkeninin 0.biti 1 oluyor, 1 rakamı kullanılmış ise t değişkeninin 1.biti 1 oluyor gibi... t değişkeni başlangıçta 0 yani hiç bir rakam kullanılmamış.

3 nolu satırdaki c=2^a formülü, random integer'in t değişkeninin hangi bitini set edeceğini hesaplıyor. Yani yukarıdaki gibi eğer random rakam 0 ise sonuç 1, random rakam 1 ise 2, random rakam 2 ise 4 oluyor gibi...

Aynı satırdaki if kontrolü ilgili rakamın daha önce kullanılıp kullanılmadığını kontrol ediyor. Eğer ilgili bit zaten set olmuş ise o rakam kullanılmış, yeni bir rakam seçmek üzere 3 nolu satıra geri dönüş.

4 nolu satırda artık daha önce seçilmemiş bir rakam seçtiğimize eminiz. Öncelikle t değişkenine bu rakamı kullandığımızı işaretliyoruz. burada or kullanmak daha doğru ama zaten c değerinin 2^x olduğunu bildiğimiz ve x değerini bir daha seçmeyeceğimizi bildiğimiz için güvenle toplama yapabiliriz. Daha kısa.

Aynı satırdaki b değeri ise ekrana yazacağımız sonuç değeri. Elimizdeki rakamı  ekliyoruz. Ama şu şekilde. Örneğin b değerinde 123 olmuş olsun. Şimdi 4 rakamını ilave edeceğiz. Önce *10 yapıyoruz, 123 oluyor 1230 ve sonra 4 ü ekleyince, 1234 oluyor gibi...

Son olarak burada bir trick var. for next kullanmadım çünkü eğer ilk rakam "tesadüfen" 0 seçilmiş ise fazladan bir tur daha atmak istiyorum. Bunu for next ile yapsaydım ekstra bir kontrol gerekiyordu. buradaki trick şu:

Örneğin 3 haneli bir sayı istenmiş ise, ilk hane 0 olamayacağına göre, sonuç en az 100 olmalı. Bunu nasıl formülüze ederiz? 10^(n-1) ile... Evet işte toplam sayı bu değerden az ise döngü dönmeye devam ediyor. Yani 3 basamak için 3 yada 4 kere dönecek...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 06, 2017, 01:49:52 ÖÖ
Kod:
0 inputn
3 a=int(rnd(1)*10):c=2^a:ifcandtthen3
4 t=t+c:b=b*10+a:ifb<10^n/10then3
5 printb

10^n/10 nedense 10^(n-1) den 1 byte daha kısa... :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 06, 2017, 01:54:52 ÖÖ
Kendi çözümümün biraz daha kısası. Bu arada i_r_on'un çözümüne iki ayrı itirazım var. :)

Kod:
0 inputn
3 a=int(rnd(1)*10):c=2^a:ifcandtthen3
4 t=t+c:b=b*10+a:ifb<10^(n-1)then3
5 printb

Niye itirazın var yahu? :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 06, 2017, 02:04:55 ÖÖ
1. , yada ; kullanmak bence etik değil. Eğer olabiliyorsa sonuç doğrudan yan yana (aralarda boşluk olamadan) yazılmalı. Zira sonuç olarak istenen bir sayı.

2. Formülünde etik olmayan başka bir durum daha var. Yanlış değerlendirmiyorsam senin sonuçlarının hiçbir rakamında 0 olmaz. Sen direkt 0 ı elemişsin. Bence ilk basamak haricinde içerikte 0 olabilmeli.






Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 06, 2017, 02:25:17 ÖÖ
Son optimizasyonumda işlem önceliklerinden dolayı aşağıdaki gibi bir update yaptım.
Kod:
0 inputn
3 a=int(rnd(1)*10):c=2^a:ifcandtthen3
4 t=t+c:b=b*10+a:ifb*10<10^n-1then3
5 printb


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 06, 2017, 02:39:15 ÖÖ
1. , yada ; kullanmak bence etik değil. Eğer olabiliyorsa sonuç doğrudan yan yana (aralarda boşluk olamadan) yazılmalı bence. Zira sonuç olarak istenen bir sayı.

Bu sayının sunumu ile alakalı bence, daha önceki sorularda da mesela kabul edilen cevaplarda sayı kodda string olarak işlem görüp string olarak output ediliyordu. Soru 20 haneli ve her sayı en fazla 2 kez geçsin diye sorulsaydı mecbur hepimiz string yapacaktık. Benim kodda da microsoft işaret için bodoslama yer ayırmayaydı öyle gözükmeyecekti.

2. Formülünde etik olmayan başka bir durum daha var. Yanlış değerlendirmiyorsam senin sonuçlarının hiçbir rakamında 0 olmaz. Sen direkt 0 ı elemişsin. Bence ilk basamak haricinde içerikte 0 olabilmeli.

Bence bu da yorum, zira wizofwor rastgeleliğin ne ölçekte olacağı ile ilgili bir kısıt koymamış. C64 basic'te adam akıllı bir rastgele elde etmek için zaten seed'i 1 vermemek lazım bodoslama.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 06, 2017, 03:00:51 ÖÖ
Ben gene de etik bulmuyorum ama bu durumda aşağıdaki sanırım bir kaç byte daha kısa:

Kod:
0 inputn:fori=1ton
1 a=int(rnd(1)*9):ifb(a)then1
2 b(a)=1:printa+1;:next

Bu arada senden arakladığım a(x) yöntemi 2^x binary işaretlemeden 6 byte daha kısa oldu... :D Gene benim 0 lı sonuçları içeren "etik" çözümüm:

Kod:
0 inputn
3 a=int(rnd(1)*10):ifc(a)then3
4 c(a)=1:b=b*10+a:ifb*10<10^n-1then3
5 printb


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 06, 2017, 03:21:17 ÖÖ
Ben gene de etik bulmuyorum ama bu durumda aşağıdaki sanırım bir kaç byte daha kısa:

Bu arada senden arakladığım a(x) yöntemi 2^x binary işaretlemeden 6 byte daha kısa oldu... :D Gene benim 0 lı sonuçları içeren "etik" çözümüm:

Ohoo, hem araklama diyoruz hem de etikten bahsediyoruz. Olmadı :)
Bu tip durumlarda orjinal çözüme tam puan, türevine yarısı verilmeli bence. Böyle daha etik olur :p


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 06, 2017, 03:28:14 ÖÖ
Zaten tirnak icinde etik yazmistim ama sonucta ikimizin de kartusa ihtoyaci yok. Nasil yapsak... :P

Bir de @wizofwor merak ettim. Satir numarasindan sonraki bosluk degerlendirmede hesaba katiliyor mu?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 06, 2017, 09:28:13 ÖÖ
@wizofwor bence soru için kısıtlama yada kuralları daha net belirtmeli.

Mesela ben de RND ile çözmeye çalışırken farkettim ki ne kasıyoruz çünkü her basamaktaki rakam farklı olmalı demiş. Ayrıca program her çalıştığında aynı sayıyı üretmemeli diye bir kısıtlama da yok sadece başında 0 olmamalı. Ayrıca her rakam kullanılmalı yada sayı üretiminde olası olmalı diye kural da yok. Kalıplaşmış bir diziden LEFT$ ile bu olayı çözmek bana daha mantıklı geldi. Hatta 0<n<10 olduğundan n 9 farklı değer olabilir ben de dizide 0 kullanmak istemedim. Çözümü bu kodda buldum.


Kod:

 0 inputa:print(left$("987654321",a))



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 06, 2017, 14:29:04 ÖS
1 Byte optimizasyon. Yahu bu fikri nereden buldun @wizofwor, takıldı aklıma iş yapamıyorum... :D

Kod:
0 inputn
3 a=int(rnd(1)*10):ifc(a)then3
4 c(a)=1:b=b*10+a:ifb<10^(n-1)then3
5 printb


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Agony üzerinde Mayıs 06, 2017, 14:37:23 ÖS
Şu başlığı açıldığı günden beri aralıklarla takip ediyorum. Muhabbetler süper. Keşke hepimiz bir arada olsaydık, ne bileyim kafe gibi bir yerde. Muhabbet daha mükemmel olurdu.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 06, 2017, 15:06:16 ÖS
Eve gidince assembler olarak uzun kod karalayacağım. Uzun kodda birinci benim kaptırmam :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 06, 2017, 20:10:44 ÖS
Çözümlerim sıra ile

1. BASIC kodum
Kod:
0 inputa:print(left$("987654321",a))

2. BASIC kodum (alternatif)
Kod:
5999 FOR X=0TO152:READD:POKE49152+X,D:NEXT:SYS49152
6000 DATA 160,192,169,128,32,30,171,160
6001 DATA 0,32,207,255,153,152,192,200
6002 DATA 201,13,208,245,173,152,192,41
6003 DATA 15,141,80,192,160,0,169,0
6004 DATA 153,152,192,200,192,9,208,246
6005 DATA 162,0,32,96,192,173,97,192
6006 DATA 240,248,157,152,192,232,32,96
6007 DATA 192,160,0,185,152,192,205,97
6008 DATA 192,240,243,200,192,9,208,243
6009 DATA 173,97,192,157,152,192,232,224
6010 DATA 9,208,227,169,0,157,152,192
6011 DATA 160,192,169,151,32,30,171,96
6012 DATA 169,0,77,4,220,77,5,220
6013 DATA 77,4,221,109,5,221,77,6
6014 DATA 221,77,7,221,41,15,9,48
6015 DATA 201,57,176,228,141,97,192,96
6016 DATA 66,65,83,65,77,65,75,32
6017 DATA 83,65,89,73,83,73,32,40
6018 DATA 49,45,57,41,32,63,0,13
6019 DATA 0

3. 2. madde BASIC çözümünün assembler hali
Kod:
*=$C000

START
        LDY #>INP
        LDA #<INP
        JSR $AB1E       ;basamak sayisi yazdır

        LDY #$00         ; input
L2      JSR $FFCF
        STA SAYI,Y
        INY
        CMP #$0D
        BNE L2
       
        LDA SAYI
        AND #$0F
        STA BAS+1
       
        LDY #$00        ;sayı data fill $00
L3      LDA #$00
        STA SAYI,Y
        INY
        CPY #$09
        BNE L3

        LDX #$00
ZE      JSR RANDOM
        LDA RANDOM+1
        BEQ ZE          ; ilk rakam 0 olamaz
        STA SAYI,X
        INX
L1      JSR RANDOM
       

AYNISI  LDY #$00        ; aynı rakam olmamalı
        LDA SAYI,Y
        CMP RANDOM+1
        BEQ L1
        INY
        CPY #$09
        BNE AYNISI+2
       
        LDA RANDOM+1
        STA SAYI,X
        INX
BAS     CPX #$09
        BNE L1
        LDA #$00        ;dizi sonu $00
        STA SAYI,X
        LDY #>RET
        LDA #<RET
        JSR $AB1E       ;yazdır
        RTS
RANDOM
        LDA #$00        ; random
        EOR $DC04
        EOR $DC05
        EOR $DD04
        ADC $DD05
        EOR $DD06
        EOR $DD07
        AND #$0F        ; yalnız rakam olmalı
        ORA #$30
        CMP #$39
        BCS RANDOM
        STA RANDOM+1
        RTS

INP     BYTE $42, $41, $53, $41, $4D, $41, $4B, $20, $53
        BYTE $41, $59, $49, $53, $49, $20, $28, $31, $2D
        BYTE $39, $29, $20, $3F, $00
RET     BYTE $0D
SAYI    BYTE $00

(https://s16.postimg.org/d5jervrqd/image.png)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 07, 2017, 01:41:09 ÖÖ
1. , yada ; kullanmak bence etik değil. Eğer olabiliyorsa sonuç doğrudan yan yana (aralarda boşluk olamadan) yazılmalı bence. Zira sonuç olarak istenen bir sayı.

Bu sayının sunumu ile alakalı bence, daha önceki sorularda da mesela kabul edilen cevaplarda sayı kodda string olarak işlem görüp string olarak output ediliyordu. Soru 20 haneli ve her sayı en fazla 2 kez geçsin diye sorulsaydı mecbur hepimiz string yapacaktık. Benim kodda da microsoft işaret için bodoslama yer ayırmayaydı öyle gözükmeyecekti.

i_r_on her ne kadar senin çözümün algoritma olarak doğru olsa da arada boşlukları geçerli saymak içime sinmiyor. Çıktının tipi string, integer vb önemli değil ama gösterim olarak sayıyı oluşturan rakamların yan yana durması lazım.

2. Formülünde etik olmayan başka bir durum daha var. Yanlış değerlendirmiyorsam senin sonuçlarının hiçbir rakamında 0 olmaz. Sen direkt 0 ı elemişsin. Bence ilk basamak haricinde içerikte 0 olabilmeli.
Bence bu da yorum, zira wizofwor rastgeleliğin ne ölçekte olacağı ile ilgili bir kısıt koymamış. C64 basic'te adam akıllı bir rastgele elde etmek için zaten seed'i 1 vermemek lazım bodoslama.

Burada da delimawi'ye prensipte katılmakla birlikte soruyu tekrar okuduğumda üretilen sayının ille de sıfır içermesi gerekmiyor. Sıfır içermeyen cevapları geçerli sayacağım.

Bir de @wizofwor merak ettim. Satir numarasindan sonraki bosluk degerlendirmede hesaba katiliyor mu?

Cevapların uzunluğuna CBM prg Studio'da bakıyorum. Satır numarasını ve satır numarasından sonraki boşluğu sayıyor. Ancak şimdiye kadar bu durumdan kaynaklanan foto finiş durumu olmadı. Olsa uyaracaktım.

Konu açılmışken ufak bir not düşeyim. CBM Studio sadece satır toplamlarını veriyor. Karakterleri Sublime Text'de saymak daha pratik ancak Sublime satır sonlarındaki newline karakterlerini de sayıyor ve farklı sonuç buluyor. Programları CBM Studio'da denediğim için CBM Studio'nun yöntemini kullanıyorum.

@wizofwor bence soru için kısıtlama yada kuralları daha net belirtmeli.

Mesela ben de RND ile çözmeye çalışırken farkettim ki ne kasıyoruz çünkü her basamaktaki rakam farklı olmalı demiş. Ayrıca program her çalıştığında aynı sayıyı üretmemeli diye bir kısıtlama da yok sadece başında 0 olmamalı. Ayrıca her rakam kullanılmalı yada sayı üretiminde olası olmalı diye kural da yok. Kalıplaşmış bir diziden LEFT$ ile bu olayı çözmek bana daha mantıklı geldi. Hatta 0<n<10 olduğundan n 9 farklı değer olabilir ben de dizide 0 kullanmak istemedim. Çözümü bu kodda buldum.

Soru "aynı sayıyı üretmemeli" demiyor ama "rastgele bir sayı üretin" diyor.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 07, 2017, 01:52:56 ÖÖ
@wizofwor seçtiğim rastgele sayıyı üretiyor zaten ...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 07, 2017, 01:59:19 ÖÖ
@wizofwor seçtiğim rastgele sayıyı üretiyor zaten ...

Rastgele:
sf. (ra'stgele) 1. Gelişigüzel: “Bu özü susma ile tanımlamak pek kişisel, rastgele bir yargı kurmak oluyor.” -N. Uygur. 2. zf. (ra'stgele) Seçmeden, iyisini kötüsünü ayırmadan, gelişigüzel, lalettayin: “Asılanları deniz kenarında, rastgele atıldıkları çukurlar içinde kumluğa gömüyorlar.” -N. F. Kısakürek.
http://www.tdk.gov.tr/index.php?option=com_bts&arama=kelime&guid=TDK.GTS.590e5470cce080.17054114 (http://www.tdk.gov.tr/index.php?option=com_bts&arama=kelime&guid=TDK.GTS.590e5470cce080.17054114)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 07, 2017, 02:11:25 ÖÖ
@wizofwor seçtiğim rastgele sayıyı üretiyor zaten ...

Rastgele:
sf. (ra'stgele) 1. Gelişigüzel: “Bu özü susma ile tanımlamak pek kişisel, rastgele bir yargı kurmak oluyor.” -N. Uygur. 2. zf. (ra'stgele) Seçmeden, iyisini kötüsünü ayırmadan, gelişigüzel, lalettayin: “Asılanları deniz kenarında, rastgele atıldıkları çukurlar içinde kumluğa gömüyorlar.” -N. F. Kısakürek.
http://www.tdk.gov.tr/index.php?option=com_bts&arama=kelime&guid=TDK.GTS.590e5470cce080.17054114 (http://www.tdk.gov.tr/index.php?option=com_bts&arama=kelime&guid=TDK.GTS.590e5470cce080.17054114)

0 inputa:print(left$("987654321",a))

"987654321" gelişigüzel seçilmiş bir dizi. İstersen sıralamaları değiştir. O da rastgele TDK'ya göre. Aynı sayıyı üretmede problem yok ise sorun olmamalı. Gösterilecek sayının kodlayanın yada işlemcinin randomize olarak belirlemesi arasında kurallara ters gelen bir durum göremiyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 07, 2017, 03:08:54 ÖÖ
Shift register'lar elimde kaldım valla Levent Kırca'nın banyoda sabunlu kaldığı gibi :)

Hem etik hem de şimdiye kadarki en kısası sanırım :)

Kod:
0 inputn
1 fori=1ton
2 c=int(rnd(1)*n):ify(c)then2
5 x=x+i*10^c:y(c)=1:next:printx

ps: tek kusuru var, 1 rakamlı denirse sadece 1 üretiyor :) Ondan sonrası random sayılır :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 07, 2017, 09:10:04 ÖÖ
Alıntı
soruyu tekrar okuduğumda üretilen sayının ille de sıfır içermesi gerekmiyor. Sıfır içermeyen cevapları geçerli sayacağım.

@wizofwor, yıtın beni. Kodda ilk hanede kullanılmasın diye yazdığım çözüm pek bir hoşuma gitmişti... :D

@i_r_on, bu durumda kusur alınmış ve kısaltılmış hali şöyle olsa gerek:

Kod:
0 inputn:fori=1ton
2 c=int(rnd(1)*9):ify(c)then2
5 x=x*10+c+1:y(c)=1:next:printx

Ama hala bu kurallara göre en kısası bu değil bence...





Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: WildLord üzerinde Mayıs 07, 2017, 11:36:43 ÖÖ
Upuzun çözümüm :)

10 input n
15 for i=1 to n
20 x=int(rnd(1)*9):d(i)=x
22 if i=1 and x=0 then goto 20
25 for j=1 to i-1
30 if d(j)=x and i<>j then goto 20
35 next
37 print right$(str$(x),1);
38 next

Yalnız bir şeye takıldım, sayılar stringe çevrilirken neden 2 karakter oluyor acaba? Space + number gibi.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 07, 2017, 16:06:22 ÖS
@Wildlord : Sayı negatif olursa tüm sayılar için o boşluğu tutmuşlar. Malum C64 basic'te yazdırırken formatlayayım gibi bir lüks yok. Muhtemelen sayılar alt alta yazdırıldığında ilk haneleri hizalansın diye böyle tercih etmişlerdir.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: WildLord üzerinde Mayıs 07, 2017, 16:09:39 ÖS
Anladım... O zaman basitçe boşluğu aslında + gibi düşüneyim :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: blackturk üzerinde Mayıs 07, 2017, 17:26:45 ÖS

0 input n
1 r=int(rnd(1)*9)+1
2 if2^randxthen1
3 print r;
4 x=x+2^r
5 n=n-1:ifnthen1
Kısaltılabilir.Ama Farklı bir çözüm olsun yazıyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 08, 2017, 02:53:22 ÖÖ
itinayla syntax gereksiz biçimde karıştırılır. :)

Kod:
0 inputa:fori=1toa
1 d%=rnd(1)*9:one(d%)goto1
2 n=n*10+d%+1:e(d%)=1:next:printn


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 08, 2017, 03:33:28 ÖÖ
Ben bu konuya ve bu soruya fena takıldım. Haftasonu çoluk çocuk geziyoruz, aklımda aynı rakamı içermeyen sayılar dönüp dolaşıyor. :P
Neyse, son çözümünden "zarif" bir çözüme ulaşabildim sanırım, artık daha da kısalmıyor. İlgilenen arkadaşlar için çözümü ve bu "garip" sonuca nasıl ulaştığımı adım adım yazmak istiyorum.

"zarif" dedim, çünkü son çözümde random number generatorunu istediğimiz koşullara uygun bir rakam gelene kadar defalarca çalıştırıyorduk. İstediğimiz rakam gelmediği sürece kod çalışacağından, algoritmanın çalışma süresi her seferinde farklı oluyordu. Ben çözümde tam istenilen basamak adedi kadar çalışacak bir döngü kurmının daha uygun olacağını düşündüm.

Başlangıç kodum bu:

Kod:
0 fori=0to8:d(i)=i+1:next:inputn
1 forb=1ton:s=int(rnd(1)*(9-b))
2 t=t*10+d(s):d(s)=d(9-b):next:printt

Algoritma aynı kalacağından, bu kod üzerinden nasıl çalıştığını kısaca yazıyorum.
İlk satırda d dizisi içerisine 1,2,3,4,5,6,7,8,9 şeklinde, sonuca giderken kullanabileceğimiz rakamları yerleştiriyorum.
İkinci satırda tam istenilen basamak sayısı kadar çalışacak loop'u kuruyorum.
Her döngüde s değişkeni içerisine rasgele bir değer seçiliyor. Ancak örneğin ilk seferinde 0-8 arası bir değer seçilirken, bir sonraki döngüde 0-7 arası seçiliyor. Çünkü her seferinde seçilebilecek rakam sayısı azalıyor.
Elimizdeki toplam değerini x10 yapıp, bu döngüde seçtiğimiz rakamı ekliyoruz. Dikkat edin, seçtiğimiz rakam, random sonucu elde ettiğimiz değer değil, bu değerin gösterdiği dizi içindeki değer. d(s)
Son olarak artık bu rakam kullanılmış olduğundan, bunu diziden çıkartmamız gerek. Trick şu, dizide bu kullandığımız değer yerine artık bir sonraki döngüde kullanamayacağımız bir değer olan, dizinin sonundaki değeri yazıyorum. Çünkü bir sonraki döngüde rasgele seçilebilir değer bir eksilmiş olacak. Şu an dizinin sonundaki rakamı bir daha kullanamayacak bunu yapmaz isek...

Bir örnek:

Kod:
Döngü Rasgele Değer Dizi      Toplam
                    123456789 0
1     2             12945678  3
2     5             1294587   36
3     0             729458    361
4     0             82945     3617

Şimdi bu kod çalışıyor ama nasıl kısalır? Hedefim tek basic satırına indirgemek. 80 karakterden kısa olmalı...

En çok canımı sıkan kısım baştaki dizi initialize etme kodu.

Kod:
fori=0to8:d(i)=i+1:next

Bundan nasıl kurtulurum? Aklıma şu geliyor. Diziyi başta doldurmasam, yani her eleman 0 olsa, daha sonra dizideki herhangi bir elemanın gerçek değerine erişmek istediğimde, formülü şöyle yazabilirim. Gerçek d(n)=d(n)+n+1 Bu durumda init koduna gerek kalmıyor. :D Her d(n) gördüğümüz yeri d(n)+n+1 yapıyoruz ve init kodundan kurtuluyoruz, hala çalışıyor, güzel...

Kod:
0 inputn
1 forb=1ton:s=int(rnd(1)*(9-b))
2 t=t*10+d(s)+s+1:d(s)=d(9-b)+9-b-s:next:printt

Şimdi burada dikkatimi çeken, 9-b ifadesi birden çok yerde kullanılıyor. Bunu başta bir değişkene atarsak, biraz daha kısalacak...

Kod:
0 inputn
1 forb=1ton:a=9-b:s=int(rnd(1)*a)
2 t=t*10+d(s)+s+1:d(s)=d(a)+a-s:next:printt

Hala bir satıra sığacak gibi değil, bu 9-b den tamamen kurtulmak lazım. for döngüsünün içine yedirilebilir, ancak 9-b de, b nin işareti - olduğundan for döngüsünü ters çalıştırmak lazım ve step-1 ilavesi gerekecek. Bunun da astarı yüzünden pahalı oluyor. Bu durumda şunu yapıyorum, en azından bu ek değişkenden kurtulmak için aşağıdaki hale sokuyorum. Bir byte kısaldı... :D

Kod:
0 inputn
1 fora=-8ton-9:s=int(rnd(1)*-a)
2 t=t*10+d(s)+s+1:d(s)=d(-a)-a-s:next:printt

Bildiğim tüm standart optimizasyonları yapıyorum.

Kod:
0inputn:fora=-8ton-9:s=int(rnd(1)*-a):t=t*10+d(s)+s+1:d(s)=d(-a)-a-s:next:printt

Ama olmuyor tam 80 karakter, 1 karakter daha kısaltabilirsem tek basic satırına sığacak... Ah print yerine ? yazabiliyor olsaydık keşke. :/

Bir kaç sayfa önce i_r_on'a söylendiğim rakamlar arasındaki boşluk meselesi kafamda gelip gidiyor. Ve evet t=t*10+ ... hikayesinden bu şekilde kurtulup kısaltabilirim. Ama bir şekilde aralardaki boşlukları yok etmem lazım...

Kod:
0inputn:fora=-8ton-9:s=int(rnd(1)*-a):printd(s)+s+1;:d(s)=d(-a)-a-s:next

Tabi ya, o boşlukları interpretter sayıyı formatlamaya çalıştığı için koyuyordu. Normalde ; ile string yazdırsak yan yana yazacak...
E o zaman, rakamı neden string gibi yazdırmıyorum? Çünkü bir de str$ eklemek lazım ve boşluklar. Ama zaten yazacağımız bir rakam, sayı değil ki. Tek hane. Doğrudan ASCII kodunu basalım gitsin. 0'ın ASCII kodu 48, yani sadece+48 ilave edeceğiz değere.

Kod:
0inputn:fora=-8ton-9:s=int(rnd(1)*-a):printchr$(d(s)+s+49);:d(s)=d(-a)-a-s:next

Evetttt, tam 79 karakter, bir satıra sığdı ve çalışıyor gibi. :D

İyi geceler.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 08, 2017, 03:46:40 ÖÖ
@skate, aynı anda yazmışız.

Senin kodu alıp gelişine vuruyorum. :D

Kod:
0inputa:fori=1toa
1d%=rnd(1)*9:ife(d%)goto1
2printchr$(d%+49);:e(d%)=1:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 08, 2017, 04:10:02 ÖÖ
Süper optimizasyonlar ve kafa yormalar. :) Ben de ilk olarak benzer bir kod yazdım. Yani 1-9'a dizi init ederek başladım, sonrasında da random swap yaptım. Algoritma çok benzerdi ama baktım ki mevcut 3 satırlık kod daha kısa kalıyor, ben de onu kısaltmayı tercih ettim. Henüz üzerine yeterince düşünmedim, yarın düşüneceğim boş vakit bulduğum gibi.

Tek satır olma ve O(n) zamanda çalışma avantajı gibi şeylerle benim kalbimde bu çözüm winner. Ancak karakter sayısı olarak baktığımızda şu anki 79 karakter dediğin versiyon 0'dan sonraki boşlukla 80 karakter olarak sayılıyor. Çok satırlı çözümler daha kısa. Daha da kısalabilirler gibi geliyor bana. Dediğim gibi yarın salim kafayla bakacağım.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 08, 2017, 04:11:05 ÖÖ
An itibariyle en kısası bu. :)

@skate, aynı anda yazmışız.

Senin kodu alıp gelişine vuruyorum. :D

Kod:
0inputa:fori=1toa
1d%=rnd(1)*9:ife(d%)goto1
2printchr$(d%+49);:e(d%)=1:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 08, 2017, 04:12:09 ÖÖ
@delimawi : Son çözüm (sondan bir önceki) güzel ama kısalmamış. Ya da siz sayarken farklı bir yöntem kullanıyorsunuz.

1. Notepad'de courier font seçilir
2. Kod yapıştırılır.
3. Satır sonları silinir.

Senin shuffle yapan kod 80 karakter çıkıyor. Satır başından sonra gelen boşluk sayılıyor. Tek satıra indirme hevesini kırıyor gerçi bu, Wizofwor tekrar değerlendirsin :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 08, 2017, 04:16:17 ÖÖ
Ben substition cipher tarzi 1-9 arasi rakamlari tersinir 1-9 arasi baska rakamlara esleyecek formul uretmeye calistim. Bir seed ile tek dongude halledecektim. Ama ya kisa olmuyor ya da dagilim cok zayif kaliyor.

Ek. Ha bi de xor olsa basicde, rakamlar 1-9 degil 0-7 arasi olsa neler yapilir neler... Bu seri bitince bunun asm komposunu da yapalim...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 08, 2017, 04:17:49 ÖÖ
I_r_on o kodu en kisa olarak koymadim. Farkli ve tek satirlik zarif bir cozum olarak simdilik paste ettim... ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 08, 2017, 04:54:11 ÖÖ
70 karakterlik içime sinen çözüm

Kod:
0 inputa:fori=1toa
1 d=rnd(1)*9:one(d)goto1:poke1023+i,d+49:e(d)=1:next

69 karakterlik içime sinmeyen çözüm :)

Kod:
0 inputa:fori=1toa
1 d=rnd(1)*9:one(d)goto1:poke4^5+i,d+49:e(d)=1:next

Yazmaya 2. karakterden başlayınca özellikle ilk karakter doluysa kötü görünüyor. Ama her ikisi de çıktıyı ekrana yazıyor.

Demin on...goto kullanmamın amacı 3 satırı 2 satıra indirmekti. Yanlışlıkla 3 satırlık çözümü paylaşmışım yine. Burada 2 satırlık versiyonu var. if...else simülasyonu böyle yapılıyor tek satırda.

Bu bence daha da kısalabilir. Minimuma ulaştığını hissetmiyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 08, 2017, 05:08:42 ÖÖ
O(n)lik çözümden infinite çalışan çözüme yolculuk. :D

67 karakter

Kod:
0 inputa
1 d=rnd(1)*9:one(d)goto1:e(d)=1:poke1023+a,d+49:a=a-1:goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: AmigaMan üzerinde Mayıs 08, 2017, 05:13:03 ÖÖ
Ellerine sağlık süper çözüm olmuş


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 08, 2017, 05:17:19 ÖÖ
Sonunda 4^5'i de kullanabildim, oh be :D

66 karakter

Kod:
0 inputa
1 d=rnd(1)*9:one(d)goto1:e(d)=1:a=a-1:poke4^5+a,d+49:goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 08, 2017, 09:57:03 ÖÖ
@skate, dün gece fark etmemişim. "on goto" süper bir "if else" eşleniği olmuş. Çok sevdim bunu...

Gel gelelim çözümler bana biraz sıkıntılı geldi. Bence 1024 adresini kullanmak doğru değil. RUN edildiğinde cursor aşağılarda ise scroll edecek görünmeyeek sonuç. Sonsuz döngüye giren kod için ise hiç yorum yapmıyorum. :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: blackturk üzerinde Mayıs 08, 2017, 10:10:43 ÖÖ

  Bir kaç sohbetimizde , skate'in  bir sözü vardı."Aklın yolu birdir." .on x goto 1  şeklinde bir tasarım yapmıştım.demek ki atladığımız yerlerde varmış.Next question plase ?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 08, 2017, 10:11:43 ÖÖ
@delimawi: Cursor en alttayken de çalıştırsan problem çıkmaz. Input'u aldıktan sonra scroll edip, ondan sonra ekran adreslerine map ediyor. O aşamadan sonra da ekran tekrar kaymıyor.

Loop konusuna gelince ben size optimizasyon söz konusu olduğunda bu tür yöntemleri legal olarak hep kullanırım ki programın çalıştıktan sonra çıkmasının gerekmesi bence "aksi belirtilmediği sürece" bir gereklilik değildir. Run/stop bunun için var. "Print komutunu kullanma zorunluluğu" ya da "Basic'e dönme zorunluluğu" gibi bir şey olmadığı sürece ben bir aksilik göremiyorum.

Ben ilk başta bu mevzuya değil, üst satırda junk data varsa o satırın silinmiyor olmasına takılmıştım. Ama sonra print içeren çözümlerde de aynı sorun olduğunu fark ettim. Ekranda dolu olan bir satıra denk getirdiğin sürece print de o satırı temizlemiyor sonuç olarak.

Son olarak loop memory'i geriye doğru doldurmaya devam ediyor ve bir noktadan sonra crash ediyor gibi bir durum da söz konusu değil. 9 digit sonrası yeni unique bir digit yaratılamadığı için program "on goto"da kilitleniyor, memory junk data ile dolmuyor.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 08, 2017, 10:20:57 ÖÖ
Evet, sonsuz döngülü olan en altta çalıştırılınca problem çıkarmaz, zira programdan çıkamadığı için scroll edemeyecek. :D Ben o çözüm için değil sonsuz döngülü olmayan çözüm için yazmıştım.

Sonsuz döngülü olmayan çözümüne sadece scroll ederse ekrandan kaçacak konusunda itirazım var zaten. Poke kullanmana değil.

Bu arada ilgili çözümüne +1 byte ekleyerek scroll edince ekrandan kaçamayacak hale getiriyorum. 71 byte.

Kod:
0 inputa:fori=1toa
1 d=rnd(1)*9:one(d)goto1:printchr$(d+49);:e(d)=1:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 08, 2017, 11:25:52 ÖÖ
@delimawi: bu arada infinite loop bana 3 karakter kazandırıyor. goto1 yerine ifathen1 yazacak olursak olması gerektiği gibi çıkıyor da. senin 71 karakter versiyon for'suz da çalışabiliyor aynı şekilde;

Kod:
0 inputa
1 d=rnd(1)*9:one(d)goto1:a=a-1:printchr$(d+49);:e(d)=1:ifathen1

fark nerede dersen benim versiyon goto1 ile daha da kısalabiliyor. ama print kullanan versiyon ifathen1 yerine goto1 kullanamıyor. poke kullanımı 2, infinite loop 3 toplamda 5 byte avantajı var. ama ben 66 byte'ın da final olduğunu düşünmüyorum. işler yoğun, bir rahatlasın kafa yorucam. çok değil ama 1-2 byte daha uçar diye düşünüyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 08, 2017, 12:49:09 ÖS
Evet forsuz da oluyor ama kısalma anlamıda bir avantaj sağlamadığı için böyle bırakmıştım. C'deki gibi a-- olsaymış, iyi olacaktı. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 13, 2017, 01:43:08 ÖÖ
@wizofwor : Herkes yatmışken yeni soruyu alsak  ;D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 13, 2017, 14:00:22 ÖS
@wizofwor 'da soru kalmadı yada @iron senin assembler sorusuna takılı kaldı burayı unuttu :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 13, 2017, 15:00:01 ÖS
@wizofwor'da soru daha çoktur. Ben asal sayıları bekliyorum. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Mayıs 13, 2017, 20:36:05 ÖS
Tüm ustaları bir arada bulma şansını yakalamışken yarışma dışı olarak ben bir soru sorabilir miyim acaba? (Yada daha uygun olacak ise başka bir başlık olarak da açabilirim, silebilirsiniz...)

a={1,3,6,7,12}
b={5,6,8,12,15}
c=...
...
cevap: a kesişim b = 6,12
şeklinde

Bu iki veya daha fazla kümenin kesişimi nasıl alınabilir?

Ayrıntı olarak : Verileri biz gireceğiz a kümesi b kümesi (ismi farketmez), girilen sayılar artan sırada ve aynı olmayacaklar (aynı sayı iki kere girilmeyecek gibi). Mesela : 1 den 20 ye kadar olan bir grupta a kümesi 1,5,8 olarak girilecek. ikinci küme de aynı mantıkla girilecek ve program iki (veya daha fazla kümenin kesişimini bulacak)

Araya girdiğim için şimdiden affınıza sığınıyorum. Teşekkürler.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 13, 2017, 21:14:05 ÖS
Iki dizi icin birer index degiskeni olsun mesela.  Birinci dizideki birinci index degiskeninin gosterdigi degeri al. Ayni sekilde ikinci diziden ikinci index degiskeninin gosterdigi degeri al. Bu arada indexler baslangicta 0 olsun yani dizideki en kucuk elemani gostersin. Bu aldigin iki deger ayni ise kesisim kumesine dahildir. Eger ayni degilse hangisi kucuk ise o index degiskenini bir arttir kontrolu tekrarla. Bu islemi ilk dizi bitene kadar tekrarla. Aklima gelen ilk efektif algoritma bu...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: WildLord üzerinde Mayıs 13, 2017, 22:24:55 ÖS
Ustalar 3-5 satırda hallederler muhtemelen, ama çalışan bu örnek de bulunsun. Sayıların arasında , değil space kullanılacak.

5 a =0:b=0:c=0
11 input "a kumesini giriniz:";a$
21 input "b kumesini giriniz:";b$
25 for i=1 to len(a$)
26 c$=mid$(a$,i,1)
28 if c$=" " then a=a+1 :goto 30
29 a$(a)=a$(a)+c$
30 next
40 for i=1 to len(b$)
41 c$=mid$(b$,i,1)
42 if c$=" " then b=b+1 :goto 44
43 b$(b)=b$(b)+c$
44 next
45 print "a kesisim b =";
50 for i=0 to a
51 for j=0 to b
52 if a$(i)=b$(j) then c$(c)=a$(i):print c$(c);",";:c=c+1
53 next
54 next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Mayıs 14, 2017, 00:17:47 ÖÖ
Süpersiniz hocam. Basitçe temel mantığı yazabilir misiniz?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 14, 2017, 00:30:03 ÖÖ
Kod olarak benim algoritma böyle olabilir...
Kod:
10 a(0)=1:a(1)=3:a(2)=6:a(3)=7:a(4)=12
20 b(0)=5:b(1)=6:b(2)=8:b(3)=12:b(4)=15
30 ai=0:bi=0
40 if ai>4 or bi>4 then end
50 if a(ai)=b(bi) then print a(ai);:ai=ai+1:goto 40
60 if a(ai)<b(bi) then ai=ai+1:goto 40
70 bi=bi+1:goto 40


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 14, 2017, 00:31:22 ÖÖ
Kusura bakmayın yoğunluğumdan dolayı yeni soruyu ancak sorabiliyorum.

10 puanlık soruların sonuncusu olduğu için biraz basit tutmaya çalışacağım.

İkinci ismi bul
Girilen bir ismin içinden varsa ikinci ismi bulan bir program yazın.
Program ikinci isim yoksa boş değer döndürmeli.
Eğer ilk isimle soyad arasından birden fazla isim varsa hepsini döndürmeli.

Örnekler:
fatma sezen aksu : sezen
rabia demet sağıroğlu : demet
fatma yonca evcimik : yonca
haluk levent :

Not: "Pablo Diego José Francisco de Paula Juan Nepomuceno María de los Remedios Cipriano de la Santísima Trinidad Ruiz y Picasso" gibi uzun isimleri denemeyeceğim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 14, 2017, 00:43:45 ÖÖ
Daha kısası yolda...
Kod:
1 inputa$:fori=1tolen(a$):ifmid$(a$,i,1)=" "thenb=i:ifa=0thena=i
2 next:printmid$(a$,a,b-a)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: WildLord üzerinde Mayıs 14, 2017, 01:31:34 ÖÖ
10 input a$
12 for i=1 to len(a$)
14 if mid$(a$,i,1)=" " then a(b)=i:b=b+1
18 next
20 print mid$(a$,a(0)+1,a(b-1)-a(0))


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 14, 2017, 01:33:04 ÖÖ
-1 byte optimizasyon ...
Kod:
1 inputa$:fori=1tolen(a$):ifmid$(a$,i,1)=" "thena=a-(a=0)*i:b=i
2 next:printmid$(a$,a,b-a)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 14, 2017, 11:08:07 ÖÖ
Basic kodum

Kod:
0 for x=0to42: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,103,3,200,201
4 data 32,240,2,208,243,169,0,153
5 data 103,3,160,3,169,102,32,30
6 data 171,96,13

Basic kodun assembler açılımı (CBM prg Studio kullanıldı)
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 YAZ
        BNE L3
YAZ     LDA #$00         ; $AB1E'den dolayı dizi $00 ile bitmeli
        STA name+1,Y
        LDY #>name
        LDA #<name
        JSR $AB1E        ; yazdır
        RTS

name    BYTE $0D


Ekran görünütüsü
(https://s27.postimg.org/q0tlsf7mr/2017-05-14_11-06-10.png)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 14, 2017, 11:14:25 ÖÖ
@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.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde 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  >:(


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde 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

(https://s2.postimg.org/4t9w2uq49/2017-05-14_11-47-27.png)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde 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. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde 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


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde 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. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde 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)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde 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


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde 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


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde 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... :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde 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ı...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde 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ı.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 14, 2017, 23:16:51 ÖS
şimdi baktım "haluk levent :" örneklerin arasında varmış, o zaman doğru tespit.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde 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



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde 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?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde 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


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 15, 2017, 00:42:54 ÖÖ
ben de bel altı vurmayı denedim, 94 karakter ile elimde patladı... Ama değişik bir çözüm olarak çalışıyor... :D

Kod:
1 geta$:printa$;:k$(i)=k$(i)+a$:i=i-(a$=" "):ifa$<>chr$(13)then1
2 fort=1toi-1:printk$(t);:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 15, 2017, 00:57:15 ÖÖ
ben de bel altı vurmayı denedim, 94 karakter ile elimde patladı... Ama değişik bir çözüm olarak çalışıyor... :D

Kod:
1 geta$:printa$;:k$(i)=k$(i)+a$:i=i-(a$=" "):ifa$<>chr$(13)then1
2 fort=1toi-1:printk$(t);:next

HALUK LEVENT için LEVENT çıktısı var.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 15, 2017, 01:06:38 ÖÖ
Evet haklısın, 3 kelimeden az mı kontrolü gerekiyor buna... ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 16, 2017, 02:41:23 ÖÖ
Farklı çözümlerin hiçbiri yeterince kısa olmuyor ancak denemelerimin iki tanesini paylaşıyorum. İkisi de kurallara uyuyor. En az iki kelime ile çalışıyorlar, tek harf/kelime girilirse patlayabiliyorlar ama sanırım önceki çözümlerin çoğu da böyle zaten.

Sağdan soldan string'i scan etmeyi sub routine kullanarak yapmayı denedim. Kısa olmayacağını tahmin etmiştim ancak yine de "belki bir şekilde optimize edilir" diye yola çıktım. Tabii ki edilemedi. :)

Kod:
0 inputa$:d=1:gosub1:s=i:d=-1:i=len(a$):gosub1:printmid$(a$,s+2,i-s):end
1 i=i+d:ifpeek(512+i)>32then1
2 return

Bu ise çok daha temiz bir çözüm. Tek scan'de m(0)'da ilk space karakterini, m(m(0))'da ise son space karakteri ile ilki arasındaki karakter sayısını bırakıyor. Daha önemlisi her ikisini de mid$ beklediği değerler şeklinde hesaplıyor (index 1'den başlayacak şekilde). Ama yine de 93 byteları buluyor. Optimize edilse bile 82'nin altına düşmeyeceği aşikar.

Kod:
0 inputa$:fori=2tolen(a$):ifpeek(510+i)=32thenm(m(0))=i-m(0)
1 next:printmid$(a$,m(0),m(m(0)))

82 byte'lık çözümü ise bir iki byte kısaltmanın bir kaç farklı yolunu buldum ama hepsi belli kural dışı şeylerle son buldu. Örneğin doğru çalışıp error veren kısa versiyonlarım var. :) Şimdilik adam gibi bir çözüm bulmadıkça o versiyonları paylaşmıyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 16, 2017, 21:49:19 ÖS
İkinci çözümün güzelmiş. Bende bunun türevleri üzerine çalıştım ama 90 byteların altına inmedi...

Kod:
0 inputa$
1 s=asc(a$)>32:e=right$(a$,1)>" ":a$=mid$(a$,1-s,len(a$)+s+e):ife+sthen1
2 printa$


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 17, 2017, 01:10:47 ÖÖ
Biraz lame oldu ama 81 byte ... :D

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


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 17, 2017, 14:32:51 ÖS
Elimde şöyle bir versiyon var, senin son optimizasyonla birlikte 76 byte'a kadar düşüyor. Sıkıntı doğru sonucu yazdıktan sonra illegal quantity error vermesi. :)

Kod:
0 inputa$
1 i=i+1:ifpeek(511+i)=32thenprintmid$(a$,a+1,b*i-a);:a=i:b=1
2 goto1

edit: 2. kez çalıştığında da sorunlu bu versiyon, bunu es geçebilirsiniz :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 19, 2017, 16:12:41 ÖS
Sizin bu karşılıklı aşık atışması misali optimizasyonlarınızı okumak ne kadar zevkliyse, sıraya koyarak tasnif etmek de bir o kadar zor.

Üçüncü sorunun doğru cevabını açıklamamıştım. Delimawi'nin aşağıdaki 73 karakterlik kodu kazandı. Bu durumda delimawi:20 skate:10 puan oluyor.

Kod:
0inputa:fori=1toa
1d%=rnd(1)*9:ife(d%)goto1
2printchr$(d%+49);:e(d%)=1:next


4. soruyu da gözden kaçırdığım bir şey yoksa Skate'in aşağıdaki 80 karakterlik kodu kazanacak. 

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

Atladığım bir şey varsa yazın lütfen.
 


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: emarti üzerinde Mayıs 19, 2017, 21:21:14 ÖS
wizofwor 4. soru nerede çözümü basic ile uzun olsun mümkünse datalar ile 10 puan almak istiyorum :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wolfiem üzerinde Mayıs 19, 2017, 22:52:09 ÖS
wizofwor 4. soru nerede çözümü basic ile uzun olsun mümkünse datalar ile 10 puan almak istiyorum :)
:D

Her soruya basic & asm çözümlerini göndererek azimli katılımcı 10 puanını hakettin bence emarti ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 20, 2017, 00:14:46 ÖÖ
4. sorunun en kısa cevabı Skate'ten gelmiş oldu.

Bu durumda Delimawi ve Skate 20'şer puandalar.

5. Soru 20 puanlık soruların ilki olacak. Günün anlam ve önemine uygun bir soru düşündüm.
Biliyorsunuz eskiden 19 Mayıs'larda stadyumda öğrenciler kule yaparlardı. Biz de petscii karakteriyle kule yapacağız.

Soru 5: Altıgen Kulesi

Petscii karakterliyle oluşturulan altıngenleri üstü üste dizerek bir çizen bir program yazın.
Öyle ki:

1. Kulenin yüksekliği kullanıcı girişi ile belirlenecek. Ancak 1'ile 7 kat arasında olacak.
2. Sadece 1 ve 7 aralığındaki değerler test edilecek. (1 ve 7 dahil)
2. En üst katta 1 altıgen olacak. Katları indikçe altıgenlerin sayısı birer artacak.
3. İki altıgenin müşterek yüzü için tek karakter basılacak.
4. Programın çıktısı boş bir satıra alınacak. Yani eğer ekran belleğine poke ile karakter yerleştirecekseniz kullanacağız satırı önceden temizlemeniz gerekiyor.
5. Ekte örnek ekran çıktısı var. Kullanılacak karakterler SHITF+N, SHIFT+M ve SHIFT+'-'

   


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 20, 2017, 00:22:36 ÖÖ
Oooo tam @skate'lik soru gelmiş. Sabahlar olmasın, tam yatacaktım, gene takılıp kalıcam şimdi. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 20, 2017, 00:58:44 ÖÖ
Şöyle bir bodoslama başlangıç yapalım...
Kod:
0 inputa:printchr$(147):fori=1toa:forj=1toi:d=1040+j*4+i*78
1 poked,93:poked+4,93:poked-39,78:poked+43,78:poked-37,77:poked+41,77:nextj,i

Küçük bir optimizasyon:
Kod:
0 inputa:sys65409:fori=1toa:forj=1toi:d=1040+j*4+i*78    
1 poked,93:poked+4,93:poked-39,78:poked+43,78:poked-37,77:poked+41,77:nextj,i

Bir küçük optimizasyon daha...
Kod:
0 inputa:sys65409:fori=1toa:forj=1toi:d=1040+j*4+i*78:fors=0to1     
1 poked+s*4,93:poked+s*82-39,78:poked+s*78-37,77:nexts,j,i


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 20, 2017, 02:58:23 ÖÖ
@wizofwor : Sorular orjinal olarak senden çıkıyorsa hakikaten güzel sorular buluyorsun :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 20, 2017, 03:16:09 ÖÖ
121 Byte ...

Kod:
0 inputa:sys65409:s=1:fori=1toa:forj=1toi*2:d=1040+j*2+i*78+s    
1 s=-s:poked-s*2,93:poked-s*41,78:poked-s*39,77:nextj,i

EDIT: 119 byte

Kod:
0 inputa:sys65409:fori=1toa:forj=1toi*2:s=(j*2and2)-1:d=1042+j*2+i*78+s*3
1 poked,93:poked+s*39,78:poked+s*37,77:nextj,i


EDIT: 118 Byte

Kod:
0 inputa:sys65409:fori=1toa:forj=1toi*2:s=jand1:d=1042+j*2+i*78+s*6
1 poked+37,93:poked+s*78-2,78:poked+s*74,77:nextj,i


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 20, 2017, 12:08:28 ÖS
Benim 80 bytelık versiyon ikinci kez çalıştığında hatalı sonuç verebiliyor. delimawi'nin 81 bytelık versiyonu en kısa versiyon önceki soruda. Bir kaç gündür foruma giremedim, o yüzden zamanında cevap yazamadım, kusura bakmayın.

Yeni soru çok keyifli gözüküyor. Ancak biraz geç iştirak edebileceğim. Siz arada optimizasyonun dibine vurun. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 20, 2017, 12:22:20 ÖS
3. Sorunun sonuclarinda da sanirim bir karisiklik var. Poke ile calisan daha kisa versiyonlar vardi hatirladigim kadari ile ama kabul edilmedi mi acaba o cozumler? Skate senin scroll edilince kaybilabilen ama daha kisa olan cozumun vardi benim de kaybolmayan ama 1 byte uzunu vardi diye hatirliyorum...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 20, 2017, 14:35:14 ÖS
Benim 80 bytelık versiyon ikinci kez çalıştığında hatalı sonuç verebiliyor. delimawi'nin 81 bytelık versiyonu en kısa versiyon önceki soruda. Bir kaç gündür foruma giremedim, o yüzden zamanında cevap yazamadım, kusura bakmayın.

Atladığım bir şey varsa diye sormamın sebebi buydu. Programı bir kaç kez denedim ancak o hatalı sonuca denk gelmedim veya farketmemişim. O halde puan delimawi'ye gidiyor.

Sıralama: delimawi:30, skate:10 şeklinde oluyor.

3. Sorunun sonuclarinda da sanirim bir karisiklik var. Poke ile calisan daha kisa versiyonlar vardi hatirladigim kadari ile ama kabul edilmedi mi acaba o cozumler? Skate senin scroll edilince kaybilabilen ama daha kisa olan cozumun vardi benim de kaybolmayan ama 1 byte uzunu vardi diye hatirliyorum...


3. soruda poke ile çalışan çözümlerde çıktılar ekran temizlenmeden basıldığı için ikinci ve sonraki çalıştırmada rakamlar üst üste geliyordu. Çıktının ne olduğu anlaşılmıyordu. Bu yüzden değerlendirme dışı kabul ettim.

@wizofwor : Sorular orjinal olarak senden çıkıyorsa hakikaten güzel sorular buluyorsun :)

Sorular orjinal değil. Takip ettiğim bir platformdan beğendiğim soruların Basic 2.0'a uygun olanlarını yerelleştirerek kullanıyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 21, 2017, 04:53:10 ÖÖ
@delimawi: ben hızlı bir örnek yaptım ama müşterek yüzlerde ortak karakter basıyordu. sonra seninkini inceledim, seninki de basıyor. debug amaçlı olarak aşağıdaki kodu denersen göreceksin. space'e basa basa ilerle.

Kod:
0 inputa:sys65409:fori=1toa:forj=1toi*2:s=jand1:d=1042+j*2+i*78+s*6
1 poked+37,93:poked+s*78-2,78:poked+s*74,77
2 f=d+54272:pokef+37,i:pokef+s*78-2,i:pokef+s*74,i
3 geta$:ifa$=""then3
4 nextj,i


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 21, 2017, 05:04:28 ÖÖ
Hiç optimize etmeden gönderiyorum. Sadece kurallara tam uyan böyle bir şey sanırım.

Kod:
0 sys58692:inputa:fori=1toa:forj=1toi:poke214,i*2:print:poke211,16-i*2+j*4
1 print"N M";spc(36);"B   B":nextj,i:poke211,20-a*2:forj=2toi:print"M N ";:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 21, 2017, 05:24:12 ÖÖ
Kod:
0 a$(0)="N M":a$(1)="B   B":inputa
1 fori=0toa*2-1:forj=0toi/2:poke211,16-i+j*4:printa$(iand1);
2 next:print:next:poke211,18-i:forj=1toa:print"M N ";:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 21, 2017, 06:18:43 ÖÖ
145 byte versiyon.

Kod:
0 inputa:fori=1toa*2:forj=1to.5+i/2:pO211,16-i+j*4:?mI("B   BN M",6^(iand1),5);
1 next:print:next:poke211,22-i:forj=1toa:print"M N ";:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 21, 2017, 06:49:32 ÖÖ
@skate, 3 nolu maddeyi sanirim yanlis yorumluyuyoruz. @wizofwor a soralim.

Bence tek karakter basilacak derken soylenmek istenilen yazilim tarafinda kac defa ust iste karakter basildigi degil ciktida tek karakter gorunmesi.

Yani her bir altigen bir birinden izole gorunmeyecek seklinde yorumladim ben. Asagidaki gibi olmayacak yani...

 / \  / \  / \
|   ||   ||   |
 \ /  \ /  \ /


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 21, 2017, 06:54:13 ÖÖ
bence unique karakter kast edilmiş, overwrite etmeyecek. benim anladığım o.

143 byte

Kod:
0 inputa:fori=1toa*2:forj=.5toi/2:pO211,18-i+j*4:?mI("B   BN M",6^(iand1),5);
1 next:print:next:poke211,22-i:fori=1toa:print"M N ";:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Mayıs 21, 2017, 09:41:24 ÖÖ
Kod:
0inputa:leth=1024:foru=1to800:pokeh,32:h=h+1:next
1fori=1toa:forj=1toi:d=1040+j*4+i*78:fors=0to1
2poked+s*4,93:poked+s*82-39,78:poked+s*78-37,77:nexts,j,i

Daha uzun bir kod. Delimawi hocamızın kodunu alıp üst kısmı temizleme düşünülerek yapılmış bir çalışma.
(Başta güzel ama en alt satıra gelince kule üste kayıyor ve üst kısmı görüntüden gidiyor  ::) )


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 21, 2017, 23:11:01 ÖS
bence unique karakter kast edilmiş, overwrite etmeyecek. benim anladığım o.

Benim bir önceki algoritmada yakaladığım 118 byte'ı tutturamadım ama bu durumda tek loop içime sinen çözüm:

119 byte :D

Kod:
0 inputa:b$=" B":fory=1toa:c=19-y*2:a$=a$+"N M ":b$=b$+"   B"
1 printspc(c)a$spc(c*2)b$:next:printspc(c)mid$(a$,3,99)"N"

@hakankaptan, ellerine sağlık ancak zaten o üstlerdeki karışık olan kısımlar, basit ama uzun olan bir kodu kısaltırken ortaya çıkan sonuçlardı.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 21, 2017, 23:22:22 ÖS
Oldu oldu, 115 Byte ... :)

Kod:
0 inputa:fory=1toa:c=19-y*2:a$=a$+"N M ":b$=b$+"   B"
1 printspc(c)a$spc(c*2)" B"b$:next:printspc(c)mid$(a$,3,99)"N"


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 21, 2017, 23:54:12 ÖS
Senin bir önceki lame değildi ama bu lame işte. :) 112 byte

Kod:
0 inputa:fory=1toa:c=19-y*2:a$=a$+"N M ":b$=b$+"   B"
1 printspc(c)a$spc(c*2)" B"b$:next:printspc(c)mid$(a$,3)"N"


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 21, 2017, 23:56:53 ÖS
Benim yayınlanmamış versiyonlarda bu trick kullanılıyordu. Buraya da ekleyeyim.

110 byte

Kod:
0 inputa:fory=1toa:c=19-y*2:a$=a$+"N M ":b$=b$+"   B
1 printspc(c)a$spc(c*2)" B"b$:next:printspc(c)mid$(a$,3)"N

Basic parser satır sonundaki tırnak kapanmasa da sorun çıkarmıyor.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 22, 2017, 07:13:40 ÖÖ
Hadi bee gitti 20 puan diyecektim ama bu tricklerin ikisini de bilmiyordum ki. :) Sabaha kadar baksam aklima gelmezdi zaten. 20 puana iki trick ogrendim. ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 22, 2017, 09:00:51 ÖÖ
@skate, 3 nolu maddeyi sanirim yanlis yorumluyuyoruz. @wizofwor a soralim.

Bence tek karakter basilacak derken soylenmek istenilen yazilim tarafinda kac defa ust iste karakter basildigi degil ciktida tek karakter gorunmesi.

Yani her bir altigen bir birinden izole gorunmeyecek seklinde yorumladim ben. Asagidaki gibi olmayacak yani...

 / \  / \  / \
|   ||   ||   |
 \ /  \ /  \ /

delimawi doğru yorumluyor tek karakter basılacaktan kastım çıktıda tek karakter görünmesiydi. Sadece çıktıyı kontrol ettiğim için, şekil doğru olduğu sürece karakterlerin üst üste basılmasını sorun etmiyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 22, 2017, 09:02:58 ÖÖ
Neyse mid$ sız 107 byte, bakalım bu soru daha ne kadar kısalacak...

Kod:
0 inputa:fory=1toa:c=20-y*2:b$=b$+"   B
1 printspc(c)" N"a$" M"spc(c*2)"B"b$:a$=a$+" M N":next:printspc(c)a$


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 22, 2017, 09:05:06 ÖÖ
delimawi doğru yorumluyor tek karakter basılacaktan kastım çıktıda tek karakter görünmesiydi. Sadece çıktıyı kontrol ettiğim için, şekil doğru olduğu sürece karakterlerin üst üste basılmasını sorun etmiyorum.

@wizofwor, abi zaten kod o kadar evrildi ki, tek loop çözümler daha efektif şu aşamada, o soru zamanaşımı oldu... :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 12:19:01 ÖS
@delimawi, kesinlikle kazanmayı sen hak ettin ama... :)

106 byte

Kod:
0 inputa:fory=1toa:c=20-y*2:b$=b$+"   B
1 printspc(c)"N "a$"M"spc(c*2)"B"b$:a$=a$+"M N ":next:printspc(c)a$


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 22, 2017, 12:25:41 ÖS
@skate, ipi göğüsleyen kazanır. ;)
O boşluklardan çok işkillenmiştim zaten ama sabah fazla vakit ayıramadım...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 12:29:45 ÖS
bu arada bir de uğraştığım salak çözümlerden birini paylaşmak istiyorum.

öncelikle 93 bytelık şu versiyonu elde ettim. ilk satıra fazladan pipe, son satırın başına sonuna fazladan / \ ekliyor.

Kod:
0 inputa:fory=0toa:c=19-y*2
1 printspc(c)"B"b$spc(c*2)"N "a$"M":a$=a$+"M N ":b$=b$+"   B":next

bunu 106 byte'lık versiyondan daha kısa bir yöntemle kurallara uygun hale getirmek zor ama en azından ilk pipe karakterini yok etmek için ekstra değişken kullanmaktan daha kısa olabileceğini düşünerek şöyle bir şey denedim. ASM'de klasiktir ama Basic'de ilk kez denemiş oldum.

Kod:
0 inputa:fory=0toa:c=19-y*2
1 printspc(c)" "b$spc(c*2)"N "a$"M":a$=a$+"M N ":b$=b$+"   B":poke2081,194:next

Basic'den ilk self modifying code denemem olarak kayıtlara geçsin lütfen. :D Tabii c$=" ", sonrasında c$="|" kullanarak da aynı çözüm daha temiz biçimde uygulanabiliyor. Sonuç olarak poke source'u değiştirdiği için ikinci kez düzgün çalışmıyor. Eğlencelik olarak paylaşıyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 22, 2017, 12:36:23 ÖS
Hahahah, bu güzelmiş... Yıllar önce henüz c falan bilmiyorken, bir arkadaşın "basic de recursion yapamazsın onun için c daha iyidir" demesi çok ağırıma gitmişti, basic ile kendi sctack'imi array değişkenler içinde tutup "recursive" çalışabilen bir kod yazmıştım, o geldi aklıma... :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 12:50:11 ÖS
bu arada wizofwor'un açıklamasından sonra daha kısa yöntem buldum. daha da epey kısalır gibi. eski metod'u unutun. :) 100 byte'ın altına iner bu. ben hep karakterler çakışmayacağa takılmıştım.

103 byte optimize edilmemiş versiyon

Kod:
0 inputa:fori=1toa:forj=1toi:poke214,i*2:print:poke211,16-i*2+j*4
1 print"N Mq....B   Bq....M N":nextj,i

doğrudan copy & paste çalışmaz, q.... olan kısımlar
<cursor down><cursor left><cursor left><cursor left><cursor left>
olacak.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 13:08:33 ÖS
94 byte

Kod:
0 inputa:fori=1toa:print:printspc(61-i*2);:forj=1toi
1 print"N Mq....B   Bq....M NQQ]";:nextj,i

q = <cursor down>
. = <cursor left>
Q = <cursor up>
] = <cursor right>


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 13:25:58 ÖS
86 byte

Kod:
0 inputa:fori=1toa:print:printspc(60-i*2);:forj=1toi:print"BqM NQBQ....N Mq";
1 nextj,i


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 22, 2017, 13:41:39 ÖS
@Skate:

Cursor tuşları için petcat kodlarını kullanabilirsin.
{down}{left}{right}{up}

Tabi bu şekilde text editörde karakter sayısı fazla görünecek. Onu da parmak hesabıyla düzeltiriz artık :p


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 13:43:01 ÖS
Öyle de yapsam copy&paste ile aktarılamıyor Vice'a. Vice'dan copy ettiğim haliyle paste ediyorum buraya. Doğrudan copy&paste sağlamadıkça tek tek uğraşmaya gerek yok.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 22, 2017, 13:47:34 ÖS
Ben de aşağıdaki cümleden kontrol karakterlerinden sadece bu 3 tanesi kullanılabilir diye anlamıştım copy/paste sebeplerinden ötürü, yanlış anlamışım. Bu mantık aklıma geldi ama hiç üzerine bile gitmedim... :/

Alıntı
Kullanılacak karakterler SHITF+N, SHIFT+M ve SHIFT+'-'

Ben de tam aşağıdaki yöntemi optimize etmeye girişiyordum, kaldım lök gibi kod karşımda ... :D

Kod:
0 inputa:fory=0toa*2:c=(y=a*2)+y-1:a$="N M "+a$+"   B
1 printspc(19-c)mid$(a$,(yand1)*(y*4+7)-c+y,2*c+5):next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 13:54:37 ÖS
Patcat formatı da şöyle bir şey olsa gerek. Test edemedim henüz.

Kod:
0 inputa:fori=1toa:print:printspc(60-i*2);:forj=1toi:print"B{DOWN}M N{UP}B{UP}{4 LEFT}N M{DOWN}";
1 nextj,i

Edit: Denedim, çalışıyor. Kullanım biçimi;

petcat -o basic_output.prg -w2 basic_source.txt


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 13:56:00 ÖS
@delimawi: Ben ilk başta bu yöntemi kullanacaktım ama unique karakter olayını yanlış anladığım için hiç girişmedim. Wizofwor benim yanlış anladığımı açıkladığı anda aklıma tekrar bir göz atmak geldi. Aslında ilk başta yanlış anlamış olmasam ilk deneyeceğim şey buydu. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 22, 2017, 13:57:31 ÖS
Ben de benzer yöntemi kullanırken özellikle poke kullanmıştım kontrol karakterleri meselesini yanlış anladığımdan dolayı. Hatta ekranı silmek için bile SYS atmıştım başa CLR karateri kullanmamak adına...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 14:13:19 ÖS
Bu arada print"{CLR}" ile sysxxxxx her ikisi de 8 karakter kaplıyor. Ancak satır sonunda kullanılırsa print"{CLR} şeklinde 7 karakter ile sys'ye 1 byte fark atıyor. Bunu da dip not olarak düşeyim. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 22, 2017, 14:15:42 ÖS
Öyle de yapsam copy&paste ile aktarılamıyor Vice'a. Vice'dan copy ettiğim haliyle paste ediyorum buraya. Doğrudan copy&paste sağlamadıkça tek tek uğraşmaya gerek yok.

Ben IDE üzerinden çalıştırdığım için onun farkında değilim. Yapıştırdıktan sonra gerekli kodları ekleyerek hallediyorum. Hepsi bir yerde olduğu için problem olmuyor.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 14:20:14 ÖS
Ben 256 byte ASM kodlarının başında sinüs tablosu hesaplatmaya yönelik olarak kullanmak haricinde C64 basic'ini en son 90'lı yılların ilk yarısında kullanmış biri olarak 2017'de normal şartlarda ölsem bir daha CBM basic kodu yazmam diyordum. Bu yarışmayı ilk duyduğumda da "peeeh" dedim, sonra acayip sardım. :D Teşekkürler @wizofwor. Gel gör ki madem 2017'de c64 basiciyle uğraşıyorum, doğrudan c64 üzerinde (Vice) uğraşıyorum. 2 satır basic kodunu da Vice'dan yazalım artık... :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 14:34:47 ÖS
85 byte

Kod:
0 inputa:fori=1toa:print:printspc(60-i*2);:forj=1toi:print"B{DOWN}M N{UP}B{UP}{4 LEFT}N M{DOWN}";:nextj,i

Satırı elle girmek isteyen varsa printleri ? olarak yazabilir.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 14:53:07 ÖS
Hakkıyla tek satır :)

79 byte

Kod:
0 inputa:fori=1toa:printtab(99-i*2);:forj=1toi:print"B{DOWN}M N{UP}B{UP}{4 LEFT}N M{DOWN}";:nextj,i


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 14:54:43 ÖS
78 byte

Kod:
0 inputa:fori=1toa:printtab(99-i*2):forj=1toi:print"B{DOWN}M N{UP}B{UP}{4 LEFT}N M{DOWN}";:nextj,i


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: i_r_on üzerinde Mayıs 22, 2017, 15:11:12 ÖS
Aşık atışmasına çevirdiniz resmen işi :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 15:13:29 ÖS
Siz de katılın, threesome, orgy falan olsun. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 15:22:34 ÖS
Bu arada cursor'ın bir üst satırda kalması eğer kurallara aykırı diye düşünüyorsanız sonuna bir :print eklenir ki bu da 6 byte daha ekler çözüme. Bence o print olmadan da sonuç düzgün çünkü ready. çizim alanının üstüne gelmiyor. Ama son satırın üstüne gelmesi dert edilirse dediğim gibi 6 byte daha ekleyin sonuca.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 22, 2017, 15:36:21 ÖS
@skate, yavaş git. Gün içi iş yoğunluğundan bakamadım. Akşama traşlanacak birşeyler kalsın bana da... :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 15:37:31 ÖS
Benim de yoğun bir günüm ama multitask çalışıyorum. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 16:33:39 ÖS
74 byte

Kod:
0 inputa:a$="B{DOWN}M N{UP}B{UP}{4 LEFT}N M{DOWN}":fori=0toa:printtab(99-i*2)b$;:b$=b$+a$:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 16:36:32 ÖS
73 byte

Kod:
0 inputa:a$="B{DOWN}M N{UP}B{UP}{4 LEFT}N M{DOWN}":fori=0toa:printtab(60-i*2)b$:b$=b$+a$:next

Not: Sona yaklaştık, eğer ulaşmadıysak. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 16:48:07 ÖS
@delimawi: akşama alternatif denerken bu versiyona ulaşacaksın. işini kolaylaştırayım, 1 byte daha uzun oluyor. :)

Kod:
0 inputa:a$="B{DOWN}M N{2 UP}{3 LEFT}N M{DOWN}":fori=0toa:printtab(60-i*2)b$"B":b$=b$+a$:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 17:00:35 ÖS
Gereksiz boşluklardan ve loopun fazla saymasından temizlenmiş son versiyon. Aklıma yeni bir trick gelmedikçe kendi adıma sona ulaştım diyebilirim.

73 byte

Kod:
0 inputa:a$="B{DOWN}M N{UP}B{UP}{4 LEFT}N M{DOWN}":fori=1toa:b$=b$+a$:printtab(60-i*2)b$:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 19:30:09 ÖS
Yarışma dışı eğlencelik versiyon. :)

Kod:
0 a$="{DOWN}{2 LEFT}MBN{2 UP}{3 LEFT}NBM{DOWN}{LEFT}CW{LEFT}":fori=1to9:b$=b$+"WC"+chr$(48+i)+a$:printtab(60-i*2)b$:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 22, 2017, 20:50:36 ÖS
..


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 22, 2017, 21:44:08 ÖS
ilk versiyondan kalan bir şeydi. :)

sen bana kodunda a$ değil de b$ kullanma nedenini açıkla yeter. :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 22, 2017, 21:53:00 ÖS
Bu son lame kodumdan mı bahsediyorsun? :D
Sen kodunda tek a$ kullandığın için doğrudan oraya içeriği paste ettim, b$ öylece kaldı...

Aslen bunu yem olarak bırktığını düşünüyorum hala. Biri oltaya takılınca yapıştıracaksın gibi geliyor bir 64 byte...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: hades üzerinde Mayıs 23, 2017, 00:07:24 ÖÖ
Bu optimizasyonla windozu baştan yazsanız 100'de 1'i kadar kaplar harddiskte :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 23, 2017, 02:28:46 ÖÖ
Bu optimizasyonla windozu baştan yazsanız 100'de 1'i kadar kaplar harddiskte :)

...ve kablumbağa hızında çalışır. :) işletim sistemi yazarken hız optimizasyonunu ön planda tutmak daha iyi sonuç verir kanaatindeyim. Ama illa da az yer kaplayan OS diyorsan 1.44 floppy'e sığanı var.

http://menuetos.net/ (http://menuetos.net/)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 24, 2017, 09:52:09 ÖÖ
Son gönderdiğim cevabı geri çekiyorum, zira aslen bir optimizasyon içermiyor. Daha kısası gelmediği için bu notu düşme gereği hissettim. Bu soru bu yöntem ile @skate'in hakkı... :)



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 24, 2017, 11:19:02 ÖÖ
Son gönderdiğim cevabı geri çekiyorum, zira aslen bir optimizasyon içermiyor. Daha kısası gelmediği için bu notu düşme gereği hissettim. Bu soru bu yöntem ile @skate'in hakkı... :)

Cevabı silmek yerine üstünü çizseydin keşke. Değerlendirme dışı da olsa en kısa cevap yine oydu. Neyse bu durumda skate unuttuğu gereksiz değişkeni kaldırarak tekrar yazar artık.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 24, 2017, 17:25:32 ÖS
skate unuttuğu gereksiz değişkeni kaldırarak tekrar yazar artık.

Tabii ki yazmam. :)

Cidden bu işi hırsla yapacak adama benziyor muyum? :) Delimawi benim gerçekten saatlerce baktığım kodda göremediğim şeyi görmüş (çünkü ben oraya bakmıyordum, 16 hamleden kısa hexagon çizdirmeye odaklanmıştım). Yani son derece Delimawi'nin hakkıdır, mesajı tekrar eski haline getirmesi yeterli olacaktır.

Benim aklımdan geçen şey Delimawi ile süper coop kod yazdığımız ve bunu gerek scene, gerek profesyonel hayatta kullanmamız gerektiği. Yok kodu ben yazmışım da başkası kısaltmış, inanın aklımdan geçen en son şey ki önceki sorularda aynısını ben de yaptım.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 25, 2017, 01:28:23 ÖÖ
Mantıken çalışmıyor olması lazım ama çalışıyor. Hmmm... :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 25, 2017, 12:16:49 ÖS
Hahahaha güzel trick, sandalyeden düşüyordum... ;)
61 byte desek mi acaba? Bence dememiz lazım, sayınca 61 byte ne de olsa... :P



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 25, 2017, 12:36:43 ÖS
Aslında amacım delete char kullanarak bir optimizasyon yapmaktı ama arada maymunluğa vurdum işi. Aşağıdaki de iyiden iyiye eğlencelik oldu. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 25, 2017, 13:08:34 ÖS
Ben de insert keycodunu kullanabilir miyim diye uğraştım durdum. Olmadı...
Sağa sola git gel yapmak yerine sağa kadıra kaydıra olur gibi hissetmiştim halbuki.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 25, 2017, 13:11:51 ÖS
Bir de uğraştığım bir başka optimizasyon, A$=A$+"..." yerine A$="..."+A$+"..." yapmaktı. Bu sayede her bir satır aynı hizadan başlayabilecekti. 60-i*2 de kullandığın *2 yi A$="ll"+A$+"..." şeklinde yedirecektim sözde. Hatta bir de en başta ekranın ortasından başlayabilsem, print sonrasında tab vb de kullanmaya gerek kalmayacaktı.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 25, 2017, 14:10:17 ÖS
A$="..."+A$+"..." şeklinde nasıl çalışacağını tam anlayamadım. Sağ sol yarım yarım çizdirsek ikinci satırda nerden başlayıp ne yapacak? Kafamda ikinci satırdan sonrası canlanmadı.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 25, 2017, 14:37:28 ÖS
En azından her seferinde a$ içerisine, iki kere sola git karakteri eklersen, her satırda i*2 kere sol giderek çizime başlayacak. 60-i*2 yarine sadece tab(60) yazman yeterli olacaktı... Tabi daha kısa olsaydı.

Ayrıca yarın çizdirmek ile ilgili olarak da şöyle bir çözüm var ama gene daha kısa olmuyor.

Aşağıdaki kısım print komutu sonrasında sabit olacak,
 /
|
 \

A$ içerisine eklenecek bölüm aşağıdaki olacak
\ /
 |
/ \

Son olarak gene print komutu sonunda
\
 |
/

olacak.

Yani print"...."A$"...."

Bunu yaparak ne kazanmayı hedefliyordun dersen de, 5x3 karakterlik bölüme çizdirmek yerine, 4x3 karakterlik bölüme çizdirerek 16 karakterden daha kısa çizim yapmış olacaktım. "Sözde" :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 26, 2017, 23:51:25 ÖS
Yanılmıyorsam bu turu skate kazandı ve puan durumu 30-30 oldu. Şimdi şu weird'leri açıklayabilir misiniz?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 27, 2017, 00:00:39 ÖÖ
Ben de saat 00.00 oldu yeni soru yok diye mesaj atacaktım. ;) weird'i sahibi açıklayacaktır sanırım. Ama merak edenler prg dosyası içeriğini bir hex editor ile goruntuleyip list ile alinan cikti arasinda ne gibi bir farklilik var acaba diye inceleyebilir mesela...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 00:34:13 ÖÖ
Basic'de delete karakteri (reverse on (CTRL+9) ile T harfine denk geliyor) tırnak içinde yazıldığında çıktı içinde normal delete işlevi gördüğü gibi basic listingde de delete şeklinde çalışıyor (bana sorarsanız ciddi bir bug bu). Kısacası {3 LEFT} yerine {3 DEL} yazdığında aynı sonucu elde ederken basic listing'de sanal bir kısalma meydana geliyor. Hem delete char çizilmiyor, hem de basic kodunun o ana kadar yazılmış karakterleri siliniyor. Dolayısıyla 3 DEL karakteri 6 karakter daha kısa bir basic listing elde edilmesini sağlıyor. PRG üzerinde oynanmışlık yok, doğrudan basic'den yapılabilen bir şey.

Weird2 için ekteki PNG'yi inceleyebilirsiniz.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 27, 2017, 00:58:16 ÖÖ
Bir basic numarası daha öğrenmiş olduğumuza göre artık 6. soruya geçebiliriz.

Soru 6: Yıldız
Bitmap modunda 48 karakter genişliğinde 5 köşeli yıldız çizen bir program yazın.
- Şeklin içi boş veya dolu olabilir.
- Şeklin yüksekliği önemli değil.
- Şeklin kapalı çizgilerden oluşması şart değil. Ayrı pixellerden oluşabilir ancak dolu pixellerin arasında 2 pixelden fazla boşluk olmaması gerekiyor.
- Şeklin zeminin temizlenmesi gerekiyor. Ekranın geri kalanında garbadge data olabilir. (Tüm ekranı temizlemek çok zaman alıyor.)

Ekte örnek çizimi görebilirsiniz.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 27, 2017, 09:18:03 ÖÖ
Bu ornek 24 karakter genisliginde mi?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 14:20:35 ÖS
Screenshottaki ile aynı koordinatları kullanan ama linelarda arada boşluk bırakmayan ilk versiyon:

253 byte

Kod:
0 poke53265,59:poke53272,24:fori=8192to10431:pokei,0:next:print"{CLR}
1 fori=0to49:x=25+i/2and63:y=i:gosub3:x=50-x:gosub3:x=i:y=16:gosub3
2 y=y+i*0.7:gosub3:y=51-i*0.7:gosub3:next:wait0,0
3 a=8192+320*int(y/8)+(yand7)+(xand56):pokea,peek(a)or2^(7-xand7):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 14:24:20 ÖS
249 byte

Kod:
0 poke53265,59:poke53272,24:fori=8192to10431:pokei,0:next:print"{CLR}
1 fori=0to49:x=25+i/2and63:y=i:gosub3:x=50-x:gosub3:x=i:y=16:gosub3
2 y=y+i*0.7:gosub3:x=50-i:gosub3:next:wait0,0
3 a=8192+320*int(y/8)+(yand7)+(xand56):pokea,peek(a)or2^(7-xand7):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 14:35:07 ÖS
247 byte

Kod:
0 poke53265,59:poke53272,24:fori=8192to10431:pokei,0:next:print"{CLR}
1 fori=0to49:x=25+i/2or0:y=i:gosub3:x=50-x:gosub3:x=i:y=16:gosub3
2 y=y+i*0.7:gosub3:x=50-i:gosub3:next:wait0,0
3 a=8192+320*int(y/8)+(yand7)+(xand56):pokea,peek(a)or2^(7-xand7):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 14:51:44 ÖS
246 byte

Kod:
0 poke53265,59:poke53272,24:fori=8192to10431:pokei,0:next:print"{CLR}
1 fori=0to49:x=25+i/2or0:y=i:gosub3:x=50-x:gosub3:x=i:y=16:gosub3
2 y=y+i*0.7:gosub3:x=50-i:gosub3:next:wait0,0
3 a=8192+40*(yand56)+(yand7)+(xand56):pokea,peek(a)or2^(7-xand7):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 15:18:58 ÖS
244 byte

Kod:
0 poke53265,59:poke53272,24:fori=8192to10431:pokei,0:next:print"{CLR}
1 fori=0to49:x=25+i/2or0:y=i:gosub2:x=50-x:gosub2:x=i:y=16:gosub2:y=y+i*.7:gosub2:x=50-i:gosub2:next:wait0,0
2 a=8192+40*(yand56)+(yand7)+(xand56):pokea,peek(a)or2^(7-xand7):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 27, 2017, 15:25:41 ÖS
Merkaımdan soruyorum, wait0,0 ile end in ne farkı var?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 15:38:11 ÖS
@delimawi: end dediğinde program sonlandığı için READY. yazısı ekrana gelir ve hires bitmap'de video memory renkleri belirlediği için saçma sapan renkler çıkar. wait0,0 lock ediyor programı. x gotox ile aynı yeri kaplıyor ama kodu bir satır daha uzatmıyor.

24 karakter genişliği lafında hata olduğunu düşünüyorum ancak öyle olacaksa da bu 24 karakter genişliğinde, hemen hemen fullscreen olan versiyonu. Optimize etmeye uğraşmadım. Şu boyut olayı netleşsin, ona göre devam edeceğim optimizasyonlara.

250 byte

Kod:
0 poke53265,59:poke53272,24:fori=8192to16191:pokei,0:next:print"{CLR}
1 fori=0to192:x=96+i/2or0:y=i:gosub2:x=192-x:gosub2:x=i:y=61:gosub2:y=y+i*.69:gosub2:x=192-i:gosub2:next:wait0,0
2 a=8192+40*(yand248)+(yand7)+(xand248):pokea,peek(a)or2^(7-xand7):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 15:47:03 ÖS
24x24'ün 249 byte versiyonu.

Kod:
0 poke53265,59:poke53272,24:fori=8192to16191:pokei,0:next:print"{CLR}
1 fori=0to192:x=96+i/2or0:y=i:gosub2:x=192-x:gosub2:x=i:y=59:gosub2:y=y+i*.7:gosub2:x=192-i:gosub2:next:wait0,0
2 a=8192+40*(yand248)+(yand7)+(xand248):pokea,peek(a)or2^(7-xand7):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 15:57:56 ÖS
Screenshottaki versiyon üzerinden yürüyorum. Ekranın biraz fazlasını sildiriyor ama;

241 byte

Kod:
0 poke53265,59:poke53272,24:fori=6^5to5^6:pokei,0:next:print"{CLR}
1 fori=0to49:x=25+i/2or0:y=i:gosub2:x=50-x:gosub2:x=i:y=16:gosub2:y=y+i*.7:gosub2:x=50-i:gosub2:next:wait0,0
2 a=8192+40*(yand56)+(yand7)+(xand56):pokea,peek(a)or2^(7-xand7):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 16:24:19 ÖS
240 byte

Kod:
0 s=56:poke53265,s:poke53272,24:fori=6^5to5^6:pokei,0:next:print"{CLR}
1 fori=1tos:x=28+i/2or0:y=i:gosub2:x=s-x:gosub2:x=i:y=18:gosub2:y=y+i*.7:gosub2:x=s-i:gosub2:next:wait0,0
2 a=8512+40*(yands)+(yand7)+(xands):pokea,peek(a)or2^(7-xand7):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 16:30:43 ÖS
239 byte

Kod:
0 s=56:poke53265,s:poke53272,24:fori=6^5to5^6:pokei,0:next:print"{CLR}
1 fori=1tos:x=28+i/2:y=i:gosub2:x=s-x:gosub2:x=i:y=18:gosub2:y=y+i*.7:gosub2:x=s-i:gosub2:next:wait0,0
2 a=8512+40*(yands)+(yand7)+(xands):pokea,peek(a)or2^(7-(xand7)):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 16:37:24 ÖS
READY. çizim alanının üstüne gelince kötü görünüyor ama biraz aşağıya çizim yapıldığında sorun çıkarmadığı için çizimi aşağı aldım ve delimawi'nin de belirttiği gibi programı end ile sonlandırdım.

Hazır sildirmişken de tüm ekranı sildirdim. :)

235 byte

Kod:
0 s=56:poke53265,s:poke53272,24:fori=6^5to4^7:pokei,0:next:print"{CLR}
1 fori=1tos:x=28+i/2:y=i:gosub2:x=s-x:gosub2:x=i:y=18:gosub2:y=y+i*.7:gosub2:x=s-i:gosub2:next:end
2 a=9792+40*(yands)+(yand7)+(xands):pokea,peek(a)or2^(7-(xand7)):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 16:42:27 ÖS
Hatta dirty trick diyebilirsiniz ancak ekranda çıkan renklerin ne olduğunun bir önemi var mı? :) Bence valid.

231 byte

Kod:
0 s=56:poke53265,s:poke53272,24:fori=6^5to4^7:pokei,0:next:print"{CLR}
1 fori=1tos:x=28+i/2:y=i:gosub2:x=s-x:gosub2:x=i:y=18:gosub2:y=y+i*.7:gosub2:x=s-i:gosub2:next
2 a=9792+40*(yands)+(yand7)+(xands):pokea,peek(a)or2^(7-(xand7)):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 16:46:41 ÖS
Bir satıra bu kadar kod sığar mı derseniz petcat sığdırıyor. :)

230 byte

Kod:
0 s=56:poke53265,s:poke53272,24:fori=6^5to4^7:pokei,0:next:fori=1tos:x=28+i/2:y=i:gosub1:x=s-x:gosub1:x=i:y=18:gosub1:y=y+i*.7:gosub1:x=s-i:gosub1:next:print"{CLR}
1 a=9792+40*(yands)+(yand7)+(xands):pokea,peek(a)or2^(7-(xand7)):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Mayıs 27, 2017, 17:18:30 ÖS
Hazır ustalarımız coştururken araya espri katayım dedim  ::)

Kod:
0 ?"      *      "
1 ?"     ***     "
2 ?"*************"
3 ?" *********** "
4 ?"  *********  "
5 ?"   *******   "
6 ?"   *******   "
7 ?"  ***   ***  "
8 ?" **       ** "
9 ?"*           *"

Belki pokedir datadır sprite ile birşeyler yapılır ama kaç byte olur Allah bilir  :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 17:23:38 ÖS
petcat'de PI (π) karakterinin karşılığını bulamadım. Source codelarına bile baktım ama sanırım desteklemiyor. Vice'da SHIFT+DELETE ile çıkan karakter. Aşağıdaki kodu petcat ile derledikten sonra Vice'da 2. satırdaki;

1 a=p^8...

olan yeri

1 a=π^8

şeklinde değiştirmeniz gerekiyor. Çalışan PRG ekte.

229 byte

Kod:
0 s=56:poke53265,s:poke53272,24:fori=6^5to4^7:pokei,0:next:fori=1tos:x=28+i/2:y=i:gosub1:x=s-x:gosub1:x=i:y=18:gosub1:y=y+i*.7:gosub1:x=s-i:gosub1:next:print"{CLR}
1 a=p^8+40*(yands)+(yand7)+(xands):pokea,peek(a)or2^(7-(xand7)):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 17:24:19 ÖS
@hakankaptan: Soru ne yazık ki "Bitmap modunda" diye başlıyor. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 17:54:51 ÖS
PI karakterinin karşılığını buldum Tilde (~) imiş. Derlenebilir code

229 byte

Kod:
0 s=56:poke53265,s:poke53272,24:fori=6^5to4^7:pokei,0:next:fori=1tos:x=28+i/2:y=i:gosub1:x=s-x:gosub1:x=i:y=18:gosub1:y=y+i*.7:gosub1:x=s-i:gosub1:next:print"{CLR}
1 a=~^8+40*(yands)+(yand7)+(xands):pokea,peek(a)or2^(7-(xand7)):return


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 27, 2017, 23:30:13 ÖS
Henüz tam optimize edemedim, belki yarın partide devam ederim. @skate nasıl oluyorda 80 karakterden uzun satırların var çözmedim. Bendeki tüm satırlar legal 80 karakterden kısa. Bu arada her kenarı eşit uzunlukta olan gerçek yıldız... :P

Bir de VICE da Pi işaretini bir türlü çıkartamadım. Koddaki yapılmamış pi optimizasyonlarını yaparak paste eden olursa şarlarım ona göre... :D
 
Doğrudan vice'a paste edilbilir 228 Byte. WARP moda alıp çalıştırmanızı tavsiye ederim, çok beklemeyin...

Kod:
0 s=56:t=25:poke53265,s:poke53272,24:fori=6^5to4^7:pokei,0:next:forx=-ttot
1 l=sqr(x*x+64):n=atn(x/8):fora=0to4:b=n-31.4*a/t:q=-cos(b)*l-t:w=sin(b)*l+t
2 c=8192+40*(qands)+(qand7)+(wands):pokec,peek(c)or2^(7-(wand7)):print:nexta,x


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 27, 2017, 23:34:31 ÖS
@skate, :print"{CLR} yerine döngü içinde sadece print daha efektif...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 27, 2017, 23:39:31 ÖS
@delimawi: Nitpicking... Bazı garbage pixeller çıkıyor ya, bende de çıkıyordu, fixlemeye bir kaç byte kurban etmiştim. ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 28, 2017, 01:17:05 ÖÖ
Başka bir yöntem üzerinde çalışıyorum ama senin yöntemin 226 byte'a kadar inebiliyor. Biri, evet o PI olayı, diğeri ise POKE'un parametresinin 24 değil 25 olmasının bir şeyi değiştirmemesi. Ama bundan daha kısası yapılabileceği için dert etme, bu en kısa versiyon olmayacak. :) Ama uğraştığım yeni versiyon da zorluyor epey.

Kod:
0 s=56:t=25:poke53265,s:poke53272,t:fori=6^5to4^7:pokei,0:next:forx=-ttot
1 l=sqr(x*x+64):n=atn(x/8):fora=0to4:b=n-31.4*a/t:q=-cos(b)*l-t:w=sin(b)*l+t
2 c=~^8+40*(qands)+(qand7)+(wands):pokec,peek(c)or2^(7-(wand7)):print:nexta,x


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 28, 2017, 01:18:47 ÖÖ
214 byte değişik bir yaklaşım. Daha optimize edilebilir.

Kod:
0 s=56:poke53265,s:poke53272,24:fori=6^5to4^7:pokei,0:next:y=21:forj=0to4
1 readq,w:fori=0to63:x=x+q:y=y+w:c=8192+40*(yands)+(yand7)+(xands):print
2 pokec,peek(c)or2^(7-(xand7)):nexti,j:data1,,-1,.7,.5,-1,.5,1,-1,-.7


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 28, 2017, 01:23:33 ÖÖ
Aklımda bir yöntem daha var, özellikle baştaki silme loop'unu ortadan kaldırıyor, ama daha olgunlaştıramadım...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 28, 2017, 02:31:15 ÖÖ
@delimawi: çok güzel bir yaklaşım. :) benim versiyon henüz 240 bytelarda. optimize edilmeye çok açık ama basic sağolsun epey zorluyor beni. :) 214 byte'a ineceğini düşünmüyorum bahsettiğim yöntemin. yine trigonometrik bir yöntem üzerinde uğraştığım.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 28, 2017, 02:33:45 ÖÖ
bu arada baştaki loop'u ben asm'de 3 opcode ile hallediyorum. ama basic'e aktarıldığında standart looptan daha uzun yer kaplıyor. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 28, 2017, 02:37:52 ÖÖ
Pokelemek yerine dim array içine atmayı düşündüm. Bu sayede başlangıçta zaten 0 olcaktı. Ayrıca pokex,peek(x)orn  d(x)=d(x)orn haine geliyor. Ha en sonra bir loop ile yerine pokelencek. Bu avantaj da olabilir, işlemin bir kısmı bu sondaki loopa kaydırılabilir vb... Ama 10 elemandan büyük ise başta dim lamak gerekiyormuş. Bir de nedense dimladığım halde içi tamamen boş gellmiyor arrayin, yani o yöntem şimdilik yattı...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 28, 2017, 02:44:03 ÖÖ
@delimawi: kernel'de 2-3 farklı yerde 256'lık alan dolduran yerler var. bunlar sys ile çağırılarak tek seferde 256 bytelık blok silebiliyor. hi byte'lar da zeropage'de yer alıyor. kısacası high byteları 32 kere saydırıp, sys ile çok hızlı bir biçimde ekran temizlemek mümkün. ama örneğin;

fori=32to63:pokeXX,i:sysXXXXX:next
fori=6^5to4^7:pokei,0:next

görüldüğü gibi daha kısa değil. hız dersen inanılmaz fark ediyor tabii ki.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 28, 2017, 02:57:03 ÖÖ
senin son paylaştığın yöntem şöyle 211 byte'a iniyor.

Kod:
0 s=56:y=24:poke53265,s:poke53272,y:fori=6^5to4^7:pokei,0:next:forj=0to4:readq,w
1 fori=0tos:x=x+q:y=y+w:c=~^8+40*(yands)+(yand7)+(xands):print
2 pokec,peek(c)or2^(7-(xand7)):nexti,j:data1,,-1,.7,.5,-1,.5,1,-1,-.7

Bu arada PI karakteri üs (^) karakterinin SHIFT ile basılan hali. Normalde Vice'da INS/DEL/HOME/END/PAGE UP/PAGE DOWN tuşlarının olduğu bölgeden çıkıyor genellikle. Bende DELETE tuşuna denk geliyor. SHIFT+DELETE ile test edebilirsin.

Vice'ın içinde gelen petcat.exe ile source'u derleyecek olursan da ~ karakteri PI çıkarıyor. petcat'in kullanımı şu şekilde.

Kod:
petcat -o output.prg -w2 input.txt


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 28, 2017, 03:11:38 ÖÖ
OK, teşekkürler, pi yi basar hae geldim. SHIFT+küçükDEL ile oldu. Notebookdayım bu arada. Zaten alternatif tuşlar Fn+Key oluyor, bir de SHIFT vb gelince tam çorba... :) Gel gelelim şu üzerinde uğraştığım yöntemde pi yok... :/


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Simon (Özay Turay) üzerinde Mayıs 28, 2017, 03:34:03 ÖÖ
Notebookdayım bu arada. Zaten alternatif tuşlar Fn+Key oluyor, bir de SHIFT vb gelince tam çorba... :)
BIOS ayarlarında Fn tuşunun işlevini tersine çeviren bir ayar oluyor genelde. ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 28, 2017, 15:43:48 ÖS
Partiden 193 byte ... ;)

Kod:
0 s=56:y=24:poke53265,s:poke53272,y:fori=6^5to4^7:pokei,0:next:fori=1to320
1 c=~^8+40*(yands)+(yand7)+(xands):pokec,peek(c)or2^(7-(xand7)):x=x+cos(a)
2 y=y+sin(a):a=a-2.5*((iand63)=0):print:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 28, 2017, 18:12:05 ÖS
Partide delimawi ile bir araya gelince ortaya çıkan coop versiyon.

175 byte

Kod:
0 poke53265,59:poke53272,24:fori=6^5to4^7:pokei,0:next
1 c=~^8+320*int(y/8)+(yand7)+(xand56):pokec,peek(c)or2^(-xand7)
2 x=x+cos(a):y=y+sin(a):a=~*.8*int(j/64):print:j=j+1:goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 28, 2017, 23:20:57 ÖS
-1 byte daha suyunu sıktım...

320*int(y/8) > 40*(-8andy)

Kod:
0 poke53265,59:poke53272,24:fori=6^5to4^7:pokei,0:next
1 c=~^8+40*(-8andy)+(yand7)+(xand56):pokec,peek(c)or2^(-xand7)
2 x=x+cos(a):y=y+sin(a):a=~*.8*int(j/64):print:j=j+1:goto1



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 05:26:13 ÖÖ
173 byte ve artık 64x64'den büyük alana çizim yapılabiliyor (senin and-8'in sağolsun ;))

Kod:
0 poke53265,59:poke53272,24:fori=6^5to4^7:pokei,0:next
1 x=x-cos(a):y=y+sin(a):j=j+.01:a=~*.8*int(j):print
2 c=9896+40*(yand-8)+(yand7)-(xand-8):pokec,peek(c)or2^(xand7):goto1

9896 yerine PI^8 kullanılarak 172 byte'a da iniyor ama azıcık yukarıdan croplanıyor. j=j+.01'i değiştirerek yıldızın boyutuyla oynayabiliyoruz ancak diğer değerler genellikle ya çok küçük, ya çok büyük oluyor.

Biraz daha üzerinde oynanarak 170 bytelar civarına getirilebilir bu, altına da inebilir.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Mayıs 29, 2017, 12:08:05 ÖS
Soruyu ilk başta 24 pixel olarak kurgulayıp, örnek şekli çizen kodu hazırlarken 48'e pixel'e çıkartmıştım. Soruda 24 olarak kalmış. Siz de ekran görüntüsünü örnek aldığınıza göre soruyu gönül rahatlığıyla 48 pixel olarak günceliyorum.

Hazır elim değmişken örnek kodumu da yapıştırıyorum. 400'den itibaren yer alan PLOT rutinleri olduğu gibi Programmers Reference Guide'dan kopyadır.

Alıntı
0 PRINT "{clear}"
10 BASE=2*4096: POKE 53272,PEEK(53272)OR8: REM PUT BIT MAP AT 8192
20 POKE 53265,PEEK(53265)OR 32
30 FORI=BASETOBASE+2599:POKEI,0:NEXT:REM CLEAR BIT

99 REM CALCULATE
100 FOR X=0TO24 : Y=50-2*X : GOSUB 400 : NEXT
110 FOR X=25TO48 : Y=2*(X-24) : GOSUB 400 :NEXT
120 FOR X=0TO48 : Y=50-0.7*X : GOSUB 400: NEXT
130 FOR X=0TO48 : Y=34+0.7*(X-24) : GOSUB 400: NEXT
140 FOR X=0TO48 : Y=16 : GOSUB 400: NEXT

200 REM return to text mode
300 POKE 198,0: WAIT 198,1
310 POKE 53265,PEEK(53265)AND 223
320 POKE 53272,PEEK(53272)AND 247
330 END

399 REM PLOT
400 CH=INT(X/8):RO=INT(Y/8):LN=YAND7
410 BY=BASE+RO*320+8*CH+LN:BI=7-(XAND7)
420 POKEBY,PEEK(BY)OR(2^BI)
430 RETURN


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 15:46:36 ÖS
Proof of concept filled star. Üzerinde çalışacağım biraz.

Kod:
0 m=59:poke53265,m:poke53272,24:fori=6^5to4^7:pokei,0:next
1 fory=0to63:forx=-32to31:z=abs(x):if(z>lorz<-m)and(m>32orz>m)then3
2 c=9896+40*(yand-8)+(yand7)-(xand-8):pokec,peek(c)or2^(xand7)
3 next:l=l+.3:m=m-1.2:print:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 16:21:17 ÖS
Kendi çizim alanını temizleyen versiyon;

214 byte

Bu 170 bytelara düşmeyecek gibi görünüyor ama filled versiyon olarak dursun kenarda.

Kod:
0 m=59:poke53265,m:poke53272,24:fory=0to63:forx=-32to31
1 c=9896+40*(yand-8)+(yand7)-(xand-8):if(xand7)=0thenpokec,0
2 z=abs(x):if(z<landz>-m)or(m<33andz<m)thenpokec,peek(c)or2^(xand7)
3 next:l=l+.3:m=m-1.2:print:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 16:33:32 ÖS
211 byte ve hız artışı

Kod:
0 m=59:poke53265,m:poke53272,24:fory=0to63:c=9896+40*(yand-8)+(yand7)
1 forx=-32to31:if(xand7)=0thenc=c-8:pokec,0
2 z=abs(x):if(z<landz>-m)or(m<33andz<m)thenpokec,peek(c)or2^(xand7)
3 next:l=l+.3:m=m-1.2:print:next


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 16:49:58 ÖS
203 byte

Yeterince uzun beklerseniz bir de ekran kapanış bonus efekti var. :)

Kod:
0 m=63:poke53265,m:poke53272,24
1 c=9896+40*(yand-8)+(yand7):forx=-32to31:if(xand7)=0thenc=c-8:pokec,0
2 z=abs(x):ifz<landz>-morm<33andz<mthenpokec,peek(c)or2^(xand7)
3 next:l=l+.3:m=m-1.3:print:y=y+1:goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 17:03:01 ÖS
200 byte

Kod:
0 m=63:poke53265,m:poke53272,24:c=8384
1 forx=-32to31:if(xand7)=0thenc=c-8:pokec,0
2 z=abs(x):ifz<landz>-morm<33andz<mthenpokec,peek(c)or2^(xand7)
3 next:l=l+.3:m=m-1.3:print:c=c+65-312*((cand7)=7):goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 17:13:43 ÖS
198 byte

Kod:
0 m=63:poke53265,m:poke53272,24:c=8384
1 forx=-32to31:if(xand7)=0thenc=c-8:pokec,0
2 z=abs(x):pokec,peek(c)or2^(xand7)*-(z<landz>-morm<33andz<m):next:l=l+.3
3 m=m-1.3:print:c=c+65-312*((cand7)=7):goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: joker_ üzerinde Mayıs 29, 2017, 17:28:49 ÖS
52 dakika da, 16 byte kısalmış. Müthiş. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 18:05:59 ÖS
Bu arada algoritmanın üzerinde oynaşmak isterseniz c64 versiyonu yavaş kalıyor, ben bunun üzerinde çalışıyorum.

http://jsfiddle.net/sv76zcmk/ (http://jsfiddle.net/sv76zcmk/)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 29, 2017, 23:04:15 ÖS
Dün partiden ayrılırken bu soruyu çok çabuk harcadık demiştim sana. İyi oldu doluya geçirmen, aklıma gelmemişti. Velakin, bu versiyonunun da dibini görmüşsün, daha ne yapılabilir bilmiyorum. Bir iki saat bakınayım, kısalacak mı?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 23:17:31 ÖS
Şekli deforme ederek kısalıyor ama ben olduğu gibi korumayı tercih ettim. Amacım 200'ün altına indirmekti, becerince orada bıraktım. Nasılsa 170'lere inmeyecek. Ama bir iki byte kesin uçar. O kadarına açık kapı var bence.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: hades üzerinde Mayıs 29, 2017, 23:19:40 ÖS
Şuraya iğrenç bir espri bırakayım ve cpu'lar crash etmeden uzaklaşayım.
Programlama dillerinde ABS var ama merkezi kilit, klima, airbag, ASR, EDB, ESP vs. yok.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 23:23:06 ÖS
ASR neden olmasın, ayıp ettin. İllegal diye yaptığın muameleye bak. :D

http://unusedino.de/ec64/technical/aay/c64/basr.htm (http://unusedino.de/ec64/technical/aay/c64/basr.htm)



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 29, 2017, 23:28:52 ÖS
İçi dolu yıldıza niyetlenip, içi boş bir yıldız elde etmek... :) Bira uzun ama değişik bir alternatif. Neyse şimdi içini doldurmaya bakalım...

Kod:
0 poke53265,59:poke53272,24:fori=6^5to4^7:pokei,0:next
1 c=~^8+40*(-8andy)+(yand7)+(xand56):pokec,peek(c)or2^(-xand7)
2 x=x+cos(a):y=y+sin(a):a=~*.4*(int(j/32)*2-int((j+16)/32)):print:j=j+1:goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 29, 2017, 23:31:30 ÖS
Vaay, çok cool görünüyor. :) Aslında optimizasyonlar sırasında yanlışlıkla yakın bir görüntü elde etmiştim ama bugları olan bir görüntüydü. Sebebi de alan temizleme işleminin yanlış adımda yapılmasıydı. Aklıma gelmişti içi tam boş da çok güzel durur diye. Eline sağlık.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 30, 2017, 00:11:56 ÖÖ
Farklı bir method ile içi dolu yıldız. Bezdirebilir, Warp mode ile denenmeli.
En azından yıldızın temas halinde olduğu yerler temizleniyor.

Ham 196 byte...

Kod:
0 poke53265,59:poke53272,24:forj=99to3step-2:print:x=0:y=-j*.2:fori=jto6*j
1 a=~*.8*int(i/j-.5):x=x-cos(a):y=y+sin(a):c=9896+40*(yand-8)+(yand7)-(xand-8)
2 pokec,-(peek(c)or2^(xand7))*(j<64):nexti,j


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 30, 2017, 02:20:18 ÖÖ
Haha! Epic bir versiyon olmuş kardeşim. Sildirme kısmı da çizim kısmı da çok eğlenceli. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 30, 2017, 03:42:12 ÖÖ
Yeni iki trick ile benimkini de 196 byte'a indirdim. Senin kodları da kısaltacak yeni trickimiz şu.

XeN=X*10^N

yani;

9e3=9000

92 yılından kalma bir basic kodumda buldum bunu. 92'de biliyormuşum, şimdi unutmuşum. :D

Kod:
0 m=63:poke53265,m:c=9e3
1 forx=-32to30:if(xand7)=0thenc=c-8:pokec,0
2 z=abs(x):pokec,peek(c)or2^(xand7)*-(z<landz>-morm<33andz<m):next:l=l+.3
3 m=m-1.3:poke53272,x:print:c=c+65-312*((cand7)=7):goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 30, 2017, 08:03:10 ÖÖ
Ben bunu biliyordum ve hatta daha dün başka bir rf projesinde 868000000 yazmamak için 868E6 şeklinde kullandım. Ama iş c64 olunca hiç aklıma gelmemiş. Güzel yakaladın...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 30, 2017, 12:11:34 ÖS
@delimawi: Diğer dillerde ben de kullanırım. CBM Basic'in desteklediğini hatırlamıyordum. Ama dediğim gibi eski kodlarımdan birinde görünce atladım hemen. :)

92'den kalma bir kod disketimin içinde işe zamazingo sayfamda (http://akaydin.com/zamazingo/ (http://akaydin.com/zamazingo/)) paylaşmaya değer bir şeyler var mı acaba diye araştırırken denk geldim. Yoksa 25 sene önceki kendimden medet ummadım. :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 31, 2017, 06:41:09 ÖÖ
3-4 farklı şekilde daha çok kısaltmanın eşiğine gelsem de 172 byte'ın altına indiremedim. bir kaç farklı çözüm aynı byte sayısıyla sonuçlandı. hafta sonuna kadar bu versiyonla cebelleşelim, bakalım daha çok kısalacak mı. Ben 170'in altına inmeli diyorum. Niye üstünde ki, di mi ama? :)

Kod:
0 poke53265,59:poke53272,24:fori=8e3to4^7:pokei,0:next
1 a=~*.8*int(j):x=x-cos(a):y=y+sin(a):j=j+.01:print
2 c=1e4+40*(yand-8)+(yand7)-(xand-8):pokec,peek(c)or2^(xand7):goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 31, 2017, 22:20:42 ÖS
Şöyle bir versiyon var elimde. Sadece trick'i görmeniz açısından paylaşıyorum. 165 byte'a kadar düşüyor ama ekran temizlenmek yerine dikey çizgilerle dolduruluyor. Güzel olan tarafı ekranı biraz daha renkli hale getirmek, hatta renk seçmek mümkün hale geliyor.

Amaç print'den kurtulmak. $d018'i varsayılan değeriyle kullanıp bunun yerine $dd00'ı set ederek $4000-$8000 aralığındaki banka geçiyoruz. Bitmap ve ekran çakışıyor (bitmap $4000, ekran $4400'de). Her ikisini birden aynı değerle fill'liyoruz. Eğer 0 ile fillersek siyah üstüne siyah çizildiği için ekranda bir şey gözükmüyor. Başka bir değerle fillediğimizde de üst ve alt nibble eşit olmadığı sürece çizim görüntüleniyor ama ekran o byte patterni ile dolmuş oluyor. Ekranın bir yerine kadar olan bölümünü ($4800'e) renk değeri, $4800'den sonrasını 0 ile fill ettiğimizde uygun sonuca ulaşıyoruz ama 172 byte'dan kısa yapmayı beceremedim. Yine 172-173 byte civarlarına geliyor.

Kod:
0 poke53265,59:poke56576,2:fori=4^7to~^9:pokei,4:next
1 a=~*.8*int(j):x=x-cos(a):y=y+sin(a):j=j+.01
2 c=2e4+40*(yand-8)+(yand7)-(xand-8):pokec,peek(c)or2^(xand7):goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 31, 2017, 22:56:51 ÖS
Ben de şu dolu yıldıza bir eğilmeyi düşünüyordum bu gece. BAkarsın dolusu 170 altına iner...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 31, 2017, 23:13:10 ÖS
Merakla bekliyoruz efendim. :)

Sesli düşünüyorum. Bana şu yüzden 170 altı filled için mümkün gelmiyor. Eğer ray tracing mantığı bir şeyler deneyecek olursan benim 196 bytelık versiyona benzer bir noktaya ulaşıyorsun. Senin yaptığın gibi yıldız gittikçe küçülerek çizilsin dediğinde ise normal çizilen dış hatlara ek bir kod yazman gerekiyor. Bu durumda (büyük ihtimalle) sadece dış hatları çizilen versiyon daha küçük olacaktır.

Denemediğimiz çok fazla yöntem kalmadı gibi filled için. Aklıma merkezden linelar çizerek elde etmek geliyor ki yine line çizimi, yine dış hattın bulunması. Sadece dış hattı çizdirmek daha kısa olacaktır.

İçimden bir ses sen filled versiyonu 172'nin altına indirmeyi becerirsen daha kısa outline versiyonu çıkar ortaya diyor. Dur bakalım. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Mayıs 31, 2017, 23:18:35 ÖS
Bu kadar yazdım yazdım aklıma yeni bir yöntem geldi bak. Belki senin aklındakine benzerdir. Olsa olsa o olabilir. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Mayıs 31, 2017, 23:26:36 ÖS
Aslında aklımda birşeyler var ama koda dökmeden dillendirmek doğru olmaz. Belki de hiç de beklediğim kadar kısa olmayacak... Temelde poke esnasında x,y koordinat sisteminden, lineer adrese çevirmek üzere kullandığımız and lerderden vb kurtulmak üzerine kurulu...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 00:18:08 ÖÖ
Demo efektlerinde o andlerden kurtulmak için 256 byte'lık tablolar oluşturuyoruz 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,... şeklinde giden. Ama o tabloyu oluşturmak da karakter harcadığı için astarı yüzünden pahalıya gelebilir diye düşünüyorum.

edit: diğer lookup tabloları da low byte high byte şeklinde her satır başına denk gelecek şekilde ilerliyor. lo -> 0,1,2,3,4,5,6,7,64,65,66,67... gibi


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 00:22:02 ÖÖ
Bu arada sen datayı nasıl hazırlarsan hazırla, en son ekrana plot edeceğin noktada bitmap dizilimi yine aynı olacağı için tam olarak kurtulmak mümkün olmaz sanıyorum. Benim filled star örneğimde o hesaplamalardan kurtardım ama bu sefer de yan byte'a geçmek için 8'er ilerle, alt satıra geçerken bilmemkaç byte geri dön ama 8. satıra ulaştıysan da bilmemkaç byte ileri git demekle uğraşıyorsun. Yine tam kurtuluş yok gibi. Senin versiyonu çok merak ettim. Eğer gerçekten buna çözüm getirebiliyorsa kesinlikle yeni bir yöntem öğreneceğim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 00:29:46 ÖÖ
Yapmak istediğini anladım. Sen bit bit değil de byte byte ilerleyeceksin, set edilmesi gereken bit pattern'i oluşturacaksın. Doğru mudur? Öyleyse silmeye de gerek kalmayacak. Güzel yöntem olur ama byte değerini hesaplamak o kadar kolay olur mu, başlangıç ve bitiş bitleri aynı byte'a denk gelirse ne olacak gibi soru işaretleri var benim kafamda. Doğru anlamış mıyım?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 01:41:28 ÖÖ
Evet, aynen dediğin gibi. Byte byte ilerlemeyi ve silmekten kurtulmayı düşündüm. Bu gecelik enerjim kalmadı, daha optimize edilecek potansiyeli olduğunu düşünüyorum, 170 byte olmasa da, sanırım en kısa dolu yıldız bu oldu şimdilik. Dirty trick içermiyor, gayet temiz kod, dolu yıldız.

188 byte

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:y=int(a/320)*8+(aand7):d=0
2 print:forp=0to7:w=abs(((a-(yand56)*40)and504)+p-160)*2/3
3 d=d*2+((w*4<y)*(w>y-48)or(y>26)*(w<48-y)):nextp,a

Burada lineer olarak adresten ilerleyip, yaptığımız işlemin tam tersini yapıp, adresin karşılık geldiği x ve y değerini buluyorum. İlgili x,y noktasının dolu olup olmayacağını da başka bir formül belirliyor ki senin örnekte olduğu gibi, noktanın yıldızın içerisinde kalıp kalmadığını kontrol ediyor. Elimde 8 bitlik data biriktiği anda pokeleyip devam ediyorum... Açıkçası ben daha kısa olacağını düşünmüştüm. Belki kısalabilir yarına...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 01:47:10 ÖÖ
*2/3 kısmını atıp 4 byte kısaltmak mümkün ama proporsiyon bozulduğu için şimdilik tercih etmedim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 01:51:13 ÖÖ
Not: Burada bir trick kullandım. Herhangi bir (bool and bool) şeklinde ifade, (true and true)=-1 olacağı için, and yerine * kullanarak, (true * true)=1 şeklinde 2 byte tasarruf edilebiliyor. Hemde -1 yerine 1 veriyor olması da bir avantaj, lazım olursa...

Bunun bir de yukarıda ki örnekte bir avantajı daha var.
and kullansaydım, andleri izole etmek için ekstra () gerekecekti. * numeric işlem olduğu için, and'e göre () istemiyor.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 01:59:01 ÖÖ
Yukarıdaki notu yazarken kafamda bir şimşek çaktı ve biraz daha kısaldı. Yukarıdaki ek bir bilgi olarak kalsın ama bunu kullanmıyor olmak daha efektifmiş. :D

184 byte...

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:y=int(a/320)*8+(aand7):d=0
2 print:forp=0to7:w=abs(((a-(yand56)*40)and504)+p-160)*2/3
3 d=d*2-(w*4<yandw>y-48ory>26andw<48-y):nextp,a


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 02:35:56 ÖÖ
uyku tutmadı, 182 byte

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:y=int(a/320)*8+(aand7):d=0
2 print:forp=0to7:w=abs(((a-(yand56)*40)and-8)+p-99)*2/3
3 d=d*2-(w*4<yandw>y-48ory>26andw<48-y):nextp,a


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 02:54:37 ÖÖ
179 byte ...

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:y=int(a/320)*8+(aand7):d=0
2 print:forp=0to7:w=abs((a-(yand56)*40and-8)+p-99)*.6
3 d=d*2-(w*4<yandw>y-48ory>26andw<48-y):nextp,a


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 03:29:46 ÖÖ
King of the filled stars. Ama o andlerin bir kısmından kaçış yok gördüğün gibi. :)

İlk gözüme çarpan optimizasyon.

Kod:
y=int(a/320)*8+(aand7)

yerine

Kod:
y=a/40and-8oraand7

175 byte

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:y=a/40and-8oraand7:d=0
2 print:forp=0to7:w=abs((a-(yand56)*40and-8)+p-99)*.6
3 d=d*2-(w*4<yandw>y-48ory>26andw<48-y):nextp,a

Şaka maka 172 byte'ın altına inme potansiyeli yüksek. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 04:00:52 ÖÖ
Artık cidden yatıyorum, 176 byte, dolu üçgen ...

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:y=(a/320or0)+(aand7)/8
2 d=0:print:forp=0to7:w=abs((a-(yand7)*320and-8)+p-99)/12
3 d=d+d-(w*4<yandw+6>yory>3and6>y+w):nextp,a


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 04:01:49 ÖÖ
Süpersin, ben 176 ya kadar gelebilmiştim ...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 04:16:21 ÖÖ
174 byte

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:e=aand7:y=a/40and-8ore:d=0
2 print:forp=0to7:w=abs(a-e-(yand-8)*40+p-99)*.6
3 d=d*2-(w*4<yandw>y-48ory>26andw<48-y):nextp,a

Edit: Senin optimizasyonlarını görmeden yaptım bunları. Seninkilerle birleşirse daha da uçabilir, bakıyorum şimdi.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 04:37:08 ÖÖ
174 byte, hala potansiyel var ama halim kalmadı... :D

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:y=a/40and-8oraand7:d=0
2 print:forp=0to7:w=abs((a-(yand56)*40and-8)+p-99)/2
3 d=d*2-(w*4<yandw>y-48ory>26andw<48-y):nextp,a


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 04:39:49 ÖÖ
26, 24 olsa da gözle bir fark olmuyor. Bundan yola çıkarak çarpanı küçülterek, örneğin /4 yapabilirsek, sabit değerler, w, 12, 6, 12 yapılabilir. Bu da teorik olarak 3 byte kısaltır. Ama cidden haim kalmadı düşünemiyorum artık... :D
İyi geceler...
 


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 04:43:00 ÖÖ
171 byte

170'in altına bile iner derken şaka yapmıyormuşsun. :)

@wizofwor: Yöntem delimawi'ye ait olduğu için ben farklı bir yöntem bulmadığım sürece benim yaptığım optimizasyonları yarışma dışı tutuyorum.

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:e=aand7:h=a/40and-8
2 y=hore:d=0:print:forp=0to7:w=abs(a-e-h*40+p-99)*.6
3 d=d+d-(w*4<yandw+48>yory>26andy+w<48):nextp,a


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 04:50:54 ÖÖ
Şu anda son kodu, y=hore, yehuuu, horaaa, hobareyyyy şeklinde görüyorum... :) Yarışma bahane, eğlence şahane. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 04:54:18 ÖÖ
Gel *.6 yı /2 yapalım, 170 byte olsun, gene yıldız olsun... ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 05:04:15 ÖÖ
sabit değerler, w, 12, 6, 12 yapılabilir. Bu da teorik olarak 3 byte kısaltır.

Bu arada bunu tam anlayamadım. 12,6,12 olduğunda sadece 1 byte kısalmış olmuyor mu?

Edit: w*4 -> w oluyor, anladım. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 05:16:20 ÖÖ
170 bytelık versiyonu buraya bırakıp yatıyorum, 170'in altına kesin inecek bu.

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:e=aand7:h=a/40and-8
2 y=hore:d=0:print:forp=0to7:w=abs(a-e-h*40+p-99)/2
3 d=d+d-(w*4<yandw+48>yory>26andy+w<48):nextp,a


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: hades üzerinde Haziran 01, 2017, 08:20:27 ÖÖ
648 nolu adrese bir baksanıza. poke 648, grafik ekranı/256 ve print "clr" ile bir şeyler çıkar mı?
https://www.c64-wiki.com/wiki/648 (https://www.c64-wiki.com/wiki/648)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 10:19:37 ÖÖ
169 byte ...

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:e=aand7:h=a/40and-8
2 y=h+e:d=0:print:forp=0to7:w=abs(a-e-h*40+p-99)/2
3 d=d+d-(w*4<yandw+48>yory>26andy+w<48):nextp,a


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 17:09:38 ÖS
Benim versiyonu byte byte render edecek hale getirdim. Daha da optimize edilebilir.

164 byte

Kod:
0 poke53265,59:poke53272,24
1 forc=-4to5:m=63-y/.7:poke9e3+y+(yand-8)*39+c*8,b:b=0:fori=0to7:z=abs(c*8+i)
2 b=b+b-(z<y/3andz>-morz<mand32>m):nexti,c:y=y+1:print:goto1

Edit 1: Şekilden ödün verince bir iki byte daha uçuyor ama şekli korumaya gayret ettim.
Edit 2: 33>m değil de 32>m ile daha düzgün bir şekil çıkıyor. Onu düzelttim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 17:57:47 ÖS
Ek bir optimizasyon olmaksızın iki satıra indirerek 163 byte'a düşürülebiliyor. Satırlar 80 karakterden oluşmak zorunda diye düşünürsek daha 3 byte optimize edilmesi lazım. Ancak hem copy&paste, hem petcat ile compile edilebilen versiyon aşağıda.

Kod:
0 poke53265,59:poke53272,24:fOc=-4to5:m=63-y/.7:poke9e3+y+(yand-8)*39+c*8,b:b=0
1 fOi=0to7:z=aB(c*8+i):b=b+b-(z<y/3andz>-morz<mand32>m):neXi,c:y=y+1:print:goT0


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 18:31:21 ÖS
O baştaki 2 poke'dan sonunda kurtulabileceğimi biliyordum! :)

156 byte

Kod:
0 print:forc=-4to4:poke53269+c,43-c*4:m=63-y/.7:poke9e3+y+(yand-8)*39+c*8,b:b=0
1 fori=0to7:z=abs(c*8+i):b=b+b-(z<y/3andz>-morz<mand32>m):nexti,c:y=y+1:goto0


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 01, 2017, 21:27:35 ÖS
Aynı boyutta biraz daha derlenmiş, toparlanmış versiyon. Şu 54100'den bir şeyler çıkarabilsek. 54100 = 541e2 aynı yeri kaplıyor. Ama o sıfırlar yok mu o sıfırlar... :)

Kod:
0 print:m=63-y/.7:forc=-4to5:poke54100+c,47-c*4:poke9e3+y+(yand-8)*39+c*8,b:b=0
1 fori=0to7:z=abs(c*8+i):b=b+b-(z<y/3andz>-morz<mand32>m):nexti,c:y=y+1:goto0

Edit: "m" gereksiz biçimde loop içinde tekrar tekrar hesaplanıyordu. loop dışına çıkarttım.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 01, 2017, 22:20:27 ÖS
Oha, iki satıra inmişsin, bitmiş bu iş... :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 02, 2017, 00:13:24 ÖÖ
Ben 159 da kaldım... Aslında teorik olarak iki satıra sığabilir görünüyor, yerleştirebilsem 2 byte daha gidecek, 157 olacak. Neyse başka türlü bir yöntem var mı bakınmaya devam... :)

Kod:
1 poke8191+a,d:e=aand7:h=a/40and-8:y=h+e:d=0:print:forp=0to7
2 w=abs(a-e-h*40+p-99)/2:poke53265+p,59-5*p
3 d=d+d-(w*4<yandw+48>yory>26andy+w<48):next:a=a+1:goto1


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 02, 2017, 00:24:07 ÖÖ
Bu arada tek satır azaldığında tek byte kazanıyoruz, iki byte değil. CR sayılmıyor biliyorsun.

0 print
1 print

7+7=14

0 print:print

13

Kazanç:
Satır numarası + 1 boşluk = 2 karakter

Kayıp:
İki nokta karakteri = 1 karakter


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 02, 2017, 00:27:37 ÖÖ
Bu arada hızlıca ASM versiyonunu kodladım. Henüz çok ham. ASM'ye özel hiç bir optimizasyon yok desem yeridir. Birebir basic versiyonunun aynısı. Hatta "/3" yazan yeri bile çakma bit shiftinglerle /3'e yakın bir işlemle çözdüm. Bunu adam etmek de bonus eğlence olacak. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 02, 2017, 00:42:29 ÖÖ
Bu arada tek satır azaldığında tek byte kazanıyoruz, iki byte değil. CR sayılmıyor biliyorsun.

Evet haklısın. Ben editorde select edip, sonra satır*2 kadar düşüyorum, editor CR ve LF yi de saydığı için. Oraya takılmış kafam... ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 02, 2017, 02:53:16 ÖÖ
ASM versiyonunun elini yüzünü düzelttim. 192 byte ama bilerek gereksiz şeyler harcıyorum (tüm ekranı temizle, tam ortaya bas, border'ı siyah yap v.s.). Ama saatle bekleten basic versiyonlarından sonra görmüşken böyle görmek gerek di mi ama. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Haziran 02, 2017, 22:16:26 ÖS
Arkadaşlar şehir dışında olduğum için bu gün yeni soru gelemeyecek. Ancak pazar günü gönderebileceğim.
Kusura bakmayın.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 02, 2017, 23:08:30 ÖS
@wizofwor: olm zaten dur iki dakika da nefes alalım. :)

Asm versiyonunu basic versiyonunun source code uzunluğunun altına indirebilir miyim diye baktım, indirebiliyormuşum. Şimdi sırada basic'den üretilen PRG boyutunun altına indirmek var. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 03, 2017, 01:14:04 ÖÖ
Benim hala basic versiyonu içime sinmiyor. Daha kısalabilir bence. Biraz bakınayim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 03, 2017, 01:59:16 ÖÖ
Evet kısalabilir. :)

154 byte

Kod:
0 print:m=8-y/5:forc=-4to5:poke54100+c,47-c*4:poke9e3+y+(yand-8)*39+c*8,b:b=0
1 fori=0to7:z=abs(c+i/8):b=b+b-(z<y/21andz>-morz<mand4>m):nexti,c:y=y+1:goto0


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: joker_ üzerinde Haziran 03, 2017, 02:04:08 ÖÖ
yok artık. Bu gidişle 100 byte'ın altına inecek :D Ellerinize sağlık, zevkle takip ediyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 03, 2017, 02:22:04 ÖÖ
Öncelikle 151 byte

Kod:
2 fory=0to80:print:forx=-48to47:g=yand7:poke9e3-g*39+y*40+(xand-8),d:w=abs(x/2)
3 d=255andd+d-(w*4<yandw>y-48ory>24andw<48-y):poke53265+g,59-g*5:nextx,y

Sonsuz döngülü olsun dersek, ki ben pek sevmiyorum ama olsun, 149 byte

Kod:
2 y=y+1:print:forx=-48to47:g=yand7:poke9e3-g*39+y*40+(xand-8),d:w=abs(x/2)
3 d=255andd+d-(w*4<yandw>y-48ory>24andw<48-y):poke53265+g,59-g*5:next:goto2

Aspect ratio biraz bozulabilir dersek 147 byte

Kod:
2 y=y+1:print:forx=-48to47:g=yand7:poke9e3-g*39+y*40+(xand-8),d:w=abs(x)
3 d=255andd+d-(w*4<yandw>y-60ory>30andw<60-y):poke53265+g,59-g*5:next:goto2

Bence hala potansiyel var bu soruda, bazı yerleri çok üstün körü geçtim. Örneğin poke53265+g,59-g*5 buna daha optmize birşey bulunabilir vb...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 03, 2017, 02:23:37 ÖÖ
Dolusu 170'in altına inmez diyorduk bu soru için, 20 küsür byte nasıl da uçtu 3-5 günde... :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 03, 2017, 02:29:25 ÖÖ
147 ha. :D Adım adım, ben 153'deyim... :)

153 byte

Kod:
0 print:forc=-4to5:poke54100+c,47-c*4:poke9e3+y+(yand-8)*39+c*8,b:b=0:fori=0to7
1 z=abs(c+i/8)*5:b=b+b-(z<y/4andz>y-40orz<40-yandy>20):nexti,c:y=y+1:goto0


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 03, 2017, 02:34:56 ÖÖ
Abi sonunda aynı kodda buluşacağız :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 03, 2017, 02:35:11 ÖÖ
Bu arada benimki de biraz deforme oldu tabii aşırı optimizasyondan ancak tam 1'in 2'nin katları gibi gitmemesine uğraşıyorum. Hep bir eğim var. Slope'lar küsüratlı ilerliyor. Yoksa ben de bir kaç byte uçurabilirim.

Edit: Sen bana başta farklı bir yöntemle render ettiğini söylemiştin (tersten şeklinde) ama aslında benim render yöntemim de aynıydı. Sadece bit bit ilerliyordu. Aynı kodda buluşmamız doğaldır. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 03, 2017, 02:46:02 ÖÖ
Senin yıldız daha güzel. Ben işin başında, yanımda bilgiayar yokken başladım, kareli kağıda çizdim. (w*4<yandw>y-60ory>30andw<60-y) formülünü kağıt üzerinde çıkardım. Optimizasyonlar hep onun üzerinden gitti. Aslında bu formül ve ifade ettiği yıldız ideal yıldız değil, o an için karaladağım birşeydi. Belki ideal olsa daha kolay optimize olurdu yada olamayabilirdi... :D

(https://i.hizliresim.com/1gPgYj.jpg) (https://hizliresim.com/1gPgYj)

Bu arada tam detayına bakmadım ama senin yıldız formülün sanırım daha kısa. 

deli : (w*4<yandw>y-60ory>30andw<60-y)
Skate: (z<y/3andz>-morz<mand32>m)



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 03, 2017, 02:50:49 ÖÖ
Edit: Sen bana başta farklı bir yöntemle render ettiğini söylemiştin (tersten şeklinde) ama aslında benim render yöntemim de aynıydı. Sadece bit bit ilerliyordu. Aynı kodda buluşmamız doğaldır. :)

Ben son yöntemde iki yöntemi mixledim aslında. İlk başta x,y üzerinden gidip adresi hesaplıyordum. Sonra adres üzerinden gidip x ve y yi bulduğum bir versiyon yaptım. Sonra her 8 bit için x in bir anlamı olmadığını farkettim zira byte byte yazmak daha efektif oluyordu, son olarak yani bu gece paste ettiğim kodlarda gene x ve y üzerinden giden yönteme döndüm ama bir farkla. Her 8 bir dolunca data değişkenini sıfırlamamak için shift register gibi birşey yaptım. d=0: dan kurtuldum ama 255and geldi bu sefer. Olsun gene de her bir satırı bir döngüde yapıyor olmak adres hesabını kolaylaştırdı... 


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Simon (Özay Turay) üzerinde Haziran 03, 2017, 03:06:56 ÖÖ
yok artık. Bu gidişle 100 byte'ın altına inecek :D Ellerinize sağlık, zevkle takip ediyorum.
Retro fütüristik aşık atışmasına döndü resmen. :D Ben de büyük zevkle takip ediyorum. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 03, 2017, 03:45:01 ÖÖ
Tek loop'a indirince bende de sonuç şimdilik şöyle. Bonus spritelarımız var, efekte tasarım da gelmeye başladı. :p

Düzgün şekil

147 byte
Kod:
0 print:forc=-32to30:poke53242+c,121-3*c:poke9e3+y+(yand-8)*39+(cand-8),b
1 z=abs(c*.7):b=255andb+b-(z<y/4andz>y-40orz<40-yandy>20):next:y=y+1:goto0

Bozuk şekil:

144 byte
Kod:
0 print:forc=-32to30:poke53242+c,121-3*c:poke9e3+y+(yand-8)*39+(cand-8),b
1 z=abs(c):b=255andb+b-(z<y/4andz>y-40orz<40-yandy>20):next:y=y+1:goto0

Edit: Satırları eşit dağıtmamışım, 80 karakteri geçiyordu ilk satır, onu düzenledim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 03, 2017, 04:02:54 ÖÖ
Bu arada şimdi senin rutininle kıyasladım (ki elbette ki tek loop'a indirirken senin yöntemlerini kullanmıştım, bahsettiğim geri kalan kısmı). Benim parantez içi de dönüp dolaşıp seninkine dönmüş bir bakıma. Ancak plot rutinlerimiz farklı hala. Oradan bir kaç byte fark ediyor.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 03, 2017, 05:47:17 ÖÖ
Proper 146 byte (şekilsiz 143)

Kod:
0 print:forc=-32to31:poke53242+c,121-3*c:poke8991+y+(yand-8)*39-(cor7),b
1 z=abs(c*.7):b=b/2or-128*(z<y/4andz>y-40orz<40-yandy>20):next:y=y+1:goto0

Bu kısım eğlencelik, yoksa diğeriyle aynı. Optimizasyon plot rutininde.

Kod:
b/2or-128*
255andb*2-


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 03, 2017, 05:55:24 ÖÖ
Proper 144, diğerini -3 byte olarak hesaplayın işte :)

Kod:
0 print:forc=-32to31:poke53242+c,121-3*c:poke9038+y+(yor7)*39-(cor7),b
1 z=abs(c*.7):b=b/2or-128*(z<y/4andz>y-40orz<40-yandy>20):next:y=y+1:goto0


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 03, 2017, 06:18:29 ÖÖ
Proper 143 byte

Kod:
0 print:forc=-32to31:poke53242+c,121-3*c:poke9e3+y+(yor7)*39+(cor7),b
1 z=abs(c*.7):b=255andb*2-(z<y/4andz>y-40orz<40-yandy>20):next:y=y+1:goto0


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 03, 2017, 07:45:30 ÖÖ
Aslında görmüşsündür benim kodda g değişkenine ihtiyaç yoktu. Spritelar ve ekran titreşimleri çıkmasın diye eklemiştim. Yoksa birkaç byte daha kısalıyor... ;)

Bu arada sonunda kod 0 sys"uucgen cizen kernal rutini" şeklinde 10 byte a sığacak. :P


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 03, 2017, 15:45:54 ÖS
Spritelar hariç yazan yeri göremedim. :)

Ekranın geri kalanında garbadge data olabilir..


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 03, 2017, 15:54:07 ÖS
Yooo öyle bir kural var diye demedim, benim hoşuma gitmedi... :P


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Haziran 04, 2017, 23:15:59 ÖS
143 byte'la Skate kazandı diyebilir miyiz?

Bu durumda Skate 50, delimawi 30 puan oluyor.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Haziran 05, 2017, 00:20:32 ÖÖ
20 puanlık son soru: Ay'ın evreleri

8x5 karakterlik bir alanda Ay'ın evrelerini (Ay'ın 8 evresini (yeni ay, büyüyen hilal, ilk dördün, büyüyen şişkin ay, dolunay, küçülen şişkin ay, son dördün, küçülen hilal) gösteren bir program yazın.

1. Program Ay'ın evrelerini yeni aydan başlayarak sırayla gösterecek.
2. Her evre bir öncekinin üzerine çizilecek.
3. Evreler arasında geçiş, iki evre arasında 1-2 saniyelik beklemeden sonra(iptal) otomatik olacak.
4. Program 8'inci evreden sonra başa dönecek.
5. Aşağıda örnek çıktılarda '.' karanlık '#' aydınlık anlamına geliyor.

Örnek:
Kod:
yeni ay  b.hilal  i.dördün b.şişkin
........ ....##.. ....##.. ....##..
........ ......#. ....###. ...####.
........ .......# ....#### ..######
........ ......#. ....###. ...####.
........ ....##.. ....##.. ....##..

dolunay  k.şişkin s.dördün k.hilal
..####.. ....##.. ....##.. ..##....
.######. ...####. ....###. .#......
######## ..###### ....#### #.......
.######. ...####. ....###. .#......
..####.. ....##.. ....##.. ..##....

6. Programın örnekle bire bir aynı çıktıyı vermesi beklenmiyor. Şekilleri Ay'ın evrelerini doğru yansıtmak koşuluyla değiştirebilirsiniz ancak 8x5 matris kullanmak zorunlu. Örneğin aşağıdaki ikinci hilal elde etmek daha kolaysa onu kullanabilirsiniz.

Kod:
..##....  ..##....
.#......  .##.....
#.......  ##...... 
.#......  .##.....
..##....  ..##....

7. Sadece şekilleri çizmek yeterli. Başlıkları ekrana yazmaya gerek yok.
8. '.' ve '#' yerine faklı karakter kullanabilirsiniz.
9. Ekranı temizlemeye gerek yok ancak 8x5 matrisin için seçilen iki karakterden başka karakter olmaması gerekiyor.

//Edit: Skate'in talep ettiği açıklamalar soruya eklendi.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 05, 2017, 02:07:24 ÖÖ
1) yeni ay, b.hilal, ... gibi başlıklar da olacak mı, sadece evreler mi çizdirilecek?
2) "Programın örnekle bire bir aynı çıktıyı vermesi beklenmiyor" ucu çok açık kalmış. Örneğin 8x5'lik bir matris kullanmışsın.
2.a) Daha küçük olabiliyor mu?
2.b) Senin verdiğin örnekte soldan sağa kayış var. Sola yapışık çizdirsek ok mi?
2.c) . ve # harici karakterler kullanabilir miyiz?
Tam sınırları belirlemezsen çok fazla dirty trick kullanılır. "Ne var ulan, o gördüklerin de kraterleri işte" noktasına gider bu iş. :D
3) Ekran temizletilmek zorunda mı yoksa örneğin sol üst köşeye matrisi bassak yeterli olur mu?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 05, 2017, 03:06:15 ÖÖ
İlk versiyon 223 byte.

Bu uygun mudur? Uygunsa bunun üzerinden devam edeceğim. Yukarıdaki soruların cevapları önemli.

Kod:
0 dimd(14):fori=0to14:readd(i):next:forp=-4to3:l=abs(p)*3:fory=-2to2:z=abs(y)
1 forx=0to7:poke1104+y*40+x,35-11*((d(l+z)and2^abs((p>=0)*7+x))=0):nextx,y
2 forw=0to2e3:nextw,p:run:data255,126,60,126,60,24,30,28,24,2,4,24,0,0,0


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 05, 2017, 08:12:48 ÖÖ
155 byte

{..} şeklindeki alanlar tek karakter. PRG'yi attach ettim. Petcat ile derlenebilir durumda.

Kod:
0 forp=0to7:fory=-2to2:forx=0to7
1 a=(asc(mid$("{12}{12}{12}{14}{16}{36}{42}{40}{36}{138}{72}{36}{11}{138}{72}{138}{72}{36}{132}{68}{36}{76}{44}{36}",1+3*p+abs(y)))-12and2^x)>0
2 poke6^4+y*40+x,46+11*a:nextx,y:forw=0to2e3:nextw,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Haziran 05, 2017, 09:31:48 ÖÖ
1) yeni ay, b.hilal, ... gibi başlıklar da olacak mı, sadece evreler mi çizdirilecek?
2) "Programın örnekle bire bir aynı çıktıyı vermesi beklenmiyor" ucu çok açık kalmış. Örneğin 8x5'lik bir matris kullanmışsın.
2.a) Daha küçük olabiliyor mu?
2.b) Senin verdiğin örnekte soldan sağa kayış var. Sola yapışık çizdirsek ok mi?
2.c) . ve # harici karakterler kullanabilir miyiz?
Tam sınırları belirlemezsen çok fazla dirty trick kullanılır. "Ne var ulan, o gördüklerin de kraterleri işte" noktasına gider bu iş. :D
3) Ekran temizletilmek zorunda mı yoksa örneğin sol üst köşeye matrisi bassak yeterli olur mu?

1) Başlıklara gerek yok.
2) 8x5 matris sabit ancak mesela hilalı farklı şekilde çizebilirsiniz.
  Aşağıdaki ikinci hilal elde etmek daha kolaysa onu kullanabilirsiniz mesela.

Kod:
..##....  ..##....
.#......  .##.....
#.......  ##...... 
.#......  .##.....
..##....  ..##....

2.b)
"Bunun orjinalinde soldan sağa kayış var." Diyecektim ama sağdan sola kayıyor galiba. Astronom olan cevap versin. Evreleri tersten mi yazdım acaba?
(http://s1.thingpic.com/images/w5/NbyYDABUn1HJAqpbyEtq8g6A.jpeg)

2.c) Faklı karakter kullanabilirsiniz.
3) 8x5 matrisin için seçilen iki karakterden başka karakter olmaması gerekiyor. Bunun haricinde ekranı temizlemeye gerek yok.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 05, 2017, 10:05:52 ÖÖ
Evet, evreleri ters yazmışsın. Kodun uzunluğunu etkileyen bir faktör değil (en azından benim kodum açısından).

154 byte, doğru sıralı, # yerine * kullandım.

Kod:
0 forp=0to7:fory=-2to2:forx=0to7
1 a=(asc(mid$("{12}{12}{12}{76}{44}{36}{132}{68}{36}{138}{72}{36}{11}{138}{72}{138}{72}{36}{42}{40}{36}{14}{16}{36}",1+3*p+abs(y)))-12and2^x)>0
2 poke6^4+y*40+x,46+4*a:nextx,y:forw=0to2e3:nextw,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: joker_ üzerinde Haziran 05, 2017, 10:13:05 ÖÖ
Astronom olan cevap versin. Evreleri tersten mi yazdım acaba?

Kendisi şu anda zaten kodu yazıyor :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 05, 2017, 18:25:06 ÖS
Gün içinde uğraşamadım daha çok optimize etmeye, gece tekrar bir göz atıcam. Arada karakter kodları ile ilgili bir açıklama yapmak istiyorum.

Petcat reverse on ile yazılan karakterleri desteklemediği için karakter kodlarıyla vermek zorunda kaldım ancak illegal bir durum yok. Bu karakterlerin tamamı klavyeden rahatlıkla yazılabilen karakterler. Normalde petcat'in derleyemediği, 24 karakterlik alanı size baka baka yazabilmeniz için hazırladığım versiyon aşağıda.

Kod:
0 forp=0to7:fory=-2to2:forx=0to7
1 a=(asc(mid$("<RVS+L><RVS+L><RVS+L>l,$<RVS+SHIFT+D>d$<RVS+SHIFT+J>h$<RVS+K><RVS+SHIFT+J>h<RVS+SHIFT+J>h$*($<RVS+N><RVS+P>$",1+3*p+abs(y)))-12and2^x)>0
2 poke6^4+y*40+x,46+4*a:nextx,y:forw=0to2e3:nextw,p:run

Buradaki tek trick şu. Tırnak karakterini açınca normalde reverse on yapmaya çalıştığınızda (CTRL+9) reverse on anlamında inverted R karakteri çıkar. Bunun için kodu yazarken tırnağı açtıktan sonra kapatıp, kapatılan tırnağı silip normal modda yazmaya devam edebilirsiniz. Ya da daha temizi aşağıdaki özel karakter alanları boş bırakılmış kodu copy&paste edin, elle doldurun geri kalanını yukarıdakine bakarak.

Kod:
0 forp=0to7:fory=-2to2:forx=0to7
1 a=(asc(mid$("   l,$ d$ h$  h h$*($  $",1+3*p+abs(y)))-12and2^x)>0
2 poke6^4+y*40+x,46+4*a:nextx,y:forw=0to2e3:nextw,p:run

Tüm bunlarla uğraşmamanız için PRG'yi zaten paylaştım önceki postumda ama "biz bunu normal basic'de elle yazabiliyor muyuz ki?" sorusuna istinaden paylaşmak istedim. Evet, yazabiliyorsunuz.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 05, 2017, 19:15:14 ÖS
Animasyonu ortak karakter kullanırım diye ortalamıştım. Daha sonra başka metoda geçince ortalanması anlamsız kaldı. Bu versiyon birebir orjinal framelerden oluşuyor. İşin güzeli bu frameler bana 1 byte kazandıracak uygunlukta çıktı. :)

153 byte

Kod:
0 forp=0to7:fory=-2to2:forx=0to7
1 a=(asc(mid$("{9}{9}{9}{137}{73}{57}{249}{121}{57}{5}{129}{57}{8}{135}{69}{72}{39}{21}{24}{23}{21}{10}{11}{21}",1+3*p+abs(y)))-9and2^x)>0
2 poke6^4+y*40+x,46+4*a:nextx,y:forw=0to2e3:nextw,p:run

Edit: PRG yine ekte.

Edit 2: Frameleri ters sıralatmayı unutmuşum. Düzelttim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 05, 2017, 19:27:05 ÖS
Bu arada çizim işlemi yavaş olduğu için bence arada bekletmeye de gerek yok. Sırf kurallara uygun olsun diye o bekletmeyi ekledim ama zaten çok yavaş çizildiği için evreler bu şekilde de rahatlıkla görüntüleniyor. Bence çok daha hızlı çizileceğini düşünerek o kuralı koydun @wizofwor, ne dersin? Bu legal midir?

135 byte

Kod:
0 forp=0to7:fory=-2to2:forx=0to7
1 a=(asc(mid$("{9}{9}{9}{137}{73}{57}{249}{121}{57}{5}{129}{57}{8}{135}{69}{72}{39}{21}{24}{23}{21}{10}{11}{21}",1+3*p+abs(y)))-9and2^x)>0
2 poke6^4+y*40+x,46+4*a:nextx,y,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 05, 2017, 20:16:00 ÖS
Çok daha kısası da yolda. Ama geceyarısından sonra uğraşabileceğim. Arada ilk davranan olursa optimizasyonda kapışırız sonrasında. ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Haziran 05, 2017, 23:08:44 ÖS
Bu arada çizim işlemi yavaş olduğu için bence arada bekletmeye de gerek yok. Sırf kurallara uygun olsun diye o bekletmeyi ekledim ama zaten çok yavaş çizildiği için evreler bu şekilde de rahatlıkla görüntüleniyor. Bence çok daha hızlı çizileceğini düşünerek o kuralı koydun @wizofwor, ne dersin? Bu legal midir?

135 byte

Problemin bu şekilde formulize edilebileceği hiç aklıma gelmemişti. Bol for next'li ve goto'lu bir çözüm bekliyordum. Bekleme kuralını da kolay takip edilebilir bir efekt olması için düşünmüştüm. Gerek olmadığına göre bence kaldırabiliriz.

Yukarıda soruyu editledim. 


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 01:33:14 ÖÖ
Optimizasyonsuz ilk versiyon.

107 byte

Kod:
0 forp=0to9:fory=-2to2:forx=-4to3:z=x+p+10*(p>5)
1 poke6^4+y*40+x,46+4*(x*x+y*y<6andz*z+y*y>6):nextx,y,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 06, 2017, 01:42:11 ÖÖ
Ben de bunun üzerinde çalışıyordum, henüz optimize edemedim. 152 bytelarda henüz çalışan hali...

Kod:
0 deffnl(q)=(8-2*q+a*q-5*a)*(q>4)*(q<8):forp=0to7:fory=-2to2:a=abs(y):forx=0to7
1 poke6^4+x+y*40,32+(x>=a-fnl(p))*(x<a-fnl(p+4)-(8-2*a)*(p>3)):nextx,y,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 06, 2017, 01:44:50 ÖÖ
@skate, abi sen de çok bozmuşsun ama evreleri. Ben tam oturtana kadar 2 saat uğraştım formül üzerinde... :P


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 02:18:56 ÖÖ
İlk versiyon evrelerden fazla frame çiziyor ve evreleri tam göstermiyordu. Bu versiyon daha uzun ama tam olması gerektiği gibi çiziyor evreleri. Doğrusu bu.

@delimawi: iyi coder lafının üstüne gelir. :D

115 byte

Kod:
0 forp=.15to8:fory=-2to2:l=7-y*y:forx=-4to3:z=x+p/.8+10.35*(p>5)
1 poke6^4+y*40+x,46+4*(x*x<landz*z>l):nextx,y,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 02:21:52 ÖÖ
@skate, abi sen de çok bozmuşsun ama evreleri. Ben tam oturtana kadar 2 saat uğraştım formül üzerinde... :P

Boşluk üzerine ünlem çizdir, sonra benim evrelere laf at. :D

Edit: Bir de hatırlatma, sağdan sola doğru olacak geçiş. Fark ettiğinden değil de arada muhabbeti geçti, @wizofwor başta tersten vermiş evreleri.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 02:53:23 ÖÖ
Düşük çözünürlükte tam anlaşılmıyor, zevki çıkmıyor. Ekteki versiyonu warp speed'de deneyin bakın.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 03:05:27 ÖÖ
Dünden beri çok yoğun çalışıyorum, kafam durdu. Bir süredir boş boş bakıyorum koda. Son geldiğim nokta bu.

114 byte

Kod:
0 forp=.15to9:fory=-2to2:l=7-y*y:forx=-4to3:z=x+p/.8+11.6*(p>5)
1 poke6^4+y*40+x,46+4*(x*x<landz*z>l):nextx,y,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 03:34:30 ÖÖ
112 byte

Kod:
0 forp=0to7:fory=-2to2:l=8-y*y:forx=-4to3:z=x+p/.7+11.5*(p>4)
1 poke6^4+y*40+x,46+4*(x*x<landz*z>l):nextx,y,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 04:00:57 ÖÖ
JS versiyonu:

http://jsfiddle.net/opkrmhzk/ (http://jsfiddle.net/opkrmhzk/)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 05:04:58 ÖÖ
Umarım @wizofwor'un yapmayı planladığı şey bu değildir ve spoiler olmuyordur ama eldeki iki rutini ister istemez birleştiriyor insan. :)

Kod:
0 poke53265,59:poke53272,24:poke53280,2:fori=4^5to2023:pokei,18:next
1 fori=6^5to4^7:pokei,0:next:fory=0to103:w=y-53:l=2401-w*w:forx=-48to47:z=x-13
2 poke9976+y+(yor7)*39+(xor7),b:b=255andb*2-(x*x<landz*z>l-701):nextx,y
3 fory=0to36:forx=-24to23:poke11312+y+(yor7)*39+(xor7),b:z=abs(x*.7)
4 b=255andb*2-(z<y/4andz>y-28orz<28-yandy>13):nextx,y:cont


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 06, 2017, 08:38:49 ÖÖ
Ohooo burda neler olmuş böyle, çıkarken ışıkları da çık bırakmışsın... :P
Tebrikler, aslında hep wizofwor'un suçu, cuma soru gelmeyince haftasonu boş geçti, vakit ayıramıyorum fazla, ama bugün bakacağım, uçmuş burası... :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 17:44:23 ÖS
@delimawi: sen olmayınca kendimle yarışa yarışa deli gibi hissediyorum. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 06, 2017, 18:10:31 ÖS
Hala daha ilgilenemedim. Kismetse gece yarisi artik....


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 19:30:52 ÖS
110 byte

Kod:
0 forp=0to8:fory=-2to2:l=7-y*y:forx=-4to3:z=x+p/.75+12*(p>4)
1 poke6^4+y*40+x,42-4*(x*x>lorz*z<l):nextx,y,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 06, 2017, 22:07:03 ÖS
108 byte

Kod:
0 forp=0to8:fory=-2to2:l=7-y*y:forx=-4to3
1 poke6^4+y*40+x,42-4*(x*x>lor(x+p/.75+12*(p>4))^2<l):nextx,y,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 07, 2017, 01:03:42 ÖÖ
. karakterini koruyarak * yerine @ ile şu versiyon var 107 byte'a düşen. şu an için daha fazla optimizasyon bulamadım. 107 byte'ın altına inen diğer versiyonlar ya çizim karakterlerinden ödün veriyor ya da ay'ın evrelerini güzel ifade edemiyorlar. Güzel ifade edemeyen versiyonlar da teoride legal, sorun çözünürlüğün çok düşük olup küsüratlardan dolayı silinen karakterlerin göze kötü görünmesi. Yoksa gerçekten ayın önünden gölge geçiyor.

Son olarak evreler yeni ay yerine dolunaydan başlayacak olsaydı epey bir byte kurtarırdık. :)

Kod:
0 forp=0to8:fory=-2to2:l=7-y*y:forx=-4to3
1 poke6^4+y*40+x,-46*(x*x>lor(x+p/.75+12*(p>4))^2<l):nextx,y,p:run

Edit: Dolunaydan başlayan versiyonu da paylaşayım. 99 byte

Kod:
0 forp=-4to3:fory=-2to2:l=7-y*y:forx=-4to3
1 poke6^4+y*40+x,-46*(x*x>lor(x+p/.75)^2<l):nextx,y,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 07, 2017, 01:27:58 ÖÖ
Hala oturamadım başına, bu kadar kısa olmasa da yatmadan bir versiyon paylaşacağım umarım.
Bu arada kızma ama bence hala evreler çok doğru değil. :) Gerçi sıkıntı sorunun tam net olmamasında, yoruma açık kalıyor haliyle...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 07, 2017, 03:04:16 ÖÖ
Bu gece 111 byte yapabildim, belki yarın daha optimize edecek birşeyler bulabilirim. Bu versiyonda 8'den fazla evre çizdiriyorum, zaten çözünürlük düşük, bu şekilde gözüme daha güzel göründü. Kurallara göre karakter olarak . ve * kullanmak zorunda değiliz sanırım. Ama zaten aynı kural senin kod için de geçerli olduğundan ben de aynı şekilde bıraktım.

WARP moda tavsiye ederim, daha animatif oluyor... :)

EDIT: Laf sokmaca, senin ay'ın 8 karakter genişliğinde değil... :P
Kod:
0 forp=-5to9:forx=-3to4:fory=-2to2:d=x+y*sgn(x*y)+p
1 poke6^4+x+y*40,42-4*(d<0ord>7ord<p-3ord>p+4):nexty,x,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 07, 2017, 03:19:19 ÖÖ
110 Byte ...

Kod:
0 forp=-5to9:forx=-3to4:fory=-2to2:d=x+y*sgn(x*y)
1 poke6^4+x+y*40,42-4*(d+p<0ord+p>7ord<-3ord>4):nexty,x,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 07, 2017, 03:36:03 ÖÖ
108 Byte...

Kod:
0 forp=-8to9:forx=-3to4:fory=-2to2:d=x+y*sgn(x*y)
1 poke6^4-x+y*40,42-4*(abs(p-d)>4ord<-3ord>4):nexty,x,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 07, 2017, 03:39:24 ÖÖ
107 Byte, ay 7 karakter genişliğine düştü...

Kod:
0 forp=-8to9:forx=-3to4:fory=-2to2:d=x+y*sgn(x*y)
1 poke6^4-x+y*40,42-4*(abs(p-d)>4orabs(d)>3):nexty,x,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 07, 2017, 03:43:22 ÖÖ
104 byte ...

Kod:
0 forp=-8to9:forx=-3to4:fory=-2to2:d=x+y*sgn(x*y)
1 poke6^4-x+y*40,42-4*(abs(p-d)>4ord*d>9):nexty,x,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 07, 2017, 04:34:50 ÖÖ
Demek istediğini anladım. Ben moon phase diye eclipse render ediyormuşum. :)

Henüz gridin köşelerini çizmiyor ve seninki gibi tam evreleri render etmiyor ama kast ettiğin şekilde render eden versiyon. Benim de bu gece bitirmem gereken bir iş var. Yarın kapışırız. ;)

100 byte

Kod:
0 forp=0to15:c=p>7:fori=0to28
1 poke6^4-int(.5+2*cos(i/9))*40+(3.5-p-8*c)*sin(i/9),42-4*c:nexti,p:run

JS versiyonu:
http://jsfiddle.net/6abqd1wd/ (http://jsfiddle.net/6abqd1wd/)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 07, 2017, 04:56:32 ÖÖ
Bu arada 7 genişliği ok ise başka bir optimizasyonla birlikte 97 byte'a da düşüyor.

Kod:
0 c=p>7:fori=0to28
1 poke6^4-int(.5+2*cos(i/9))*40+(3-p-8*c)*sin(i/9),42-4*c:next:p=p+1and15:goto0


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 09, 2017, 00:18:10 ÖÖ
Benim kurallara tam uygun en kısa çözümüm 106 byte...
8 karakter genişliğinde ve örneklere uygun toplam 8 tam faz çizen, 8x5 matris içinde . ve * harici karakter buludurmayan versiyon.

Kod:
0 forp=-4to4:forx=-3.5to4:fory=-2to2:f=abs(x*y)
1 poke6^4-x+y*40,42-4*(abs(p*2-x-f/x)>4orf>3):nexty,x,p:run

NOT: Kurallar hafif esnetilerek oluşturulmuş bir çok versiyon birikti ama ortalık karışmasın şimdilik. Paste etmiyorum onları...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 11, 2017, 02:01:21 ÖÖ
Günlerdir uğraşacak vakit bulamamıştım. Şimdi trigonometrik yöntemle bir deneme yaptım. Şu an için 113 byte'dayım. Farkı evrelerin küresel koordinat sistemine daha yakın çizilmesi. Ama tamamen legal bir formül değil, bu da çözünürlüğe özelleştirilmiş bir formül.

Şimdi eşim film izlemeye çağırıyor. Yarın yarışma sonuçlanmamış olursa son bir kez uğraşacağım üstünde. Ama başka yöntemle uğraşacağımı sanmıyorum. Bu da büyük ihtimalle 106 byte'ın altına inmez. Şimdiden tebrikler. :)

Kod:
0 forp=0to7:fory=-2to2:forx=-3.6to4:z=x/(4-abs(y))*sgn(~-p)
1 poke6^4+y*40+x,42-4*(z>1orz<cos(p*.8)):nextx,y,p:run


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 11, 2017, 22:01:29 ÖS
Benim 106 byte da zaten ideal bir çözüm değil, aynen dediğin gibi çözünürlüğün düşük olmasından kaynaklanan bozulmaya dayanıyor. Çizdiği aslında elips yada yuvarlak değil, baklava. Ama zaten soruda verilen örnekler de öyle. İdeal ay çizimi için 8x8 matris seçilmesi bence daha uygun olabilirdi.

Ben aşağıdaki patterni oluşturan formülü excelde hesapladım.
Baz formül x+y*sign(x*y).
Bunu int() yapınca 4 ayrı segment seçilebliyor. Bu segmentlerden herhangi birini de evre<segment<evre+4 kontrolü ile seçince, 8 ayrı evre çizilebiliyor.

Bir de köşelerdeki beyaz kısımların hiç bir zaman seçilmemesini garanti altına almak gerekiyor.

Toplam 4 ayrı koşulun üst üste optimize edilmesi ile de 106 byte a kadar inebildi.

(https://i.hizliresim.com/bGjo90.jpg) (https://hizliresim.com/bGjo90)



Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Haziran 11, 2017, 22:31:40 ÖS
Aslında yarışmayı bu gün bitirmeyi düşünüyordum ancak iki iki yarışmacı da biraz daha uğraşmak istiyor gibi. İsterseniz biraz daha süre verebilirim.

Ayrıca bu soruya en iyi cevabı delimawi verdiğine göre puan durumu eşit oluyor? Ne yapalım bir soru daha mı sorayım?


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: WildLord üzerinde Haziran 11, 2017, 22:48:19 ÖS
Bence bir soru daha sorun akabinde puanlama şeklinde olmasa da imkan olduğunca soru sormaya devam edin, kendi adıma çok faydalanıyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 11, 2017, 22:57:24 ÖS
Ortada hırs mı var kardeşim? Berabere kalmaktan onur duyarım. :)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 11, 2017, 23:05:28 ÖS
Açıkçası ben de çok faydalanıyorum, trickler ve optimizasyonlar, sadece bu yarışma veya c64 platformu adına değil, her alanda uygulanabilecek örnekler de içeriyor.

Örneğin, (a and b and c) şeklindeki bir önermenin !(a or b or c) şeklinde yazılabiliyor olduğunu lise yıllarında öğrenmiştik, şimdi bu yarışmada or and e göre daha kısa olduğu için hatırladık, ama örneğin bu bilgi megaOne kartuşu tasarlerken bile kullandığım bir bilgiydi. Logic chipleri seçerken de benzer optimizasyonlar yapıyor, misal, ek bir and kapısı kullanmamak için boşta kalan or kapısı ve not kapısını birleştirebiliyoruz gibi. Bu tarz bilgileri güncel tutması adına bence çok değerli...

Ben işin yarışma tarafında değilim, ancak wildlord'un dediği gibi mümkün olduğunca, örneğin haftada bir, bu tarz soruların soruluyor olmasını isterdim. İsteyenin bir yüzü kara... :D

@skate'in zaten c64 camiasında nerede olduğunu herkes biliyor. Sorulara verilen cevaplar da bu yarışma özelinde açık olduğu için ister istemez yöntem farklı olsa bile diğer cevaplardan "izler" içerebiliyor. Dolayısı ile kimi zaman aynı soruda, kimi zaman sonraki sorularda @skate'in tricklerinin üzerine bir güzel oturmuşluğum olmuştur. Satır sorununda tırnak kapatmama, on goto ile else çözümü vb... Dediğim gibi işin yarışma tarafında değilim, @skate ile karşılıklı kod kapışıtırıyor olmak bile güzeldi. Birçok şey öğrendim, teşekkür ederim...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: eins üzerinde Haziran 11, 2017, 23:05:46 ÖS
Aynı anda yazmışız... ;)


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 11, 2017, 23:35:23 ÖS
Eve gelebilmiş olsam ben de daha uzun yazacaktım da gün boyu dışarıdaydım. Şimdi klavye başına oturdum.

Bu yarışma benim açımdan da son derece faydalı oldu. Herkes gibi ben de bir çok şey öğrendim. Özellikle 20-25 senedir kullanmadığım CBM Basic'e yeniden, hem de advanced seviyeden el atmak çok keyifli oldu.

Scene'in güzel tarafı bu zaten. Bu yarışma ruhuna sürekli sahip oluyorsunuz. Öyle bir şey ki başka birinin yarışma düzenlemesi ya da size meydan okuması da gerekmiyor. Bazen bir demo izlerken, bazen arabada cama vuran yağmurda gözünüz bir pattern belirlediği anda bilgisayar başına geçip bir demo efekti kodlayasınız geliyor. Hele ki siz efekti yaptıktan sonra biri o efekte cevaben bir kademe öteye taşırsa olayı o noktada eğlence başlıyor. :)

Son yıllarda scene'de aktivitem yerlerde sürünüyor. Ama ruh aynen durduğu için sürekli alttan alttan bir şeyler yapıyorum. Bu yarışma devam edecek olursa da her daim katılımım devam eder. Ama cbm basic de maşallah abaküsden hallice, uyuz etmiyor dersem yalan olur. :D


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: Skate üzerinde Haziran 13, 2017, 04:17:51 ÖÖ
Bu yarışma sayesinde basic'in bazı buglarını da bulmuş oldum. Onları da tecrübe olarak paylaşmak isterim.

Bir çok dilde floating point math problemleri klasiktir. Örneğin 0.1 ile 0.2'yi topladığınızda 0.3 elde edemezsiniz. Bunun yerine 0.30000000000000004 gibi bir şey elde edersiniz. Bu bug değil "by design" olarak açıklanabilecek bir durumdur. CBM basic değişkenleri daha düşük bit kapasitesinde tuttuğu için bu tür bazı problemler daha bile az görülebiliyor. Örneğin CBM basic'de .1+.2 tam olarak .3 olarak ekrana yansıyor. Ama arkaplanda daha ciddi problemler var.

Aşağıdaki javascript örneğini ele alalım.

https://jsfiddle.net/v2syq3ev/

Kod:
0.1=0.1
0.2=0.2
0.1+0.2=0.30000000000000004
cos(0)=1
int(cos(0))=1

Görüldüğü gibi 0.1 ve 0.2 ayrı ayrı düzgün yazılırken toplamlarında küsürat hatası oluşuyor. Ama cos(0) gibi sonucun 1 olması gerektiğini bildiğimiz değerler 1 olarak yazılıyorlar ki değeri integer'a cast ettiğimizde de sonuç olması gerektiği gibi 1 çıkıyor.

CBM basic'de ise sonuçlar aşağıdaki screenshotlardaki gibi.

Özetle CBM basic'de küsürat hassasiyeti düşüklüğünden dolayı .1+.2 tam olarak .3 olarak ekrana yazılırken ekrana normalde sonucu 1 olarak yansıyan cos(0) ya da sin(PI/2) gibi değerler integer'a cast edildiklerinde değerleri 0 oluyor. Yani aslında ekrana yazdırılan değerler ile floating point olarak hafızada tutulan bit değerleri tam örtüşmüyor. int() fonksiyonu hatalı kodlanmış olsa bile 0 ile orladığımız takdirde bit tabanlı işlemden sonucun 1 çıkması gerekirdi.

Bir diğer sorun goto, gosub gibi komutların değişken parametre alamaması. Zamanında Simon's Basic'i incelediğimde "cgoto" komutunu görüp anlam verememiş, farkını anlamamıştım. Meğer o baştaki "c" "calculated"den geliyormuş. Basic dilinin normal goto komutuna bu özelliği kazandıran bir program buldum.

Kod:
10 for x=0 to 94:read a:poke 832+x,a:c=c+a:next
20 if c<>10356 then print "bad checksum":end
30 sys832
40 data 169,75,162,3,141,8,3,142,9,3,96,32,115,0,201,137,240
50 data 10,201,141,240,18,32,121,0,76,231,167,32,142,3,169,167,72
60 data 169,174,72,76,163,168,169,167,72,169,174,72,169,3,32,251,163
70 data 165,123,72,165,122,72,165,58,72,165,57,72,169,141,72,32,121
80 data 0,32,142,3,32,163,168,76,174,167,32,115,0,32,138,173,32
90 data 247,183,201,250,176,1,96,76,8,175

Bu program goto'nun hesaplanmış parametre alabilmesini sağlıyor. Aşağıdaki programı bir commodore'u ilk açtığınız gibi, bir de yukarıdaki programı çalıştırdıktan sonra deneyin.

Kod:
10 print"cgoto test":a=40:b=4
20 gotoa/b

Bu yarışma boyunca bir diğer karşımıza çıkan problem ASC("") komutunun 0 yerine ?illegal quantity error vermesiydi. Bu böyle mi olmalı derseniz hayır, diğer basiclerde böyle bir hata vermiyor, 0 döndürüyor. Peki bunu nasıl fixleyebiliriz. ROM'u fixleyemediğimiz için basic ROM'unu RAM'a aktarıp, sonra bu durumu fixlemek mümkün. Aşağıdaki tek satırlık kod bu işi yapıyor.

Kod:
0 fori=40960to49151:pokei,peek(i):next:poke1,54:poke46991,5

Bu kodu çalıştırmadan önce ve çalıştırdıktan sonra aşağıdaki satırı çalıştırmayı deneyin.

Kod:
printasc("")

Zaten bu tür buglar, eksikler biliniyor, sonraki CBM basic versiyonlarında bir kısmı fixlenmiş durumda. C64 için de basic'deki çeşitli bugları fixleyen patchler mevcut. Ben bu örnekleri bu yarışma süresince gözüme çarpan basic buglarından birkaçı olarak burada paylaşıyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: maverick üzerinde Haziran 13, 2017, 06:55:16 ÖÖ
Mükemmel bir kapışmaydı, heyecan ile izledik. Tebrik ediyorum.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Ağustos 18, 2017, 17:35:52 ÖS
@Skate ve delimawi:

Kazananı belirlemek için bir soru daha sormam gerekiyor ama vakit ayıramıyorum malesef. Elimde de ödül olarak verecek karttan iki adet var. İkinizinde acayip başarılı olduğunu ve bizlerin keyifle takip ettiği çözümler ürettiğinizi de göz önünde bulundurarak bu yarışmanın da iki galibi olsun diyorum. PM'den adreslerini gönderirseniz kartları göndereyim.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: AmigaEsref üzerinde Ağustos 18, 2017, 18:08:23 ÖS
Tebrikler


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Aralık 12, 2017, 15:11:01 ÖS
delimawi ve Skate: irqHack64'leriniz adres bilgisi bekliyor.


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: witchdoktor üzerinde Aralık 12, 2017, 15:16:25 ÖS
delimawi ve Skate: irqHack64'leriniz adres bilgisi bekliyor.

Sesin soluğun kesildi son aylarda...


Konu Başlığı: Ynt: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Gönderen: wizofwor üzerinde Aralık 12, 2017, 15:49:48 ÖS
Çocuklu hayata adaptasyon süreci, iş yoğunluğu, evin eksikleri, vakitsizlik vb. üst üste gelince böyle oldu.