Why am I leaning on fewer, more tasteful and higher quality apparels for my future clothing purchases.

Dulu, saya berpikir bahwa pakaian apapun itu fine fine aja, selama saya bisa memakainya. Oleh karena itu, setiap kali saya membeli pakaian, atau ditawarkan untuk dibelikan pakaian, atau dibelikan pakaian, saya akan memilih dari apa yang ada di toko itu, atau dari apa yang dibelikan (biasanya dibeli 2 karena saya dua bersaudara dan siapa yang cepat bisa memilih baju yang dibelikan). Tetapi, as of late, saya membuat pilihan baru, yaitu untuk diberikan uang yang orang tua saya akan habiskan untuk membeli pakaian, atau tidak membeli pakaian sama sekali.

Tapi penulis, mengapa anda membuat pilihan tersebut?

Ketika saya melihat lemari pakaian saya dan mengulas (me-review) pakaian yang saya miliki, saya terkejut dengan banyaknya pakaian yang saya tidak pakai. Tumpukan pakaian yang berisi hal-hal seperti T-Shirt, Polo Shirt dan Celana, baik itu pendek maupun panjang, yang tidak pernah saya sentuh dalam waktu yang relatif lama, dan itu membuat saya berpikir.

Banyak sekali pakaian yang saya beli (atau dibelikan), tetapi tidak saya pakai. Mengapa saya tidak memakainya?

Ya, penulis. Mengapa anda tidak memakainya?

Jawabannya sederhana, it’s not presentable. Entah itu karena pakaiannya sudah tidak muat lagi, atau karena sablonannya sudah pudar, atau pakaiannya terlalu besar untuk saya (Untuk beberapa pakaian yang masih bisa di-vermak, saya bawa ke tukang vermak agar muat kembali dengan tubuh saya sekarang). Apapun alasannya, semua itu kembali lagi ke frase, it’s not presentable.

“…uang yang dapat saya gunakan untuk busana lebih sedikit dibandingkan apa yang saya harapkan”

Saya juga berpikir jauh ke masa depan, dimana saya sudah bekerja dan mendapatkan uang. Berapakah uang yang saya akan dapatkan setiap bulannya, dan berapa persen dari pendapatan saya yang bisa saya alokasi-kan ke busana? Itu adalah pertanyaan yang saya coba jawab dan ketika saya sudah memperhitungkan jawaban dari pertanyaan itu, saya menyimpulkan bahwa uang yang dapat saya gunakan untuk busana lebih sedikit dibandingkan apa yang saya harapkan.

Hal tersebut berarti bahwa saya harus lebih pintar dalam memilih pakaian. Saya harus memilih pakaian yang berkualitas (high quality), sesuai tujuan gaya yang saya inginkan (fits my style), dan terlihat baik jika digunakan bersama pakaian lain yang ada di wardrobe yang saya (akan) miliki (looks great when paired with the outfits that I have and clothing that I will own in the future). Beberapa paragraf selanjutnya merupakan penjelasan dari poin-poin tersebut (The next few paragraphs will be me elaborating on those points).

Berkualitas dalam kasus ini berarti memiliki jahitan (stitching) yang bagus dan sebanding (atau melebihi harapan) dengan harganya, dibuat dengan bahan yang bagus dan tahan lama, lagi-lagi relatif ke harganya (made with high quality and durable materials, again relative to the price), memiliki warna yang tidak akan pudar, dan memiliki desain yang tidak lekang oleh waktu (timeless).

Untuk memenuhi syarat dari frasa “Sesuai dengan tujuan gaya yang saya inginkan” , saya harus bertanya kepada diri saya, gaya seperti apakah yang saya ingin capai dengan pakaian saya? Setelah berpikir, saya menemukan bahwa saya lebih condong ke arah smart casual, gaya yang bisa di dress-up atau di dress-down tergantung situasi, tetapi saya juga terbuka ke style apapun. Yang terpenting adalah bahwa tampilan saya baik saat saya memakai pakaian tersebut (The most important thing is that I look good while wearing it).

Saya juga suka koleksi pakaian yang minimalis, sehingga saya tidak terkena choice overload), dan juga agar saya tidak menghabiskan terlalu banyak uang dalam busana. Untuk mencapai tujuan ini, semua pakaian yang saya beli harus cocok satu sama lain (it has to suit each other). Tetapi, cocok tidak cukup. It has to look good when paired as well (kalau tidak, pakaian tersebut tidak akan memenuhi syarat kedua). Oleh karena itulah saya membuat syarat bahwa pakaian yang saya beli harus terlihat baik jika digunakan bersama pakaian lain yang ada di wardrobe yang saya (akan) miliki.

