ThoughtWorks面試題(標記給自己看)


【ThoughtWorks代碼題目】

 

 

 

 

 

 

縮短面試流程,直接進入代碼環節,不管你是后台開發,移動開發還是前端開發,拿代碼說話!

(移動開發請用Android/iOS,前端開發請用JavaScript。其他語言不限。請在兩天內完成作業,並通過表單提交給ThoughtWorks)

面試題目:收銀機

需求描述


商店里進行購物結算時會使用收銀機系統,這台收銀機會在結算時根據客戶的購物車中的商品和商店正在進行的優惠活動進行結算和打印購物小票。

已知商品信息包含:名稱,數量單位,單價,類別和條形碼(偽)。 
已知我們可以對收銀機進行設置,使之支持各種優惠。

我們需要實現一個名為打印小票的小模塊,收銀機會將輸入的數據轉換成一個JSON數據然后一次性傳給我們這個小模塊,我們將從控制台中輸出結算清單的文本。

輸入格式(樣例):

[
    'ITEM000001',
    'ITEM000001',
    'ITEM000001',
    'ITEM000001',
    'ITEM000001',
    'ITEM000003-2',
    'ITEM000005',
    'ITEM000005',
    'ITEM000005'
]

其中對'ITEM000003-2'來說,"-"之前的是標准的條形碼,"-"之后的是數量。 
當我們購買需要稱量的物品的時候,由稱量的機器生成此類條形碼,收銀機負責識別生成小票。

該商店正在對部分商品進行“買二贈一”的優惠活動和對部分商品進行95折的優惠活動。其中:

  • “買二贈一”是指,每當買進兩個商品,就可以免費再買一個相同商品。
  • “95折”是指,在計算小計的時候按單價的95%計算每個商品。
  • 每一種優惠都詳細標記了哪些條形碼對應的商品可以享受此優惠。
  • 店員設置,當“95折”和“買二贈一”發生沖突的時候,也就是一款商品既符合享受“買二贈一”優惠的條件,又符合享受“95折”優惠的條件時,只享受“買二贈一”優惠。


要求寫代碼支持上述的功能,並根據輸入和設置的不同,輸出下列小票。

小票內容及格式(樣例):

  • 當購買的商品中,有符合“買二贈一”優惠條件的商品時:

***<沒錢賺商店>購物清單***
名稱:可口可樂,數量:3瓶,單價:3.00(元),小計:6.00(元)
名稱:羽毛球,數量:5個,單價:1.00(元),小計:4.00(元)
名稱:蘋果,數量:2斤,單價:5.50(元),小計:11.00(元)
----------------------
買二贈一商品:
名稱:可口可樂,數量:1瓶
名稱:羽毛球,數量:1個
----------------------
總計:21.00(元)
節省:4.00(元)
**********************

 

  • 當購買的商品中,沒有符合“買二贈一”優惠條件的商品時:

***<沒錢賺商店>購物清單***
名稱:可口可樂,數量:3瓶,單價:3.00(元),小計:9.00(元)
名稱:羽毛球,數量:5個,單價:1.00(元),小計:5.00(元)
名稱:蘋果,數量:2斤,單價:5.50(元),小計:11.00(元)
----------------------
總計:25.00(元)
**********************

 

  • 當購買的商品中,有符合“95折”優惠條件的商品時

***<沒錢賺商店>購物清單***
名稱:可口可樂,數量:3瓶,單價:3.00(元),小計:9.00(元)
名稱:羽毛球,數量:5個,單價:1.00(元),小計:5.00(元)
名稱:蘋果,數量:2斤,單價:5.50(元),小計:10.45(元),節省0.55(元)
----------------------
總計:24.45(元)
節省:0.55(元)
**********************

 

  • 當購買的商品中,有符合“95折”優惠條件的商品,又有符合“買二贈一”優惠條件的商品時

***<沒錢賺商店>購物清單***
名稱:可口可樂,數量:3瓶,單價:3.00(元),小計:6.00(元)
名稱:羽毛球,數量:6個,單價:1.00(元),小計:4.00(元)
名稱:蘋果,數量:2斤,單價:5.50(元),小計:10.45(元),節省0.55(元)
----------------------
買二贈一商品:
名稱:可口可樂,數量:1瓶
名稱:羽毛球,數量:2個
----------------------
總計:20.45(元)
節省:4.55(元)
**********************

 

作業要求

  1. 請根據需求自行設計商品信息和優惠信息的數據結構,並自己准備數據;
  2. 請完成全部需求,並輸出樣例格示的小票;
  3. 請在保證代碼可讀性的前提下,盡可能用最小的圈復雜度完成作業;
  4. 移動開發請用Android/iOS,前端開發請用JavaScript。其他語言不限。

加分項

  1. 良好的設計
  2. 寫測試
  3. 用github提交,並且有良好的提交習慣

直接失敗的減分項

  1. 壓縮包打不開
  2. 以txt文件,圖片,word文檔等非代碼形式提交作業
  3. 只提交了二進制文件,沒提交代碼,比如exe和class文件
 

 金數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM