1
0
Fork 0
mirror of https://github.com/in3rsha/sha256-animation synced 2024-05-03 22:26:13 +02:00
sha256-animation/xor.rb
2020-05-11 10:50:59 +01:00

193 lines
4.2 KiB
Ruby

# -----
# Input
# -----
# just do a simple XOR if binary string arguments passed
if ARGV.size >= 2
width = ARGV.map(&:size).max # work out the longest binary string (for display purposes)
system "clear"
ARGV.each do |binary|
puts binary.rjust(width, " ")
end
puts "-" * width
puts ARGV.map{|x| x.to_i(2)}.reduce(0, :^).to_s(2).rjust(width, "0")
exit
end
# ---------
# Animation
# ---------
# If no arguments passed, show an animation that showcases the XOR operator across 3 inputs
off = 0b00000000000000000000000000000000
on = 0b11111111111111111111111111111111
split = 0b10101010101010101010101010101010
delay = 0.4
# Up To All 1
system "clear"
puts ("%032b" % off)
puts ("%032b" % off) + " XOR"
puts ("%032b" % off) + " XOR"
puts "--------------------------------"
puts "%032b" % (off ^ off ^ off)
sleep delay
system "clear"
puts ("%032b" % on)
puts ("%032b" % off) + " XOR"
puts ("%032b" % off) + " XOR"
puts "--------------------------------"
puts "%032b" % (on ^ off ^ off)
sleep delay
system "clear"
puts ("%032b" % on)
puts ("%032b" % on) + " XOR"
puts ("%032b" % off) + " XOR"
puts "--------------------------------"
puts "%032b" % (on ^ on ^ off)
sleep delay
system "clear"
puts ("%032b" % on)
puts ("%032b" % on) + " XOR"
puts ("%032b" % on) + " XOR"
puts "--------------------------------"
puts "%032b" % (on ^ on ^ on)
sleep delay
# Back To All 0
system "clear"
puts ("%032b" % off)
puts ("%032b" % on) + " XOR"
puts ("%032b" % on) + " XOR"
puts "--------------------------------"
puts "%032b" % (off ^ on ^ on)
sleep delay
system "clear"
puts ("%032b" % off)
puts ("%032b" % off) + " XOR"
puts ("%032b" % on) + " XOR"
puts "--------------------------------"
puts "%032b" % (off ^ off ^ on)
sleep delay
system "clear"
puts ("%032b" % off)
puts ("%032b" % off) + " XOR"
puts ("%032b" % off) + " XOR"
puts "--------------------------------"
puts "%032b" % (off ^ off ^ off)
sleep delay
# Only One 1
system "clear"
puts ("%032b" % on)
puts ("%032b" % off) + " XOR"
puts ("%032b" % off) + " XOR"
puts "--------------------------------"
puts "%032b" % (on ^ off ^ off)
sleep delay
system "clear"
puts ("%032b" % off)
puts ("%032b" % on) + " XOR"
puts ("%032b" % off) + " XOR"
puts "--------------------------------"
puts "%032b" % (off ^ on ^ off)
sleep delay
system "clear"
puts ("%032b" % off)
puts ("%032b" % off) + " XOR"
puts ("%032b" % on) + " XOR"
puts "--------------------------------"
puts "%032b" % (off ^ off ^ on)
sleep delay
# Majority 1
system "clear"
puts ("%032b" % off)
puts ("%032b" % on) + " XOR"
puts ("%032b" % on) + " XOR"
puts "--------------------------------"
puts "%032b" % (off ^ on ^ on)
sleep delay
system "clear"
puts ("%032b" % on)
puts ("%032b" % off) + " XOR"
puts ("%032b" % on) + " XOR"
puts "--------------------------------"
puts "%032b" % (on ^ off ^ on)
sleep delay
system "clear"
puts ("%032b" % on)
puts ("%032b" % on) + " XOR"
puts ("%032b" % off) + " XOR"
puts "--------------------------------"
puts "%032b" % (on ^ on ^ off)
sleep delay
# All 1
system "clear"
puts ("%032b" % on)
puts ("%032b" % on) + " XOR"
puts ("%032b" % on) + " XOR"
puts "--------------------------------"
puts "%032b" % (on ^ on ^ on)
sleep delay
sleep delay
# Split
system "clear"
puts ("%032b" % on)
puts ("%032b" % on) + " XOR"
puts ("%032b" % split) + " XOR"
puts "--------------------------------"
puts "%032b" % (on ^ on ^ split)
sleep delay
# Split - Rotate
def rotr(n, x)
mask = 2**32 - 1
right = (x >> n) & mask
left = (x << 32-n) & mask
result = right | left
end
9.times do |i|
system "clear"
puts ("%032b" % on)
puts ("%032b" % on) + " XOR"
puts ("%032b" % rotr(i, split)) + " XOR"
puts "--------------------------------"
puts "%032b" % (on ^ on ^ rotr(i, split))
sleep delay/2
end
sleep delay
9.times do |i|
system "clear"
puts ("%032b" % on)
puts ("%032b" % off) + " XOR"
puts ("%032b" % rotr(i, split)) + " XOR"
puts "--------------------------------"
puts "%032b" % (on ^ off ^ rotr(i, split))
sleep delay/2
end
sleep delay
9.times do |i|
system "clear"
puts ("%032b" % off)
puts ("%032b" % off) + " XOR"
puts ("%032b" % rotr(i, split)) + " XOR"
puts "--------------------------------"
puts "%032b" % (off ^ off ^ rotr(i, split))
sleep delay/2
end
sleep delay