Dengan membuat syarat-syarat tersebut, saya berharap bahwa saya akan lebih efisien dalam membeli pakaian, dan pakaian yang saya beli akan bertahan di dalam lemari pakaian saya untuk beberapa tahun yang akan datang.

Pembelian LCG pertama saya dan alasan kenapa saya membelinya.

Board games dan card games, dua buah genre permainan yang sangat jarang sekali dimainkan oleh orang pada zaman ini. Harganya yang tidak terjangkau, serta sulitnya bagi orang yang memilikinya untuk mengajari orang lain cara memainkannya ataupun mengajak orang lain untuk memainkannya adalah tiga dari banyak hal yang membuat orang enggan membelinya. Banyaknya permainan yang dapat dimainkan di komputer, konsol, ataupun di telepon pintar tidak membantu. Tetapi, saya membelinya. Meskipun saya tahu betapa sulitnya mengajak orang untuk memainkannya, saya tetap membelinya. Mengapa demikian?

Karena saya menyukai konsep permainannya, dan ketakutan bahwa saya tidak bisa memperkenalkan permainan ini ke orang lain.

Maksud anda apa, hai penulis blog? Konsep apakah yang anda sukai dari board game atau card game yang anda beli?

Oke, sebelum saya menjawab pertanyaan anda, saya akan memberitahukan kepada anda card game yang saya beli.

Hmm, jadi yang anda beli adalah card game?

Benar. Saya membeli card game. Tetapi yang saya beli bukanlah card game yang biasa saja. Saya membeli sebuah card game yang berada dalam sub-genre “LCG” atau “Living Card Game”.

Mungkin beberapa dari anda yang membaca tulisan ini bertanya-tanya, apa itu “Living Card Game”? Bagi yang belum tahu, “Living Card Game” adalah suatu card game yang diproduksi dengan cara tertentu yang spesifik. Pembuat suatu permainan kartu yang masuk dalam kategori ini akan membuat suatu produk yang mungkin dinamakan sebagai “Core Set” atau “Base Set” atau nama apapun yang mirip dengan dua nama yang saya sebutkan sebelumnya. Kemudian, tergantung dari kesuksesan produk itu, akan dibuat lagi suatu produk yang biasa dinamakan  “Expansion Pack”, dimana produk ini akan menjadi suplemen dari produk yang dikeluarkan sebelumnya. Produk yang bernama “Expansion Pack” ini, tergantung pembuatnya, dapat atau tidak dapat dimainkan kalau tidak memiliki produk awalnya.

Mengapa konsep ini sangat menarik bagi anda, hai penulis blog ini?

Konsep ini sangat menarik bagi saya karena saya dapat membeli satu saja produk awalnya, dan saya tidak perlu membeli lagi produk-produk yang dikeluarkan setelah itu. Meskipun demikian, saya memiliki pilihan untuk membelinya kalau saya menginginkannya, dan kalau saya hanya membeli “Expansion Pack” yang saya inginkan, saya tetap dapat menggabungkannya dengan produk awal yang saya beli dan memainkannya, tanpa dampak yang besar terhadap pengalaman gameplay.

Setelah menjelaskan semua itu, sekarang saya akan memberi tahu card game yang saya beli. Card game yang saya beli adalah EPIC card game. Nah, mungkin sekarang anda bertanya-tanya, apa itu EPIC card game? Epic card game adalah card game yang dapat dimainkan oleh 2 sampai 4 pemain. Setiap pemain mendapatkan tiga puluh kartu yang dinamakan deck, tiga puluh poin health dan saat permainan dimulai, mendapatkan lima kartu di tangan yang diambil dari kartu teratas deck secara satu per satu. Pemain bermain sebagai dewa yang mengontrol dua tipe kartu (atau tiga tergantung mode permainan yang dimainkan), yaitu Champions dan Events (dan Elder Gods, Gods atau Demigods) dan menggunakannya untuk mengalahkan dewa-dewa yang lainnya dan meraih kemenangan.

Image result for epic tcg
Gambar dari Base Set untuk Epic Card Game.

Bagi anda yang telah memainkan card game sebelumnya, konsep ini mungkin tidak asing bagi anda, terutama bagi anda yang telah memainkan permainan yang bernama Magic: The Gathering. Itu karena permainan ini memang didesain untuk menjadi permainan yang serupa, tapi tak sama dengan Magic: The Gathering. Hanya saja, pemain tidak perlu menghabiskan giliran-giliran awal mereka untuk mengumpulkan sumber daya yang dibutuhkan untuk memainkan kartu-kartu kuat mereka. Di EPIC, pemain bisa langsung memainkan kartu-kartu kuat pada giliran pertamanya! Unik, bukan?

