Skip to content

Instantly share code, notes, and snippets.

### Keybase proof
I hereby claim:
* I am sarkologist on github.
* I am guoliang_oon (https://keybase.io/guoliang_oon) on keybase.
* I have a public key ASBuY3K07SXwm7aR0j2HU5v8MziOMv3rYi9U_0qWkPU3Ggo
To claim this, I am signing this object:
@sarkologist
sarkologist / FizzBuzz.hs
Last active November 23, 2022 13:10
FizzBuzz in Haskell
import Control.Monad
fizz x = if mod x 3 == 0 then "Fizz" else ""
buzz x = if mod x 5 == 0 then "Buzz" else ""
zzzz x = if mod x 3 /= 0 && mod x 5 /= 0 then show x else ""
main = do
let results = map (fizz <> buzz <> zzzz) [1..30]
mapM_ print $ zip [1..] results
@sarkologist
sarkologist / README.md
Last active November 21, 2022 06:01
k-anagrams

Given two strings of lowercase alphabets and a value k, the task is to find if two strings are K-anagrams of each other or not.

Two strings are K-anagrams of each other if they can become anagram by replacing at most k characters in a string.

Implement a function isKAnagram that returns true if the two strings are k-anagram, or false if they are not.

@sarkologist
sarkologist / AddMulOnePass.scala
Last active November 1, 2022 08:02
multiply then add numbers, in one pass
assert(eval("2+2*3+12+4*5*2+10*1") == 70)
def eval(input: String): Int = {
input.splitEfficientlyOn("+").foldLeft(0)((n, str) => n + mul(str))
}
def mul(input: String): Int = {
input.splitEfficientlyOn("*").foldLeft(1)((n, x) => n * x.toInt)
}
@sarkologist
sarkologist / CoderUtil.scala
Created June 10, 2020 12:28
apache beam PCollection basic transforms
package gng.box.beam.utils
import com.spotify.scio.coders.{Beam, Coder, CoderMaterializer}
import org.apache.beam.sdk.coders.{CoderRegistry, KvCoder, Coder => BeamCoder}
import org.apache.beam.sdk.options.PipelineOptionsFactory
import org.apache.beam.sdk.values.KV
object CoderUtil {
def beamCoderFor[A: Coder]: BeamCoder[A] =
toBeam(Coder[A])
@sarkologist
sarkologist / Protobuf.scala
Last active June 10, 2020 12:21
protobuf to bigquery
package utils
import java.util
import com.google.protobuf.Descriptors.{Descriptor, FieldDescriptor}
import com.google.protobuf.Descriptors.FieldDescriptor.Type.{GROUP, MESSAGE}
import com.google.protobuf.Message
import scalaz.{Functor, Yoneda}
import scala.collection.JavaConverters._
@sarkologist
sarkologist / djvu2pdf.sh
Created March 28, 2020 13:16 — forked from matthieuheitz/djvu2pdf.sh
djvu2pdf, a conversion script using ocrodjvu and pdfbeads
#!/bin/bash
# Method found here https://askubuntu.com/a/122604/423332
# Dependencies:
# On ubuntu, you can install ocrodjvu and pdfbeads with:
# sudo apt install ocrodjvu
# gem install pdfbeads
# The path and filename given can only contain ascii characters
@sarkologist
sarkologist / Common.scala
Created December 5, 2019 02:55
Reordering
package gng.box.beam.pipeline.reordering
import gng.box.beam.pipeline.generic.influx.Metrics
import org.joda.time.Instant
object Common {
trait HasMetrics {
implicit val metrics: Metrics
val measurementPrefix: String
}
@sarkologist
sarkologist / CoGroupByKeyUtil.scala
Last active December 5, 2019 02:49
CoGroupByKeyUtil
object CoGroupByKeyUtil {
// a workaround for scala's lack of rank-2 polymorphism
// so that we can allow the called function to decide how to instantiate F[_]
trait Rank2[F[_]] {
def apply[A]: F[A]
}
def eitherOf[K: Coder, A: Coder, B: Coder](
left: PCollection[KV[K, A]],
right: PCollection[KV[K, B]],
@sarkologist
sarkologist / ValueProviderPimp.scala
Last active October 28, 2019 04:07
ValueProvider[ConnectionConfiguration]
package utils
import org.apache.beam.sdk.options.ValueProvider
import org.apache.beam.sdk.options.ValueProvider.{
NestedValueProvider,
StaticValueProvider
}
import scalaz.{Applicative, Functor}
object ValueProviderPimp {