週間チャレンジ103


My solutionsへのChallenge

- 1/1中国干支

タスク
あなたは、$year年を与えられます.
所定の年のChinese Zodiacを決定するためにスクリプトを書きます.
残念ながら、私はアジアの背景から来ないので、私に手掛かりを与える仕事に頼らなければなりませんでした.要素のタイミングには混乱があります.リンクされたページには、特定の動物にリンクされた各要素があります.このpageは、要素(12年ごと)のための60年周期を持ち、一方、このpageは10年周期(各要素について2年間)を有する.タスクで指定された2つの例を使用して、最後のリンクだけが期待されるソリューションを提供します.
それがソートされた(うまくいけば)、それはそれから2つの配列@zodiacsおよび@elementsをつくって、正しい要素および動物を表示するために単純な算術演算を使用することの事項である.


» ./ch-1.pl 2017
Fire Rooster

» ./ch-1.pl 1938
Earth Tiger

2つ目の演奏は何ですか?

仕事
Full description here .どのファイルが現在遊んでいるかを出力するプログラムを書きます.オプション:また、値のような時間としてメディアの現在位置を表示します.

マイソリューション
私のブログの普通の読者として、私はこれらの挑戦について2つの規則があるということを知っています.まず、私のプル要求を行う前に他の人々の解決策を読んでください.第二に、コアPerlの一部ではないモジュールを使用しないでください.よく、私は今週第2の規則を破り、CSVファイルを読むためにText::CSVを使いました.CSVファイルを正しく解析することは簡単ではありませんし、タスクのコア部分ではないので、正しく動作するモジュールに任せます.
元のタスクは、フォーマットされた文字列として指定された時間を持ちました、そして、私はエポック時間(それが真夜中1/1/1970 UTCからの非閏秒)に変換して、夏の間に彼らの時計を変える世界の奇妙な部分に対処することについてのblurbを書くつもりです(記録のために、我々は1992年からこれをしませんでした).私がコードを書いた時間によって、入力は現在エポック時間として表されます.
そうすることによって、出力は、開始時刻と現在時刻との間のleap secondsにおいては重要ではない.
とにかく、十分なblabbering.解決策解決策は次のとおりです.すべての回ミリ秒(1秒の1/1000秒)として記録されます.
  • 入力値を読み、それらが正しいことを確認します.
  • は、CSVファイルを$tracks(配列の配列)
  • に読み込みます
  • は、$playlist_lengthとしてプレイリストの長さを計算します
  • は、我々が$playlist_positionとしてどのくらい我々がプレイリストを通っているかについて計算します.これは($current-$start)*100とプレイリストの長さの残りです.
  • は、トラックを通して私の方法で働きます.$track_length$playlist_position未満であるならば、我々は第2から第1の数を減算して、続けます.
  • 私たちはトラックが何であるかを知っています、そして、位置(スタートからのミリ秒)は我々がトラックです.いくつかのより簡単な代数では、適切な形式で時刻を表示できます.
  • コードの出力が与えられた例にマッチしたときには良い感じです.


    » ./ch-2.pl 1606134123 1614591276 ~/wasteland/filelist.csv                                                                                                                                                                                    
    Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23) 00:10:24