Jika anda merasa hal tersebut belum cukup unik untuk memisahkan EPIC dengan Magic: The Gathering dan permainan yang desain produknya mirip dengan Magic: The Gathering, ada satu konsep lagi dari “LCG” yang saya harus beritahukan kepada anda.

Seperti anda yang memainkan Magic: The Gathering ketahui, Magic: The Gathering itu bukanlah produk yang murah. Satu deck minimal memiliki harga 20 dollar, dan kalau anda ingin bermain dengan satu teman lainnya, anda harus membeli lagi deck untuk teman anda. Mungkin anda ingin memiliki semua kartunya, sehingga anda dapat membuat semua deck yang dapat dibuat di permainan tersebut. Anda tidak bisa melakukannya dengan mudah, karena beberapa kartunya memiliki harga yang sangat tidak terjangkau. Bahkan, jika anda orang kaya, anda harus berpikir dua kali untuk mengoleksi semua kartu yang ada, karena dengan uang yang dibutuhkan untuk mengoleksi semua kartu yang ada, anda mungkin bisa membeli satu ataupun dua perusahaan kecil. Hal demikian juga serupa untuk produk yang lebih murah, tetapi pada tingkat lebih rendah.

Tidak demikian untuk “Living Card Game”. Jika produk itu baru, anda bisa membeli produk tersebut, dan anda sudah mendapatkan semua kartu yang ada. Kalau produknya di-fundraise di kickstarter, anda bisa mendapatkan semua kartunya dengan mem-pledge sejumlah uang yang jumlahnya tentu dan tidak berubah-ubah. Kalau ada “Expansion Pack”, anda dapat membelinya dengan harga yang relatif terjangkau, yang biasanya lebih murah dibandingkan produk awalnya, dan koleksi anda untuk saat itu menjadi lengkap. Tidak ada keserampangan, tidak ada peluang untuk tidak mendapatkan kartu yang anda butuhkan untuk melengkapi koleksi anda, semuanya sudah ada dalam satu kotak dan beberapa “Expansion Pack”.

Fakta tersebut juga memaksa pembuat permainan untuk menyeimbangkan semua kartu yang mereka keluarkan. Mereka harus menganggap bahwa semua pemain memiliki semua kartu yang mereka keluarkan, dan mereka harus mendesain kartu-kartu yang mereka keluarkan berdasarkan fakta itu.

Hal inilah yang membuat “Living Card Game” sangat menarik dan sangat unik. Setiap “Living Card Game” adalah permainan yang seimbang antar pemain. Tidak ada pemain yang diuntungkan secara besar dengan koleksi yang lebih besar, atau pemain bahkan tidak perlu mengoleksi kartu sama sekali, tergantung dari desain permainannya. Inilah yang membuat saya menyukainya.

Ya, saya sulit mencari teman untuk memainkan permainan ini. Tetapi tidak apa-apa, karena beberapa tahun kemudian, permainannya tidak akan berubah terlalu banyak. Tidak seperti Magic: The Gathering, dimana saya harus membeli deck baru untuk bermain di level yang setara dengan pemain lainnya. Hal itu, alasan-alasan yang saya berikan sebelumnya, dan fakta bahwa konsep ini perlu di-support, akhirnya adalah hal-hal yang mendorong saya untuk membeli produk ini.

I can’t sleep.

As the title says, right now (which is 2.19 AM on the 12th of April 2019), I can’t sleep. I’m actually thinking about what has happened so far this week. It has been an unlucky week for me, because a lot of things just did not go my way. I’m actually going to talk about that in this blog post.

On Monday, on the 8th of April, I was woken up earlier (at 7 o’clock) than what I used to be woken up at, which is 8 o’clock in the morning. This was actually not good for me, because I expected to be woken up at 8 o’clock in the morning, and that’s why I slept at 2 AM (8-2 = 6 hours of sleep, which was good enough for me). I slept at 2 because I was preparing myself for the presentation which was going to be done in class later on that day.

Because I was really motivated that morning, I did what I had to do, which is to correct the presentation files that me and my group needed to help us present our ideas later in class. When I was done correcting the part that I was supposed to present, I took a bath and afterwards, I looked at the clock on the wall. The time was 7.30. I thought “okay, I still have one hour and thirty minutes left before I have to go, so I think I’ll sleep for an hour, because I feel dizzy right now because of the lack of sleep”. I set an alarm on my phone and dozed off.

