22 de septiembre de 2015

Calculando el promedio en bash

Problema

Dado N enteros, el promedio con tres decimales.

Formato de entrada
La primera linea contiene N enteros.N lineas que siguen contiene un solo numero.

Formato de salida
Mostrar el promedio de N enteros, con tres decimales de aprox.

Restricciones


Input

4
1
2
9
8

Output

5.000


Código

read a
b=0
for (( c=1; c<=$a; c++ ))
do
read d
b=$(($b+$d))
done
echo $(printf %.3f $(echo "scale=4;($b/$a)" | bc))

21 de septiembre de 2015

calculando numeros impares en bash mediante un ciclo

ultimamente he estado medio aburrido así que en vez de jugar me he estado entreteniendo resolviendo problemas de programación uno bien fácil que encontré por ahí es el siguiente:

Mostrar los números impares desde el 1 al 99 usando bash
for i in {1..99}
do
if(( $i % 2 != 0 ))
then
echo "$i"
fi
done

19 de septiembre de 2015

Resumen de Tmux para su uso

tmux lo conoci en una charla que vi en youtube y expandí mis conocimientos usando un libro he aquí un resumen para que les sea útil.


Comandos


Nueva sesión
tmux new -s miSesion

Ver las distintas sesiones
tmux ls

Crear una nueva sesión pero que quede funcionando por detrás
tmux new -s miSesion -d

Volver a una sesión
tmux attach -t miSesion

Matar una sesión
tmux kill-session -t miSesion

Crea una nueva sesión con un nombre en la ventana
tmux new -s miSesion -n miVentana

Salir o salir ventana
exit

Hotkeys


El prefijo por defecto es Ctrl + b sin embargo se puede cambiar.

Crea una nueva ventana en tmux
prefix + c

Renombrar la ventana
prefix + ,

Ir a la ventana previa
prefix + p

Ir a la ventana siguiente
prefix + n

Ir a la ventana nº 1
prefix + 1

Salir de la ventana
prefix + &

Dettach
prefix + d

Divide la pantalla Vertical
prefix + %

Divide la pantalla Horizontal
prefix + "

Salta al panel según la dirección
prefix +{← ↑ → ↓}

Cambiamos de posición los paneles dependiendo la configuración por defecto
prefix + space

Cierra el panel que estamos ocupando
prefix + x

Pasar al modo comando
prefix + :

Mostrar toda las combinaciones de botones
prefix + ?

Inicio automatizado


Para usar una configuración para llamarlo de alguna forma se debe usar el siguiente comando:
tmux -f miConfig.conf attach

la siguiente configuración lo que hace es crear 4 ventanas con sus respectivos nombres ya que asi tenia disponible las vistas,modelos y controladores de una pagina web la cual estaba construyendo.


source-file ~/.tmux.conf
new-session -s admin -n model
new-window -n controller -t admin
new-window -n view -t admin
new-window -n config -t admin
send-keys -t model 'cd /home/ubuntu/ad/app/Model' C-m
send-keys -t controller 'cd /home/ubuntu/ad/app/Controller' C-m
send-keys -t view 'cd /home/ubuntu/ad/app/View' C-m
send-keys -t config 'cd /home/ubuntu/ad/app/Config' C-m


Mi configuración


La configuración de tmux se puede configurar colocando algunas cosas en el archivo .tmux.conf por ejemplo yo cambie el prefijo a Ctrl + a como se usa en "screen", para que tome los cambios se necesita hacer en el modo comando source-file ~/.tmux.conf o en otro archivo de configuración como en el ejemplo anterior.

.tmux.conf

#Prefix es Ctrl-a
set -g prefix C-a
bind C-a send-prefix
#Sacamos Ctrl-b
unbind C-b
#Cambiamos el Delay
set -sg escape-time 1
#Cambiamos el inicio de las ventanas a 1
set -g base-index 1
#Cambiamos el inicio para los paneles
setw -g pane-base-index 1
#Recargar nuestra configuracion a tmux
bind r source-file ~/.tmux.conf \; display "Reloaded!"
#Paneles
bind | split-window -h
bind - split-window -v
#Mouse works as expected
setw -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on

setw -g monitor-activity on
set -g visual-activity on

set -g mode-keys vi
set -g history-limit 10000

# y and p as in vim
bind Escape copy-mode
unbind p
bind p paste-buffer
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
bind -t vi-copy 'Space' halfpage-down
bind -t vi-copy 'Bspace' halfpage-up

# extra commands for interacting with the ICCCM clipboard
bind C-c run "tmux save-buffer - | xclip -i -sel clipboard"
bind C-v run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"
#set -g default-command "reattach-to-user-namespace -l /bin/bash"
#bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
#bind C-v run "tmux set-buffer $(reattach-to-user-namespace pbpaste);tmux paste-buffer"

# easy-to-remember split pane commands
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %

# moving between panes with vim movement keys
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# moving between windows with vim movement keys
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+
# resize panes with vim movement keys
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
# Highlight active window
setw -g window-status-fg white
setw -g window-status-bg black
setw -g window-status-attr bright
# Color para los paneles
set -g pane-border-fg green
set -g pane-border-bg black
set -g pane-active-border-fg white
set -g pane-active-border-bg yellow
# Modo vi para moverse por el buffer
#setw -g mode-keys v
# Modificando el status-bar
set -g status-left-length 40
set -g status-left "#[fg=red]Session: #S #[fg=green]#I #[fg=black]#P"
set -g status-right "#[fg=black]%d %b %R"
# Color de la status bar completa
set -g status-bg white
set -g status-utf8 on
## Ventanas en el centro
set -g status-justify centre
# Para tener los 256 colores
set -g default-terminal "screen-256color"

6 de septiembre de 2015

¿Cuántos primos menores o iguales a n existen?

En hackealo.co de nuevo había otro problema y la solución en Ruby era mas fácil de lo que me esperaba.
¿Cuántos primos menores o iguales a 7293 existen?
#!/usr/bin/env ruby
require 'mathn'
s=0
Prime.each(7293) do |prime|
     s+=1
end
puts 'resultado:'+s.to_s
fuente
interprete de ruby en linea
números primos en Ruby

La suma de números primos menores iguales a "n"

En hackealo.co de nuevo había otro problema y la solución en Ruby era mas fácil de lo que me esperaba.
¿Cuál es la suma de todos los primos menores o iguales a 5936?
#!/usr/bin/env ruby
require 'mathn'
s=0
Prime.each(5936) do |prime|
     s+=prime
end
puts 'resultado:'+s.to_s
fuente
interprete de ruby en linea
números primos en Ruby

el problema de ordenar las letras segun la cantidad de apariciones

en hackealo.co/ presentan el siguiente problema y de aburrido me dedique a resolverlo con Ruby de la siguiente manera:

El problema

Dado el siguiente String:

uhERnSOTIiZJTMxuvVLATRfboavhtRwlyUKacuYlOopNWnoMWrUHCEtpcwzEYTWVptoxOlyHEeUMeMcbfEyjAVylxRpxVCRUCXAJFjUGSEUgQxJwrgGEPvIXInuFOAkcXjLdmPmiIzNWUXhYePvckLQotpAUTosytjPjxsRDPDebUXCVOTBrpjrchwLeVgnsaMDVztV

Ordenar las siguientes letras del alfabeto según cantidad de apariciones, de mayor a menor (en caso de empate, considerar órden alfabético).La respuesta debe estar en minúscula y sin letras repetidas.

#!/usr/bin/env ruby
letras="uhERnSOTIiZJTMxuvVLATRfboavhtRwlyUKacuYlOopNWnoMWrUHCEtpcwzEYTWVptoxOlyHEeUMeMcbfEyjAVylxRpxVCRUCXAJFjUGSEUgQxJwrgGEPvIXInuFOAkcXjLdmPmiIzNWUXhYePvckLQotpAUTosytjPjxsRDPDebUXCVOTBrpjrchwLeVgnsaMDVztV"
frase=letras.chars.sort { |a, b| a.casecmp(b) }.join.downcase
#puts frase.inspect
contador=frase.scan(/\w/).inject(Hash.new(0)){|h, c| h[c] += 1; h}
#puts contador.inspect
orden=contador.sort { |x, y| y[1] <=> x[1] }
#puts orden.inspect
semiresp=""
temp=0
orden.each do |c|
if temp==c[1]
semiresp+=c[0]
else
semiresp+=','+c[0]
end
temp=c[1]
end
separado=semiresp.split(',')
resultado=""
#puts separado.inspect
separado.each{|x| resultado+=x.chars.sort.join}
puts resultado.inspect
fuente:

Contar letras con ruby
ordenar las letras alfabeticamente en una frase
interprete de ruby en linea