aboutsummaryrefslogtreecommitdiff
path: root/challenge-103
diff options
context:
space:
mode:
authorPaulo Custodio <pauloscustodio@gmail.com>2021-03-26 00:02:16 +0000
committerPaulo Custodio <pauloscustodio@gmail.com>2021-03-26 00:02:16 +0000
commitfa0008580d9bb5aba4a15bf03d77cb184baba26c (patch)
treefa13466359173df56f99789e20db1c8674f4c909 /challenge-103
parent4c074d22de5b502db1ee263e4d92cf6095eefe32 (diff)
downloadperlweeklychallenge-club-fa0008580d9bb5aba4a15bf03d77cb184baba26c.tar.gz
perlweeklychallenge-club-fa0008580d9bb5aba4a15bf03d77cb184baba26c.tar.bz2
perlweeklychallenge-club-fa0008580d9bb5aba4a15bf03d77cb184baba26c.zip
Add Basic solution to challenges 103, 104 and 105
Diffstat (limited to 'challenge-103')
-rw-r--r--challenge-103/paulo-custodio/basic/ch-1.bas33
-rw-r--r--challenge-103/paulo-custodio/basic/ch-2.bas117
2 files changed, 150 insertions, 0 deletions
diff --git a/challenge-103/paulo-custodio/basic/ch-1.bas b/challenge-103/paulo-custodio/basic/ch-1.bas
new file mode 100644
index 0000000000..6479ec41bb
--- /dev/null
+++ b/challenge-103/paulo-custodio/basic/ch-1.bas
@@ -0,0 +1,33 @@
+' Challenge 103
+'
+' TASK #1 › Chinese Zodiac
+' Submitted by: Mohammad S Anwar
+' You are given a year $year.
+'
+' Write a script to determine the Chinese Zodiac for the given year $year.
+' Please check out wikipage for more information about it.
+'
+' The animal cycle: Rat, Ox, Tiger, Rabbit, Dragon, Snake, Horse, Goat, Monkey,
+' Rooster, Dog, Pig.
+' The element cycle: Wood, Fire, Earth, Metal, Water.
+'
+' Example 1:
+' Input: 2017
+' Output: Fire Rooster
+' Example 2:
+' Input: 1938
+' Output: Earth Tiger
+
+dim shared animals(11) as string
+dim shared elements(9) as string
+
+data "Rat","Ox","Tiger","Rabbit","Dragon","Snake","Horse","Goat","Monkey","Rooster","Dog","Pig"
+data "Wood","Wood","Fire","Fire","Earth","Earth","Metal","Metal","Water","Water"
+
+dim i as integer, s as string
+for i=0 to 11: read s: animals(i)=s:next
+for i=0 to 9: read s: elements(i)=s:next
+
+dim year as integer
+year=val(command(1))-1924
+print elements(year mod 10);" ";animals(year mod 12)
diff --git a/challenge-103/paulo-custodio/basic/ch-2.bas b/challenge-103/paulo-custodio/basic/ch-2.bas
new file mode 100644
index 0000000000..18a8167af6
--- /dev/null
+++ b/challenge-103/paulo-custodio/basic/ch-2.bas
@@ -0,0 +1,117 @@
+' Challenge 103
+'
+' TASK #2 › What’s playing?
+' Submitted by: Albert Croft
+' Working from home, you decided that on occasion you wanted some background
+' noise while working. You threw together a network streamer to continuously
+' loop through the files and launched it in a tmux (or screen) session, giving
+' it a directory tree of files to play. During the day, you connected an audio
+' player to the stream, listening through the workday, closing it when done.
+'
+' For weeks you connect to the stream daily, slowly noticing a gradual drift of
+' the media. After several weeks, you take vacation. When you return, you are
+' pleasantly surprised to find the streamer still running. Before connecting,
+' however, if you consider the puzzle of determining which track is playing.
+'
+' After looking at a few modules to read info regarding the media, a quick bit
+' of coding gave you a file list. The file list is in a simple CSV format, each
+' line containing two fields: the first the number of milliseconds in length,
+' the latter the media’s title (this example is of several episodes available
+' from the MercuryTheatre.info):
+'
+' 1709363,"Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)"
+' 1723781,"Les Miserables Episode 2: Javert (broadcast date: 1937-07-30)"
+' 1723781,"Les Miserables Episode 3: The Trial (broadcast date: 1937-08-06)"
+' 1678356,"Les Miserables Episode 4: Cosette (broadcast date: 1937-08-13)"
+' 1646043,"Les Miserables Episode 5: The Grave (broadcast date: 1937-08-20)"
+' 1714640,"Les Miserables Episode 6: The Barricade (broadcast date: 1937-08-27)"
+' 1714640,"Les Miserables Episode 7: Conclusion (broadcast date: 1937-09-03)"
+' For this script, you can assume to be provided the following information:
+'
+' * the value of $^T ($BASETIME) of the streamer script,
+' * the value of time(), and
+' * a CSV file containing the media to play consisting of the length in
+' milliseconds and an identifier for the media (title, filename, or other).
+' Write a program to output which file is currently playing. For purposes of
+' this script, you may assume gapless playback, and format the output as you
+' see fit.
+'
+' Optional: Also display the current position in the media as a time-like value.
+'
+' Example:
+'
+' Input: 3 command line parameters: start time, current time, file name
+'
+' # Streamer start time: Tue Nov 23 12:22:03 2020
+' 1606134123
+'
+' # Current time: Mon Mar 1 09:34:36 2021
+' 1614591276
+'
+' # filelist.csv
+'
+' Output:
+'
+' "Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)"
+' 00:17:33
+
+type TrackType
+ secs as integer
+ title as string
+end type
+
+redim shared tracks(1) as TrackType
+
+sub read_tracks(filename as string)
+ dim fn as integer, text as string, i as integer, p1 as integer, p2 as integer
+
+ fn=FreeFile
+ open filename for input as #fn
+ do while not eof(fn)
+ line input #fn, text
+ if i>ubound(tracks) then redim preserve tracks(i)
+ tracks(i).secs=val(text)/1000
+ p1=instr(text,""""): p2=instr(p1+1,text,"""")
+ tracks(i).title=mid(text,p1+1,p2-p1-1)
+ i=i+1
+ loop
+end sub
+
+function tracks_secs() as integer
+ dim i as integer, secs as integer
+
+ for i=0 to ubound(tracks)
+ secs=secs+tracks(i).secs
+ next
+ tracks_secs=secs
+end function
+
+sub show_track(secs as integer)
+ dim i as integer, hh as integer, mm as integer, ss as integer
+
+ secs=secs mod tracks_secs()
+ for i=0 to ubound(tracks)
+ if secs<tracks(i).secs then ' playing this title
+ hh=int(secs/3600): secs=secs mod 3600
+ mm=int(secs/60): secs=secs mod 60
+ ss=secs
+
+ print tracks(i).title
+ print right("00"+trim(str(hh)),2);":";
+ print right("00"+trim(str(mm)),2);":";
+ print right("00"+trim(str(ss)),2)
+ exit sub
+ else
+ secs=secs-tracks(i).secs
+ end if
+ next
+end sub
+
+' main
+dim start_secs as integer, current_secs as integer, filename as string
+start_secs=val(command(1))
+current_secs=val(command(2))
+filename=command(3)
+
+read_tracks filename
+show_track current_secs-start_secs