When I woke up, it was not 8.30 AM, which was the time I set on my phone. It was 10.20. Holy shit. I was late, extremely late. Class starts at 10 o’clock and here I am, still at home. So I packed my bags, put on my shoes and went to Uni. I did not have my breakfast because I simply didn’t have the time to do that.

When I arrived, it was 11 o’clock, and what I saw was my group currently presenting. I missed it. I missed the presentation, and the marks that was given along with it. I was down that day, but I vowed to be better the next time my group will present. I expected it to be next week, but on Wednesday, my professor actually ruled out that possibility, because when he rolled 7 three times on random.org (which was our group’s number), he decided that it would be best for other groups to present first and not us, so I have to wait longer for me to redeem myself.

I have talked about what happened on Thursday, when I forgot to do an important thing(a link to that post will be put here), but that was not all the shitty things that happened to me that day. Actually there is one other thing that happened on that day, which is the train being delayed because there were two drivers that decided that it would be a good time to crash the vehicles that they were driving on the rails of the commuter train.

This event is out of my control really. I expected to still arrive in time, because the actual time that I usually spent on travelling from my house to the University is around 30 minutes. However, because of this shitty incident, I arrived really late, because it increased the time I spent to more than an hour. I was also woken up earlier than usual this morning so that may be a factor as well because I felt really lethargic that morning.

That’s all that I have for this blog post. I would like to thank anyone that has read this blog post up until this point. If you would like to hear from me some more, you can follow this blog, but I’m not forcing you to do that so feel free to not follow if you don’t like the content that I’m putting here. Thanks again, and stay tuned, if you want, for the next one.

 

Forgot to do a thing yesterday

I’m going to tell you one thing that I forgot yesterday and the reasons I forgot it. The thing that I forgot was the due date to a task that I’ve postponed on doing since I don’t really know how to do when I first got it.

The task that I forgot to do was to check other people’s homework on AREN. So the University I go to has this grader called AREN. It’s a platform where tasks for certain electives are graded. On that platform we were tasked to check other peoples homework. I don’t know why we have to do that, but our professor said that we have to do that and as an undergraduate student I can’t really complain about it.

If you are asking why I postponed this, the reason was when I first looked at the task, there was no answer sheet that I could look into to see whether or not my friend’s answer was correct. Because of that, I had to wait until the answer sheet, or in this case, document was released. When it was released, I was doing my Advanced Programming homework, and since the due date was not on that particular day I decided to postpone it. I don’t normally do this, but I have to at the time because the Advanced Programming homework was actually pretty difficult to do.

I did not realize that the due date was yesterday. I thought the due date was on the 12th of April at 11.59 PM. I was reminded of this task by a friend (his name was definitely not Ardan) who posted a line message to the group I was in, and when I saw it I immediately went to AREN to try and check as much questions as I could in the few minutes that i have left (my friend sent the message on 11:52 PM and I only saw the message at 11:56). I did my best to check it in the few minutes I have left, but I did not check all of the answers. To the friends that have their homework reduced in score because of this, I am really sorry.

I should let you know that forgetting to do this task was really frustrating for me. I could’ve checked AREN to see whether the due date was today or tomorrow, and I was free on that day too. DAMN. But to be fair, my mind was clouded that day because I had just received my StatProb midterms result, and it was NOT GOOD, and I just accepted a project that I had to do and I don’t really know how to do it (so I had to learn whatever things I should know so that I can do the project without any difficulties).

What I learned from that experience was, if you postponed any task, you should strive to do it as soon as you are free, and also remind yourself everyday so that you don’t forget to do it whenever you have the time to do it no matter what or if the due date a day or even a few hours away.

Again, I am truly sorry for forgetting to do this. I really am.

Ternyata…..

In this blog post, I would like to tell you readers a story about the time when I misread the intent of one of the questions in the midterms of one of the subjects that I was enrolled in, which is Advanced Programming. The question was as follows:

[The question will come later when I receive my test paper]

When I read this question, I literally panicked. Three steps refactoring, what is that? I assumed that it meant that I had to use three specific steps to refactor, steps that I did not know about or remember at the time when I did my midterms. I am fully aware of what I wrote in my notes, and I am completely sure that I did not write anything about this in my notes. So, naturally, I did what any student would do whenever they encounter a question that they cannot answer in a test, I skipped that particular question entirely.

However, I was still curious about the term “three steps refactoring” even after the test was finished. Because of this, I decided that I would google this term when I got home. So, I did, and I found nothing. Even if you google it right now, you won’t find it. Why, you ask? If you want to find out why, read on.

