inputta sonda ',' koyulan case icin yaptim. 1,2,3,3, de 0 veriyor sonda ',' yoksa son sayiyi saymiyor. perldeki mantikla 2 satira indirdim, cirkin oldu ama ![]() a=input().split(",") print(not(False in [a[k]<a[k+1] for k in range(len(a)-2)])) sonraki donem perl dersi var. bakalim bu trickleri gorecek miyiz. |
Çıktı verirken sonda virgül olabilir fakat veri girişnde olması için pek rastlanan şey değil. Sona da virgül koyunca doğru calıştı. 2 satırlık versiyon o kadar kötü sayılmaz. Üniversitede Perl dersinde bu trick'leri göstereceklerini pek sanmam. Ayrıca Raku gösterileceğini de pek sanmam, bahsettikleri ders Perl 5'tir. |
bunu nerede ve ne için kullanacağınız öğrene bilir miyim !? |
Konunun kağıt üstündeki amacı soruları en pratik kod ile çözmek Fakat asıl amacı programlamcılık becerilerini geliştirmek. Unutulan bazı programcılık yöntemlerini hatırlamak. Dolayısıyla soruların gerçek hayatta kullanılması şart değil. |
basit kod yazmak denince akla api gelir konu orada biter gider. programlamayı geliştirmek diyorsanız asm seviyesine inilmesi daha mantıklı olur ! ne kadar çok kod o kadar çok kontrol anlamına gelir. amaç eğer performans ise ! |
Amaç performans değil, daha doğrusu No.1 öncelikli değil, amaç basit fakat (cogu kez) temel matematik gerektiren soruları kısa ve net kod ile çözmek. Örnein sort fonksiyonu kullanmadan artan seriyi kontrol etmek sorusunu kısa ve net kodlayabiliyor musun? Soru budur. Bu veya önceki diger soruları önce kod ile yanıtlayamıyorsan yoruma gerek yok. |
matematik & mantık diye bir programı dili olsa inan ki dünyanın en verimli programlama dili bu olurdu. mantık konusunda eşleştirme yöneticileri zaten klasik bunda sorun yok matematik noktasında da aslında sıkıntı yok 4 fonksiyonla bütün işler yapıyor + - x / sorun şu ki bu dille her şeyi tanımlayabilmek varken. fonksiyonlu dillerin fonksiyon terimleri amaçı hep unutturuyor. keşke yeni bir programlama dili yazsanız ! işte burada verdiğiniz emeğe değer. |
Raku (eski adı Perl 6) için modern bir matematik dili denilebilir. Matematikte operatör önceliği diye bir nes vardır örneğin 1 + 2 / 2 'de bölü operatörü artıya göre öncelikli değil mi, Raku 'da (1 + 2) / 2 gibi operatör önceliğini soldan birleşimli olacak şekilde yeniden tanımlayabiliyorsun. Kalkulüsteki 'sonsuz seri' yapısını da Raku 'da tanımlayabiliyorsun, örneğin 'phi' denilen altın oran sayısı, sonsuz seri biçiminde gösteriliyor Raku'da da onu özdeş biçimde göstererek saydırabiliyorsun. "Unicode Alphabetics" desteği sayesinde matematik gösterimleri direkt kodun içinde kullanabiliyorsun, örneğin alttaki SS'te Rj gösterimi. Bu kod 17.yy matematikçilerinden Pierre de Fermat 'ın teorimini kullanarak cok büyük sayıların asal olup olmadığını denetliyor: < Resime gitmek için tıklayın > Görüldüğü gibi Raku'da ile birçok matematiksel programlama yöntemi kolaylıkla kullanılabiliyor sen "keşke matematik & usbilim programlama dili diye bir nes olsa" diyorsun :) Bu arada Raku matematiklsel programlamayı yoktan bulmuş (Arapça: sıfırdan icat etmiş) değil, hepsini direkt Haskell programlama dilinden almış dolayısıyla bu işin öncüsü öncüsü Haskell'dir ancak Raku bu işi pratikleştirmiştir. |
her programlama dili farklı bir yol izler ona göre piyasadaki rakibi olmayan bir kulvarda koşmaya çalışır. 2. olarak daha önceki yazınızda daha kısa kod yazmaya odaklı bir yorumunuz vardı. kısa kod yazmak ezbere dayalı bir sistem haliyle tembel bir toplum yaratır. tek becerisi kpss sorularında başarı yakalamak olur. ve 90 puanla hademeli seçen bir insanlar topluluğu oluşturur. programlama ; fonksiyon parametrelerini ezberlemek değil ! programlama bilmeden matematik diliyle hayatı sayılarla ve mantıklaştırılmış gruplarla tanımlayıp matematiksel işlemlere çevire bilmekten ibarettir. şimdide perl konusuna atlamışsınız neyse konuyu hak vermek anlamıyla tamam olay perl dersiniz, ama diğer dillere geri dönüş olursa ortada diğer diller değil programlama ile program dilinin ingilizce olması aslında insanların hem ingilizce hemde o dilin kendi mantığına göre matematiksel lugat girme şekli farklı özetle ortada programlayı evrensel bir dil haline getirmek yerine programlamayı kişisel ve farklı bir noktaya götüren evrensellikten öte yöreselliğe çeken program geliştiricileri ortada, onlar için ingilizce ana dili ama bizim için yabancı bir dil. ne zaman tüm dünyadaki insanlar için ana dil gibi bir dil daha doğrusu %100 matematik dili temelli bir programlama diliyle programlama yapılırsa işte o dil evrensel anlamda güzel bir ortak dil olur. ama yinede o dile yine çamur atacaklar yok yavaş çalışıyor diyenler olacaktır. |
Güncel konu başlığı olan sort fonksiyonu kullanmadan artan seriyi kontrol etmek problemini C++ ile çözdüğüm 21 sıralık kod. < Resime gitmek için tıklayın > Görüldüğü gibi her bir durum için (Arapça: daim) kısa kod yazmıyorum. Koddaki sregex_token_iterator klası C++'ye yeni eklenen özellik olup (Arapça: ve) C++'da 30+ yıldır olmayan string 'split' / dize 'bölme' fonksiyonunun işini yapıyor. Ancak kodun esas yeri (Arapça: kısım) olan artan seri denetleme fonksiyon şablonu / template yine tek sıra :) |
1 den 9'a dek (Arapça: kadar) sayıların (Arapça: rakamların) herbirini yalnızca (Farsça: sadece) bir kez içerecek biçimde (Arapça: şekilde)
permütasyonlarından (sayıları büyüklüklerine göre sıralayarak) 111.111nciyi bulunuz. |
Şöyle bir çözüm var.(Alıntıdır) < Resime gitmek için tıklayın > Burada herhangi bir algoritma geliştirmeden yalnızca veri yapısı kullanarak çözmüş. Sayıların permütasyonlarını Ağaç/tree veri yapısında tanımlamış. Ağacın kökü tüm verilenlerin tüm sayılarını içeriyor, ağacın her bir dalı ise daha önce bakılmış sayıların dışındaki (Arapça: haricindeki) öteki (Arapça: diğer) tüm sayıları içeriyor. Ağaçta tek bir sayı kalana dek rekürsif olarak sürüyor (Arapça: devam ediyor) Ağaçta tek sayı kalınca digits[0] daki sayı çözüm oluyor. |
|
Emacs Java ile C# 'deki autocomplete özelliklerini bile çalıştırıyor; bellekte yalnızca 40MB harcıyor, Win-OSX-Linux-FreeBSD dörtlüsünde sorunsuz calışıyor, ayrıca Terminal modu da var, dolayısıyla SSH ile uzaktan bağlantı yaptığında uzaktaki bilgisayarda emacs acıp tüm bu özellikleri kullanabiliyorsun. O yüzden default editörüm oldu. Emacs ten önce VIM kullanıyordum. 40 lı yaşlardayım fakat 40'lı yaşlardaki kişilerden hem görüntü hem de öteki açılardan ayrıyım. Görüntü derken giyim değil, modayı izlemem. |
İnternette farklı kişilerden, bloglardan, videolardan vb. kendim için fikirler çıkartmak için notlar alıyorum sadece. Cevaplamak istemezseniz alınmam. :) |
Yeni soru: < Resime gitmek için tıklayın > Bu soruda isterseniz matematiksel ön işlem yapabilirsiniz (= soruyu yalnızca matematik kullanarak çözebilirsiniz) |
Kullanıcının girdiği sözcükteki imlere . (benek) ekleyerek yazdıran program yazınız. Örnek: Girilen sözcük: hello Çıktı: h.e.l.l.o. |
python
|
for döngüsünü Python closure olarak yorumluyor oluşan generator object'i [ ] içine alınca dizi oluyor, join'leyince de çıktı veriyor. Oldukça pratik ancak denediğimde input yerine raw_input gerekti. Raku'da işlem:
comb, prompt 'un döndürdüğü string'i dizi yapıyor, map( * ~ '.') dizinin her elemanına '.' ekliyor. map fonksiyonuna parametre olarak verilen * Raku aracılığıyla parametre, dolayısıyla (h e l l o) listesindeki elemanları gösteren değişken olarak yorumlanıyor ~ (tilde) imi Raku'da string ekleme operatörüdür dolayısıyla h. e. biçiminde liste üretilir. Sonrasında join parametresiz parantezsiz cağırılarak dizi elemanlarınden string yapılıyor, en sonda, her nesnede tanımlı metod olan say ile sonuç basılıyor... |
Bu işi Raku'da (eski adıyla Perl 6) tek satırda yapabiliyorsun:
< Resime gitmek için tıklayın >
say [<] prompt("Seri gir: ").split(" ");
Kodun açıklaması:
sağdaki prompt("Seri gir: ").split(" ") Python'daki input().split(" ") ile aynı işi yapıyor yani kullanıcının girdiği seriyi tutuyor.
onun solundaki [<] ise 2 operatörün birleşimi [ ] indirgeme operatörü ve içine aldığı < ise indirgeme şartını ileten operatör ve bu operatör kombinasyonu seri boyunca elemanları < ile karşılaştırarak sonucu iletiyor.
Fakat bu [ ] operatörünün bir özelliği daha var: Matematikte "birleşme özelliği" vardır. Bu operatör, zincirleme birleşme özelliğine (chaining-associativity) default olarak sahip oyüzden seri boyunca < kontrolünde sadece 1 eleman uymasa tüm işlem negatif veriyor. Default zincirleme birleşme özelliğ yerine, soldan birleşme özelliğ de atayabilirsin. Veya içerdeki operatörü < değil de <= yapabilrsin ki o durumda senin Python kodu ile aynı sekilde sonuç verir.
< Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 19 Kasım 2019; 12:25:40 >
< Bu ileti mini sürüm kullanılarak atıldı > Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @rekteo