Rubyでティッシュを作成するだけのクソプログラムを作成してみた。
name = (0...3).map{ (65 + rand(26)).chr }.join File.open("ティッシュ."+name,"w").close
このプログラムはティッシュ.(ランダム3文字の大文字)というファイルを作成するだけのプログラムである。
それだけです。
本来はティッシュを作った後ティッシュをゴミ箱に移動させるように考えていたが、ゴミ箱に入れるのは技術不足より断念した。
Rubyでティッシュを作成するだけのクソプログラムを作成してみた。
name = (0...3).map{ (65 + rand(26)).chr }.join File.open("ティッシュ."+name,"w").close
このプログラムはティッシュ.(ランダム3文字の大文字)というファイルを作成するだけのプログラムである。
それだけです。
本来はティッシュを作った後ティッシュをゴミ箱に移動させるように考えていたが、ゴミ箱に入れるのは技術不足より断念した。
ボゴソートなる量子コンピュータにおいては優秀なソートとなる可能性があるソートがあるらしいのでリハビリがてら実装してみることにした。
#include <stdio.h> #include <stdlib.h> int main(void) { int array[10]; // 配列 int t; // 格納変数 int i; // 反復変数 int size; // 入力数 int f; // 条件変数 int r1,r2; // ランダム size = 0; // 入力数の初期化 while( 1 ) { // -1が出るまで入力 scanf("%d",&t); if( t == -1 ) { break; } array[size] = t; size++; } while( 1 ) { // ボゴソート f = 0; // 条件の初期化 for( i=0; i<size-1; i++ ) { if( array[i] > array[i+1] ) { f = 1; } } if( f ) { // ランダムに入れ替える r1 = (int)((rand()/(RAND_MAX+1.0))*size); r2 = (int)((rand()/(RAND_MAX+1.0))*size); t = array[r1]; array[r1] = array[r2]; array[r2] = t; } else { break; } } for( i=0; i<size; i++ ) { // 列挙 printf("%d ",array[i]); } return 0; }
でたらめに交換していくようだ。
調べると無限の猿定理とか出てきて奥深い...???
でたらめに交換していくという単純なソートなので覚えていても損はない?(実用的ではないが)
2015.05.01 乱数が適当すぎるので修正
ほぼコピペだが実装。
#include <stdio.h> int main(void) { int array[10]; // 配列 int t; // 格納変数 int k1,k2,k3; // 反復変数 k1 = 0; // 反復変数の初期化 while( 1 ) { // -1が出るまで入力 scanf("%d",&t); if( t == -1 ) break; array[k1] = t; k1++; } for( k2=1; k2<k1; k2++ ){ //挿入ソート t = array[k2]; for( k3=k2; k3>0 && array[k3-1]>t; k3-- ){ array[k3] = array[k3-1]; } array[k3] = t; } for( k2=0; k2<k1; k2++ ){ // 列挙 printf("%d ",array[k2]); } return 0; }
挿入ソートは条件が合致すれば要素を前に挿入して残りを後ろに押し出していくイメージだろうか。
かなり単純になった。
ほぼコピペだがバブルソートを実装してみた。
#include <stdio.h> int main(void) { int array[10]; // 配列 int t; // 格納変数 int k1,k2,k3; // 反復変数 k1 = 0; // 反復変数の初期化 while( 1 ) { // -1が出るまで入力 scanf("%d",&t); if( t == -1 ) break; array[k1] = t; k1++; } for( k2=0; k2<k1-1; k2++ ){ for( k3=k1-1; k3>k2; k3-- ){ if( array[k3-1] > array[k3] ){ t = array[k3]; array[k3] = array[k3-1]; array[k3-1] = t; } } } for( k2=0; k2<k1; k2++ ){ // 列挙 printf("%d ",array[k2]); } return 0; }
選択ソートが前から攻めていくイメージならバブルソートは後ろから前から挟んでいくというイメージだろうか。
変数が3つ減ったので単純になった。
とりあえずよくわからない。
昨日某先輩から「入力された10個以内の数字を小さい順に並び替える」という問題が出題されたので解いてみた。
#include <stdio.h> int main(void) { int array[10]; // 配列 int t; // 格納変数 int min,min_pos; // 一時変数 int k1,k2,k3; // 反復変数 int f; // 条件変数 k1 = 0; // 反復変数の初期化 while( 1 ) { // -1が出るまで入力 scanf("%d",&t); if( t == -1 ) break; array[k1] = t; k1++; } for( k2=0; k2<k1; k2++ ){ min = array[k2]; // 最小値の初期化 f = 0; // 条件の初期化 for( k3=k2; k3<k1; k3++ ){ if( min > array[k3] ) { min = array[k3]; min_pos = k3; f = 1; } } if( f ){ // 後ろの配列に最小値が存在する場合前に持ってくる t = array[k2]; array[k2] = min; array[min_pos] = t; } } for( k2=0; k2<k1; k2++ ){ // 列挙 printf("%d ",array[k2]); } return 0; }
先輩からバブルソートという単語を聞いたが知らないので適当に組んでみた。
これは選択ソートと呼ばれるソートでバブルソートより早く挿入ソートより遅いソートらしい。
とりあえず時間があればバブルソートや挿入ソートで組み直してみたいと思う。
P.S. コードを表示するためはてな記法モードで書いたがHTMLがよくわからないので書きづらい。
HTMLも勉強したほうがいいだろうか。