The first class after the midterms, my professor decided that it would be a very good time to discuss about the midterms. What a convenient time to ask about the term that has been boggling my mind for days. So I asked him about the term and he simply answered : “You just have to use three of the methods that I gave you”.

Oh my god. I can’t believe it.

If that was the case, I could’ve answered that question with ease. I know I have the methods written in my notes. I just have to answer the question with regards to whatever I have written in my notes. That’s it.

It would not have bugged me if the question does not give a lot of points when I did answer it, and that is the only question I did not answer. The thing is, that was not the case. There were a lot of points tied to that question, and I did not answer it. I also did not answer the question written on the page before that question, and I did not answer certain questions in a way that I wanted to answer the question because I was thinking about answering all the questions on the test with the little time that I have (which I wasted by looking at the last question first).

I just hope that my midterms score won’t be too bad. That’s all.

The simple, but often forgotten feature of modern-ish budget scientific calculators.

Pada suatu hari, pada saat anda mengerjakan suatu kuis, tiba-tiba anda menemukan persamaan yang sulit bagi anda. Persamaan ini menjengkelkan karena hanya memiliki 1 variabel saja. Tetapi anda ingat bahwa anda diperbolehkan untuk membawa kalkulator ke dalam ruang kuis. anda mencoba menghitung, dan menghitung, menggunakan konsep-konsep yang anda ketahui. Tetapi tetap saja, anda tidak dapat menjawab pertanyaan tersebut. Kemudian anda menyesal telah mencoba menghitung, karena itu menghabiskan porsi waktu yang signifikan dari waktu kuis anda. Kemudian anda panik dan berkontemplasi untuk membunuh diri anda (tolong jangan dilakukan). Apa yang anda lakukan?

Banyak orang akan menyerah pada saat dihadapkan dengan soal seperti ini. Tetapi ingat! Anda membawa kalkulator yang relatif modern! Jadi, jangan berkecil hati dahulu, karena ternyata ada fitur yang dapat membantu anda untuk menjawab soal yang menjengkelkan tersebut.

Mungkin beberapa dari anda yang membaca blog ini akan bertanya, “Tetapi, bagaimana saya menggunakan fitur ini?”.

Sederhana saja! Jika anda membawa kalkulator scientific, anda dapat menggunakan fitur solve! Ketikkan persamaan yang anda ingin kalkulator untuk menjawabnya.

Beberapa hal yang harus anda ingat:

  1. Jangan menggunakan sama dengan yang ada di bawah, gunakanlah sama dengan yang kalau ingin diketikkan harus menggunakan SHIFT.
  2. Jangan mengklik sama dengan yang ada di bawah.
  3. Kalau anda sudah selesai mengetikkan persamaannya, pencetlah tombol SOLVE. Tergantung kalkulator yang anda pakai, jawaban akan langsung keluar dalam bentuk “SOLVE for [insert variable here]” atau akan keluar pertanyaan “SOLVE for?” dimana pilihannya hanyalah [insert variable here]”
  4. Beberapa kalkulator mampu menghitung jawaban dalam satu variable, in terms of variabel yang lainnya.

Demikianlah posting saya, semoga bermanfaat!

TBA HW03 Clue Pad

Saat saya mengerjakan ini, saya bingung, mengapa NFA (Nondeterministic Finite Automata) yang saya submit salah terus (coba submit kalau tidak percaya, karena saya tidak akan memberikan jawaban saya kepada anda):

155221679556415522164370781552216138466

 

 

padahal saya sudah mencek menggunakan semua kasus-kasus yang saya pikirkan. Kemudian teman saya (katakanlah namanya Arif, tentu ini nama samaran) mencoba menjelaskan:

Capture2.JPG

tetapi penjelasannya saya tidak mengerti.

Itulah inspirasi saya membuat blogpost ini.

Sebelumnya, inilah kualifikasi saya untuk memposting clue pad ini.

Capture.JPG

Berikut adalah clue yang mungkin berguna bagi anda.

  1. setelah satu string yang berdekatan dan tidak dipisah oleh kurung, coba tambahkan “and nothing else”.
  2. jika ada dua string diunionkan misal A U B, tambahkan “and nothing else” setelah input A dan input B
  3. A* menjadi (A “and nothing else”)*
  4. Kalau ada tanda panah keluar dari state yang memiliki input yang sama, buatlah state baru, sambungkan state awal ke state yang baru dengan “and nothing else”, kemudian buatlah tanda panah yang keluar dari state yang baru dibuat dengan input tersebut.

Clue lain yang mungkin bisa saya temukan saya akan post disini.

Semoga, dengan penjelasan yang bersifat “dari orang yang ga jago ke orang yang ga jago)” bermanfaat bagi anda sekalian.

The Last TP Query 1

Query 0 sudah ada pseudocodenya di LWT The last TP.

Query 1.

Pertama-tama, mengapa kali ini saya memiliki kualifikasi untuk menulis dokumen ini? (Saya takut diejek huhuhuuu)

Jawaban:

Capture.JPG

Moving on.

Yang dibutuhkan:

Yang saya rasa harus global.

key[] = Untuk menyimpan start substring. Mungkin anda berpikir bahwa membuat substringnya pada saat rolling hash saja (pada saat membuang karakter terkiri dan menambahkan karakter terkanan). Tetapi, ini membuat program mengeksekusi substring terlalu banyak. Ini dibutuhkan agar kita bis generate

values[] = Suatu array untuk menyimpan jumlah substring di dalam string input.

Kedua list diatas panjangnya harus angka prima yang khusus, yaitu bilangan prima spesial pertama yang melebihi 1000. (yaitu 1547)

listOfUsedIndexes[maximum data yang diberikan, yaitu 1000] = Suatu array untuk menyimpan indeks-indeks yang digunakan, agar tidak perlu mengiterasikan semua hashtable ketika ingin mengecek substring mana yang keluar paling banyak. Diisi dengan -1 sebelum menjalankan query 1, agar kalau ada yang indexnya 0 di hashtable dapat dikenal oleh program. Kita akan mengisi array ini dengan cara yang unik agar kita tidak perlu mengiterasikan seluruh array.

Anda boleh menaruh jumlah terbanyak beserta substring yang memiliki jumlah terbanyak sebagai global variable. Tapi kayaknya ga harus sih.

Yang tidak perlu global:

String input dari user (masukkan sebagai parameter saja).

Pseudo PSEUDO-CODE:

