まえがき
splice関数で配列操作してみた。
参考文献
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/join
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/split
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
環境
$bash--version
GNU bash, バージョン 5.0.0(1)-release(x86_64-pc-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$node--version
v12.13.0
$node
Welcome to Node.js v12.13.0.
Type ".help"for more information.
> console.log("hello");
hello
undefined
スクリプト
3つ。
#1.left_stair.sh
先頭要素取得して末尾要素に追加していくパターン。
#2.right_stair.sh
末尾要素取得して先頭要素に追加していくパターン。
#3.square.sh
上記スクリプトをそれぞれ左と右、右と左に並びて、与える引数を正順と逆順の2つにしたパターン。
$cat left_stair.sh
#!/bin/bash
usage(){cat<<EOF
Usage:
\$$0\$(echo -e '\U1f4a'{0..9})
EOF
}
chk_args(){declare-aargv=()local argv=($@)local argc="${#argv[@]}"["${argc}"-le 1 ]&& usage &&exit 1
}
circle(){echo"$@" | xargs -I@ node -e'
function mock4(init_args){
let ary=init_args.split(" ");
for(let i=1;i<=ary.length;i++){
let ele=ary.splice(0,1);
ary.splice(init_args.split(" ").length,0,ele);
console.log(ary.join(""));
}
}
mock4("@");
'}
main(){local init_args="$(cat -)";
chk_args "${init_args}"while read ln;do circle "${ln}";done<<<"${init_args}"}[-p /dev/stdin ]&&cat - | main
[-p /dev/stdin ]||echo-ne"$@" | main
先頭要素が次の対象行の末尾要素に追加されていく様子がわかる。
$echo-e'\U1f4a'{0..9} | ./left_stair.sh
💡💢💣💤💥💦💧💨💩💠
💢💣💤💥💦💧💨💩💠💡
💣💤💥💦💧💨💩💠💡💢
💤💥💦💧💨💩💠💡💢💣
💥💦💧💨💩💠💡💢💣💤
💦💧💨💩💠💡💢💣💤💥
💧💨💩💠💡💢💣💤💥💦
💨💩💠💡💢💣💤💥💦💧
💩💠💡💢💣💤💥💦💧💨
💠💡💢💣💤💥💦💧💨💩
$cat right_stair.sh
#!/bin/bash
usage(){cat<<EOF
Usage:
\$$0\$(echo -e '\U1f4a'{0..9})
EOF
}
chk_args(){declare-aargv=()local argv=($@)local argc="${#argv[@]}"["${argc}"-le 1 ]&& usage &&exit 1
}
circle(){echo"$@" | xargs -I@ node -e'
function mock5(init_args){
let ary=init_args.split(" ");
for(let i=1;i<=ary.length;i++){
let ele=ary.splice(-1,1);
ary.splice(0,0,ele);
console.log(ary.join(""));
}
}
mock5("@");
'}
main(){local init_args="$(cat -)";
chk_args "${init_args}"while read ln;do circle "${ln}";done<<<"${init_args}"}[-p /dev/stdin ]&&cat - | main
[-p /dev/stdin ]||echo-ne"$@" | main
末尾要素が先頭要素に追加されていく様子がわかる。
$echo-e'\U1f4a'{0..9} | ./right_stair.sh
💩💠💡💢💣💤💥💦💧💨
💨💩💠💡💢💣💤💥💦💧
💧💨💩💠💡💢💣💤💥💦
💦💧💨💩💠💡💢💣💤💥
💥💦💧💨💩💠💡💢💣💤
💤💥💦💧💨💩💠💡💢💣
💣💤💥💦💧💨💩💠💡💢
💢💣💤💥💦💧💨💩💠💡
💡💢💣💤💥💦💧💨💩💠
💠💡💢💣💤💥💦💧💨💩
$cat ./square.sh
#!/bin/bash
usage(){cat<<EOF
Usage:
\$$0\$(echo -e '\U1f4a'{0..9})
EOF
}
chk_args(){declare-aargv=()local argv=($@)local argc="${#argv[@]}"["${argc}"-le 1 ]&& usage &&exit 1
}
circle(){paste-d' '<(./left_stair.sh $(echo-e"$@"))<(./right_stair.sh $(echo-e"$@"|rev))paste-d' '<(./right_stair.sh $(echo-e"$@"))<(./left_stair.sh $(echo-e"$@"|rev))}
main(){local init_args="$(cat -)";
chk_args "${init_args}"while read ln;do circle "${ln}";done<<<"${init_args}"}[-p /dev/stdin ]&&cat - | main
[-p /dev/stdin ]||echo-ne"$@" | main
きれいだ。
$echo-e'\U1f4a'{0..9} | ./square.sh
💡💢💣💤💥💦💧💨💩💠 💠💩💨💧💦💥💤💣💢💡
💢💣💤💥💦💧💨💩💠💡 💡💠💩💨💧💦💥💤💣💢
💣💤💥💦💧💨💩💠💡💢 💢💡💠💩💨💧💦💥💤💣
💤💥💦💧💨💩💠💡💢💣 💣💢💡💠💩💨💧💦💥💤
💥💦💧💨💩💠💡💢💣💤 💤💣💢💡💠💩💨💧💦💥
💦💧💨💩💠💡💢💣💤💥 💥💤💣💢💡💠💩💨💧💦
💧💨💩💠💡💢💣💤💥💦 💦💥💤💣💢💡💠💩💨💧
💨💩💠💡💢💣💤💥💦💧 💧💦💥💤💣💢💡💠💩💨
💩💠💡💢💣💤💥💦💧💨 💨💧💦💥💤💣💢💡💠💩
💠💡💢💣💤💥💦💧💨💩 💩💨💧💦💥💤💣💢💡💠
💩💠💡💢💣💤💥💦💧💨 💨💧💦💥💤💣💢💡💠💩
💨💩💠💡💢💣💤💥💦💧 💧💦💥💤💣💢💡💠💩💨
💧💨💩💠💡💢💣💤💥💦 💦💥💤💣💢💡💠💩💨💧
💦💧💨💩💠💡💢💣💤💥 💥💤💣💢💡💠💩💨💧💦
💥💦💧💨💩💠💡💢💣💤 💤💣💢💡💠💩💨💧💦💥
💤💥💦💧💨💩💠💡💢💣 💣💢💡💠💩💨💧💦💥💤
💣💤💥💦💧💨💩💠💡💢 💢💡💠💩💨💧💦💥💤💣
💢💣💤💥💦💧💨💩💠💡 💡💠💩💨💧💦💥💤💣💢
💡💢💣💤💥💦💧💨💩💠 💠💩💨💧💦💥💤💣💢💡
💠💡💢💣💤💥💦💧💨💩 💩💨💧💦💥💤💣💢💡💠
あとがき
こういうの作ろうとおもうといろいろ調べて好奇心や探究心が湧いてくるから、楽しい。
splice関数便利。
以上、ありがとうございました。