Simple Programming
1 minuto de lectura
Se nos proporciona un archivo llamado data.dat
y nos piden contar las líneas que tienen un número de 0
que es múltiplo de 3
o que tienen un número de 1
que sea múltiplo de 2
.
Podemos echar un vistazo a las primeras líneas del archivo:
$ head data.dat
0001100000101010100
110101000001111
101100011001110111
0111111010100
1010111111100011
1110011110010110
11100101010110111
10101101011
1111011101001
0001110001
Genial. La idea es iterar el archivo en cada línea y añadir 1
al contador (inicializado a 0
) si la condición se cumple.
Este código en Ruby implementa esta tarea:
#!/usr/bin/env ruby
counter = 0
File.readlines('data.dat').each do |line|
counter += 1 if line.count('0') % 3 == 0 or line.count('1') % 2 == 0
end
puts "CTFlearn{#{counter}}"
$ ruby solve.rb
CTFlearn{6662}
También es posible utilizar filter
para quitar las líneas que no cumplen la condición, algunos métodos de números, y luego mostrar la longitud del vector resultante:
#!/usr/bin/env ruby
puts "CTFlearn{#{File.readlines('data.dat').filter do |line|
(line.count('0') % 3).zero? or line.count('1').even?
end.length}}"
Los scripts completos se pueden encontrar aquí: solve.rb
y solve2.rb
.