บทนำ
ให้หอคอย ASCII และแรงลมเขียนโปรแกรมหรือฟังก์ชั่นเพื่อพิจารณาว่าหอคอยจะสมดุลหรือไม่หรือจะตกแบบไหน
ตัวอย่างเช่นหอคอยแรกยอดคงเหลือ แต่ที่สองตกไปทางซ้าย
# # # #
### ###
### ###
# # # #
##### #####
### ###
### #
นี่เป็นความท้าทายครั้งแรกของฉัน ฉันหวังว่าคุณจะสนุกกับมัน.
คำสั่ง
หอประกอบด้วยบล็อกการเชื่อมต่อแทนด้วย#
รูปแบบและวัตถุแข็ง แต่ละบล็อกเป็นสี่เหลี่ยมจัตุรัสที่มีความกว้างและความสูงของหนึ่งหน่วยและมีความหนาแน่นคงที่ มีสองแรงที่กระทำบนหอคอยน้ำหนักและแรงลม กองกำลังทั้งหมดทำหน้าที่ในแต่ละบล็อกและผ่านจุดศูนย์กลางของบล็อก
- เนื่องจากน้ำหนักของมันแต่ละบล็อกมีกำลังลดลงของหนึ่งหน่วยที่ทำหน้าที่เกี่ยวกับมัน
- นอกจากนี้แต่ละบล็อกที่ไม่มีบล็อกอื่นที่อยู่ติดกับด้านข้างของลมมีแรงที่ทำหน้าที่เป็นแนวนอนในทิศทางของลม ขนาดของแรงนี้ให้เป็นอินพุต
- ทิศทางของลมจะถูกระบุโดยธง ASCII บางแห่งในอินพุต จะมีแฟล็กในอินพุตหากและต่อเมื่อลมไม่เป็นศูนย์ ธงไม่ส่งผลกระทบต่อกองกำลังใด ๆ
ธงจะมีลักษณะตรงตามที่ปรากฏด้านล่าง
Flag design and corresponding wind direction:
o~~ ~~o
|~~ ~~|
---> <---
เพื่อชี้แจงหอคอยเป็นวัตถุที่มั่นคงและจะไม่สลายและไม่ยึดติดกับพื้นดิน อย่างไรก็ตามโปรแกรมของคุณควรคำนวณแรงสำหรับแต่ละบล็อกแยกกันเพื่อกำหนดว่าหอคอยสมดุลหรือไม่
ตัวอย่าง
o~~
|~~
# # > >
### >##
### >##
# # > >
##### >####
### >##
### >##
Wind force: 1 Wind direction: --->
ลมพัดไปทางขวาและจะผลักดันบล็อกที่แสดงด้วย>
ด้านบนขวา โปรดทราบว่าลมทำหน้าที่อยู่ภายในรู
(0,0)
สมมติที่มุมซ้ายล่างของหอคอยมีพิกัด ช่วงเวลารอบฐานด้านซ้ายของหอที่(0,0)
71 หน่วยตามเข็มนาฬิกาดังนั้นหอจะไม่ตก ช่วงเวลารอบฐานด้านขวาของหอคอยที่ (0,3) คือ 8 หน่วยตามเข็มนาฬิกาดังนั้นหอคอยจะตกลง
ถ้าลมพัดไปทางซ้ายช่วงเวลาตามลำดับจะเป็น 2 หน่วยตามเข็มนาฬิกาและ 61 หน่วยทวนเข็มนาฬิกาในจุดเดียวกันดังนั้นหอคอยจะสมดุล
อินพุต
- โปรแกรมหรือฟังก์ชั่นของคุณจะต้องใช้สองอินพุตจำนวนทศนิยมและสตริงที่คั่นด้วยขึ้นบรรทัดใหม่
- จำนวนทศนิยมจะมากกว่าศูนย์และแสดงถึงแรงที่กระทำโดยลมในแต่ละบล็อกที่ถูกเปิดเผยดังตัวอย่าง
- สตริงจะเป็นตัวแทนของหอคอยจากบนลงล่างและอาจมีช่องว่าง
#|o~
อักขระและขึ้นบรรทัดใหม่ คุณอาจเลือกที่จะขึ้นบรรทัดใหม่และ / หรือวางหอคอยที่มีช่องว่างต่อท้ายเพื่อสร้างสี่เหลี่ยมผืนผ้า - หอคอยจะมีอย่างน้อยหนึ่ง
#
แถวที่ด้านล่าง - คุณสามารถป้อนหมายเลขและสตริงในลำดับใดก็ได้
- หากขนาดของแรงลมไม่เป็นศูนย์จะมีธงอยู่ที่ใดที่หนึ่งในอินพุตไม่ว่าจะบนพื้นดินหรือเชื่อมต่อกับหอคอย ธงจะมีรูปแบบที่แน่นอนแสดงไว้ด้านบน
#
บล็อกจะฟอร์มรูปร่างเชื่อมต่อที่อาจมีหลุม กล่าวอีกนัยหนึ่งบล็อกทั้งหมดจะอยู่ติดกับบล็อกอื่นเว้นแต่จะมีเพียงหนึ่งบล็อก
เอาท์พุต
- หนึ่งในตัวละคร
B
,L
หรือR
ขึ้นอยู่กับว่าหอคอยจะสมดุลตกไปทางซ้าย (ทวนเข็มนาฬิกา) หรือตกไปทางขวา (ตามเข็มนาฬิกา) - ผลลัพธ์อาจมีการขึ้นบรรทัดใหม่ที่ต่อท้าย
นี่คือรหัสกอล์ฟ ; ใช้กฎมาตรฐานและช่องโหว่
B
กรณีทดสอบ:
Wind: 1
~~o
~~|
# #
###
###
# #
#####
###
###
Wind: 0
##
# ##
###
Wind: 1.7
o~~
|~~
#
##
Wind: 0.768
o~~
|~~
# #
###
###
# #
#####
###
###
Wind: 0.1
#
#
#
#
#
# o~~
# |~~
Wind: 0
#
Wind: 0
############
Wind: 144
o~~
############ |~~
Wind: 0
#######
##
#
##
Wind: 0
############
############
############
############
############
############
############
Wind: 41
############
############
############
############
############
############ ~~o
############ ~~|
L
กรณีทดสอบ:
Wind: 0
#####
#
Wind: 42
############
############
############
############
############
############ ~~o
############ ~~|
Wind: 4
########
###
~~o# ##
~~|# #
Wind: 3
########
###
o~~# ##
|~~ #
R
กรณีทดสอบ:
Wind: 1
o~~
|~~
# #
###
###
# #
#####
###
###
Wind: 2
o~~
|~~
#
Wind: 0.001
############
############
############
############
############
############ o~~
############ |~~
Wind: 145
o~~
############ |~~
Wind: 1
#
#
#
#
#
# o~~
# |~~
Wind: 0.26
#######
##
# o~~
## |~~
โซลูชันอ้างอิง (JavaScript)
function balanced(tower, wind) {
var rows = tower.split('\n').reverse(); // Reverse so row index matches height of row.
var height = rows.length;
var leftEdge = rows[0].indexOf('#'); // Find bottom left corner of tower.
var rightEdge = rows[0].lastIndexOf('#') + 1; // Find bottom right corner of tower.
var leftMoment = 0, rightMoment = 0; // Moments around the bottoms corners of tower.
wind *= tower.indexOf('~o')>-1 ? -1 : 1; // Find direction of the wind.
// Sum the moments for each block in the tower.
for (var i = height - 1; i >= 0; i--) {
rows[i].split('').map(function(ch, index, arr) {
if (ch=='#') {
// If there's not a block toward the windward side of the current one.
if ((wind < 0 && arr[index-1] != '#') || (wind > 0 && arr[index+1]!='#')) {
// Add moments from wind.
leftMoment += (i+0.5)*-wind;
rightMoment += (i+0.5)*-wind;
}
leftMoment += leftEdge - (index + 0.5);
rightMoment += rightEdge - (index + 0.5);
}
}, 0);
}
if (leftMoment > 0) return 'L';
else if (rightMoment < 0) return 'R';
else return 'B';
}
ลีดเดอร์บอร์ด
นี่คือตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา
เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:
# Language Name, N bytes
ที่N
มีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น
# Ruby, <s>104</s> <s>101</s> 96 bytes
หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:
# Perl, 43 + 2 (-p flag) = 45 bytes
นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes