เกลียวแป้นพิมพ์แบบวงกลม


24

นี่คือคีย์บอร์ด

Q W E R T Y U I O P
 A S D F G H J K L
  Z X C V B N M

เราสามารถ "หมุนวนออก" บนคีย์บอร์ดนี้เริ่มต้นจาก G เกลียวจะเริ่มที่ G ไปที่ H จากนั้นไปที่ Y จากนั้นไปที่ T จากนั้น F จากนั้น V จากนั้น B จากนั้น N แล้ว J จากนั้น U แล้ว R จากนั้น D จากนั้น C, ... ฯลฯ ความท้าทายของคุณคือให้ตัวเลข 1 1 N ≤ 26 เอาท์พุทอักขระNตัวแรกในเกลียวนี้ (หากคุณสับสนให้อ้างอิงรูปภาพที่ท้ายโพสต์)

จับ? คะแนนของโปรแกรมของคุณเป็นสัดส่วนกับดัชนีของตัวละครที่พบในเกลียว!

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

  1. สำหรับตัวอักษรทุกตัว (ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) ในรหัสของคุณให้เพิ่มดัชนีของตัวละครนั้นในเกลียวไปยังคะแนนของคุณ (เริ่มจาก 1)
  2. สำหรับตัวละครทุกตัวที่ไม่ได้อยู่ในเกลียวให้เพิ่ม 10 คะแนนของคุณ
  3. คะแนนต่ำสุดชนะ

ตัวอย่างเช่นโปรแกรมprint("Hello, World!")มีคะแนน 300

เพื่อความสะดวกของคุณฉันได้เขียนโปรแกรมการให้คะแนนอัตโนมัติ

กฎอื่น ๆ

  • การส่งของคุณอาจเป็นโปรแกรมหรือฟังก์ชั่น
  • คุณอาจใช้Nเริ่มต้นที่ 0 หรือ 1 และสิ้นสุดที่ 25 หรือ 26 ตามลำดับ แต่ผลลัพธ์ควรเริ่มต้นด้วย "G" และลงท้ายด้วย "GHYTFVBNJURDCMKIESXLOWAZPQ"
  • คุณต้องเอาท์พุทตัวละครในเกลียวในการสั่งซื้อ
  • หากฟังก์ชั่นคุณอาจกลับรายการของตัวละครแทนสตริง
  • คุณอาจมีการขึ้นบรรทัดใหม่หนึ่งบรรทัดหลังเอาต์พุต
  • คุณสามารถใช้ตัวพิมพ์เล็กแทนตัวอักษรตัวใหญ่หรือทั้งสองอย่าง

กรณีทดสอบ

number -> output
1 -> G
2 -> GH
5 -> GHYTF
12 -> GHYTFVBNJURD
15 -> GHYTFVBNJURDCMK
24 -> GHYTFVBNJURDCMKIESXLOWAZ
26 -> GHYTFVBNJURDCMKIESXLOWAZPQ

รูปภาพ

แป้นพิมพ์ปกติ

เกลียวซ้อนทับ:

คีย์บอร์ดเกลียว


3
มีคนดู Sphere เมื่อเร็ว ๆ นี้ ...
Pureferret

@Pureferret คุณช่วยสอนฉันได้ไหม ฉันไม่แน่ใจว่าคุณหมายถึงอะไร
Conor O'Brien

@ ConorO'Brien ในSphere (ทั้งนวนิยายและภาพยนตร์) ซึ่งเป็นคนต่างด้าวสื่อสารกับมนุษย์โดยใช้สองหลักรหัสตัวเลขที่แต่ละหมายเลขตรงกับตัวอักษรบนแป้นพิมพ์ในรูปแบบที่คล้ายกันมาก
Engineer Toast

คำตอบ:


14

Japté , 304 264 162 คะแนน

บันทึก 40 คะแนนขอบคุณ @ ConorO'Brien

;î"历锋㫿鮹㿬崴ꨜꎋΞ"csG

ทดสอบออนไลน์!

เพื่อบันทึกคะแนนให้มากที่สุดเท่าที่จะเป็นไปได้สตริงทั้งหมดจะถูกรวมเป็น 9 ตัวอักษร Unicode โดยตีความแต่ละตัวอักษร 3 ตัวเป็นหมายเลขฐาน 36 แล้วแปลงเป็นจุดรหัส ตัวโปรแกรมใช้สตริงที่ถูกบีบอัดนี้ (ซึ่งมีค่าใช้จ่าย 110 คะแนนรวมถึงเครื่องหมายคำพูด) และแมปแต่ละcรหัสด้วยการแปลงเป็นstring ในฐาน -36 ( Gหลังจาก;จุดเริ่มต้น) îใช้ตัวอักษร {input} ตัวแรกของสิ่งนี้ซึ่งพิมพ์ออกมาโดยปริยาย


11

C, คะแนน: 544

g(g){write(1,"GHYTFVBNJURDCMKIESXLOWAZPQ",g);}

ลองออนไลน์!


... ทำไมคุณถึงตั้งชื่อฟังก์ชั่นเหมือนกับอาร์กิวเมนต์?
คดีฟ้องร้องกองทุนโมนิก้า

6
@QPaysTaxes เพราะgเป็นตัวอักษรที่ถูกที่สุดต่อการให้คะแนนที่ใช้ในการท้าทาย
Steadybox

อาฉันพลาดคะแนนที่กำหนดเอง
คดีฟ้องร้องกองทุนโมนิก้า

11

เกลียว , คะแนน:  61921   5127   4715   4655  4191

4.X~>v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
   X *   X X X X X X X X X X X X X X X X X X X X X X X X X
   ! >   h y t f V b n j u [ ( 1 3 2 ) ] U J N B F T Y H G
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*vvv****v+^v+^v+^v+^*v++4
    X X X X X X X X X X X X X X X X X X X X X X X X X X
    v v v v v v v v v v v v v v v v v v v v v v v v v v
    Y y J F V u t U [ G H B n 3 N 2 j ) h g f ] ( 1 b T

ล่ามสามารถพบได้ที่นี่

คำอธิบาย:

P.X~ZZ*v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
   X       X X X X X X X X X X X X X X X X X X X X X X X X X
   !       h y t f V b n j u r d c m k i e s x l o w a z p q
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*****************************************************************vP
    X X X X X X X X X X X X X X X X X X X X X X X X X X
    v v v v v v v v v v v v v v v v v v v v v v v v v v
    z y x w V u t s r q p o n m l k j i h g f e d c b a

โปรแกรมเริ่มต้นที่0ตัวละครในบรรทัดที่สี่ 0;vgชิ้นแรกของรหัสที่จะวิ่งเป็น ;ใช้ตัวเลขเป็นอินพุตและวางลงในสแต็ก vวางสิ่งที่อยู่ในรีจิสเตอร์ (ศูนย์) ลงในสแต็ก มันจะถูกใช้เป็นตัวนับ gเป็นฉลากเมื่อถึงตัวควบคุมจะข้ามไปที่การเกิดขึ้นของตัวอักษรอื่น ๆgในรหัส

ดังนั้นนี่คือที่ซึ่งการควบคุมอยู่ในขณะนี้:

X
v
g

เนื่องจากมีช่องว่างในทิศทางอื่นทั้งหมดตัวชี้คำสั่งจะเริ่มเลื่อนขึ้น vวางศูนย์ลงในสแต็กและXดึงจากสแต็กทันที เนื่องจากค่าที่ผุดเป็นศูนย์ตัวชี้คำสั่งจะย้ายไปที่X(มิฉะนั้นจะถือว่าเป็นช่องว่าง)

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

v*v*v
  X
  v
  g

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

v*v*v*v*v
X X X X X
v v v v v
i h g f e

สิ่งนี้จะเกิดขึ้นซ้ำแล้วซ้ำอีกจนกว่าเราจะไปถึงจุดสิ้นสุดของส่วนนี้และจุด*เริ่มต้นของ โดยตอนนี้คุ้มค่าในการลงทะเบียนคือ 6 ซึ่งเป็นตัวอักษร ASCII ตัวอักษรg ASCII ลบ aดังนั้นด้วยบรรทัด 97 *s เราจึงเพิ่มค่าใน register เป็น 103 ซึ่งตรงกับตัวอักษรที่gเราต้องการพิมพ์ vผลักมันลงในสแต็กและPเป็นอีกเลเบลเมื่อกดปุ่มซึ่งเราจะข้ามไปที่อีกPบรรทัดหนึ่งของรหัส

ที่นี่.จะปรากฏค่าจากสแต็กและพิมพ์เป็นอักขระ หลังจากนั้นXจะปรากฏศูนย์ภายนอกจากสแต็กจากนั้น~เปรียบเทียบค่าที่เหลือสองค่าในสแต็ก หากค่าเหมือนกันตัวดำเนินการจะวางศูนย์ในสแต็ก (มิฉะนั้น -1 หรือ 1) อีกครั้งการควบคุมพยายามที่จะเลี้ยวขวา Xดึงค่าของการเปรียบเทียบจากสแต็กถ้าเป็นศูนย์Xและหลังจาก!ป้อนแล้วการยกเลิกโปรแกรม

P.X~ZZ*v+^
   X
   !

มิฉะนั้น IP จะยังคงอยู่Zซึ่งเป็นป้ายกำกับซึ่งในกรณีนี้จะข้ามไปทางขวาหนึ่งขั้นเท่านั้น เหตุผลในการทำเช่นนี้คือการกระโดดกำหนดค่าในรีจิสเตอร์กลับเป็นศูนย์ *เพิ่มการลงทะเบียนและvวาง 1 ผลลัพธ์ลงในสแต็ก +ดึงองค์ประกอบสองอันดับแรกของสแต็ก (1 และตัวนับ) เพิ่มพวกมันและวางผลลัพธ์ลงในสแต็ก (ซึ่งจะเพิ่มตัวนับทีละหนึ่ง) ^คัดลอกผลลัพธ์จากสแต็กไปยังรีจิสเตอร์โดยไม่ลบออกจากสแต็ก

#ลดค่าในการลงทะเบียนทีละหนึ่งvผลักดันค่าที่ลดลงไปยังสแต็ค IP พยายามที่จะเลี้ยวไปทางขวาและXดึงค่าจากสแต็ก หากค่าไม่เป็นศูนย์ IP จะย้ายไปทางทิศตะวันออกลดค่าในการลงทะเบียนจนกว่าจะถึงศูนย์และ IP จะเข้าสู่Xสาขา

#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
 X X X X X X X X X X X X X X X X X X X X X X X X X
 h y t f V b n j u r d c m k i e s x l o w a z p q

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

แก้ไข:

P.X~Zv+^
   X *
   ! Z

บรรลุสิ่งเดียวกัน

P.X~ZZ*v+^
   X
   !

แต่มีช่องว่างน้อยกว่า

แก้ไข 2:

vv****v+^v+^v+^v+^*v++P

สามารถใช้แทน:

*****************************************************************vP

2
แดกดันที่ languaje เรียกว่า "Spiral" มีคะแนนสูงในปัญหาการส่งออกเกลียว
Shirkam

6

Haskell , 471

(`take`"GHYTFVBNJURDCMKIESXLOWAZPQ")

ลองออนไลน์!

นี่เป็นมาตรฐานเล็กน้อยฉันรู้สึกว่าต้องมีวิธีที่ดีกว่า แต่มันดีที่สุดเท่าที่ฉันเคยพบมา

คำอธิบาย

ฉันคิดว่าฉันควรอธิบายเรื่องนี้สำหรับผู้ที่ไม่คุ้นเคยกับ Haskell ด้วย ฟังก์ชั่นtakeใช้องค์ประกอบ n แรกของรายการ มันถูกเรียกว่าสิ่งนี้:

take n list

เราต้องการที่จะนำองค์ประกอบแรกของการต่อย"GHYTFVBNJURDCMKIESXLOWAZPQ"ดังนั้นเราต้องการบางสิ่งบางอย่าง

f n=take n"GHYTFVBNJURDCMKIESXLOWAZPQ"

เราสามารถทำได้ดีกว่าแม้ว่าเราสามารถมัดtakeโดยใช้ backticks

f n=n`take`"GHYTFVBNJURDCMKIESXLOWAZPQ"

และตอนนี้สิ่งนี้สามารถทำให้ไร้สาระ

(`take`"GHYTFVBNJURDCMKIESXLOWAZPQ")

มันเป็นแอพพลิเคชั่นบางส่วนที่น่าละอายที่ต้องใช้partialใน Clojure นี่คือสิ่งที่ฉันต้องการ แต่partialก็แพงเกินไป
Carcigenicate

3
ไม่ใช่คะแนนของคุณ 470 ใช่ไหม นั่นคือสิ่งที่ตัวอย่างในคำถามให้ฉันต่อไป ...
แค่นักเรียน



4

Befunge, คะแนน: 531

QPZAWOLXSEIKMCDRUJNBVFTYHG"&\>,# 1#\-# :# _@

ฉันรู้สึกว่าความท้าทายนี้น่าสนใจมากขึ้นถ้าผลผลิตต้องเป็นแบบเกลียวเช่นกัน


4

TI-Basic (TI-84 Plus CE) 454 432 คะแนน

sub("GHYTFVBNJURDCMKIESXLOWAZPQ",1,Ans

-22 คะแนนจากConor O'Brien

5:prgmNAMEทำงานด้วย

ส่งคืน / พิมพ์ subสตริงจาก1ถึงAns(ป้อนตัวเลข)

TI-Basic คือ tokenized langaugeดังนั้นฉันคะแนนนี้โดยค่า byte ของราชสกุล

sub( คือ 0xbb 0x0c ดังนั้น 20

" คือ 0x2a ดังนั้น *ดังนั้น 10 * 2 = 20

ตัวอักษรตัวพิมพ์ใหญ่จะไม่เปลี่ยนแปลงดังนั้นสตริงคือ 351

, คือ 0x2b ดังนั้น +ดังนั้น 10 * 2 = 20

1 คือ 0x31 ดังนั้น 1ดังนั้น 10

Ans คือ 0x72 ซึ่งก็คือ r 11 ดังนั้น

20 + 20 + 351 + 20 + 10 + 11 = 432


ด้วยการตีความกฎการให้คะแนนนี้คุณสามารถประหยัดอีก 31 ไบต์โดยการค้นหาตัวอักษรในสถานที่ที่สร้างสรรค์ แทนที่ S, A, Z, P ด้วยตัวแปรสถิติ s, a, z, p (ในเมนู STAT + 5) ซึ่งให้คะแนน 17 คะแนนในแต่ละอัน: โทเค็น 2 ไบต์ซึ่งมีไบต์แรกสอดคล้องกับ b แทนที่ O, W, Q ด้วยตัวอักษรตัวพิมพ์เล็กสามัญซึ่งให้คะแนน 20 คะแนนในแต่ละอัน: เป็นโทเค็น 2 ไบต์ 0xBBBF, 0xBBC7, 0xBBC1
Misha Lavrov

3

Python 3 คะแนน = 762 753

อินพุต 1-based นี่เป็นวิธีที่แย่กว่าวิธีเล็กน้อยเนื่องจากใช้ตัวอักษรที่ไม่ใช่ตัวอักษร 37 ตัว มันค่อนข้างน่าสนใจ

-9 ขอบคุณที่ราศีสิงห์

h=lambda g:g and h(g-1)+chr(65+int('GYGGYHGYYGYTGTYHGYGGHGGTGHGYGYGFGHGGYGGHHGGHHYYGHGHGGYFGGYHGGTHGHTGGGGGFGGVHGT'[g*3-3:g*3],35)%26)or''

ลองออนไลน์!


1
ฉันชอบวิธีนี้ :) โดยวิธี[:g*3][-3:]สามารถ[g*3-3:g*3]ลดคะแนนรวมได้ 9 คะแนน
Leo


2

Brainf ** k, คะแนน = 2690

ป้อนข้อมูล byte เดียวตั้งแต่การ0x10x1a

>>++++>+++>>>>++++++++++[<+<-<+>>>-]<<--<+++>>>++>->+++++++++++>++++++>-------->---->-->>---------->--------->+++++>++++++++>--->+>----------->+++++++++>------->+++++++>++++++++++++>----->------>+>>+++++++[<+++++++++++[<[[+<]+<]>->[[>]>]<<<-]>-]<<[-]>,[[<]<.[-]>+[>]<-]

ลองออนไลน์!


2

APL (Dyalog)คะแนน: 391

↑∘'GHYTFVBNJURDCMKIESXLOWAZPQ'

ลองออนไลน์!

ใช้สำหรับตัวอักษรละตินใน Dyalog เท่านั้นในชื่อตัวแปรและฟังก์ชั่นระบบบางอย่าง นอกจากนั้นจะใช้เฉพาะร่ายมนตร์และตัวอักษรกรีกบางตัว



1

Clojure, 484 474 คะแนน

-10 คะแนนเพราะเห็นได้ชัดว่า %สามารถมีอยู่หลังจากจำนวนที่ไม่มีช่องว่างคั่นพวกเขา! ฉันอาจต้องกลับไปปรับปรุงการส่งบางอย่าง

#(subs"ghytfvbnjurdcmkiesxlowazpq"0%)

ฟังก์ชั่นที่ไม่ระบุชื่อ โดยทั่วไปพอร์ต Clojure ของสิ่งที่โพสต์แล้ว คะแนนอย่างดี! ฉันคิดว่านี่เป็นโปรแกรม Clojure แรกที่ฉันเคยเขียนที่ไม่มีที่ว่างเดียว

(defn spiral [n]
  ; Substring the hardcoded list, going from index 0 to n
  (subs "ghytfvbnjurdcmkiesxlowazpq" 0 n))



1

Husk , 293 ไบต์

↑¨ghytfvb⌋ȷÜdcmkÏexl⁰Λzpq

นี่คือสั้นที่สุดที่ฉันสามารถหาได้ใกล้ชิดยิ่งขึ้น¨gHYtfvB⌋ȷÜdCmkÏex←ẆAzpq¨สำหรับคะแนน 293 ..

ลองออนไลน์!

คำอธิบาย

การค้นหาแบบไม่ใช้กำลังบังคับกลับกลายเป็นตัวพิมพ์เล็กทั้งหมดที่ให้คะแนนที่ดีที่สุด โดยพื้นฐานแล้วมันเหมือนกับโซลูชันของ @Wheat Wizard, take( ) บนสตริงที่บีบอัด ( ¨)



1

Excel, 490 คะแนน

=LEFT("GHYTFVBNJURDCMKIESXLOWAZPQ",A1)

อนุสัญญาเพื่อ ansers Excel A1คือการใช้ข้อมูลจาก เปลี่ยนสิ่งนี้เพื่อG1ลด 22 คะแนน (468)

=LEFT("GHYTFVBNJURDCMKIESXLOWAZPQ",G1)


1

สนิมคะแนน 443

ไม่บ่อยครั้งที่ Rust จะเก่งรหัสกอล์ฟ แต่ที่นี่มันเต้นหลายภาษา

|g|&"GHYTFVBNJURDCMKIESXLOWAZPQ"[..g]


1

Javascript ES6, 527 คะแนน

g=>`GHYTFVBNJURDCMKIESXLOWAZPQ`.slice(0,g)

ลองมัน !

f=g=>`GHYTFVBNJURDCMKIESXLOWAZPQ`.slice(0,g)

input.oninput = function() {
    output.value = f(input.value);
}
textarea { width: 500px; height: 6em; font-style: monospace; }
<textarea id="input"></textarea>
<textarea disabled id="output"></textarea>



1

PHP, คะแนน 584

เล่นซอเล็กน้อยกับพจนานุกรม; ความจริงที่ว่า xoring สตริงจะตัดการแสดงผลที่substrล้าสมัย

<?=">1 -?/;73,+=:420<*!56.8#)("^str_repeat(y,$argv[1]);

ลองมันออนไลน์





0

> <> , 558 + 16 = 574 คะแนน

<;v? : <{"GHYTFVBNJURDCMKIESXLOWAZPQ"
  >$o1-^

ใช้-vแฟล็กเพื่อดันอินพุตไปยังสแต็ก

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

ลองออนไลน์!


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