スタックを用いたreverse
30分プログラム、その732。mixiの課題コミュからの引用です。
一部、日本語がおかしいですがそのまま引用します。
スタックを用いて10 個の整数配列を5 個ずつ順序を入れ替えるプログラムを作りなさ
つまり01234 56789 ↓ 43210 98765と並び替えるプログラムをスタックを用いて作りなさい。
よろしくお願いします。
たぶん、普段のボクなら、5個づつに区切って、reverseして、concatする気がします。でも、スタックを使えと書かれているのでしょうがないです。スタックを使って手続き的に書きましょう。
使い方
reverse_n(5, 1,2,3,4,5,6,7,8,9,10)); # => (5,4,3,2,1,10,9,8,7,6)
ソースコード
#! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- # # stack-rev.pl - # # Copyright(C) 2010 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2010/02/07 22:12:11 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # use strict; use warnings; use Data::Dumper; sub reverse_n($@){ my ($n, @xs) = @_; my @tmp = (); my @ys = (); for my $x (@xs){ unshift @tmp, $x; if(@tmp == $n){ push @ys, @tmp; @tmp = (); } } push @ys,@tmp; return @ys; } print Dumper(reverse_n(5, 1,2,3,4,5,6,7,8,9,10));