Dari user kita akan membutuhkan input string yang pertama kali diinput.

  1. Pertama-tama kita harus deklarasikan inputnya apa. Apakah harus diset ke global variable atau tidak, itu terserah anda. Kalau saya, saya mengeset itu ke global variable karena saya memakai banyak metode untuk query1, dan saya malas menulis parameter banyak. Tapi sebenarnya tidak harus.
  2. Untuk semua kemungkinan panjang substring (dari 1 sampai panjang input string)
    1. Cari hash kata pertama. Simpan di suatu variabel, karena akan dibutuhkan nanti untuk rolling. Kita tidak bisa melakukan rolling untuk hash yang sudah di moduluskan karena terkadang kalau sudah di moduluskan ada kesempatan untuk tidak unique (makanya pada saat menyimpan data di hash table itu terkadang ketemu collision).
    2. Kemudian kita mod hash kata pertama itu, barulah kita masukkan ke dalam hash table
    3. For dari start substring pertama sampai start substring terakhir(input.length – panjang substring)
      1. Rolling seperti biasa
        1. Sesuai dengan pseudocode di LWT The Last TP.
      2. current index menjadi current hash setelah rolling tapi di mod
      3. Cek current index itu collision atau tidak
      4. Kalau collision, handle menggunakan open addressing/closed hashing. Boleh pake yang mana saja. Tapi saya memakai linear probing (increment currentIndex sampai dapat tempat yang kosong).
      5. Store data (petunjuk mengisi data bisa melihat perihal collision resolution)
    4. Setelah ketemu semua substring untuk panjang itu, iterasi listOfUsedIndexes untuk mencari substring yang keluar paling banyak, beserta substring itu (gunakan key[i] untuk menemukan startSubString dan key[i] + panjang substring untuk menemukan end (ingat substring akan meng-exclude end). Kalau ketemu -1, akhiri iterasinya (menggunakan break kalau menggunakan iterasi dengan for).
    5. Print substring yang paling banyak beserta jumlahnya sesuai format di soal.
    6. Ubah semuanya (hashtable, key dan listOfUsedIndexes) ke default value lagi agar bisa digunakan kembali untuk panjang substring yang selanjutnya.

 

PERIHAL COLLISION RESOLUTION

Kita butuh start substring, length dan current Index.

  1. Kalau ketemu tempat kosong, isi value dengan 1 di indeks tersebut, isi key di indeks tersebut dengan start substring isi used index dengan currentIndex (atau currentIndex yang sudah diincrement karena fungsi collision resolution).
  2. Increment sampai ketemu tempat yang kosong, atau ketemu string yang sama.
  3. Kalau ketemu string yang sama, increment angka dalam string tersebut.
  4. Kalau kita increment terus bakal ketemu situasi dimana kalau kita increment, indeks akan melebihi indeks yang ada di hashtable. Modulus lagi indeks tersebut kalau itu terjadi, supaya kalau currentIndex sama dengan panjang hashtable program akan melanjutkan pengecekan ke indeks 0.

PERIHAL MOD BISA RETURN ANGKA MINUS

Kita ingin modnya selalu positif. Oleh karena itu kita gunakan floorMod agar hasil modulus mengikuti divisor. Contoh:

-100 floorMod 1547 = 100.

PERIHAL MENGISI LISTOFUSEDINDEXES

Awalnya, kita mengacu pada startSubstring untuk mengisi listOfUsedIndexes ini. Tetapi, kalau begitu caranya bisa ada jeda antara data, kita harus memaksa program mengecek seluruh array untuk mencari semua array yang digunakan. Alangkah indahnya kalau begini kasusnya:

  1. Data ke 1 pasti di indeks 0.
  2. Data unik ke 2 pasti di indeks 1
  3. Data unik ke 3 pasti di indeks 2
  4. Data unik ke 4 pasti di indeks 3
  5. Data unik ke n pasti di indeks n – 1.

Jadi kita harus iterasi atau rekursi (pilih 1 yang enak bagi anda) ke belakang sampai ketemu indeks dimana indeks sebelumnya sudah ada data (bukan minus 1)

PERIHAL PENGECEKAN DILAKUKAN PADA AKHIR

Coba buat pengecekan pas iterasi substring. Apa yang akan terjadi kalau tiba-tiba substring awal ditambahkan pada akhir? Untuk detail, cek testcase yang saya buat di aren 2.1.

PERIHAL TLE

Maaf, testcase tle (yang saya buat test case panjang 1000) tidak bisa ditaruh di aren 2.1. PC Aab untuk testcasenya (saya sudah memberikannya ke Aab).

Rawan TLE (Aren asli) : 29, 25. Kalau kode yang anda buat benar, maka akan lulus, tapi running time-nya akan mendekati 2000 (limit, ga tau kenapa di SDA limitnya hanya 1 detik, mungkin butuh 1 detik untuk memproses input output).

PERIHAL ERROR INPUT 1

Coba loloskan test case yang saya buat di aren 2.1 yang inputnya hanya 1.

 

 

Fate/Grand Order AC adalah permainan yang buruk.

Beberapa waktu yang lalu saya berargumen dengan teman saya tentang suatu permainan yang namanya ada di judul blog post ini, yaitu Fate Grand Order AC. Bagi yang belum tahu tentang apa itu Fate/Grand Order, itu adalah sebuah mobile game yang memiliki sistem yang sangat tipikal dari permainan mobile yang datang dari Jepang, yaitu berbasis card game dan gacha, dan di market sebagai RPG (seperti banyak game mobile dari Jepang lainnya, Jepang sangat suka sekali RPG ya).

Saya ingin memberitahu kepada anda kenapa saya tidak menyukai permainan berbasis gacha (atau versi baratnya, Loot Box), dan betapa bingungnya saya ketika sebuah kata (Loot Box), diubah menjadi versi Jepangnya (Gacha), orang-orang di sekitar saya (setidaknya itu yang saya lihat, CMIIW) merasa tidak apa-apa dengan hal itu. Pertama-tama, saya tidak suka gacha, atau loot box karena ketidakpastiannya, dan fakta bahwa hal tersebut bisa diparalelkan dengan sistem perjudian.

Jika anda membuka sebuah loot box, ataupun gacha, anda akan mendapatkan beberapa barang secara acak. Barang itu bisa berupa hal yang anda inginkan, atau yang bernilai tinggi (saya menganggapnya Jackpot) atau barang yang anda tidak inginkan, atau yang bernilai rendah(saya menganggapnya Dud) dan Hal ini mirip dengan slot machine, dimana kita bisa mendapatkan Jackpot (Misalnya 777), atau tidak mendapatkan apa-apa sama sekali.

Mungkin untuk membedakan slot machine dengan loot box, atau gacha, game publisher akan mengatakan bahwa jika kita bermain slot machine, ada saat dimana kita tidak akan mendapatkan apa-apa, sementara jika kita membuka suatu loot box, atau gacha, kita pasti mendapatkan sesuatu, meskipun apa yang kita dapatkan belum tentu apa yang kita butuhkan, atau inginkan. Tetapi, studi menunjukkan bahwa secara psikologis, loot box, atau gacha itu memberikan efek yang serupa dengan perjudian, dan ini bisa menjadi masalah kalau pemain tidak menyadari bahwa mereka terpengaruh oleh efek tersebut.

Oke, itu dulu tentang loot box dan gacha, sekarang ke topik utama (dan juga topik titular), mengapa Fate/Grand Order AC merupakan sebuah permainan yang buruk. Pada saat saya menyebutkan Fate/Grand Order AC, yang saya maksud bukanlah mobile gamenya, tetapi permainan yang relatif baru yang dirilis khusus untuk arcade. Permainan ini adalah sebuah reimagining dari permainan yang dapat anda unduh dari telepon pintar anda, dan gameplay-nya cukup berbeda dengan versi mobilenya.

Screen Capture Gameplaynya.

 

Tidak seperti versi mobilenya, Fate/Grand Order AC merupakan permainan third-person action. Tetapi, meski permainan ini adalah sebuah third-person action game, controlsnya sangat simplistic. Kita dapat menggunakan joystick untuk bergerak, tetapi selain joystick hanya ada empat tombol yang tersedia, tombol dash dan dodge, tombol change target, tombol serang dan tombol Noble Phantasm (think of it as a rage button in Tekken or Ultimate button in DOTA or League of Legends), dan layar sentuh yang anda dapat gunakan untuk memilih tipe ketiga serangan yang akan dilancarkan ke musuh (kalau kita tidak memilih maka akan dipilih secara otomatis) dan untuk mengaktifkan skill karakter kita.

FGO-Arcade-Translated-Controls.png
Physical Controlsnya.

Jika anda melihat video gameplay untuk permainan ini, mungkin anda berpikir bahwa permainan ini akan menjadi sebuah permainan yang seru sekali. Bagi saya tidak demikian, because the game is designed around, yes you guessed it, GACHA. Tetapi tidak seperti gacha pada umumnya, karena kita harus membayar ekstra untuk mendapatkan kesempatan untuk gacha. Ditambah dengan fakta bahwa anda harus membayar hanya untuk bermain permainannya, anda akan menyadari bahwa permainan ini bisa menjadi permainan yang sangat mahal sekali bagi rakyat jelata.

Mungkin anda orang kaya, yang mampu menghabiskan ratusan dollar untuk permainan ini. Tetapi, anda harus melakukan GRINDING juga untuk me-level-up karakter yang anda gunakan, dan berhasil menyelesaikan misi-misi hanya untuk mendapatkan kesempatan untuk gacha (dan harus bayar pula). Bayangkan betapa membosankannya permainan ini ketika pemain diharuskan untuk grinding, level up, dan bermain misi-misi hanya untuk nge-gacha. Ditambah lagi dengan fakta bahwa anda harus memiliki level yang tinggi untuk PvP karena musuh anda pasti memiliki level yang tinggi dan akan membantai anda kalau anda tidak memiliki karakter yang bagus (yang hanya bisa didapatkan dengan gacha yang anda harus bayar untuk melakukannya) dengan level yang tinggi. Bisa gila saya jika saya memainkan permainan ini. Jadi itulah alasan saya mengapa saya tidak suka permainan ini.

Oh iya, saya ingin memberikan argumen untuk perkataan teman saya yang mengatakan saya sebuah “Tekken Elitist” karena saya menganggap permainan ini buruk. Saya bisa, dengan percaya diri mengatakan bahwa Tekken lebih baik dari permainan ini, hanya karena fakta bahwa Tekken memiliki gameplay yang tidak berbasis gacha. Tidak perlu mengatakan balance (meskipun Tekken adalah permainan yang balanced, dan ya Eddy adalah karakter yang balanced), tidak perlu mengatakan graphics (Saya bahkan bisa mengatakan bahwa Fate/Grand Order memiliki graphics yang sedikit lebih baik) ataupun harga permainannya (Fate/Grand Order sudah pasti lebih mahal meskipun Tekken memiliki DLC yang harganya relatif mahal). Saya tidak ingin ad hominem, tetapi karena dia menggunakan ad hominem, boleh kan saya membalasnya dengan ad hominem. Here goes… “Jangan terbutakan dengan kesukaanmu dengan waifu (karakter 2d yang banyak orang menganggap sebagai suatu hal yang superior dibandingkan dengan perempuan di dunia nyata), hai wibu akut!”

Saya juga membicarakan tentang Dissidia dengan teman saya yang satu ini, dan mengapa menurut saya IP tersebut telah jatuh dari posisinya sebagai sebuah IP yang awalnya baik, tetapi mungkin saya akan membicarakan itu pada blog post selanjutnya. Terima kasih telah membaca dari awal sampai akhir, u da best.