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

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

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



Üyelik Bilgileri WWW
« Yanıtla #105 : 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
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
emarti
Uzman
*****
Mesaj Sayısı: 2.592


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #106 : 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))
Logged

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

READY.
SYS(64767): EMARTI
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #107 : 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)
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #108 : 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
Logged

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


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #109 : 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...
« Son Düzenleme: Mayıs 06, 2017, 02:07:55 ÖÖ Gönderen: delimawi » Logged

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


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #110 : 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... Kahkaha
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #111 : 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?
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #112 : 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.




« Son Düzenleme: Mayıs 06, 2017, 02:32:38 ÖÖ Gönderen: delimawi » Logged

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


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #113 : 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
« Son Düzenleme: Mayıs 06, 2017, 02:51:28 ÖÖ Gönderen: delimawi » Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #114 : 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.
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #115 : 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... Kahkaha 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
« Son Düzenleme: Mayıs 06, 2017, 03:10:05 ÖÖ Gönderen: delimawi » Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #116 : 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... Kahkaha 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
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #117 : Mayıs 06, 2017, 03:28:14 ÖÖ »

Zaten tirnak icinde etik yazmistim ama sonucta ikimizin de kartusa ihtoyaci yok. Nasil yapsak...

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

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
emarti
Uzman
*****
Mesaj Sayısı: 2.592


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #118 : 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))

Logged

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

READY.
SYS(64767): EMARTI
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #119 : Mayıs 06, 2017, 14:29:04 ÖS »

1 Byte optimizasyon. Yahu bu fikri nereden buldun @wizofwor, takıldı aklıma iş yapamıyorum... Kahkaha

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
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Sayfa: 1 ... 6 7 [8] 9 10 ... 30   Yukarı git
Yazdır
Gitmek istediğiniz yer: