package Ġflash cards Ċ Ċ import Ġjava . lang . Number FormatException Ċ import Ġjava . io . File Ċ import Ġkotlin . random . Random Ċ Ċ val Ġflash Cards Ġ= Ġmutable Map Of < String , ĠString >() Ċ var Ġmist akes Ġ= Ġmutable Map Of < String , ĠInt >() Ċ val Ġio Log Ġ= Ġmutable ListOf < String >() Ċ Ċ fun Ġprintln ( input : ĠString ) Ġ{ ĊĠĠĠ Ġio Log . add ( input ) ĊĠĠĠ Ġkotlin . io . println ( input ) Ċ } Ċ Ċ fun Ġread Line (): ĠString Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= Ġkotlin . io . readLine () !! ĊĠĠĠ Ġio Log . add ( input ) ĊĠĠĠ Ġreturn Ġinput Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġin Ġargs . indices Ġstep Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( args [ i ] Ġ== Ġ"- import ") Ġimport Cards ( args [ i Ġ+ Ġ 1 ]) ĊĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprintln (" Input Ġthe Ġaction Ġ( add , Ġremove , Ġimport , Ġexport , Ġask , Ġexit , Ġlog , Ġhar dest Ġcard , Ġreset Ġstats ): ") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( readLine ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" add " Ġ-> Ġadd Card () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" remove " Ġ-> Ġremove Card () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ask " Ġ-> Ġask From Cards () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" import " Ġ-> Ġimport Cards () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" export " Ġ-> Ġexport Cards () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" log " Ġ-> Ġlog ToFile () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" har dest Ġcard " Ġ-> Ġget Har dest Cards () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" reset Ġstats " Ġ-> Ġreset Stats () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" exit " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" By e Ġby e !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġprintln (" Unknown Ġcommand ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġargs . indices Ġstep Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( args [ i ] Ġ== Ġ"- export ") Ġexport Cards ( args [ i Ġ+ Ġ 1 ]) Ċ } Ċ Ċ fun Ġadd Card () Ġ{ ĊĠĠĠ Ġprintln (" The Ġcard :") ĊĠĠĠ Ġval Ġterm Ġ= Ġread Line () ĊĠĠĠ Ġif Ġ(! flash Cards . containsKey ( term )) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" The Ġdefinition Ġof Ġthe Ġcard :") ĊĠĠĠĠĠĠĠ Ġval Ġdefinition Ġ= Ġread Line () ĊĠĠĠĠĠĠĠ Ġif Ġ(! flash Cards . contains Value ( definition )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflash Cards [ term ] Ġ= Ġdefinition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmist akes [ term ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" The Ġpair Ġ( \" $ term \":\" $ definition \") Ġhas Ġbeen Ġadded .") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" The Ġdefinition Ġ\"$ definition \" Ġalready Ġexists .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" The Ġcard Ġ\"$ term \" Ġalready Ġexists .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġremove Card () Ġ{ ĊĠĠĠ Ġprintln (" Which Ġcard ?") ĊĠĠĠ Ġval Ġterm Ġ= Ġread Line () ĊĠĠĠ Ġif Ġ( flash Cards . containsKey ( term )) Ġ{ ĊĠĠĠĠĠĠĠ Ġflash Cards . remove ( term ) ĊĠĠĠĠĠĠĠ Ġmist akes . remove ( term ) ĊĠĠĠĠĠĠĠ Ġprintln (" The Ġcard Ġhas Ġbeen Ġremoved .") ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Can 't Ġremove Ġ\"$ term \": Ġthere Ġis Ġno Ġsuch Ġcard ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġask From Cards () Ġ{ ĊĠĠĠ Ġif Ġ( flash Cards . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" No Ġcards Ġare Ġavailable .") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" How Ġmany Ġtimes Ġto Ġask ?") ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnum Questions Ġ= Ġread Line (). toInt () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. num Questions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġterm Ġ= Ġflash Cards . entries . elementAt ( Random . nextInt ( flash Cards . size )). key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Print Ġthe Ġdefinition Ġof Ġ\"$ term \": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefinition Ġ= Ġread Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Ġdefinition Ġ== Ġflash Cards [ term ]) Ġprintln (" Correct !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmist akes [ term ] Ġ= Ġmist akes [ term ] !! Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmessage Ġ= Ġ" Wrong . ĠThe Ġright Ġanswer Ġis Ġ\" ${ flash Cards [ term ]} \" ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flash Cards . contains Value ( definition )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ+= Ġ", Ġbut Ġyour Ġdefinition Ġis Ġcorrect Ġfor Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\" ${ flash Cards . filter Ġ{ Ġit . value Ġ== Ġdefinition Ġ}. keys . first ()} \" ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Not Ġa Ġnumber ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġread FileName ( input : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( input . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" File Ġname :") ĊĠĠĠĠĠĠĠ Ġread Line () ĊĠĠĠ Ġ} Ġelse Ġinput Ċ } Ċ fun Ġimport Cards ( input : ĠString Ġ= Ġ"") Ġ{ ĊĊĠĠĠ Ġval Ġfile Ġ= ĠFile ( read FileName ( input )) ĊĊĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcards Ġ= Ġfile . read Lines () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcards . indices Ġstep Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflash Cards [ cards [ i ]] Ġ= Ġcards [ i Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmist akes [ cards [ i ]] Ġ= Ġcards [ i Ġ+ Ġ 2 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ cards . size Ġ/ Ġ 3 } Ġcards Ġhave Ġbeen Ġloaded .\ n ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" There Ġwas Ġan Ġerror Ġin Ġreading Ġthe ĠFile ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġprintln (" File Ġnot Ġfound .\ n ") Ċ } Ċ Ċ fun Ġexport Cards ( input : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠ ĠFile ( read FileName ( input )). write Text ( flash Cards ToString ()) ĊĠĠĠ Ġprintln ("${ flash Cards . size } Ġcards Ġhave Ġbeen Ġsaved .\ n ") Ċ } Ċ Ċ fun Ġlog ToFile () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile ( read FileName ("")) ĊĠĠĠ Ġvar Ġtext Ġ= Ġ"" ĊĠĠĠ Ġfor Ġ( line Ġin Ġio Log ) Ġtext Ġ+= Ġ"$ line \ n " ĊĠĠĠ Ġfile . write Text ( text ) ĊĠĠĠ Ġprintln (" The Ġlog Ġhas Ġbeen Ġsaved .") Ċ } Ċ Ċ fun Ġreset Stats () Ġ{ ĊĠĠĠ Ġfor Ġ( key Ġin Ġmist akes . keys ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmist akes [ key ] Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" Card Ġstatistics Ġhave Ġbeen Ġreset .") Ċ } Ċ Ċ fun Ġget Har dest Cards () Ġ{ ĊĠĠĠ Ġval Ġmax Ġ= Ġmist akes . values . to Typed Array (). max OrNull () ĊĠĠĠ Ġval Ġhar dest Cards Ġ= Ġmist akes . filter Values Ġ{ Ġit Ġ== Ġmax Ġ} ĊĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġmax Ġ== Ġ 0 Ġ|| Ġmax Ġ== Ġnull Ġ-> Ġprintln (" There Ġare Ġno Ġcards Ġwith Ġerrors .") ĊĠĠĠĠĠĠĠ Ġhar dest Cards . size Ġ== Ġ 1 Ġ-> Ġprintln (" The Ġhar dest Ġcard Ġis Ġ\" ${ har dest Cards . keys . first ()} \" ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠYou Ġhave Ġ$ max Ġerrors Ġanswer ing Ġit ") ĊĠĠĠĠĠĠĠ Ġhar dest Cards . size Ġ> Ġ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmessage Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġhar dest Cards . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ+= Ġ", Ġ\"$ line \"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage . remove Prefix (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" The Ġhar dest Ġcards Ġare Ġ$ message . ĠYou Ġhave Ġ$ max Ġerrors Ġanswer ing Ġthem .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġflash Cards ToString (): ĠString Ġ{ ĊĠĠĠ Ġvar Ġtext Ġ= Ġ"" ĊĠĠĠ Ġflash Cards . forEach Ġ{ Ġtext Ġ+= Ġ"\ n ${ it . key }\ n ${ it . value }\ n ${ mist akes [ it . key ]}" Ġ} ĊĠĠĠ Ġreturn Ġtext . remove Prefix ("\ n ") Ċ } Ċ