2022年5月14日土曜日

Revengeの話

 クルマでNHKラジオを聴いていたら、スポーツの話題で"リベンジ"という言葉を使っていました。少しびっくりしました。


 スポーツで「以前に敗れた相手と再戦して勝利する」というときに"Revenge"という言葉は不適だと思います。辞書を調べると、英語の"Revenge"という言葉はまさに"復讐"という意味です。「モンテ・クリスト伯」です。


 言葉は時代によって変化するものだし、和製英語を絶対に使うな、と言う気はないのですが、誤解を生みそうな言葉をNHKが使うのはどうかと思います。高い受信料を徴収しているNHK様なのだから。


 余談ですが、「雪辱を果たす」という言葉を聴くと、教養を感じます。

NGな話

 ご存知の方も多いと思いますが、"NG" (良くない) という言葉は、いわゆる和製英語です。英語を話すときに、"It's not good."や"It''s no good."であれば伝わりますが、"It's NG."ではたぶん伝わらないです。


 日本では"OK"の反対として"NG"が多用されているせいか、"NG"が海外でも通じると勘違いされている方が少なからずいる気がします。(私も勘違いしていました。)


 間違いの元にならないよう、気を付けたいものです。


2022年5月7日土曜日

人間ドックの、どうでもいい話

 先日、人間ドックに行きました。

 年に1回の慣れないイベントなので、なかなかに緊張します。


 腹部エコーの検査では、呼吸の状態を調整しないといけません。「息を吸って」->「息を吐いて」->「そのまま楽に。。。」


 殺されるのかなと思って、噴き出しそうになるのは私だけではないはず。

 「息を吐いて」と言われた後の間に、笑いそうになっちゃいます。


2022年5月4日水曜日

素朴な未来への投資

 奨学金の出世払い とかいうニュースがありました。

(あまりきちんと調べてなくてお恥ずかしい。気になる方は、ご自分でご検索あれ。)


 奨学金の返済は、人によっては大変な負担らしいです。かと言って、アルバイトで学費を稼ぎながら勉強するのは無理があります。


 一部の企業で、内部留保が貯まっているみたいな話を聞くことがありますが、いっそのこと学生に投資してあげた方がいいのかもしれません。たぶん、それは一番素朴な未来への投資です。


2022年5月1日日曜日

よくある労働時間のジレンマ

 たぶん、よくある話です。


 ニュースなんかで過労死が話題に上ることがあります。労働者の長時間労働を防止するために、労働基準監督署が目を光らせているわけです。

 その結果、労働者が正直に労働時間を報告すると、会社に怒られます。「労基に怒られるから、馬鹿正直に報告するな」となります。


 人手不足が深刻です。会社に人を増やしてもらうには、現状の労働時間を報告しろとなります。「人が足りないなら、労働時間を正しく集計してみろ」となります。


 労働時間を正直に報告すると怒られるし、正直に報告しないと人を増やしてもらえない。ジレンマです。

 結局、苦労するのは現場の労働者です。


 何が悪いんでしょうね。


 私の個人的見解ですが、労働時間を数字で管理しようというのが間違いです。

 残業代を稼ぎたい人が、多めに報告するかもしれません。

 業務が忙しい人にとって、労働時間の集計は優先度が低い業務です。

 業務内容によっては、労働時間の定義が微妙に異なります。

どうして、精確に集計できると思うのでしょうか。

 実際の現場を見て、労働力が足りているか、将来的な人材の育成ができているか、といったことを判断してほしいものです。


2022年4月6日水曜日

今年は豊作になりますように

ロシアとウクライナが交戦中です。


ウクライナと言えば、世界有数の穀倉地帯です。小麦の供給が減ることになるでしょう。

今年はお米の生産量を増やした方が良いのかもしれません。


空腹はつらいことです。


2021年12月5日日曜日

4つの数字で10を作るアレ その1

 先日、久しぶりに電車に乗っていたら、"3,4,7,8から10を作れ"と書いてある広告を見かけました。

 昔は切符に4つの数字が書いてあったのでよくやったものです。ICカードになってからは全然やらないですが。


 さておき。パズルを解く気分で少し解いてみました。プログラミングの勉強には比較的良い題材だと思います。


やることは4つの数字から2つ選んで四則演算。それを繰り返して10を作るだけです。

- 1回目の計算:順番を考慮して4つから2つ選ぶ方法は12通り

- 2回目の計算:1回目の計算結果と残りの2つから2つを選ぶ方法は6通り

- 3回目の計算:残っている数字を選ぶ方法は2通り

- 四則演算:4通り

よって、すべての組み合わせは、12 * 4 * 6 * 4 * 2 * 4 = 9216通りです。たかだか1万通りくらいです。Excel VBAでリストアップしてみましょう。


 ソースコードはご自由にご利用ください。ただし、趣味のプログラムなので保証はありません。

------------------------------

Option Explicit


Dim row As Long

Dim col As Long


Const epsilon As Double = 0.000001


