เขียนโปรแกรมรูปสี่เหลี่ยมผืนผ้าที่แสดงจำนวนครั้งที่ถูกหมุน


63

ชื่อกล่าวมันทั้งหมด เป้าหมายของคุณคือการเขียนโปรแกรมที่มีตัวอักษรสี่เหลี่ยมมุมฉากที่สามารถหมุนได้และเรียกใช้ซ้ำเพื่อส่งออกจำนวน 90 °การหมุนทวนเข็มนาฬิกา (CCW) ที่ทำไปแล้ว

ตัวอย่างเช่นถ้าโปรแกรม 3 × 2

abc
def

แก้ไขปัญหามันจะเริ่มต้น 0 และหมุนวนต่อเนื่อง 90 ° CCW

cf    fed    da
be    cba    eb
ad           fc

จะส่งออก 1, 2 และ 3 ตามลำดับ

การใช้ความคิดเห็นทำให้เรื่องนี้เป็นเรื่องเล็กน้อยเป็นภาษาส่วนใหญ่ ตัวอย่างเช่นใน Ruby สามารถทำได้ในรูปสี่เหลี่ยมผืนผ้า 7 × 7:

###p###
### ###
###1###
p 0#2 p
###3###
### ###
###p###

ความท้าทายคือการทำเช่นนี้โดยไม่มีความคิดเห็นใด ๆ

เกณฑ์การให้คะแนน

คะแนนของคุณคือ w * h พื้นที่สี่เหลี่ยมของคุณ ไม่รวมบรรทัดใหม่ กล่าวอีกนัยหนึ่งคือรหัส - กอล์ฟบรรทัดใหม่จะไม่ถูกนับ

คะแนนสำหรับตัวอย่างทับทิมคือ 49 (แน่นอนว่ามันไม่ถูกต้องเนื่องจากมีความคิดเห็น)

หมายเหตุ

  • รหัสของคุณจะต้องเป็นรูปสี่เหลี่ยมผืนผ้าโดยไม่มีตัวอักษรท้ายบรรทัด
  • หากคุณต้องการคุณสามารถส่งออกค่า "mod 90 °" ทางกฎหมายอื่น ๆ แทน 0 1 2 3 ดังนั้น 8 จึงดีกว่า 0 และ -1 ดีกว่า 3, ฯลฯ
  • ผลลัพธ์อาจไปที่คอนโซลหรือเป็นไฟล์
  • ช่องโหว่มาตรฐานใช้

ฉันหวังว่านี่คำถามแรกของฉันบางคนสนใจจริงๆ สนุก!


1
หากต้องการเฉพาะเจาะจงมากขึ้นเกี่ยวกับความคิดเห็นคืออะไรความคิดเห็นใด ๆ ที่ไม่มีการประเมินรหัสหรือไม่ รหัสไม่ถูกวิเคราะห์?
isaacg

ฉันหมายถึงว่า "อักขระความคิดเห็น" แบบดั้งเดิมของภาษาของคุณไม่ควรปรากฏใน 4 เวอร์ชันที่หมุนได้ ดังนั้นสำหรับ C ++ เครื่องหมายสแลชสองอันที่อยู่ติดกันไม่ควรปรากฏแม้ว่าอาจใช้เพียงลำพัง เช่นเดียวกันกับ / * ฉันหวังว่ามันชัดเจน
งานอดิเรกของ Calvin

แล้วภาษาที่ไม่มีตัวแสดงความคิดเห็นล่ะ?
isaacg

ดังนั้นรหัสเช่นecho 0;exit;eในทุบตีได้รับอนุญาต?
jimmy23013

หากไม่มีวิธีการแสดงความคิดเห็นคุณไม่จำเป็นต้องกังวล @ user23013 ทุบตีนั้นดี
งานอดิเรกของ Calvin

คำตอบ:


43

APL (1x3 = 3)

5!3

วิธีการแก้ปัญหานี้ใช้กฎพิเศษที่เอาท์พุทใด ๆ ที่ถูกต้อง mod 4 ทำงาน

ใน APL, x!yคือจำนวนของวิธีการที่จะเลือกxองค์ประกอบจากyที่รู้จักกันทั่วไปว่าเป็นหรือbinom(y,x) choose(y,x)ตรวจสอบว่าการหมุนแต่ละครั้งให้คำตอบที่ถูกต้อง

0 การหมุน

5!3

ไม่มีวิธีให้เลือก 5 องค์ประกอบจาก 3 ดังนั้นเราจึงได้ 0 ซึ่งถูกพิมพ์โดยอัตโนมัติ

การหมุน 1 CCW

3
!
5

APL ประเมินแต่ละบรรทัดอย่างมีความสุขรับตัวเลข3ตัวดำเนินการ!จากนั้น5พิมพ์ตัวเลขเฉพาะส่วนสุดท้ายของ ( 5) ซึ่งคือ 1 mod 4

การหมุน 2 CCW

3!5

นี่คือbinom(5,3)ซึ่งก็คือ(5*4*3*2*1)/(3*2*1)/(2*1) = 10ซึ่งเป็น 2 mod 4

3 การหมุนทวนเข็มนาฬิกา

5
!
3

เหมือนก่อนหน้านี้เท่านั้นที่ประเมินค่าล่าสุดของ3คือเครื่องพิมพ์

ฉันไม่รู้จัก APL จริง ๆ ดังนั้นโปรดบอกฉันหากฉันมีคำอธิบายที่ผิด ฉันพบโดยการทดลองและข้อผิดพลาดเป็นภาษาแรกในเว็บไซต์นี้ที่:

  1. พิมพ์ผลลัพธ์ของนิพจน์โดยอัตโนมัติ
  2. กำหนดนิพจน์หลายบรรทัดให้แสดงเฉพาะบรรทัดสุดท้ายเท่านั้น
  3. ไม่มีปัญหากับตัวดำเนินการที่ยืนอยู่คนเดียวบนบรรทัด
  4. ใช้ตัวดำเนินการมัด
  5. มีโอเปอเรเตอร์เลขคณิตแบบอักขระเดียวที่ไม่สมมาตร (aRb! = bRa) และมีความยืดหยุ่นเพียงพอที่จะส่งกลับตัวเลขที่หลากหลาย

สำหรับ (5) ผมไปลงรายการ APL ฟังก์ชั่น dyadic การดำเนินการตัวเลือกแรกของฉันคือการหารจำนวนเต็ม/ของ C และ Python 2 แต่การหาร APL ÷ให้การลอย การยกกำลังดึงดูด แต่ล้มเหลวเพราะaและa^bมีความเท่าเทียมกันเท่ากัน แต่ได้มาจากการหมุนตามลำดับ (ยกเว้นb=0แต่หลังจากนั้นb^a=0) ตัวดำเนินการบูลีนเช่น<give 0และ1แยกออกจากกัน 180 องศาซึ่งใช้งานไม่ได้ ในที่สุดฉันพบผู้ดำเนินการทวินาม!และลองตัวเลขจนกว่าฉันจะได้งานนั้น

ขอบคุณ Quincunx สำหรับความมั่นใจของเขาว่ามีวิธีแก้ปัญหาน้อยกว่า 2x2


6
ผู้ชายมันเป็นเรื่องดีที่จะเห็นคำตอบที่ใช้ภาษาที่ไม่ใช่ความลับและชนะ
Stuart P. Bentley

ฉันยอมรับคำตอบนี้เนื่องจากคำตอบสั้นที่สุดตามกฎของฉัน แต่ฉันต้องการให้คำตอบของVentero ( codegolf.stackexchange.com/a/33162/26997 ) เป็นคำพูดที่มีเกียรติมาก มันเป็นไปตามแก่นแท้ที่แท้จริงของปัญหา
งานอดิเรกของ Calvin

นอกจากนี้ยังใช้งานได้ใน J ในรูปแบบที่แน่นอนที่คุณให้
Sepıʇǝɥʇuʎs

ที่จริงแล้ว APL ไม่พิมพ์ทั้ง 3 และ 5 ในการหมุน 90 °หรือไม่?
FUZxxl

@FUZxxl ฉันคิดว่ามันใช้งานได้ใน ngn / apl เท่านั้น
Adám

40

ทับทิม, 7 × 9 (63)

 30;p  
0||p=p 
0|0;p;p
;p;p|p;
p=p ||0
;p   p;
2||p =p
 00;1  
     p 

ยาวกว่าโซลูชันอื่นเล็กน้อย แต่อย่างน้อยโซลูชันนี้ไม่ได้ขึ้นอยู่กับการพิมพ์โดยนัยหรือการละเมิดกฎ สำหรับการหมุนทั้งสี่รหัสเต็มจะถูกแยกวิเคราะห์และนอกเหนือจากการลัดวงจรบางส่วนทั้งหมดจะถูกดำเนินการ น่าแปลกที่รหัสนี้ไม่มีความสมมาตรอย่างแน่นอน

วิธีการแก้ปัญหานี้ขึ้นอยู่กับความจริงที่ว่ามันยังคงเป็นไปได้ที่จะเรียกpฟังก์ชั่น (ซึ่งใช้ในการพิมพ์ตัวเลข) แม้ว่าตัวแปรที่มีชื่อเดียวกันได้ถูกกำหนดไว้แล้ว ตัวอย่างเช่นบางสิ่งบางอย่างเช่นp pเรียกฟังก์ชั่นที่pมีตัวแปรpเป็นอาร์กิวเมนต์ (เช่นการพิมพ์ค่าของp)

คำอธิบายสำหรับนิพจน์ทั่วไปที่ใช้ในรหัส:

  • p: ตามที่กล่าวไว้ข้างต้นนี่เป็นการเรียกใช้ฟังก์ชันหรือตัวแปร เมื่อตัวแปรไม่ได้ถูกกำหนดนี้เรียกฟังก์ชั่นโดยไม่ขัดแย้งซึ่งไม่ทำอะไรเลยและผลตอบแทนpnil
  • p p: pพิมพ์ตัวแปร
  • p|x: เมื่อpเป็นฟังก์ชั่นนี้เป็นเหมือนกันnil|xซึ่งผลตอบแทนจริง / xเท็จขึ้นอยู่กับมูลค่าของ ถ้าpเป็นจำนวนเต็มก็คือ bitwise หรือ ทั้งสองวิธีข้อความนี้ไม่มีผลข้างเคียง
  • p=p||x: ได้อย่างมีประสิทธิภาพเช่นเดียวกับp||=x(การกำหนดเงื่อนไข) ด้วยความได้เปรียบของการถูกต้องตามหลักไวยากรณ์และไม่มีการ op เมื่อกลับรายการ

รุ่นสมมาตร (9 × 10 = 90)

    p    

  0 * 0  
  00100  
  0||2* p
p *0||0  
  00300  
  0 * 0  

    p    

นี่เป็นวิธีแก้ปัญหาแบบสมมาตรที่สั้นที่สุด (C 2เมื่อไม่สนใจตัวเลขที่จะพิมพ์) ฉันสามารถคิดขึ้นมาได้

สคริปต์ทดสอบ

ต่อไปนี้เป็นสคริปต์ทดสอบเพื่อตรวจสอบรหัสข้างต้น (เพิ่ม#ที่ส่วนท้ายบรรทัดเพื่อให้ช่องว่างไม่ได้ถูกปล้นและถูกลบออกก่อนดำเนินการ)

rotate=->s{s.split($/).map{|i|i.chars.reverse}.transpose.map(&:join).join($/)}

s=<<EOD.gsub(?#,"")
 30;p  #
0||p=p #
0|0;p;p#
;p;p|p;#
p=p ||0#
;p   p;#
2||p =p#
 00;1  #
     p #
EOD


puts ">>> 0°"
eval s
puts ">>> 90°"
eval rotate[s]
puts ">>> 180°"
eval rotate[rotate[s]]
puts ">>> 270°"
eval rotate[rotate[rotate[s]]]

10
มันอาจจะไม่สั้นที่สุด แต่นี่เป็นความหมายที่ชัดเจนที่ฉันกำลังมองหา: D
งานอดิเรกของ Calvin

1
@ Calvin'sHobbies สิ่งนี้ตรงตามข้อกำหนด "รหัสของคุณจะต้องเป็นรูปสี่เหลี่ยมผืนผ้าโดยไม่มีตัวอักษรที่ท้ายบรรทัด" หรือไม่?
Joshua Taylor

@JoshuaTaylor มันเป็นรูปสี่เหลี่ยมผืนผ้าบางบรรทัดมีเพียงช่องว่าง (ซึ่งเท่าที่ฉันกังวลเป็นตัวละคร) หากนั่นไม่เป็นไปตามข้อ จำกัด ไม่ว่าด้วยเหตุผลใดฉันก็สามารถ
ขีด

@Ventero ฉันหวังว่ากฎหมายนี้อย่างแน่นอน ฉันแค่พยายามที่จะเข้าใจสิ่งที่มีความหมายในคำถาม
Joshua Taylor

1
@Ventero Padding ที่มีช่องว่าง (หรืออะไรก็ได้นอกจากความคิดเห็นและการขึ้นบรรทัดใหม่) นั้นใช้ได้
งานอดิเรกของ Calvin

33

GolfScript, 4 (2x2)

43
12

งานพิมพ์4312ที่0(mod 4) การหมุนจะพิมพ์3241(1 mod 4), 2134(2 mod 4) และ1423(3 mod 4)

แจ้งโดย:

หากคุณต้องการคุณสามารถส่งออกค่า "mod 90 °" ทางกฎหมายอื่น ๆ แทน 0 1 2 3 ดังนั้น 8 จึงดีกว่า 0 และ -1 ดีกว่า 3, ฯลฯ

มีตัวเลขจำนวนมากที่ใช้งานได้จริง ฉันพบสิ่งเหล่านี้ด้วยโปรแกรม Python นี้:

def f(a,b,c,d):
    return int("%i%i%i%i"%(a,b,c,d))
for a in range(10):
    for b in range(10):
        for c in range(10):
            for d in range(10):
                candidate = f(a,b,c,d) % 4 == 0
                candidate &= f(b,d,a,c) % 4 == 1
                candidate &= f(d,c,b,a) % 4 == 2
                candidate &= f(c,a,d,b) % 4 == 3
                if candidate:
                    print("%i, %i, %i, %i"%(a,b,c,d))

แม้ว่าโปรแกรมจะแสดงผล0s (ซึ่งอาจไม่สามารถใช้งานได้) แต่โซลูชันที่ถูกต้องจะอยู่ในรูปแบบ

ab
cd

ที่ไหนa∈{4,8}, b∈{3,7}, ,c∈{1,5,9} d∈{2,6}IE (a,b,c,d)∈{4,8}×{3,7}×{1,5,9}×{2,6}ซึ่งเป็น 24 โซลูชั่น


7
ฉลาดมาก. ฉันคิดอย่างสุจริตว่ากฎพิเศษนั้นไม่น่ากลัว
งานอดิเรกของ Calvin

4
@Everybody โปรดทราบว่านี่ไม่ใช่โปรแกรมที่เล็กที่สุดเท่าที่จะเป็นไปได้ เป็นไปได้ 2x1 และเป็นไปได้ที่เล็กที่สุด ดังนั้นไปทำงาน!
Justin

1
@isaacgYour score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.
undergroundmonorail

2
@Quincunx แล้วโพสต์มัน!
tomsmeding

1
สมมติว่าภาษาที่นี่เพียงแค่พิมพ์หมายเลขสุดท้ายจะประเมินผมไม่เชื่อว่า 1 * n (หนึ่งตัวเลข) nวิธีการแก้ปัญหาที่มีอยู่สำหรับการใด ๆ นี่เป็นเพราะความเท่าเทียมกันของจำนวนเต็มเท่ากับความเท่าเทียมกันของหลักขวาสุด แต่การหมุน 90 องศาออกจากกันจะต้องให้ผลต่างกัน ดังนั้น2*2ขั้นต่ำสำหรับวิธีนี้
xnor

30

Python - 23 x 23 = 529

ตกลงคำถามนี้มีผู้ชนะอยู่แล้ว แต่ยังไม่มีวิธีการแก้ปัญหาของ Python ดังนั้นฉันจึงคิดเกี่ยวกับมัน - หนักหนา! - และพบวิธีที่จะทำให้printคำสั่งขนาดใหญ่ทำงานในทิศทางใดก็ได้โดยไม่เกิดข้อผิดพลาดเมื่อแยกวิเคราะห์จากทิศทางอื่น

การพัฒนาเป็นบรรทัดต่อไปนี้:

'"\'';forward_code;"';backward_code;""\'"''

ในขณะที่forward_codeดำเนินการbackward_codeนั้นเป็นส่วนหนึ่งของสตริงและจึงไม่พิมพ์ นี่คือวิธีอื่น ๆ เมื่ออ่านย้อนหลัง

ดังนั้นเมื่อรวมกับทิศทางอีกสองทิศทางและปรับแต่งเพื่อให้ได้คำพูดที่ตรงกันทั้งหมดอย่างถูกต้องฉันก็จบลงด้วยวิธีแก้ปัญหาต่อไปนี้:

''"''""''"''"''"'"''""'
"  ""                 "
"  \\                 "
'"\'';print 1;"'""\'"''
'"\''"';3 tnirp;""\'"''
"  ;""                "
"  p'                 "
'  r;                 '
'  i2                 '
"  n                  "
"  tt                 "
'   n                 '
'  4i                 '
"  ;r     .-=<>=-.    "
' \"p    /__----__\   '
"  ';'  |/ (')(') \|  "
"  ""    \   __   /   "
'  ""    .`--__--`.   '
"  \\   /    :|    \  "
'  ''  (_)   :|   (_) '
'  ""    |___:|____|  '
"  ''    |_________|  "
''"''""''"''"''"'"''""'

แก้ไข:ฉันพบวิธีจัดการกับช่องว่างทั้งหมดนั้น ;)


มีวิธีใดบ้างในการใส่p=printไฟล์เนื่องจากคุณมีช่องว่างมากในขณะนี้? (Python 3 แน่นอน)
isaacg

@isaacg: ฉันไม่คิดอย่างนั้น คำจำกัดความp=printยังมีความยาว และที่สำคัญคุณไม่สามารถใช้ซ้ำได้pหลังจากหมุนรหัสแล้ว!
Falko

ฉันเดาว่าคุณพูดถูก มันเป็นเรื่องที่เลวร้ายสองอย่าง
isaacg

12
เสนอชื่อเข้าชิง: ใช้ประโยชน์จากช่องว่างที่ดีที่สุด
โม่

24

พื้นฐาน, 64

จะไม่ชนะ แต่ที่นี่มันอยู่แล้ว (ทดสอบในChipmunk Basic )

?0:END:?
:::::::1
D:::::::
N::::::E
E::::::N
:::::::D
3:::::::
?:DNE:2?

หมายเหตุ: ?ย่อPRINTในภาษาต่าง ๆ ของภาษาเบสิก แม้ว่าจะมีข้อผิดพลาดทางไวยากรณ์จำนวนมากในโค้ดENDคำสั่งในบรรทัดแรกจะป้องกันไม่ให้ล่ามถูกมองเห็น


1
ที่จริงแล้วคะแนนของคุณคือ 64 และ 16 ตามลำดับ ขึ้นบรรทัดใหม่จะไม่นับ นอกจากนี้ทำไมไม่แยกคำตอบ?
Justin

พลาดนิดหน่อย ฉันจะแบ่งคำตอบหากพวกเขาไม่ได้ร่วมที่สุดท้าย ดูเหมือนจะไม่มีประเด็นมากนัก :-)
ossifrage คลื่นไส้

คุณไม่ใช่คนสุดท้าย :-)
จัสติน

ฉันจะให้คะแนนโบนัสให้คุณเพื่อรับจำนวนตัวละครที่ดี +1 ที่เกิดขึ้นจริงสำหรับการใช้ความคิดสร้างสรรค์END:)
CompuChip

21

Pyth , 9 ตัวอักษร (3x3)

0 1

3 2

ใน pyth ทุกอย่างจะถูกพิมพ์ตามค่าเริ่มต้นเว้นแต่ว่าเว้นวรรคนำหน้าด้วยช่องว่าง เส้นหลังจากบรรทัดแรกใช้สำหรับการป้อนข้อมูลของผู้ใช้และไม่ได้รับการประเมินในโปรแกรมนี้

อีกวิธีในการรับ 9 อักขระ:

"0"
3 1
"2"

Pyth 1.0.5 , 4 ตัวอักษร

ในขณะที่การเปลี่ยนแปลงล่าสุดของ pyth ทำให้ตัวเลข 2 หลักยากที่จะสร้าง (การเปลี่ยนแปลงที่ฉันกำลังพิจารณาการคืนค่า), รุ่นเก่าของ Pyth มีการสร้างตัวเลขสองหลักง่ายซึ่งรวมกับการพิมพ์โดยนัยและความจริงที่ว่าทุกบรรทัดยกเว้นบรรทัดแรก จะถูกละเว้นให้แก้ปัญหาต่อไปนี้:

32
41

พิมพ์ 32,21,14,43


มันสนุกดี +1
seequ

Shucks ฉันหวังว่ามันไม่ง่ายเลย คุณหายไป 3 ตัวอักษรในบรรทัดกลางของคุณ แต่ฉันเดาว่าเป็นเพราะการจัดรูปแบบอัตโนมัติที่นี่
งานอดิเรกของ Calvin

@ งานอดิเรกของ Calvin ขออภัยฉันเข้าใจแล้ว มัน chomped ช่องว่างท้ายของฉัน
isaacg

@Quincunx โอ้ฉันคิดถึงส่วนนั้นของการให้คะแนน ขอบคุณสำหรับการแก้ไข
isaacg

18

Befunge, 16

0.@1
@@@.
.@@@
3@.2

คำอธิบาย:ตัวเลขจาก0เพื่อ9ผลักดันตัวเลขที่เกี่ยวข้องลงบนสแต็ก.ปรากฏค่าจากสแต็กและพิมพ์เป็นจำนวนเต็มและ@จบโปรแกรม

(ทดสอบที่นี่ )


ผลลัพธ์นี้ไม่ใช่จำนวนครั้งที่หมุนทวนเข็มนาฬิกาหรือไม่
seequ

@TheRare ใช่ มันทำ นั่นคือสิ่งที่ควรทำ
Justin

1
ฉันดูเหมือนจะตาบอดอย่างเต็มที่ มี +1 เพราะสิ่งนั้น
Seequ

Befunge !!! ยังเป็นภาษาที่ฉันโปรดปรานตลอดกาลตลอดกาล!
steffen

16

Piet, 49

โปรแกรม Piet

ฉันทำเพียงจุดเพื่อใช้สีเหลืองและสีแดงและเพื่อลองและทำให้สมมาตรประมาณ เมื่อหมุนมันจะพิมพ์ 0, 1, 2 หรือ 3 การออกจากโปรแกรมใน Piet นั้นยากและใช้พื้นที่ประมาณครึ่งหนึ่งของภาพ


1
ดูเหมือนว่าเครื่องมือที่เหมาะสมสำหรับงาน
Robert Fraser

O_o ฉันร้องไห้ค้นหาข้อมูลเกี่ยวกับภาษาการเขียนโปรแกรมนี้! เมื่อกี้ สวย. ในหลาย ๆ ทาง! ขอขอบคุณ!
steffen

15

GNU dc , 6 (3x2)

ฉันคิดว่านี่เป็นคำตอบที่สั้นที่สุดที่ไม่ต้องการการผ่อนคลายกฎ "mod 90 °":

3z1
0p2

เอาท์พุท0, 1, 2หรือ3สำหรับแต่ละหมุน

สำหรับและ0, การหมุนเพียงแค่ปรากฏและพิมพ์จำนวนตัวอักษรสุดท้ายที่ถูกผลักไปยังสแต็ก สำหรับการหมุนแรงผลักสแต็กความลึกปัจจุบัน (1) ไปยังสแต็กจากนั้นป๊อปและพิมพ์23p1zp


1
ดังนั้น 311 / 0p2 ก็จะใช้ได้เช่นกัน?
Neil

@ Neil ใช่ดี ไม่ส่งผลต่อคะแนนสนามกอล์ฟ :) :)
Digital Trauma

มันส่งผลกระทบต่อคะแนนกอล์ฟ แต่เป็นลบเนื่องจากไม่ขึ้นบรรทัดใหม่ แต่มีเครื่องหมายทับ
M.Herzkamp

@ M.Herzkamp สมมติฐานของฉันคือการที่นีลมีความหมาย311\n0p2ที่\nเป็นตัวอักษรขึ้นบรรทัดใหม่ มิฉะนั้นจะไม่มีความหมายภายในบริบทของ dc
บาดเจ็บทางดิจิทัล

10

GolfScript, 9 (3x3)

0}1
} }
3}2

เรียงลำดับของการละเมิดกฎ }เกิดขึ้นจะสิ้นสุดของโปรแกรมถ้าไม่มีการจับคู่{และเนื้อหาของสแต็คจะมีการพิมพ์ในตอนท้ายโปรแกรม


อย่าลืมที่จะนับบรรทัดใหม่เป็นตัวละคร
isaacg

2
@isaacgYour score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.
undergroundmonorail

ฉันไม่รู้ว่า}จะไม่สมดุล เคล็ดลับดี
Peter Taylor

9

จาวาสคริปต์, 4

03
12

เมื่อคุณรันโปรแกรมนี้ (หรือการหมุนของโปรแกรมนี้) ในคอนโซล javaScript เฉพาะบรรทัดสุดท้ายเท่านั้นที่จะได้รับการประเมินและถูกสะท้อนในคอนโซล

ดังนั้น:

12 modulo 4 == 0
01 modulo 4 == 1
30 modulo 4 == 2
23 modulo 4 == 3

นี่คือโปรแกรม 2x2 ที่คล้ายกันทั้งหมดที่ใช้งานได้:

03
12

03
16

03
52

03
56

03
92

03
96

07
12

07
16

07
52

07
56

07
92

07
96

43
12

43
16

43
52

43
56

43
92

43
96

47
12

47
16

47
52

47
56

47
92

47
96

83
12

83
16

83
52

83
56

83
92

83
96

87
12

87
16

87
52

87
56

87
92

87
96

ในแง่อื่น ๆ

ab
cd

โดยที่ a อยู่ใน [0,4,8], b อยู่ใน [3,7], c อยู่ใน [1,5,9] และ d อยู่ใน [2,6]


8

CJam / GolfScript - 3 * 3

2;3
;7;
1;0

เครื่องหมายอัฒภาคปรากฏขึ้นหมายเลขก่อนหน้าดังนั้นจึงพิมพ์เฉพาะมุมขวาล่าง


6

Aheui 8

바몽희뷸
뷷희몽반

เนื่องจาก Aheui ไม่มีตัวอักษรที่กด 1 ลงบนสแต็กฉันจึงตัดสินใจพิมพ์ 0, 5, 2 และ 3

คำอธิบาย: 바และ반กด 0 และ 2 ตามลำดับลงบนสแต็กและเลื่อนเคอร์เซอร์ไปทางขวาด้วยอักขระหนึ่งตัว 뷸และ뷷กด 5 และ 3 ตามลำดับลงบนสแต็กและเลื่อนเคอร์เซอร์ลงด้วยอักขระสองตัว 몽ปรากฏและพิมพ์ตัวเลขในสแต็กและเลื่อนเคอร์เซอร์ขึ้นด้วยอักขระหนึ่งตัว 희ยุติโปรแกรม


5

JavaScript

(ป้อนในคอนโซลเบราว์เซอร์เปลือกหรือ REPL อื่นดังนั้นผลลัพธ์จะถูกพิมพ์)

1+2
-3-
4+5

ควรใช้ภาษาอื่นที่มีการแสดงออกการขึ้นบรรทัดใหม่ที่ไม่สำคัญและการพิมพ์ผลลัพธ์โดยอัตโนมัติ


2
ฉันชอบไอเดียที่อยู่เบื้องหลัง แต่ไม่พิมพ์ 1 (mod 4) เสมอไปหรือไม่
zennehoy

2
'2,3\n,0,\n1,0'รูปแบบที่เรียบง่ายอาจจะมี
คม

มันจะให้ผลลัพธ์ที่แตกต่างเมื่อหมุน @Cory นั่นคือฉลาด! ฉันคุ้นเคยกับการทำงานในภาษาโดยที่ไม่มีเครื่องหมายจุลภาค
lrn

@lrn ใช่มันให้ผลลัพธ์ต่างกัน แต่นั่นไม่ใช่ข้อกำหนด โปรแกรมจะต้องพิมพ์ 0 (mod 4) เมื่อไม่หมุนและ 1, 2 หรือ 3 (mod 4) เมื่อหมุนจำนวนครั้งตามลำดับ ...
zennehoy

หมายเหตุที่สองของโปสเตอร์ต้นฉบับอนุญาตให้มีค่าใด ๆ สำหรับเวอร์ชันที่หมุนได้ตราบใดที่มันแตกต่างกัน
lnn

5

Matlab / Octave - 144 100

เล่นกอล์ฟ: 10 x 10 = 100

....d.....
....i.....
....s.....
... p2 ...
disp  1...
...3  psid
... 4p ...
.....s....
.....i....
.....d....

ทางเลือกอื่น: 15 x 15 = 225

.......d.......
.......i.......
.......s.......
...    p    ...
...         ...
...    4    ...
...    .    ...
disp 1...3 psid
...    .    ...
...    2    ...
...         ...
...    p    ...
.......s.......
.......i.......
.......d.......

โซลูชันแรกสามารถลดขนาดเป็น 8x8 ได้หรือไม่ถ้าตัวดำเนินการ vrtical และแนวนอน 'ส่ง' ตัวอักษรที่ใช้ร่วมกัน 'p' ...d.... ...i.... ...s2... disp 1.. ..3 psid ...4s... ....i... ....d...
AMK

@AMK: ..3 psidแต่นี้ก่อให้เกิดความผิดพลาดทางไวยากรณ์ในสาย คุณต้องมีจุดอย่างน้อยสามจุดที่จุดเริ่มต้นของแต่ละบรรทัดเพื่อระบุตัวแบ่งบรรทัดและละเว้นอักขระที่เหลือ
Falko

5

Perl 5x7 (35)

1+p+t+1
-print+
1+i+i+1
+tnirp+
1+t+p+1

สายไปงานเลี้ยงเล็กน้อย โดดเดี่ยว-กำหนดจำนวนที่จะพิมพ์


4

จาวาสคริปต์, 3

2
1
4

มันใช้งานได้ ... ในฐาน 7

เวอร์ชันฐาน 9:

2
7
0

คำอธิบาย

เมื่อทำงานแบบโต้ตอบเช่นจากคอนโซลการดีบักค่าของคำสั่ง / การแสดงออกครั้งสุดท้ายจะถูกส่งออก

4 7 = 4 100 (mod 4 )
412 7 = 205 101 (mod 4 )
2 7 = 2 102 (mod 4 )
214 7 = 109 103(mod4 )

การแก้ปัญหาที่คล้ายกันสามารถพบได้สำหรับฐานแปลก ๆ


สิ่งนี้ถูกตั้งค่าสถานะ แต่ฉันไม่เข้าใจคำถามหรือคำตอบดังนั้นฉันต้องข้ามมันไป จะดีถ้า downvoters ออกความคิดเห็นอธิบาย downvotes ของพวกเขา
Rainbolt

@ เร่งฉันสงสัยว่าพวกเขาไม่เข้าใจฐาน 7 บิต
primo

3

Befunge, 12 (6x2)

ฉันได้รับการจัดการขึ้นมาพร้อมกับการปรับปรุงเล็กน้อยในคำตอบ Befunge ที่มีอยู่โดยการใช้ประโยชน์จากลักษณะสองมิติของ Befunge ให้มากที่สุดและการให้โค้ดเส้นทางทำงานในแนวตั้งในแนวนอนสองแนว

0.@.1v
v3.@.2

ลองมันออนไลน์: เริ่มต้น 0 , หมุน 1 , หมุน 2 , หมุน 3



2

โอ๊ะ! / Aargh! (4 * 4 = 16)

สิ่งที่เกี่ยวกับการใช้เครื่องมือที่เหมาะสมสำหรับงาน? ไม่มีความคิดเห็น (ในภาษาทั่วไป)

โปรแกรมทั้งหมดในตระกูล (สร้างใน J: ((|.@:|:) ^: (i. 4)) >'hpqh';'q01p';'p32q';'hqph'หรือ((|.@:|:) ^: (i. 4)) 4 4 $ 'hpqhq01pp32qhqph')

hpqh
q01p
p32q
hqph

หมุนครั้งเดียว:

hpqh
q12p
p03q
hqph

หมุนสองครั้ง:

hpqh
q23p
p10q
hqph

หมุนสามครั้ง:

hpqh
q30p
p21q
hqph

