はじめまして
こんにちは。42tokyo Advent Calendar 2021 12/21を担当する、42Tokyo在校生の snara です。
42ではおもにツッコミにくいボケとそれに対するセルフツッコミを担当しています。
今回は、私の所属している「42Tokyoエクストリームコーディング部」の知られざるカオスな実態の一端をご紹介します。
そもそもエクストリームコーディングとは?
こちらをご参照ください
リーダーがわ氏による、秘密結社公式(?)webサイト
######言葉の成り立ち
ラテン語の形容詞 exterus (外)→最上形 extremus (最も外側)
+ 名詞 codex (木板→法律→命令) + 英語 -ing (〜すること) が由来の造語。
並はずれた状況でコンピューターへの命令文を記述すること。
例えば、山頂や水中でコードを書く、目隠しをしながらAtCoderに参加する、などなど。
私は鉄道で旅行しながらコードを書くのが好きです。
エクストリームプログラミングとは少し似ていますが違う概念です
######秘密結社としての主な活動実績
・47都道府県プルリクチャレンジ
・ハロウィンイベント
・yahoo hackday参加
・ホームページ作成
本題
今回は、現在進行中の47都道府県プルリクチャレンジについてご紹介します。(それ以外には特に関わっていないので)
47都道府県プルリクチャレンジとは
日本各地に赴き、githubのレポジトリーに何かしらpull requestを投げるという活動です。
執筆時点において、日本には47の都道府県が存在しますが、そのうち31都道府県からプルリクが送られてきています。
ネタ要素が多く行き当たりばったりなので、脈絡のないことにアレルギーのある方や、ダジャレを見ると風邪をひいてしまう体質の方などはご注意ください。
バグやエラーがあった際にはご連絡ください。残念でしたねっていいますから
改善点を発見したり、良いアイデアを思いついた際は、ぜひ現地よりプルリクをお送りください。
以下、都道府県番号順に、各プルリクに乗せられたコードと込められた想いを読んでみたいと思います。
北海道 2021/03/08 by otaishi
#include <stdio.h>
int main()
{
printf("samui! yo!");
return (0);
}
(最後に\n
を追加したら)コンパイラーによってputsに置き換えられそうなprintf
本州は春っぽくなってきても北海道はまだまだ寒いですね。
私も今年の春に、民間人が通常の手段で立ち入れる日本最北端・宗谷岬まで行ってみました。
青森県 2020/10/12 by mfunyu
import requests
url = "http://61.199.163.163/kikakuchousei/opendata/documents/16-kokuseicyousa-h22jinko-setai.csv"
response = requests.get(url)
data = response.content.decode("utf-8")
print(data)
平成22年度の国勢調査データをcsvにしたものをダウンロードして表示。どこも人口減少傾向…。
宗谷岬まで行った時は、青森港から青函フェリーに乗りました。(コードとは関係ない)
pythonは便利なライブラリが充実していていいですね。
岩手県 2021/04/03 by snara-42
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int ac, char **av)
{
srand(atoi(av[ac != 1]));
int i = 0, g = 0, r = rand() % 94 + 33;
while (read(1, &g, 1) && g != r && ++i)
write(1, "soba ", 5);
printf("\n[%c] %d\n", r, i);
return 0;
}
インタラクティブ。argvに渡した文字列をatoi変換してそれをsrandに渡して、!
〜~
のうちからrandで文字を選んで、入力された文字が一致するまで蕎麦を食べる
変数名i,g,r
はいわて銀河鉄道から取りました。
ちなみにatoiの結果が0になるような文字列を渡すとa
になることがsnaraによって知られています。
宮城県 2021/04/03 by snara-42
+-----川内--
| Kawauchi
泉中央 |
Izumi-chuo \
| \
西仙台ハイランド----北仙台---\ 東仙台
Nishi-Sendai Kita-Sendai \ Higashi-Sendai
Hi-Land \ |/
\ //
八木山動物公園-川内------仙台------荒井
Yagiyama Kawauchi Sendai Arai
Zoological ||
Park / |
/ |
富沢 南仙台
Tomizawa Minami-Sendai
|
|---仙台国際空港 SDJ
| Sendai Airport
|
+----------------------+
|
|
|
川内
Sendai
|
コードと呼べるのかどうか怪しい、市内の路線略図(unicodeだからいいか)
仙台(せんだい)市と岩手県宮古市にそれぞれ川内(かわうち)という地名があって、九州には川内(せんだい)があるのがややこしくて面白いです。
ちなみに、西仙台ハイランド駅は、仙台市内ながら山奥の秘境にあって2014年に廃止された駅です。八木山動物公園駅は「地下にある駅として日本一標高が高い地下鉄駅」として知られています。なかなかエクストリーム。
秋田県 todo
通りました。寝ていました。
山形県 todo
42入学前に行ったことはあります。
福島県 2021/03/28 by snara-42
++++++++++[>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++<<<<<<<<<<-]>>>>>++.>>>+.>--..+++.<<<<<<<++++.<++.>>>>--.>>>>>---.<----.>.--.<---.+.++++.<----.<<<<<<<+.
Hello, Fukushima!と出力されるはず(改行忘れた)
復旧した常磐線から見えた送電線やバリケードが何となくbrainfu<k みたいだったので。
茨城県 2021/04/03 by snara-42
#include <stdio.h>
char *f(char *s, int *a, int n)
{
for(int i=0; i<n; i++)
s[i] += a[i];
return (s);
}
int main()
{
char s[] = "Hello, world!\n";
printf("%s", s);
printf("%s", f(s, (int[]){6,-4,8,8}, 4));
return (0);
}
茨城語では natto! とあいさつするらしいという噂を聞いたので()
アラビア語のどこかの方言で「いばらき」というと「祝福」という意味になりそう。
https://en.wiktionary.org/wiki/%D8%A8_%D8%B1_%D9%83#Arabic
栃木県 2021/03/28 by snara-42
T='Tochigi'; echo $(echo $T|tr $T 0-6; echo '+300000-5')|bc|tr 0-6 $T
栃木といえばいちご Tochigi
→0123656
→423651
→ichigo
本当は 1-5
って書きたかったんです
よいこのみなさんはシェルで変数を扱うときちゃんと""
に入れましょう。
群馬県 2021/04/27 by snara-42
arr[1]=" daruma-san ga... ; koronda! ; you moved! "
arr[2]=" だるまさんが... ; ころんだ! ; うごいた! "
arr[3]=" un, deux, trois... ; soleil! ; tu as bougé! "
loc=0
i=0
read -p "language [1.en, 2.ja, 3.fr]: " lang
((lang=(1<=lang && lang<=3 ? lang : 1)))
IFS=";" str=(${arr[$lang]})
read -p "goal distance : " goal
while [ "$goal" -gt "$loc" ]; do
echo $i $loc ${str[0]}
read -t 2 l
((loc+=${#l}))
l=""
echo ${str[1]}
sleep 1
read -t 1 l
if [ "${#l}" -gt 0 ]; then
echo ${str[2]}
loc=0
fi
((++i))
done
echo "you won!"
インタラクティブ。群馬といえばだるま、といえばだるまさんがころんだ
read -t
で時間内に読み込んだ文字数だけ前に進めます。いいタイミングでenterを押さないと開始地点に戻されます。
群馬県とフランス共和国の形が似ていると思ったのでフランス語に部分的に対応しました。あとは北側に「国境の長いトンネル」があるところとか。
埼玉県 2021/04/27 by snara-42
import random
d = {
'浦和': {
'pre': ['','西','東','北','南','中','武蔵',],
'post': ['','美園',]},
'大宮': {
'pre': ['','西','東','北',],
'post': ['','公園',]},
'川越': {
'pre': ['','西','本',],
'post': ['','市',]},
}
fix = random.choice(('pre','post'))
stem = random.choice(list(d.keys()))
p = random.choice(d[stem][fix])
print(f"{p*(fix=='pre')}{stem}{p*(fix=='post')}")
サッカーファンと駅名が多いことで有名な浦和・鉄道の要衝な大宮・観光競争が激しい川越
のどこかに連れて行ってくれます。pythonのdictを扱う練習。
バグ
- 北大宮より東大宮の方が大幅に北
- 中浦和は「北武蔵浦和」
千葉県 2021/02/18 by snara-42
import random
d = {
'千葉':[['',''],['西',''],['東',''],['本',''],['新',''],['京成',''],['八日い','(八日市場)'],['','中央'],['','公園'],['','寺'],['','みなと'],['','ニュータウン中央']],
'船橋':[['',''],['西',''],['東',''],['南',''],['新',''],['京成',''],['','法典'],['','競馬場'],['','日大前'],['京成','西船','']],
'柏':[['',''],['北',''],['南',''],['新',''],['','たなか'],['','の葉キャンパス']],
}
s = random.choice(list(d.keys()))
p = random.choice(d[s])
print(f"{p[0]}{s if len(p)==2 else p[1]}{p[-1]}")
自宅より
「千葉」が含まれる駅は11駅もあったりします。
- 埼玉と違って「新」が多い(新千葉駅の駅舎が千葉市内最古なのは内緒)
- 「みなと」「キャンパス」など施設名が多い
- 「千葉ニュータウン中央」は千葉から1時間ぐらいかかる
千葉県の交通網は、同じ行き先でも経由が違うことがよくあります。経路探索アルゴリズムの練習になりそう。
たまに房総半島を一周しながらコードを書く小旅行に出たりします。空いていて景色も良いです。
ちなみに、フランス発のミル・フィーユというお菓子は「千・葉」という意味だったりします。
東京都 2020/10/12 by kayo289
#coding:utf-8
from PIL import Image
#画像の読み込み
im = Image.open("./tokyo_tower.jpg")
#表示
im.show()
pillowsを使って校舎から見た東京タワーの画像を表示してくれます。
校舎についてはこちらの記事が詳しいです。(勝手に宣伝)
東京都 2021/07/23 by snara-42 会場より
from PIL import Image, ImageDraw
im = Image.new("RGBA", (2020,1896), (255,255,255))
draw = ImageDraw.Draw(im)
draw.ellipse((420, 620, 780, 980), outline=(0,0,220), width=20)
draw.ellipse((620, 820, 980, 1180), outline=(220,220,0), width=20)
draw.ellipse((820, 620, 1180, 980), outline=(0,0,0), width=20)
draw.ellipse((1020, 820, 1380, 1180), outline=(0,220,0), width=20)
draw.ellipse((1220, 620, 1580, 980), outline=(220,0,0), width=20)
over = Image.new("RGBA", (400,400))
draw = ImageDraw.Draw(over)
draw.arc((0, 100, 400, 300), start=135,end=285, fill=(220,0,0), width=20)
rot = over.rotate(20,expand=True)
im.paste(rot, (700,1200), rot)
draw.arc((0, 100, 400, 300), start=135,end=285, fill=(0,0,220), width=20)
rot = over.rotate(80,expand=True)
im.paste(rot, (750,1250), rot)
draw.arc((0, 100, 400, 300), start=135,end=285, fill=(0,220,0), width=20)
rot = over.rotate(140,expand=True)
im.paste(rot, (730,1190), rot)
im.show()
某感染症の影響で1年延期で開催された運動会の会場付近へ赴いて模様を出力してみました。
注:あくまで「偶然ロゴに似ているだけ」です。公式の何かしらとは一切関係ないはずです。
神奈川県 2020/10/12 by kagawa0710
#include <stdio.h>
int main()
{
printf("Rear charge explode at Minatomitai\n");
return (0);
}
またコンパイラーによってputsに置き換えられそうなprintf
(おそらく「みなとみらい」と書きたかったと思われます)
我々も横浜駅のように常に成長し続けたいものです。
リーダー・がわ氏は神奈川県在住らしいという噂。
新潟県 2021/09/03 by snara-42
#include <iostream>
#include <string>
class onigiri
{
private:
double _size;
std::string _type;
public:
onigiri(double size=0.5, std::string type=""): _size(size), _type(type){}
onigiri(const onigiri &o){_size=o._size; _type=o._type;}
~onigiri(){std::cout<<"yummy"<<std::endl;}
double size()const {return this->_size;}
std::string type()const {return this->_type;}
void print()const {std::cout<<_size<<" "+_type;}
const onigiri operator+(const onigiri &r)const{onigiri o; o._size=_size+r._size; o._type=_type+r._type; return o;}
};
std::ostream &operator<<(std::ostream &os, const onigiri &o){
os<<(o.size()<0.25?"a small":o.size()<=0.5?"a normal":o.size()<=2?"a big":o.size()<=4?"a bomb":"a massive bomb")
<<" onigiri with "<<o.size()<<" go of rice"<<o.type()<<std::endl;
return os;
}
int main() {
onigiri o1(0.2," wrapped by nori"),o2,o3(1," with umeboshi"),o4(2.5," and combu inside");
std::cout<<" "<<o1<<"+ "<<o2<<"+ "<<o3<<"+ "<<o4<<"= "<< o1+o2+o3+o4 <<std::endl;
}
おにぎり + おにぎり = おおおにぎり (というかなんで神奈川の隣?)
新潟ということで新しい型「おにぎり」を作って足して出力してみました。
越後湯沢駅ナカのおにぎり屋さんには1個2000円の大爆おにぎりというものがあるらしいですね。食べてみたい…
富山県 2021/09/02 by snara-42
# npm install coffeescript
math = (x,y) -> Math.round Math.PI * x * x / y
sushi = "masu no sushi"
console.log "ramen + rice + #{sushi} #{math sushi.length,8}cm^2"
ますのすしを8等分した扇型の表面積を求めmathます。
食べて美味しかったものを書きました。
北陸三県はjavascript系で揃えたかったのと、math sushi
と書きたかったので、関数オブジェクトを簡潔に書けるcoffeescriptにしました。
とやまさんはかえるじゃない。
石川県 2021/09/02 by snara-42
// node -v == 11.x
// npm install timbre
var T = require("timbre");
//--きりとりせん--//
var arrive = "[l8 >a-<ce-a-<ce-dc >>b-<dfb-<dfed >ceg<cegfe <c>gfefg<c>b>]";
var depart = "[l8 >d<d>g<g>a<ad<d r>d0<ddged>ba gedr l32>gab<degab<deg2r4>]";
var gen = T("OscGen", {wave:"sin", env:{type:"adsr", d:100}, mul:0.25}).play();
T("mml", {mml:arrive+"r1"+depart+"r1"}, gen).on("ended", function() {
gen.pause();
this.stop();
}).start();
金沢駅のメロディが美しかったのでそれっぽい音を鳴らしてみました (乗り換えしかしていないなんていえない)
北陸本線の他の駅のてきとーなのとは比べ物にならないほど英語案内が凝っていて感動しました。
arrive
が到着時の、depart
が出発時のメロディを表現したものです。brainfu<kぽい
本当は、到着時は電子ピアノみたいな音、出発時は琴の音色なのですが、2つ作るのが面倒だったのでなんとなく間を取った音にしました。
timbre
という、(すでに開発が止まったらしい)jsライブラリを使っています。きりとりせん
から下を下記ページのボックスに貼り付けて実行できます。
https://mohayonao.github.io/timbre.js/ja/GettingStarted.html
福井県 2021/09/02 by snara-42
let s1: string
let s2 = "Hokuriku Shinkansen is under construction!"
s1 = "Hello, Dinosaur!"
console.log(s1,s2)
敦賀駅のベンチに変な姿勢の人がいるな〜と思ったら恐竜でした
北陸本線を北に向かって行ったんですが要所ごとに新幹線の工事現場が近づいてきて面白かったです。
typescriptはjavascriptを強い静的型付けにしてくれた言語です。これだけじゃ良さがわかんないか()
山梨県 todo
何度も通ったのに毎度寝ていた模様
四方津の長い斜行エレベーターに乗りながらなにかしたい。
長野県 2021/09/03 by snara-42
import Foundation
let adj=[["Niigata",String("TOKYO enil amayiI".reversed())],["Gunma","Hokuriku"+"_via_Nagano"+" Shinkansen"],["Saitama","Mikuni-toge pass"],["Yamanashi","HIGH RAIL "+"Koumi line"],["Shizuoka","Iida line"],["Aichi","National road 153"],["Gifu","Chuo line"],["Toyama","Kanden trolley bus".replacingOccurrences(of:"trolley", with:"electric")]]
let d=adj.randomElement()!
print("Hello, Nagano")
print("you can go to \(d[0]) prefecture by \(d[1])")
隣接県数日本一
隣県に行くために最も楽であろう手段を列挙しました。三国峠経由で埼玉に直接行く人なんているのかな
swiftはappleが開発した言語。objective-c と互換性があり、直感的かつパワフルらしいです。
岐阜県 2021/09/02 by snara-42
// converts an image file into another format.
// So far following image formats are supported: jpeg, png, gif.
package main
import (
"flag"
"fmt"
"image"
"image/gif"
"image/jpeg"
"image/png"
"io"
"os"
"path/filepath"
)
type CLI struct {
In io.Reader
Out, Err io.Writer
V bool
}
var Supported = map[string]bool{
"jpg": true, "jpeg": true, "png": true, "gif": true, "tiff": false, "bmp": false,
}
func main() {
c := &CLI{In: os.Stdin, Out: os.Stdout, Err: os.Stderr, V: false}
f_in := flag.String("i", "png", "file format to convert from")
f_out := flag.String("o", "gif", "file format to convert to")
flag.BoolVar(&c.V, "v", false, "show debug messages")
flag.Parse()
if c.V {
fmt.Fprintln(c.Out, "in =", *f_in, ", out =", *f_out, ",", flag.Args())
}
n, err := ConvertAll(*f_in, *f_out, flag.Args(), c)
if err != nil {
fmt.Fprintln(c.Err, err)
os.Exit(1)
}
fmt.Fprintln(c.Out, n, "files converted")
}
(コードが長いので省略) 岐阜といえばgif
42Tokyoの皆さんが大好きなgoの課題を流用した、jpg, png, gif ファイルを交互に変換できるツールです。これで gifu.png を gifu.gif に変換できます。
ちなみに、.gif
本当は /dʒɪf/
(ジフ) と発音するそうです。磁阜県
静岡県 2021/02/20 by snara-42
ARRAY=(a b e k)
cat ${ARRAY[$(($RANDOM % ${#ARRAY[*]}))]}.txt | diff -y j.txt -
j.txt a.txt ついでに e.txt
#百人一首 山部赤人 | # 上代発音 | # English translation by MacCauley
田子の浦に | tago nö ura ni | When I take the path
うち出でて見れば | uti idete mire ba | To Tago's coast, I see
白妙の | sirotapë nö | Perfect whiteness laid
富士の高嶺に | puzi nö takane ni | On Mount Fuji's lofty peak
雪はふりつつ | yuki pa puri tutu | By the drift of falling snow.
静岡といえば富士山(/puzi nø jama/
)を詠んだ句が多くあり、中でも万葉集のこの句が有名ですね。
詠まれた当時の上代日本語発音や、英語訳と見比べると楽しいなと思いました。
昔の日本語には母音が8種類あって、↓こんな発音だったのではないかと推測できるそうです。
愛知県 2021/09/02 by snara-42
package main
import (
"fmt"
"hash/fnv"
"math/rand"
"sync"
"time"
)
var philosophoi = []string{"Azuma ", "Joe ", "Minato", "Tsuru ", "Sakura", "Miii "}
const hunger = 2 // Number of times each philosopher eats
const think = time.Second / 10 // Mean think time
const eat = time.Second / 10 // Mean eat time
var dining sync.WaitGroup
func diningProblem(phName string, dominantHand, otherHand *sync.Mutex) {
fmt.Println(time.Now().Nanosecond(), phName, "Seated")
h := fnv.New64a()
h.Write([]byte(phName))
rg := rand.New(rand.NewSource(int64(h.Sum64())))
rSleep := func(t time.Duration) {
time.Sleep(t/2 + time.Duration(rg.Int63n(int64(t))))
}
for h := hunger; h > 0; h-- {
fmt.Println(time.Now().Nanosecond(), phName, "Hungry")
dominantHand.Lock() // pick up forks
otherHand.Lock()
fmt.Println(time.Now().Nanosecond(), phName, "Eating")
rSleep(eat)
dominantHand.Unlock() // put down forks
otherHand.Unlock()
fmt.Println(time.Now().Nanosecond(), phName, "Thinking")
rSleep(think)
}
fmt.Println(time.Now().Nanosecond(), phName, "Satisfied")
dining.Done()
fmt.Println(time.Now().Nanosecond(), phName, "Left the table")
}
func main() {
fmt.Println("Table empty")
dining.Add(len(philosophoi))
fork0 := &sync.Mutex{}
forkLeft := fork0
for i := 1; i < len(philosophoi); i++ {
forkRight := &sync.Mutex{}
go diningProblem(philosophoi[i], forkLeft, forkRight)
forkLeft = forkRight
}
go diningProblem(philosophoi[0], fork0, forkLeft)
dining.Wait()
fmt.Println("Table empty")
}
愛知はギリシャ語に訳すと φιλοσοφία(フィロソフィア) 、といえば哲学
42の課題にもある dining philosophers problemを、並列処理が得意なgoでやってみました。(ほとんど↓からコピペ)
哲学者の名前は名古屋市営地下鉄の路線から適当に取りました。
待ち時間をランダムにする処理などなくせばもっと短くできます。
三重県 2021/08/30 by snara-42
! gfortran mie.f08
program mie
implicit none
character :: str*3
integer :: m,i,e
do m=32,127
str(1:1)=char(m)
do i=32,127
str(2:2)=char(i)
do e=32,127
str(3:3)=char(e)
if(trim(str) == "MIE") then
print *, str
else if (str(1:3) == "TSU") then
print *, " "//char(90)
end if
end do
end do
end do
end program mie
三重ループ
通りがかりの親切な42生が最近流行っていると教えてくださったのでfortranにしてみました。
津
は日本語では確かに短いんですがヘボン式翻字でTsu
と3文字になってしまうのでZ
でギネス記録に出願したらしい。 山口県の飯井Ii
でいいんじゃないの
滋賀県 2021/08/30 by snara-42
package main
import (
"fmt"
"strings"
)
type lake struct {
name string
area float64
perimeter float64
depth float64
volume float64
description []string
}
func (l lake) String() string {
return fmt.Sprintf("Lake %s\narea: %fkm^2 perimeter: %fkm depth: %fm volume: %fkm^3\n%v\n", l.name, l.area, l.perimeter, l.depth, l.volume, strings.Join(l.description, ", "))
}
func main() {
biwako := lake{name: "Biwako", area: 669.26, perimeter: 235.20, depth: 103.58, volume: 27.5, description: []string{"freshwater", "tectonic", "largest in Japan"}}
fmt.Print(biwako)
}
琵琶湖を構造体として定義
goでは型に紐付く関数(メソッド)を後付けで追加でき、func (typename) String() string
という関数を定義すればPrint
系の関数に渡すだけで文字列として出力できるようになります。
湖といえば、イスラエルで最大の湖・ガリラヤ湖には「キノール(竪琴)湖」という別名があります。
京都府 2021/08/29 by snara-42
import sys, requests, json
address = input() if len(sys.argv)==1 else " ".join(sys.argv[1:])
url = "http://api.geodosu.com/v2/geodosu2"
params = {"output":"json","address":address}
res = requests.get(url,params=params)
data = json.loads(res.text)
print(json.dumps(data,ensure_ascii=False,indent=2))
引数として渡した京都の通り名を正規化し、位置を計算
ジオどす
という便利なapiを使っています。
例えば 河原町四条
と書くと 四条通河原町
にして、そう呼ばれる可能性がある座標範囲をjsonで返してくれます。
京都市街地では基本的に 道のり=マンハッタン距離 が成立するので、2地点の座標から|x2-x1| + |y2-y1|
を計算することで移動距離が求められます。(四条大宮〜千本三条
など例外あり)
大阪府 2020/10/11 by yukimiii
#include <stdio.h>
int main()
{
printf("TAKOYAKI OISHII\n");
return (0);
}
putsになりそう
タコといえば、英語の octopus はギリシャ語の第3型格変化名詞 οκτωπούς(8脚) が由来なので「正しい」複数形は octopodes です。
よくラテン語の第2型格変化と混同して octopi と書く人がいるんですけど 中途半端な勘違いはイカんで〜
octo - eight, podes - foot はそれぞれ同一語源から派生した言葉ですね。
兵庫県 2020/10/13 by kyuki810
import cv2
cap = cv2.VideoCapture(0)
fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
fps = 15.0
size = (640, 360)
writer = cv2.VideoWriter('out1.m4v', fmt, fps, size)
face_cascade_file5 = "haarcascade_frontalface_alt.xml"
face_cascade_5 = cv2.CascadeClassifier(face_cascade_file5)
pic_file = "Harbor.jpg"
pic_face = cv2.imread(pic_file)
pic2_file = "Luminarie.jpg"
pic2_face = cv2.imread(pic2_file)
def pic_face_func(img, rect):
(x1, y1, x2, y2) = rect
w = x2 - x1
h = y2 - y1
if(w < 150):
img_face = cv2.resize(pic_face, (w, h))
else:
img_face = cv2.resize(pic2_face, (w, h))
img2 = img.copy()
img2[y1:y2, x1:x2] = img_face
return img2
while True:
# 画像を取得
_, img = cap.read()
img = cv2.resize(img, size)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade_5.detectMultiScale(gray, 1.1, 2)
for (x, y, w, h) in faces:
img = pic_face_func(img, (x, y, x+w, y+h))
cv2.imshow('img', img)
# ESCかEnterキーが押されたら終了
k = cv2.waitKey(1)
if k == 13:
break
cap.release()
cv2.destroyAllWindows()
カメラが必要。何が起こるか、やってみればわかります。
OpenCVを使って、顔を認識して映像を加工しているようです。
頭(こうべ)に神戸というだじゃれが成立しそう。
奈良県 2021/09/01 by snara-42
;nasm -f macho64 nara.s && gcc nara.o -o nara;
section .data
msg db "Hello, Nara!",0x0a,"Nara nara shika shika inaina",0x0a
len equ $ - msg
section .text
global _main
_main:
; SYSCALL: write(1, msg, len);
mov rax, 0x2000004
mov rdi, 1
mov rsi, msg
mov rdx, len
syscall
; SYSCALL: exit(0)
mov rax, 0x2000001
mov rdi, 0
syscall
nara.s by s.nara
って言いたかったのでアセンブリにしました。
観光客が減って鹿せんべいをあんまり食べなくなったらしいですね。
和歌山県 2021/09/01 by snara-42
kii is wakayama
let the array at "len" be kii
i was nothing
type says Airport Rapid
dest says KTX
while i is lower than kii over 2
build i up
let the array at i be type with "for" plus dest
type says Kishuji Rapid
dest says Wakayama
while i is lower than kii
build i up
let the array at i be type with "for" plus dest
i is 1
while i is lower than the array
shout i with ":" plus the array at i
build i up
shout ""
i was nothing
type says Southern reserved seat
dest says WAKAYAMASHI
while i is lower than kii over 2
build i up
let the array at i be type with "for" plus dest
type says Southern non-reserved
dest says WAKAYAMASHI
while i is lower than kii
build i up
let the array at i be type with "for" plus dest
i is 1
while i is lower than the array
shout i with ":" plus the array at i
build i up
和歌 ←→ rock
通りがかりの42生にrockstarやってみてといわれたので。これで私も rockstar programmer を堂々と名乗れます。
複数の要素を連結している和歌山(市)行きの列車を配列で表現しました。kiiがkey
関空快速で関西空港に行きたかったのに紀州路快速の車両で和歌山に来てしまう事故が後を絶たないらしい…
鳥取県 todo
try(鳥) catch(取) 使いたい
島根県 todo
何かシネマティックなことをしたい
岡山県 2021/08/27 by snara-42
import random
d = {
'新幹線':[['のぞみ','東京','新神戸'],['みずほ','鹿児島中央','広島'],['さくら','鹿児島中央','福山'],['ひかり','東京','相生'],['こだま','博多','新倉敷'],],
'山陽線':[['','姫路','西川原'],['','三原','北長瀬'],['快速サンライナー','福山','倉敷'],['特急いなば','鳥取','上郡'],['寝台特急サンライズ出雲・瀬戸','東京','姫路'],],
'瀬戸大橋線':[['快速マリンライナー','高松',random.choice(['大元','妹尾','早島'])],['特急しおかぜ','松山','児島'],['特急南風','高知','児島'],['寝台特急サンライズ瀬戸','高松','児島'],['','児島','大元'],['快速','茶屋町','大元'],],
'宇野みなと線':[['','宇野','大元'],],
'伯備線':[['特急やくも','出雲市','倉敷'],['','新見','北長瀬'],['寝台特急サンライズ出雲','出雲市','倉敷'],],
'赤穂線':[['','播州赤穂','西川原'],],
'津山線':[['','津山','法界院'],['快速ことぶき','津山','法界院'],],
'桃太郎線':[['','総社','備前三門'],],
'岡山電気軌道':[['','東山','西川緑道公園'],['','清輝橋','西川緑道公園'],],
}
s = random.choice(list(d.keys()))
p = random.choice(d[s])
print(f"岡山から {s} {p[0]} {p[1]} 行きに乗った! 次は {p[2]} だ!")
交通の結節点・岡山駅の時刻表はとても多彩
とりあえず岡山の次の駅に飛ばされます。間違いがあっても誰も気づかなそう
桃鉄にこんなカードあるのかしら
広島県 todo
bingoでも作ろうかな
山口県 todo
画数が47位
徳島県 2021/04/01 by solareenlo
#include <unistd.h>
size_t ft_strlen(char *s)
{
size_t i;
i = 0;
if (s == NULL)
return (i);
while (s[i])
i++;
return (i);
}
int main(void)
{
write(1, "kowai!\n", ft_strlen("kowai\n") + 1);
return (0);
}
徳島で怖いということは、祖谷のかずら橋を渡っていると思われます。落ちたらいやですね。
おっと、大歩危をしてしまった
(鳴門のうずしおも日によっては怖い)
香川県 todo
GNU はget next udon
の略らしい
愛媛県 2021/04/01 by solareenlo
#include <unistd.h>
size_t ft_strlen(char *s)
{
size_t i;
i = 0;
if (s == NULL)
return(i);
while(s[i])
i++;
return (i);
}
int main(void)
{
write(1, "shuuzen chu.\n", ft_strlen("shuuzen chu.\n"));
return (0);
}
明治時代に竣工し、築125年にもなる道後温泉本館は7年に及ぶ修繕工事の真っ最中です。アルカリ性単純泉は肌に優しく美容効果があります。
県域全体を指す県名が使われているのは「愛媛」が唯一の例だそうです。(例えば「千葉」は中心地の千葉郡に由来)
高知県 2021/03/23 by solareenlo
#include <unistd.h>
#include <stdlib.h>
void *ft_memmove(void *dst, const void *src, size_t n)
{
char *d;
const char *s;
char *lastd;
const char *lasts;
d = dst;
s = src;
if (d == NULL && s == NULL) // きっとやりたかったことは if (d == s)
return (dst);
if (d < s)
while (n--)
*(d++) = *(s++);
else
{
lasts = s + (n - 1);
lastd = d + (n - 1);
while (n--)
*(lastd--) = *(lasts--);
}
return (dst);
}
size_t ft_strlen(char *s)
{
size_t i;
i = 0;
if (s == NULL)
return (i);
while (s[i])
i++;
return (i);
}
int main(void)
{
char *s;
size_t n;
n = ft_strlen("umi ga kirei desu.\n");
s = malloc(n + 1);
if (s == NULL)
return (1);
ft_memmove(s, "umi ga kirei desu.\n", n);
s[n] = '\0';
write(1, s, n);
free(s);
return (0);
}
土讃線で山の中を走っていたら急に広い海が見えて感動した記憶があります。
鰹のたたきとご飯が美味しかったです。
DMVに乗りに行きたい。
福岡県 todo
佐賀県 todo
長崎県 todo
熊本県 todo
大分県 todo
宮崎県 todo
鹿児島県 todo
沖縄県 todo
九州にお住まいのみなさん、よろしくお願いします!
おまけ
クリスマスなので、フランス発のクリスマス讃美歌 さやかに星はきらめき
(Minuit, chrétiens, c'est l'heure solennelle) をお送りします。本来4/4なのですが大量の3連符が面倒なので12/8にしました。
import music21
import pygame.midi
chor = """ tinynotation: 12/8 r1.
e4. e4 e8 g4.~ g4 g8 a4 a8 f4 a8 c'2. g4 g8 e4 d8 c4. e4 f8 g4. f4 d8 c1.
e4. e4 e8 g4.~ g4 g8 a4 a8 f4 a8 c'2. g4 g8 f#4 e8 b4. g4 a8 b4. c'4 b8 e2.~ e4.~ e4
g8 g4. a d g a4 g8 c'4 e8 a4. g4 g8 g4. a d g a4 g8 c'4 e8 g2.
c'2.~ c'4. b4 a8 b2.~ b4.~ b4 b8 d'2.~ d'4 a8 a4 a8 c'2. c'4.~ c'4 c'8
e'2. d'4.~ d'4 g8 c'2.~ c'4. b4 a8 g2.~ g4 g8 a4 g8 g2.~ g4.
c'4. d'2.~ d'4. g4. e'2.~ e'4. d'4. c'2. b4. c'4 d'8 c'1.
"""
piano = """ tinynotation: 12/8
E8 c G e c G E c G e c G
E c G e c G E c G e c G F c A f c A E c G e c G E c G e c G
E c G e c G F B G d B G E c G e c G E c G e c G
E c G e c G E c G e c G F c A f c A E c G e c G E B- G e B- G
E B G e B G F# B A e- B A E B G e B G E B G e B G
F B G d B G F B G d B G E c G e c G E c G e c G
F B G d B G F B G d B G E c G e c G E c G e c G
E c A e c A E c A e c A E B G e B G E B G e B G
F d A f d A F d A f d A E c A e c A E c A e c A
E c G e c G D B G d B G G e c g e c F c A f c A
E c G e c G F B G d B G E c G e c G E c G e c G
D B G d B G D B G d B G G e c g e c F d A f d A
E c G e c G F B G d B G C E G c G E c2.
"""
bass = """ tinynotation: 12/8
CC2.~ CC CC CC FF CC EE GG GGG
CC~ CC CC CC FF CC CC BBB BBB EE~ EE
BB4. GG BB GG C GG C GG
BB GG BB GG C GG C~ C
AA2.~ AA EE~ EE DD~ DD AA~ AA
GG FF EE FF GG GG CC4. EE GG C
G2. F E F G GG C1.
"""
pygame.midi.init()
c = music21.converter.parse(chor)
p = music21.converter.parse(piano)
b = music21.converter.parse(bass)
c.insert(music21.instrument.Oboe())
p.insert(music21.instrument.Lute())
b.insert(music21.instrument.StringInstrument())
s = music21.stream.Score([c, p, b])
# s.show() ## opens in musescore ##
sp = music21.midi.realtime.StreamPlayer(s)
sp.play()
pygame.midi.quit()
上のコードをコピペして、下のコマンドが通れば、音が聞こえてくるはずです。
pip install pygame music21
python minuit_chrestiens.py
midiに出力したものはこちら。musescoreで開くといい感じの音になります。
https://github.com/snara-42/musica/blob/main/minuit_chrestiens.mid
使用ライブラリ
http://web.mit.edu/music21/
https://www.pygame.org/docs/ref/midi.html
最後に
お付き合いいただきありがとうございました。みなさんのプルリクをお待ちしています!
明日は、rakiyamaさんが、go学習初めの一歩踏んでみましたというお話を書いてくださるので、そちらの記事もお楽しみに!
それではよいクリスマスとよいお年をお過ごしください。
#######eof