30 Haziran 2009 Salı

Ruby ile saçmalamak

Ruby'de bir sınıf tanımlarken onun superclassı olan kısımda sadece bir class adı değil, herhangi bir expression kullanabiliyoruz. Sonuçta, uykulu bir şekilde şu saçmalamayı çıkarabiliyorum;
class A < ObjectSpace.each_object(Class).to_a.sort{rand}[0]; end
"Bu ne yapmakta?" denirse, şöyle cevap vermemiz mantıklı olur; "Ortalıkta tanımlanmış sınıflardan random birini alıp ondan bir sınıf türetiyor.". Ardından da "E peki ne işimize yarayacak bu saçmalık?" sorusunun gelmesini bekleriz ve ona verecek bir cevabımız olmaz, teist geleneklerine uyarak kıvırırız. Hatta Serdar Ortaç'tan alıntı yapacak olursak(o kadar mı düştüm ya?) "Binlerce dansöz var" diyebiliriz.

26 Haziran 2009 Cuma

Michael Jackson ölmüş?

Kendisi son 15 yıldır falan zombi gibi dolaşınca ben bir süredir onun cidden zombi olduğunu(Thriller geldi aklıma :) ve ölmeyeceğini düşünüyodum ama öldü. Elvis'e selam söylesin ne diyelim. Ayrıca kendisi anısına 25 haziran'ın moonwalk günü olması ve fanlarının toplanıp moonwalk yapmasını önerebilirim.

21 Haziran 2009 Pazar

Olimpiyat sorusu falan - bi başkası

Olimpiyat kampındayken kod yazma dışında pek ilgi çekici bişey olmadığı için blog da gayet boş kalabiliyor. Arada sırada yaptığım çözümleri beğenirsem yolluyorum işte. Şurada USACO training şeyindeki numtri sorusunun çözümü;
/* 
ID: kuzux921
PROG: numtri
LANG: C++
*/

#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
  ofstream out ("numtri.out");
  ifstream in ("numtri.in");
  
  int rows; in >> rows;
  
  vector < vector<int> > triangle;
  for(int i=0;i<rows;i++){
    vector<int> tmp;
    triangle.push_back(tmp);
    for(int j=0;j<=i;j++){
      int n; in >> n;
      triangle[i].push_back(n);
    }
  }
  
  for(int i=triangle.size()-2;i>=0;i--){
    for(int j=0;j<=i;j++){
      triangle[i][j] += max(triangle[i+1][j],triangle[i+1][j+1]);
    }
  }
  
  out << triangle[0][0] << endl;
  
  return 0;
}

Bu da yine aynı yerden frac1 sorusu;
/* 
ID: kuzux921
PROG: frac1
LANG: C++
*/
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

struct Fraction{
  int num;
  int den;
};

inline double value(const Fraction& frac){
  return ((double)frac.num)/((double)frac.den);
}

void search(int limit, vector< vector<bool> > matrix, vector<Fraction>& res){
  Fraction def; def.den = def.num = 1;
  res.push_back(def);
  def.num = 0;
  res.push_back(def);
  
  for(int i=2;i<=limit;i++){
    for(int j=1;j<i;j++){
      if(!matrix[i][j]) continue;
      Fraction tmp;
      tmp.num = j;
      tmp.den = i;
      res.push_back(tmp);
      for(int k=2;k<=limit/i;k++){
        matrix[i*k][j*k] = false;
      }
    }
  }
}

bool sortr(const Fraction& f1, const Fraction& f2){
  return value(f1) < value(f2);
}

int main(){
  ofstream out ("frac1.out");
  ifstream in ("frac1.in");
  int limit; in >> limit;
  
  vector<Fraction> res;
  vector< vector<bool> > matrix;
  matrix.resize(limit+1);
  for(int i=2;i<=limit;i++){
    matrix[i].resize(i+1);
    for(int j=1;j<i;j++){
      matrix[i][j] = true;
    }
  }
  
  search(limit,matrix,res);
  sort(res.begin(),res.end(),sortr);
  
  for(unsigned int i=0;i<res.size();i++) out << res[i].num << "/" << res[i].den << endl;
  
  return 0;
}

17 Haziran 2009 Çarşamba

Olimpiyat sorusu falan

Olimpiyatta çözmeye çalıştığımız bi soru. Bir kümeyi(1..N şeklinde) öyle iki parçaya ayıracaz ki o iki parçanın elemanlarının toplamları eşit olsun. Çözüm güzel oldu, yollayayım dedim. Kimse çözemeyince çözümü anlatan ermana teşekkür etmekteyiz buradan.
#include 
#include 
using namespace std;

int main(){
  int N = 42;
  int top = N*(N+1)/4;
  
  vector< vector > dyn;
  
  for(int i=0;i<=top;i++){
    vector temp;
    dyn.push_back(temp);
    for(int j=0;j<=N;j++) dyn[i].push_back(0);
  }
  dyn[0][0] = 1;
  
  for(int i=1;i<=N;i++){
    for(int j=0;j<=top;j++){
      dyn[j][i] = dyn[j][i-1];
    }
    for(int j=0;j<=top;j++){
      if(i+j<=top)
        dyn[j+i][i] += dyn[j][i-1];
    }
  }
  int res = dyn[top-1][N] / 2;
  cout << res << endl;
  return 0;
}

13 Haziran 2009 Cumartesi

Alternatif Maykrozort kampanyaları

http://www.browserforthebetter.com adresinde, Maykrozort ie8 için ilginç bir download kampanyası başlatmış. Her ie8 downloadu için Amerika'daki açları doyuran bir kampanyaya 8 yemek bağışlayacaklarmış. Ancak maksimum 1milyon dolar bağışlayacaklarmış, o halde neden böyle bir reklam kampanyası yaparlar ki? IE yi indirtmek için başka yolları kalmadı demek ki, duygu sömürüsüne başlıyorlar. Ben de dedim ki, daha iyi fikirler de olabilir aslında indirtmek için.
Mesela siteye böyle şirin bir kedi resmi koyup, "eğer indirmezseniz bu kediyi öldürürüz!" diyebilirler. Veya kullanıcının girdiği ülkenin çoğunlukta olduğu dine göre sloganlar kullanabilirler. "Jesus loves IE", "Mübarek tarayıcı" falan gibi.
Tabi aslında bunun çok daha kolay bir yolu da var, bütün windose kullanıcılarına hiç sormadan otomatik olarak ie8 yükletmek mesela.

9 Haziran 2009 Salı

goto php_sucks_more;

PHP, 5.3 sürümünden itibaren goto destekleyecekmiş. Zaten noobların sıkça tercih ettiği bir dil olduğunu ve php ile yazılmış kodların ~%90'ının berbat durumda olduğunu düşünürsek, fena bir fikir değil aslında. Nasıl c#'ta gotonun varlığına anlam verememekteysem, buna da genel olarak anlam veremiyorum. Bu arada, Dijkstra "goto considered harmful" u yayınlayalı 41 sene olmuş, hala goto. Belki 42 de bırakırlar :)

8 Haziran 2009 Pazartesi

RTE'den özlü sözler

"Ben sana ’Sayın’ diyorum. Sen de bana "Sen" ya da ’Siz’ diyemezsin", 7 Haziran 2009, RTE
"Ananı da al git lan!", 11 Şubat 2006, RTE
Bunları birleştirelim;
"Lan deme lan babam kızıyo lan!", İleriki bir tarih, RTE
Sonrasında;
"Çeteler yargının içine sıçmış", 22 Ağustos 2007, RTE
Bunu ilk cümleyle birleştirmeye çalışalım;
"Küfretme yarraam(burası vurgulu söylenecek) aile var", t zamanı, RTE

4 Haziran 2009 Perşembe

Google Squared

Google Squared, Google'ın bugün ortaya çıkardığı bir yenilik, yakın zamanda Bing(*sigh*) ve Wolfram|Alpha(*facepalm*) gibi çeşitli sözde "Google Killer"ların ortaya çıkmasıyla yakın zamanda olması tesadüf müdür bilemem, ama buna laf edemiyorum. FUSSİKTİR!! BABA NASIL YAPTINIZ LAN BUNU!! demek istiyorum sadece. Gerçi beta, sorunları var gibi ama hem Bing'den hem de WolframAlpha'dan daha az sorunlu diyorum.
Ayrıca karşılaştıralım, hiç haber vermeden çatırt diye böyle çıkarmak mı daha iyi, yoksa WolframAlpha gibi çıkmadan önce götünü yörüngeye oturtup kendini öve öve arama işinde "Silver Bullet" ilan etmek mi?
Bu arada, biraz daha detaylı bilgican için; http://radar.oreilly.com/2009/06/google-squared-is-an-exponenti.html diyip kaçıyorum.

2 Haziran 2009 Salı

Ruby ile 15 dakikada Scheme interpreterı?

Geleneksel RoR örneğidir 15 dakikada blog yapımı, hatta benim onu geliştirip "generator scriptlerinin çalışma süresi hariç 3.5 dakikada blog yapımı" haline getirmişliğim de vardır. Buradaki arkadaş da ruby ve treetop parser kütüphanesini kullanarak böyle bir sığırlık yapıyor. Gerçi ortaya çıkan scheme in R5RS veya daha bilimum Scheme standardıyla pek alakalı olmuyor ve daha bir sürü zıbıdık tanımlanması gerekiyor. Tabi 15 dakikada ancak bu kadar olur, gayet iyi diyorum ben. Neyse vidyocan da şöyle:

Scheme interpreter in 15 minutes from James Coglan on Vimeo.



O değil de, bu sınav clusterfuckından dolayı saçmalayamıyorum ya, olmuyor bir türlü. Ayrıca biterken kafamda aynı anda hem Status Quo - Whatever You Want hem de Deep Purple - Pictures of Home çalmaktaydı, böyle bir biri giriyor bir diğeri kafa da allak bullak oluyor.

1 Haziran 2009 Pazartesi

Clusterfuck

4 gün içine 1 matematik, 1 geometri, 1 fizik, 1 kimya, 2 biyoloji sınavı sıkışınca bu durum clusterfuck kategorisine gayet güzel şekilde girebilmekte. Bu arada blog mlog hak getire diyoruz, ortalıktan çekiliyoruz.
Biterken kafamda Meat Loaf - Rock&Roll Dreams Come True çalmaktaydı.