เพื่ออธิบายสิ่งนี้มันเป็นการดีที่สุดที่จะดูรุ่น "เยื้อง" (ที่ยังใช้งานได้ในทุกการหมุน):

hhpq h
  0  h
q   1p
p3   q
h  2  
h qphh

รุ่นนี้แสดงให้เห็นว่าโปรแกรมประกอบด้วย 4 ส่วนแยกส่วนหนึ่งสำหรับแต่ละการหมุนแต่ละ

  • h - ตั้งค่าการไหลของการควบคุมทางซ้าย

  • p - พิมพ์รายการใน data / code raster ด้านล่าง

  • q - ออกจากโปรแกรม


2

Floater - 9 × 5 = 45

ป้อนคำอธิบายรูปภาพที่นี่

พิมพ์ 4, 1, 2 หรือ 3 เพื่อคอนโซล

โปรดทราบว่า 'Black' เป็นคำสั่งที่ถูกต้อง (NOP) และเป็นประโยค ก็ไม่สามารถหาตำแหน่งเริ่มต้นได้ ดังนั้นตำแหน่งทั้งหมดในสี่เหลี่ยมผืนผ้าจึงถูกครอบครอง


1

องค์ประกอบ 2x3 = 6

1*
`2
3 

นี่คือการปรับปรุงเกี่ยวกับวิธีการแก้ปัญหาไร้เดียงสา 3x3 ซึ่งมีตัวเลข`ตรงกลางพร้อมตัวเลขในแต่ละด้าน 0 กรณีที่แสดงด้านบนเป็นสิ่งที่น่าสนใจที่สุดเนื่องจาก*เป็นกรณีที่ใช้ในการคูณ 3 โดยไม่มีอะไรจะได้ 0 นอกจากนั้นมันไม่ซับซ้อน

หากคุณพบว่าพื้นที่ที่น่าอึดอัดใจคุณสามารถแทนที่ด้วยสวยมากตัวละครอื่น ๆ []{}`_ไม่รวม

สำหรับการอ้างอิงนี่คืออีกสามการหมุน:

case 1
*2 
1`3

case 2
 3
2`
*1

case 3
3`1
 2*

0

ชิป (2x5) 10

b~
+a
~t
e*
 f

*เปิดใช้งานองค์ประกอบเพื่อนบ้านทั้งหมด: เหนือ, ตะวันออก, ใต้และตะวันตก (แหล่งที่มา)
~หากไม่ได้เปิดใช้งานจากตะวันตกเปิดใช้งานเพื่อนบ้านตะวันออก (ไม่ใช่ประตู) (ไม่เปิดใช้งานที่นี่)
tยุติการดำเนินการหลังจากพิมพ์ไบต์ปัจจุบัน
aกำหนดบิต0x01ของ
bชุดเอาต์พุตบิต0x02ของเอาต์พุต
eตั้งค่าบิต0x10ของเอาต์พุต
fตั้งค่าบิต0x20ของเอาต์พุต
+ถ้าเปิดใช้งานโดยเพื่อนบ้านใด ๆ เปิดใช้งานเพื่อนบ้านอื่น ๆ ทั้งหมด (สาย)

ชิพต้องการทั้ง -wแฟล็ก (เพื่ออนุญาตการดำเนินการโดยไม่มีอินพุต) หรืออินพุตบางส่วนเพื่อให้ทำงานได้

พิมพ์0, 1, 2หรือ3ใน ASCII หากต้องการรหัสชี้0x00ไป0x03ที่ให้ลบeและfจากนั้นเลื่อนช่องว่างขึ้นเพื่อเติมเต็มช่องว่าง


0

Japtap , 3 * 1 = 3 ไบต์

5zB

ลองมันออนไลน์: ตามที่เป็น , หมุนหนึ่งครั้ง , ครั้งที่สอง , สามครั้ง

เอาต์พุต 0, 5, 2, 11 ตามลำดับ

ตัวแปรBเก็บค่า 11 และNumber.z(other)เป็นการหารพื้น (ทุกคนมองหา: p) สำหรับรหัสหลายบรรทัดบรรทัดสุดท้ายจะถูกส่งผ่านไปยังเอาต์พุตซึ่งเป็นค่าคงที่ที่นี่


2 * 2 = 4 ไบต์

2J
1T

ลองมันออนไลน์: ตามที่เป็น , หมุนหนึ่งครั้ง , ครั้งที่สอง , สามครั้ง

เอาต์พุต 0, 21, 2, -1 ตามลำดับ

T ถือ 0 และ Jถือ -1

เคล็ดลับคือถ้าสองตัวอักษรหรือตัวแปรวางเคียงข้างกันเครื่องหมายจุลภาคจะถูกแทรกและเอาท์พุทเป็นเพียงคนสุดท้าย

2 * 2 โซลูชัน JSทำงานใน Japt เกินไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.