Public Sub Calc10()

    Sheet1.Cells.Clear

    

    row = 1

    col = 1

    

    Call Calc10A(1, 1, 9, 9)

End Sub


'演算子の表示

Public Function OperationText(op As Long) As String

    OperationText = ""

    

    If op = 0 Then

        OperationText = "'+"

    ElseIf op = 1 Then

        OperationText = "'-"

    ElseIf op = 2 Then

        OperationText = "'*"

    ElseIf op = 3 Then

        OperationText = "'/"

    End If

End Function


'演算

Public Function OperationCalc(op As Long, a0 As Double, a1 As Double) As Double

    OperationCalc = a0

    

    If op = 0 Then

        OperationCalc = a0 + a1

    ElseIf op = 1 Then

        OperationCalc = a0 - a1

    ElseIf op = 2 Then

        OperationCalc = a0 * a1

    ElseIf op = 3 Then

        If Math.Abs(a1) < epsilon Then

            OperationCalc = a0

        Else

            OperationCalc = a0 / a1

        End If

    End If

End Function


'a(0) - a(3)    :   0 - 9の数字4つ

'a(4)   :   1回目の演算結果

'a(5)   :   2回目の演算結果

'a(6)   :   3回目の演算結果

Public Sub Calc10A(a0 As Long, a1 As Long, a2 As Long, a3 As Long)

    '---------- 演算子選択のIndex ----------

    Dim i0 As Long

    Dim i1 As Long

    Dim i2 As Long

    

    '---------- 数字選択のIndex ----------

    Dim j0 As Long

    Dim j1 As Long

    Dim j2 As Long

    Dim j3 As Long

    Dim j4 As Long

    Dim j5 As Long

    

    '------------------------------

    Dim a(6) As Double

    

    a(0) = a0

    a(1) = a1

    a(2) = a2

    a(3) = a3

    a(4) = 0

    a(5) = 0

    a(6) = 0

    

    '---------- 1回目の演算 ----------

    For i0 = 0 To 3

        For j0 = 0 To 3

            For j1 = 0 To 3

                If j1 <> j0 Then

                

                    a(4) = OperationCalc(i0, a(j0), a(j1))

                                      

                    '---------- 2回目の演算 ----------

                    For i1 = 0 To 3

                        For j2 = 0 To 4

                            If j2 <> j0 And j2 <> j1 Then

                                For j3 = 0 To 4

                                    If j3 <> j0 And j3 <> j1 And j3 <> j2 Then

                                    

                                        a(5) = OperationCalc(i1, a(j2), a(j3))

                                                            

                                        '---------- 3回目の演算 ----------

                                        For i2 = 0 To 3

                                            For j4 = 0 To 5

                                                If j4 <> j0 And j4 <> j1 And j4 <> j2 And j4 <> j3 Then

                                                    For j5 = 0 To 5

                                                        If j5 <> j0 And j5 <> j1 And j5 <> j2 And j5 <> j3 And j5 <> j4 Then

                                                        

                                                            a(6) = OperationCalc(i2, a(j4), a(j5))

                                                            

                                                            '---------- 1回目の演算の表示 ----------

                                                            Sheet1.Cells(row, col + 0) = OperationText(i0)

                                                            Sheet1.Cells(row, col + 1) = a(j0)

                                                            Sheet1.Cells(row, col + 2) = a(j1)

                                                            col = col + 3

                                                            

                                                            If i0 = 3 And Math.Abs(a(j1)) < epsilon Then

                                                                Sheet1.Cells(row, col) = "Divided by Zero"

                                                                GoTo label

                                                            End If

                                                                

                                                            '---------- 2回目の演算の表示 ----------

                                                            Sheet1.Cells(row, col + 0) = OperationText(i1)

                                                            Sheet1.Cells(row, col + 1) = a(j2)

                                                            Sheet1.Cells(row, col + 2) = a(j3)

                                                            col = col + 3

                                                            

                                                            If i1 = 3 And Math.Abs(a(j3)) < epsilon Then

                                                                Sheet1.Cells(row, col) = "Divided by Zero"

                                                                GoTo label

                                                            End If

                                                            

                                                            '---------- 3回目の演算の表示 ----------

                                                            Sheet1.Cells(row, col + 0) = OperationText(i2)

                                                            Sheet1.Cells(row, col + 1) = a(j4)

                                                            Sheet1.Cells(row, col + 2) = a(j5)

                                                            col = col + 3

                                                            

                                                            If i2 = 3 And Math.Abs(a(j5)) < epsilon Then

                                                                Sheet1.Cells(row, col) = "Divided by Zero"

                                                                GoTo label

                                                            End If

                                                            

                                                            '------------------------------

                                                            Sheet1.Cells(row, 10) = a(6)

label:

                                                            row = row + 1

                                                            col = 1

                                                        End If

                                                    Next j5

                                                End If

                                            Next j4

                                        Next i2

                                        '------------------------------

                                    End If

                                Next j3

                            End If

                        Next j2

                    Next i1

                    '------------------------------

                End If

            Next j1

        Next j0

    Next i0

    '------------------------------

End Sub