ส่งออกแป้นพิมพ์ qwerty


37

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

อินพุต 1

f

เอาท์พุท 1

g h j k l
z x c v b n m

อินพุต 2

q

เอาท์พุท 2

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

อินพุต 3

m

เอาท์พุท 3

(โปรแกรมสิ้นสุดโดยไม่มีเอาต์พุต)

อินพุต 4

l

เอาท์พุท 4

z x c v b n m

รหัสที่สั้นที่สุดชนะ (เป็นไบต์)

PS

ขึ้นบรรทัดใหม่หรือช่องว่างเพิ่มเติมที่ส่วนท้ายของบรรทัดได้รับการยอมรับ


ฟังก์ชั่นเพียงพอหรือคุณต้องการโปรแกรมเต็มรูปแบบที่อ่าน / เขียนไปยัง stdin / stdout หรือไม่?
agtoever

1
@agtoever ตามmeta.codegolf.stackexchange.com/questions/7562/…จะอนุญาต อย่างไรก็ตามฟังก์ชั่นจะต้องส่งออกไปยังหน้าจอ
ghosts_in_the_code

@agtoever ลองใช้ลิงค์นี้แทน meta.codegolf.stackexchange.com/questions/2419/…
ghosts_in_the_code

1
พื้นที่ชั้นนำก่อนบรรทัดอนุญาตหรือไม่
Sahil Arora

1
@SahilArora Nope
ghosts_in_the_code

คำตอบ:


19

CJam, 42 40 ไบต์

"wertyuiop asdfghjkl zxcvbnm"q/W=S%Sf*N*

ทดสอบที่นี่

คำอธิบาย

"we...nm"
     e# Push the letters in order, without q. We don't need q, because it will never
     e# be part of the output.
q/   e# Split the string around the input. If the input is "q", the entire string
     e# will go into a single chunk.
W=   e# Select the last chunk.
S%   e# Split the string around spaces, discarding empty segments (only relevant for the 
     e# first segment if the input is "p" or "l").
Sf*  e# Join each line by spaces.
N*   e# Join the lines by linefeeds.

คือe#อะไร มันเป็นไวยากรณ์ CJam สำหรับความคิดเห็นหรือไม่? ขอบคุณล่วงหน้า.
อัล

@ ใช่ใช่มันเป็น
Martin Ender

11

Pyth, 33 ไบต์

jjL\ cec."`zÈ´ýß44,ûtKÕÀ@"z\`

โปรดทราบว่าอักขระบางตัวไม่สามารถพิมพ์ได้ ลองใช้ออนไลน์ในPyth คอมไพเลอร์

มันทำงานอย่างไร

jjL\ cec."`z…"z\`

        ."`z…"     Unpack …, with lowest character '`' and highest character `z`.
       c      z    Split at occurrences of the input (z).
      e            Retrieve the last resulting chunk.
     c         \`  Split into rows, at backticks.
 jL\               Separate the characters of each row by spaces.
j                  Separate the rows by linefeeds.

คนอ๊ะฉันได้สร้างโปรแกรม Pyth ครั้งแรกของฉันที่เคย (เพียง 38 ไบต์!) แล้วคุณมาพร้อม ... +1 BTW ผมคิดว่าเทียบเท่ากับ\ d
ETHproductions

อุ๊ปส์ฉันคิดว่ามันไม่เหมือนกัน ... มีอะไรแตกต่างกันบ้าง
ETHproductions

1
@ETHproductions @Dennis ด้วยเหตุผลเดียวกันว่าทำไมmd5ไม่สร้างช่องว่าง 5 ช่อง dเป็นตัวแปรเริ่มต้นที่ทำซ้ำผ่านอาร์กิวเมนต์ iterable ของผู้ประกอบการแผนที่ และเป็นเพียงทางลัดสำหรับผู้ประกอบแผนที่jL\ <list> mj\ d<list>
Jakube

1
@ Jakube โอ้นั่นสมเหตุสมผลแล้ว ขอบคุณ!
เดนนิส

10

Perl, 56 ไบต์

#!perl -p
'qwertyuiop
asdfghjkl
zxcvbnm'=~/$_
?/;$_=$';s/\B/ /g

นับ shebang เป็น 3 อินพุตจะถูกนำมาจาก stdin หากมีการขึ้นบรรทัดใหม่ชั้นนำไม่ได้เป็นกังวลสำหรับปัจจัยการผลิตpและlจากนั้น/$_\n?/จะถูกแทนที่ด้วยการเปลือย$_เพื่อบันทึก 4


ตัวอย่างการใช้งาน

$ echo g|perl qwerty.pl
h j k l
z x c v b n m

$ echo v|perl qwerty.pl
b n m

2
ขอบคุณที่สอนฉันเกี่ยวกับ\K !
Dom Hastings

@ DomHastings ในกรณีนี้มันไม่จำเป็นจริงๆสำหรับการนับไบต์s/.\B/$& /gจะทำงานได้ดีพอ ๆ กัน ตัวอย่างที่ดี
โม่

6

GS2 , 38 37 ไบต์

♦wertyuiop asdfghjkl zxcvbnm♣B3$,■♪2◙

ซอร์สโค้ดใช้การเข้ารหัสCP437 ลองออนไลน์!

ทดสอบการทำงาน

$ base64 -d > qwerty.gs2 <<< BHdlcnR5dWlvcCBhc2RmZ2hqa2wgenhjdmJubQVCMyQs/g0yCg==
$ wc -c qwerty.gs2
37 qwerty.gs2
$ echo -n f | gs2 qwerty.gs2
g h j k l
z x c v b n m

มันทำงานอย่างไร

♦                                      Begin string literal.
 wertyuiop asdfghjkl zxcvbnm
                            ♣          End string literal.
                             B         Swap the string with the input.
                              3        Split the string at the input character.
                               $       Select the last chunk.
                                ,      Split the selected chunk at spaces.
                                 ■     Map over the resulting array:
                                  ♪      Push ' '.
                                   2     Join the characters, separating by ' '.
                                    ◙    Push a linefeed.

6

C #, 112 ไบต์105 110

นับเพิ่มขึ้น 5 ไบต์ แต่ถูกต้องมากขึ้น! ขอบคุณ @ MartinBüttner !!

void c(char i){System.Console.Write(@"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".Split(i)[1].Trim());}

ยกเลิกแข็งแรงเล่นกอล์ฟ

void c(char i)
{
    System.Console.Write(@"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".Split(i)[1].Trim());
}

5

JavaScript (ES6), 60 ไบต์

x=>[...`qwertyuiop
asdfghjkl
zxcvbnm`].join` `.split(x)[1]

ใช้เทคนิคเดียวกับคำตอบอื่น ๆ ยินดีต้อนรับข้อเสนอแนะ!


คุณช่วยอธิบายได้ไหมว่าทำไมคุณถึงใช้ "... " ฉันลองโดยไม่ใช้ JSFiddle และยังใช้งานได้อยู่
Awashi

@Awashi มันเป็นผู้ประกอบการแพร่กระจาย มันแยกสตริงออกเป็นอาร์เรย์ของอักขระ หากไม่มีมันก็.join` `จะไม่ทำอะไรเลยและจะไม่มีช่องว่างในผลลัพธ์
user81655

@ user81655 Tank you
Awashi

4

ทับทิม, 63 57 ไบต์

รับอักขระเป็นอาร์กิวเมนต์บรรทัดคำสั่ง: ruby keyboard.rb e

"qwertyuiop
asdfghjkl
zxcvbnm".scan$*[0]
puts$'.chars*' '

4

TeaScript , 50 45 44 ไบต์

TeaScript เป็น JavaScript สำหรับเล่นกอล์ฟ

`qwertyuiop
asdfghjkl
zxcvbnm`.s×[1]s(b)j(p)

Ungolfed และคำอธิบาย

`qwertyuiop
asdfghjkl
zxcvbnm`.s(x)[1]s(b)j(p)

      // Implicit: x = input string
`...` // Take the qwerty string,
.s(x) // and split it at the input.
[1]   // Take the second item from this,
s(b)  // split it into chars,
j(p)  // and join the result with spaces.
      // Implicit: output final expression

3

JavaScript ES6, 73

f=x=>[...(k=`qwertyuiop
asdfghjkl
zxcvbnm`).slice(k.search(x)+1)].join` `

หากมีการขึ้นบรรทัดใหม่ชั้นนำไม่ได้รับอนุญาตเมื่อพารามิเตอร์pหรือlแล้ว83

f=x=>(k=`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`).slice(k.search(x)+2)


3

ไม่เกิน 59 ตัว

(58 ตัวอักษรรหัส + 1 ตัวเลือกบรรทัดคำสั่ง)

s/./&qwertyuiop\nasdfghjkl\nzxcvbnm/
s/(.).*\1//
s/\w/& /g

วิ่งตัวอย่าง:

bash-4.3$ echo -n 'f' | sed -r 's/./&qwertyuiop\nasdfghjkl\nzxcvbnm/;s/(.).*\1//;s/\w/& /g'
g h j k l 
z x c v b n m 

3

ทับทิม, 86 87 83 71 66

puts"qwertyuiop
asdfghjkl
zxcvbnm ".split($*[0])[1].gsub /./,'\& '

พื้นที่เพิ่มเติมหลังจากนั้นmคือการป้องกันไม่ให้โปรแกรมหยุดทำงานหากอินพุตคือ 'm'

ขอบคุณ @manatwork สำหรับเคล็ดลับประมาณ 16 ไบต์


ให้ฉันเดา ... การเขียน Python มากเกินไปในครั้งสุดท้ายใช่ไหม
จัดการ

1
มีการเปลี่ยนแปลงไวยากรณ์เล็กน้อยบางอย่าง: ARGV$*; each_charchars; do.. end{.. }; printf$><<+ จะนำไปสู่นี้:% "qwertyuiop↵asdfghjkl↵zxcvbnm".split($*[0])[1].chars{|i|$><<"%s "%i}อื่น ๆ ในเคล็ดลับสำหรับการเล่นกอล์ฟในรูบี
จัดการ

@ manatwork ครั้งแรกที่พยายามเล่นกอล์ฟใน Ruby ขอบคุณสำหรับเคล็ดลับ / ลิงค์!
SnoringFrog

1
ฉันเห็นคุณไม่ได้รับคำใบ้ในความคิดเห็นแรกของฉัน ใน Ruby ไม่จำเป็นต้องมีเครื่องหมายอัญประกาศคู่ล้อมรอบหลายสาย (อันที่จริงฉันไม่รู้มาก่อนว่าทับทิมเป็นที่ยอมรับ)
จัดการ

1
ช่องว่างชั้นนำในผลลัพธ์ค่อนข้างน่าเกลียด ในฐานะที่เป็น.ในการแสดงออกปกติไม่ตรงตามค่าเริ่มต้นการใช้งานที่ดีกว่าที่สำหรับระยะห่าง:\n puts"qwertyuiop↵asdfghjkl↵zxcvbnm ".split($*[0])[1].gsub(/./,'\& ')แม้ว่าความยาวรหัสจะยังคงเหมือนเดิม
จัดการ

2

PHP, 88 ไบต์

<?=$m[1&ereg("$argn.(.*)",'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',$m)];

ต้องใช้-Fตัวเลือกบรรทัดคำสั่งซึ่งนับเป็น 3 การตั้งค่า. ini จะถือว่าเป็นค่าเริ่มต้น (คุณอาจปิดใช้งาน. ini ท้องถิ่นของคุณด้วย-n)


ตัวอย่างการใช้งาน

$ echo g|php -F qwerty.php
h j k l
z x c v b n m

$ echo v|php -F qwerty.php
b n m

2

Prolog (SWI), 153 133 ไบต์

แก้ไข:ตัด 20 ไบต์ด้วยเคล็ดลับจาก @Falize

รหัส

b([A,_|T],[H]):-A=H,writef('%s',[T]);b(T,[H]).
p(X):-name(X,C),b(`q w e r t y u i o p \r\na s d f g h j k l \r\nz x c v b n m`,C),!.

คำอธิบาย

p(X):-name(X,C),                                                               % Get charcode of input
      b(`q w e r t y u i o p \r\na s d f g h j k l \r\nz x c v b n m`,C),!.    % Get keyboard chars as charcodes and call b
b([A,_|T],[H]):-A=H,                                                           % If list head is input element
                writef('%s',[T]);                                              % Interpret list as charcodes and print as string
                b(T,[H]).                                                      % Else remove first element of list and try again

ตัวอย่าง

>p(f).
g h j k l 
z x c v b n m

>p(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

การใช้ SWI-Prolog คุณสามารถย่อatom_codesส่วนได้โดยใช้ backquotes ซึ่งกำหนดรหัสสตริง (เพื่อให้คุณสามารถแทนที่ L โดยตรงในการเรียกbด้วยสตริง)
ลดขนาด

@ ทำให้เย็น! ขณะที่ฉันใช้ SWI-Prolog สำหรับการทดสอบอยู่ดีนั่นเป็นความคิดที่ดี
Emigna

นอกจากนี้การใช้b([A,_|T],[H]):-A=H,writef('%s',[T]);b(T,[H]).แทนกฎที่ต่างกัน 2 กฎสำหรับbจะสั้นลง 7 ไบต์ โดยปกติจะสั้นกว่าเสมอในการรวมกฎทั้งหมดไว้ในหนึ่งเดียวกับ ORs ;แทนที่จะเขียนกฎหลายข้อเนื่องจากคุณหลีกเลี่ยงการทำซ้ำชื่อและพารามิเตอร์ของภาคแสดงและคุณหลีกเลี่ยงการป้อนบรรทัดด้วยเช่นกัน)
ทำให้เสียชีวิต

นานมากแล้วที่ฉันได้เรียนรู้ Prolog ซึ่งฉันลืมไปแล้วว่าคุณทำได้หรืออย่างนั้น สุดยอดเคล็ดลับ! ขอบคุณ :)
Emigna

2

Befunge ขนาด 122 ไบต์

"m n b v c x z"25*"l k j h g f d s a"v
v1-")"g2-"U"~"q w e r t y u i o p"*25<
>-:#v_$>:#,_@ZVD0FHJ:LNP^\<>,2B48X.T6R
^1$\<

มันได้รับการทดสอบที่นี่: Befunge-93 ล่าม

มันทำงานอย่างไร

  • 'q w e r t y u i o p\na s d f g h j k l\nz x c v b n m' ถูกผลักลงบนสแต็ก
  • จำนวนของค่าที่จะละทิ้ง (ฮาร์ดโค้ดใน@ZVD0FHJ:LNP^\<>,2B48X.T6R) N ถูกผลัก
  • ค่า N แรกจะถูกยกเลิกและค่าที่เหลือจะถูกพิมพ์

บันทึก

ฉันเลือกการเข้ารหัสเพื่อให้สตริงเริ่มต้นด้วย@เพื่อทับซ้อนกับโปรแกรม สายนี้ถูกสร้างขึ้นด้วยรหัสหลามต่อไปนี้:

import string
letters = string.ascii_lowercase
base = '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'
print(''.join(chr(base.index(x) + 32 + 9 + 3) for x in letters))

1
คำตอบแรกที่ดี! ยินดีต้อนรับสู่ Code Golf SE (ฉันใหม่เช่นกัน)
ghosts_in_the_code

1

คางทูม - 102 ไบต์

สคริปต์ Golfed:

S A="qwertyuiopasdfghjklzxcvbnm",B=0 R P F I=1:1:$L(A) S Q=$E(A,I) W:B Q," " X:"qpl"[Q "W !" S:Q=P B=1

Ungolfed และแสดงความคิดเห็น:

 S A="qwertyuiopasdfghjklzxcvbnm" ; Need the qwerty order
 S B=0 ; boolean flag for printing, default to false.
 R P   ; read from stdin into P
 F I=1:1:$L(A) D   ; Count I from 1 to length of qwerty variable; do all of the following:
 . S Q=$E(A,I)     ; Extract 1 letter (at position I) from A and save in Q.
 . W:B Q," "       ; If our print flag (B) is true, print the letter in Q & a space.
 . X:"qpl"[Q "W !" ; If Q is q, p or l, write a cr/lf
 . S:Q=P B=1       ; If Q == P (stdin) change our print flag from false to true.

กฎที่ช่วยให้บรรทัดใหม่พิเศษช่วยฉันเกือบ 10 ไบต์ ...


1

Java - 107 ไบต์

void q(char c){System.out.print("qwertyuiop\nasdfghjkl\nzxcvbnm ".split(""+c)[1].replaceAll("\\w","$0 "));}

Ungolfed ด้วยการอ่านระดับ wrapper จาก System.in

public class Qwerty {

    public static void main(String[] args) {
        new Qwerty().q(new java.util.Scanner(System.in).next().charAt(0));
    }
    void q(char c) {
        System.out.print("qwertyuiop\nasdfghjkl\nzxcvbnm ".split(""+c)[1].replaceAll("\\w","$0 "));
    }
}

หากช่องว่างที่จุดเริ่มต้นของบรรทัดเป็นที่ยอมรับเราสามารถลงไปที่ 99 ไบต์:

void q(char c){System.out.print("qwertyuiop\nasdfghjkl\nzxcvbnm ".split(""+c)[1].replace(""," "));}

1

Python 2, 58 67 63 ไบต์ ##

lambda x:" ".join("qwertyuiop\nasdfghjkl\nzxcvbnm".split(x)[1])

รับอินพุตเป็นสตริงหรืออักขระถ่าน แยกสตริงที่อินพุตและพิมพ์ทุกอย่างหลังจากแยก

(รหัสครั้งแรกกอล์ฟกรุณาอ่อนโยน: P)

แก้ไข: ไม่เห็นช่องว่างเพิ่มเติมที่ต้องการระหว่างตัวอักษรเพิ่มตอนนี้

แก้ไข 2: แก้ไขเป็นฟังก์ชั่นแลมบ์ดานิรนามและลบ ARG แบบแยกส่วนเพิ่มเติมบันทึก 4 ไบต์


ยินดีต้อนรับสู่ PPCG! ฉันไม่คิดว่าคุณต้องการพื้นที่ว่างหลังจากprintนั้น แต่ดูเหมือนว่านี่จะไม่พิมพ์ช่องว่างระหว่างตัวอักษรแต่ละคู่
Martin Ender

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

กอล์ฟครั้งแรกที่ดี lambda s:...ฟังก์ชั่นที่ได้รับอนุญาตโดยค่าเริ่มต้นแม้แต่คนที่ไม่ระบุชื่อดังนั้นจึงเป็นเรื่องที่สั้นกว่าการทำเช่นนี้เป็น ฉันคิดว่าการแยกไม่จำเป็นต้องมีข้อโต้แย้ง1เนื่องจากตัวละครจะปรากฏเพียงครั้งเดียว สิ่งนี้ส่งผลช่องว่างที่จุดเริ่มต้นของบรรทัดที่ประสบความสำเร็จไม่แน่ใจว่าจะได้รับอนุญาต
xnor

1

ทับทิม, 59 57 67 ไบต์

เพิ่มช่องว่างระหว่างตัวอักษร

puts"qwertyuiop\nasdfghjkl\nzxcvbnm".split(gets.chop)[-1].chars*' '

สิ่งนี้ล้มเหลวเมื่ออินพุต“ m” ที่สามารถแก้ไขได้อย่างง่ายดายโดยการเปลี่ยนดัชนีอาร์เรย์จาก -1 ถึง 1 แต่แล้วกับการป้อนข้อมูล“M” nilจะส่งผลให้ ซึ่งไม่ใช่ปัญหา แต่จะทำให้คุณเกิดปัญหาเมื่อเสร็จรหัสเพื่อเพิ่มช่องว่างระหว่างตัวอักษร
จัดการ

1

JavaScript, 88 ไบต์

function s(d){alert("qw e r t y u i o p\na s d f g h j k l\nz x c v b n m".split(d)[1])}

(ไม่จำเป็นต้องอยู่ในพื้นที่หลังจากถ่านตัวแรกเพราะมันไม่เคยไปถึงเอาต์พุต)

s("some letter")การแจ้งเตือนแป้นพิมพ์เมื่อคุณเรียก สามารถทำด้วยdocument.write()หรือconsole.log()แต่เฮ้มันอีกต่อไป: P

การสาธิต:

function s(d){alert("qw e r t y u i o p\na s d f g h j k l\nz x c v b n m".split(d)[1])}

s(prompt("Enter the key"));


1
คุณสามารถบันทึกได้เพียงไม่กี่ไบต์โดยใช้\nแทนการใช้;ในสตริงและกำจัดการแทนที่
ETHproductions

@ แน่นอนขอบคุณ! ฉันใช้การแทนที่เนื่องจากในตอนแรกโดยไม่นับการขึ้นบรรทัดใหม่การแทนที่จะสั้นลง จากนั้นฉันสังเกตเห็นว่าตัวแบ่งบรรทัดควรอยู่ที่นั่นดังนั้นฉันจึงใช้แทนที่ใหม่ ไม่แม้แต่คิดว่ามันจะทำให้รหัสยาวขึ้น: D
nicael

1

SQL (MS T-SQL), 172 ไบต์

CREATE PROC c @I CHAR(1) AS DECLARE @S CHAR(49) SET @S = 'w e r t y u i o p' + CHAR(13) + 'a s d f g h j k l' + CHAR(13) + 'z x c v b n m' PRINT RIGHT(@S,LEN(@S)-CHARINDEX(@I,@S))

Ungolfed:

CREATE PROC c                           -- Create a procedure named "c"
    @I CHAR(1)                          -- Which is invoked with a single character input (@I)
AS

DECLARE @S CHAR(49) = 'w e r t y u i o p' + CHAR(13) + 'a s d f g h j k l' + CHAR(13) + 'z x c v b n m' -- Initialise the entire output omitting "q " as @S
PRINT RIGHT(@S,LEN(@S)-CHARINDEX(@I,@S))    -- Use the charindex funtion to effectively substring @S

ฉันใหม่ที่นี่เพียงค้นพบเว็บไซต์นี้เท่านั้น ไม่ทราบว่าฉันโพสต์ถูกต้องหรือไม่อนุญาตให้ใช้ T-SQL แต่ฉันรู้ว่าขั้นตอนดังกล่าวใช้งานได้


1

O 2.2, 48 46 ตัวอักษร

"qwertyuiop
asdfghjkl
zxcvbnm
"i/r;s{n.U=ST?}d

วิ่งตัวอย่าง:

bash-4.3$ ./o keyboard.o <<< 'f'
g h j k l 
z x c v b n m 

O, 61 ตัวอักษร

"qwertyuiop\nasdfghjkl\nzxcvbnm\n"i/r;""/rl{.o"\n"={}{' o}?}d

วิ่งตัวอย่าง:

bash-4.3$ java xyz.jadonfowler.o.O keyboard.o <<< 'f'
g h j k l 
z x c v b n m 

สิ่งนี้ใช้ไม่ได้กับ IDE ด้วยเหตุผลบางอย่างดูตอนนี้ ...
เฟส

"qwertyuiop\nasdfghjkl\nzxcvbnm\n"i/r;s{n.'\n=ST?}dใช้งานได้เฉพาะกับล่ามใหม่ แต่มีขนาด 51 ไบต์
ช่วง

Permalinks กำลังดำเนินการ: P
phase

ใช่ในไดเรกทอรี libregexp
ช่วง

คอมไพล์โคลน repo หลังจากgit submodule update --initนั้นmake
เฟส

1

Japtap , 49 42 41 40 38 ไบต์

Japtเป็นรุ่นสั้นJa vaScri พอยต์ ล่าม

`qØÆyuiop\n?dfghjkl\nzxcvbnm`qU g1 ¬qS

?ควรจะ unprintable Unicode ถ่าน U + 0086

มันทำงานอย่างไร

          // Implicit: U = input char
`...`     // Take the compressed string and decompress it.
qU g1     // Split the string at the input and take the second item.
¬qS       // Split into chars, then join with spaces.
          // Implicit: output final expression

ตอนนี้เต้น CJam! :) ยินดีต้อนรับข้อเสนอแนะ!

รุ่นที่ไม่ใช่คู่แข่งขนาด 12 ไบต์

;Dv qU g1 ¬¸

ตั้งแต่วันที่ 11 มกราคมฉันได้เพิ่มคุณสมบัติใหม่ที่ยอดเยี่ยมให้กับ Japt: หากโปรแกรมมีเครื่องหมายจุลภาคนำหน้าตัวแปรABCDEFGHIJLจะถูกนิยามใหม่เป็นค่าต่าง ๆ Dถูกตั้งค่าเป็น"QWERTYUIOP\nASDFGHJKL\nZXCVBNM"ดังนั้น;Dvก็เพียงพอที่จะแทนที่สตริงที่นี่



0

รหัสเครื่อง 8086 + DOS, 61 ไบต์

Hexdump (พร้อมมุมมอง ASCII ทางด้านขวา):

B8 1E 01 8B F8 CD 21 B1 1F F2 AE 8B F7 AC 8A D0 ......!.........
B4 02 CD 21 80 E2 20 74 02 CD 21 E2 F0 C3 71 77 ...!.. t..!...qw
65 72 74 79 75 69 6F 70 0D 0A 61 73 64 66 67 68 ertyuiop..asdfgh
6A 6B 6C 0D 0A 7A 78 63 76 62 6E 6D 0D          jkl..zxcvbnm.

รหัสแหล่งประกอบ (สามารถประกอบกับ Tasm):

    .MODEL TINY

    .CODE
    org 100h

    MAIN PROC

    mov ax, offset qwerty ; sets ah=1 (coincidence)
    mov di, ax      ; di points to the string
    int 21h         ; reads a char from keyboard into al

    mov cl, 31      ; cx is the length of the string
    repne scasb     ; look for the char
    mov si, di      ; si now points beyond the found char

myloop:
    lodsb           ; load a char
    mov dl, al
    mov ah, 2
    int 21h         ; output the char

    and dl, 20h     ; if it's a letter, set it to a space
    jz print_done   ; if it's not a letter, don't print a space
    int 21h         ; if it's a letter, print a space
print_done:
    loop myloop     ; repeat until end of string

    ret

qwerty db 'qwertyuiop',13,10,'asdfghjkl',13,10,'zxcvbnm',13

    MAIN ENDP
    END MAIN

สองสิ่งสนุกที่นี่:

  1. ชดเชยของสตริงqwerty 0x011eไบต์ด้านบนของมันคือ 1 ซึ่งเป็นหมายเลขฟังก์ชัน DOS สำหรับการป้อนอักขระ วิธีนี้จะช่วยประหยัด 1 ไบต์ในรหัส
  2. ตัวอักษรตัวพิมพ์เล็กทั้งหมดมีบิต 5 ชุด เมื่อทำANDกับ0x20พวกเขาทั้งหมดจะกลายเป็นช่องว่างซึ่งจะถูกพิมพ์แล้ว หากอักขระก่อนหน้าเป็นไบต์สิ้นสุดบรรทัดจะกลายเป็น 0 และไม่มีพื้นที่ว่าง สิ่งนี้ใช้เพื่อหลีกเลี่ยงลำดับ0d 20 0a 20ที่ไม่มีความหมายที่ส่วนท้ายของบรรทัด

สิ่งหนึ่งที่เกือบจะสนุก:

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

เอาท์พุต


0

𝔼𝕊𝕄𝕚𝕟, 32 ตัวอักษร / 79 ไบต์

⟦ɘƄ瀛ذ鸊ް΀ꀆဓƘ᳀ᘁ堍怍訁码聮Ęݠⶰ䀀#]ø⬭Čï⎖1

Try it here (Firefox only).

อย่างน้อยฉันก็ชนะการนับถ่าน ... (นับเป็นเรื่องราวที่ต่างออกไป)

โอ้ใช่เพิ่งรู้ว่าฉันใช้ทางลัดดัชนี ( ⎖1แทน[1]) สักครู่กลับมา โง่ฉัน!


นี่คือภาษาอะไร? หรือว่าเป็นตัวอักษรนี้: i.imgur.com/WC7XvYs.png (และมีเอกสารประกอบ) มันแปลก, aha!
ʰᵈˑ

นี่คือ ESMin ตัวอักษรอยู่ในทวีคูณดังนั้นคุณอาจมีปัญหาในการมองเห็นพวกเขา ดู github.com/molarmanful/ESMin (เอกสารเก่าล้าสมัย)
Mama Fun Roll

0

C ++, 129, 112 97 ไบต์

#include<string>
#include<cstdio>
void o(char c){puts(strstr("qwertyuiopasdfghjklzxcvbnm",&c));}

Ungolfed:

#include<string>
#include<cstdio>
void o(char c)
{
    puts(strstr("qwertyuiopasdfghjklzxcvbnm",&c));
}

คุณสามารถโกนทิ้งได้ 17 ไบต์โดยใช้putsแทนstd::cout<<
DJMcMayhem

@DJMcMayhem ขอบคุณ! มีจุดเชื่อมต่อที่ดีเยี่ยม: ด้วยเหตุผลบางอย่างผมคิดว่าผมจะยังคงจำเป็นต้องมี#includeสำหรับputsแต่เห็นได้ชัดว่าผมทำไม่ได้!
Tas

นอกจากนี้นี่คืออีก 12 สั้น
DJMcMayhem

ขอบคุณ! ฉันไม่รู้ด้วยซ้ำว่าstrstrเป็นอะไร
Tas

ฉันคิดว่ามันเป็นเรื่องเล็กน้อย overgolfed คุณจำเป็นสำหรับ<stdio.h> strstr
DJMcMayhem

0

แบตช์, 206 + 2 = 208 ไบต์

เนื่องจากสิ่งนี้ใช้การขยายที่ล่าช้าคุณจึงต้องเรียกใช้ด้วยCMD /V /C keyboard.cmd <letter>ดังนั้นควรเพิ่ม1 2 สำหรับ/Vสวิตช์

@echo off
set a=q w e r t y u i o p
set b=a s d f g h j k l
set c=z x c v b n m
if not "!a:*%1 =!"=="!a!" echo !a:*%1 =!
if not "!a:*%1=!!b:*%1 =!"=="!a!!b!" echo !b:*%1 =!
if not %1==m echo !c:*%1 =!

ฉันเกรงว่าตัวเลือกบรรทัดคำสั่งจะนับ 1 ถ้าcmdยอมรับ/VCเช่นเดียวกับเครื่องมือ POSIX แต่อย่างที่ฉันรู้นั้น/Vต้องการตัวของมันเอง/ซึ่งก็นับได้เช่นกัน
จัดการ

0

Python ขนาด 109 ไบต์

ฉันรู้ว่ามันใหญ่ไปหน่อย แต่ทั้งหมดนี้ฉันรู้ว่าต้องทำอย่างไรในตอนนี้!

def kb(c): 
 s = "q w e r t y u i o p \n a s d f g h j k l \n z x c v b n m"
 a = s.split(c)
 print(a[1])

ฉันไม่คิดว่าคุณจะต้องโทรหาkb()ตอนท้าย การกำหนดฟังก์ชั่นก็เพียงพอแล้ว นอกจากนี้การเว้นวรรค 1 ช่องก็เพียงพอแล้ว หลังจากทำการเปลี่ยนแปลงเหล่านี้ฉันได้ 108 ไบต์โดยใช้เว็บไซต์นี้
ETHproductions

@ ETHproductions ว้าวฉันไม่รู้ว่าครั้งหนึ่งสิ่งที่ว่าง (ใหม่เป็นงูหลาม) ขอบคุณอีกครั้งสำหรับความช่วยเหลือของคุณ!
Ashwin Gupta

0

Bash, 80 ไบต์

x="qwertzuiop\nasdfghjkl\nyxcvbnm"&&echo -e ${x#*$1}|sed 's/./& /g'

ลองด้วยตัวคุณเองแทนที่$ 1ด้วยอักขระที่ต้องการหรือสร้างสคริปต์ #! / bin / bash

นี่คือตัวอย่างจาก cygwin:

$x="qwertzuiop\nasdfghjkl\nyxcvbnm"&&echo -e ${x#*q}|sed 's/./& /g'
w e r t z u i o p
a s d f g h j k l
y x c v b n m

$x="qwertzuiop\nasdfghjkl\nyxcvbnm"&&echo -e ${x#*m}|sed 's/./& /g'

$x="qwertzuiop\nasdfghjkl\nyxcvbnm"&&echo -e ${x#*h}|sed 's/./& /g'
j k l
y x c v b n m

มันไม่สั้น แต่ฉันก็ยังภูมิใจในมัน!

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