Buat Semangkuk Sup Alfabet

55

Inilah yang akan kita sebut semangkuk sup alfabet - bentuk ascii-art melingkar kira-kira dengan 26 huruf Inggris (AZ) diatur searah jarum jam untuk membentuk perimeter:

   XYZABC
 VW      DE
U          F
T          G
S          H
 RQ      JI
   PONMLK

Tulis sebuah program yang menggunakan karakter huruf tunggal, AZ, dan output semangkuk sup alfabet yang sama "diputar", sehingga untuk berbicara, sehingga huruf input muncul di mana Atidak dalam contoh di atas dan sisa siklus alfabet sepenuhnya di sekitar searah jarum jam.

Jadi output untuk input Aadalah semangkuk sup alfabet yang sama.

Dan output untuk input Badalah yang ini:

   YZABCD
 WX      EF
V          G
U          H
T          I
 SR      KJ
   QPONML

Demikian juga output untuk H:

   EFGHIJ
 CD      KL
B          M
A          N
Z          O
 YX      QP
   WVUTSR

Atau untuk Z:

   WXYZAB
 UV      CD
T          E
S          F
R          G
 QP      IH
   ONMLKJ

Ini harus bekerja untuk semua 26 huruf, A hingga Z.

Detail:

  • Anda dapat mengasumsikan bahwa satu-satunya input adalah satu huruf, A hingga Z.
  • Jika nyaman Anda dapat menggunakan huruf kecil az untuk input dan / atau output, Anda bahkan dapat mencampur dan mencocokkan huruf kecil dan huruf besar.
  • Urutan alfabet harus berputar searah jarum jam, bukan berlawanan arah jarum jam.
  • Anda harus menggunakan spasi, bukan yang lain, untuk membuat indentasi dan mengisi mangkuk sup.
  • Mungkin ada yang memimpin atau mengikuti garis baru atau ruang dalam output selama mangkuk sup diatur dengan benar.
  • Perhatikan bahwa bentuk mangkuk adalah 12 karakter dengan lebar 7 untuk membuatnya tampak melingkar seperti teks. Mangkuk Anda harus memiliki bentuk yang sama.

Ini kode golf sehingga kode terpendek menang!

Game Diskrit
sumber
12
Tantangan besar! Awalnya tampak mudah, tetapi tidak
Luis Mendo

Jawaban:

22

05AB1E , 21 byte

Menentukan program f:AlphabeticCharTali

Kode:

2AA¹k._•1못*Ć,ãiDΣ•Λ

Cobalah online!


Kerusakan:

2AA¹k._•1못*Ć,ãiDΣ•Λ

2                       # <length>
 AA¹k._                 # <filler>
       •1못*Ć,ãiDΣ•    # <pattern>
                    Λ   # Invoke the canvas function.


Penjelasan:

The kanvas ( Λ) dalam konteks khusus ini bekerja sebagai fungsi dengan tanda tangan berikut:

Λ:(panjangnya:Nat, pengisi:Tali, pola:Nat)Tali

The pola parameter dalam situasi ini sejumlah mendefinisikan arah. Dalam kode, angka ini direpresentasikan sebagai •1못*Ć,ãiDΣ•, yang merupakan versi terkompresi dari angka besar 2232344565666667670012122 . Arah ditunjukkan dengan cara berikut:


70162543


Ini berarti bahwa angka besar mewakili pola arah berikut:

[,,,,,,,,,,,,,,,,,,,,,,,,]

Dengan konteks tanda tangan ini, kanvas beralih melalui daftar pola dan menulis karakter panjangnya dari pengisi ke arah saat ini.

The panjangnya ditentukan dalam kode sebagai 2 (pada awal kode). Untuk pengisi , kita memerlukan versi alfabet yang diputar sedemikian rupa sehingga dimulai dengan input yang diberikan. Itu dilakukan dengan kode berikut ( coba di sini ):

AA¹k._

 Catatan # Temukan <indeks> dari karakter input yang diberikan dalam alfabet
A ._ # Putar alfabet ke kiri <index> kali.

Dalam pseudocode, ini akan dieksekusi oleh fungsi kanvas:

1.Menulis ab ke arah2.Menulis bc ke arah3.Menulis CD ke arah4.Menulis de ke arah5.Menulis ef ke arah6.Menulis fg ke arah...

Terakhir, Anda dapat melihat bahwa argumen filler panjangnya-1 'diputar' - 1 kali ke kanan, yang berarti bahwa kanvas akan beralih melalui daftar berikut (bersepeda dan karena itu tidak terbatas):

[ab,bc,CD,de,ef,fg,gh,Hai,aku j,jk,...

Yang menghasilkan sup alfabet yang diinginkan bentuk ascii-art.

Adnan
sumber
Ok, saya menyerah. Mencoba mencari alternatif yang lebih pendek, tetapi saya tidak melihatnya. AA¹k._alternatifnya bisa A¹¡RJ«, tetapi itu adalah byte-count yang sama. •1못*Ć,ãiDΣ•alternatifnya bisa •õÕ₆qηµñ–†f•·, tetapi itu adalah byte-count yang sama. Baiklah Jawaban bagus!
Kevin Cruijssen
11

Perl 6 , 100 byte

{"2XYZABC
 VW5DE
U9F
T9G
S9H
 RQ5JI
2PONMLK".trans(/\S/=>{(try ' 'x$/+1)||chr ($/.ord+.ord)%26+65})}

Cobalah online!

Ganti semua huruf dalam string dengan rekan yang bergeser, sambil mengganti angka dengan jumlah spasi yang diwakilinya ditambah satu.

Penjelasan

{                                                            }# Anonymous code block
 "...".trans(/\S/=>{                                       }) # Translate non-whitespace
                    (try ' 'x$/+1)      # If digits, the amount of spaces plus one
                                  ||chr ($/.ord+.ord)%26+64  # Else the shifted letter
Jo King
sumber
9

Ruby , 107 byte

->n{a=(0..6).map{' '*11}
(?A..?Z).map{|i|j,k=(1i**((i.ord-n.ord-6)/6.5)).rect;a[3.5*k+=1][5.2*j+6]=i}
a*$/}

Cobalah online!

Sintaks yang ditingkatkan "i".to_c-> 1i(Disarankan oleh Jordan)

Sistem koordinat diubah sehingga 0 derajat berada di kanan dan bukan di atas. Ini memungkinkan 0.5->6

Pengganda yang disesuaikan jdan kuntuk kependekan

Daripada mencetak hasil puts a, gabungkan elemen array dan kembalikan stringa*$/

Ruby , 119 byte

->n{a=(0..6).map{' '*11}
(?A..?Z).map{|i|j,k=("i".to_c**((i.ord-n.ord+0.5)/6.5)).rect;a[3.5-j*3.3][6+k*5.17]=i}
puts a}

Menggunakan bilangan kompleks yang dinaikkan ke daya untuk memetakan ke elips. Pergantian total adalah 26, sehingga setiap kuadran adalah 6,5.

Pendekatan ini bergantung pada output yang diperlukan menyerupai elips cukup bahwa pemetaan yang valid dapat dicapai.

Cobalah online!

Level River St
sumber
@Jordan terima kasih, saya belum pernah melihat sintaks itu sebelumnya!
Level River St
8

Arang , 33 byte

GH→→↘→↘↓↓77←←←←↖←↖↑↑↗→↗→→²✂⁺αα⌕αS

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

GH

Lacak sebuah jalan.

→→↘→↘↓↓77←←←←↖←↖↑↑↗→↗→→

Garis besar mangkuk. Masing-masing 7mengembang ke ↙←.

²

Pindahkan satu karakter pada satu waktu (API ini tumpang tindih dengan ujung setiap baris dengan yang berikutnya).

✂⁺αα⌕αS

Gambar menggunakan alfabet dua kali lipat, tetapi mulai dari posisi karakter input.

Neil
sumber
8

MATL , 49 byte

7I8*32tvB[1b]&Zvc2Y2j7+_YSy&f7-w4-_Z;YPE\,&S])yg(

Berantakan sekali. Tapi itu menyenangkan menulis. Bahkan ada arctangent yang terlibat.

Cobalah online!

Penjelasan

Kode

7I8*32tvB

menciptakan array angka dan mengubahnya menjadi biner. Ini menghasilkan matriks zero-one

0 0 0 1 1 1
0 1 1 0 0 0
1 0 0 0 0 0
1 0 0 0 0 0

yang merupakan kuadran kiri atas dari sebuah matriks yang menentukan posisi huruf.

[1b]&Zv

mencerminkan kuadran itu secara vertikal tanpa mengulangi baris terakhir, dan secara horizontal mengulang kolom terakhir untuk menghasilkan matriks penuh:

0 0 0 1 1 1 1 1 1 0 0 0
0 1 1 0 0 0 0 0 0 1 1 0
1 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 1
0 1 1 0 0 0 0 0 0 1 1 0
0 0 0 1 1 1 1 1 1 0 0 0

Kami sekarang memiliki topeng dengan posisi. Kode

c

mengubahnya menjadi char, karena hasil akhirnya akan menjadi matriks char. Karakter 0 ditampilkan sebagai spasi, dan entri bukan nol akan ditulis dengan huruf yang sesuai.

2Y2

mendorong string 'abc···xyz', yang berisi 26 huruf. String ini harus digeser secara melingkar sesuai input. Untuk melakukannya,

j7+_YS

membaca surat masukan, menambahkan 7 ke kode ASCII-nya, dan meniadakan hasilnya. Untuk input, 'a'ini memberi −104, yang merupakan kelipatan dari 26, jadi menggeser secara melingkar dengan jumlah ini tidak akan menghasilkan apa-apa. Jika inputnya adalah bini memberi −105, yang menggeser string 1 langkah ke kiri untuk menghasilkan 'bcd···yza'; dll.

Langkah selanjutnya adalah menentukan urutan string yang digeser akan ditulis ke dalam entri matriks yang tidak nol. Untuk akhir ini,

y&f

membuat salinan matriks dan mendorong dua vektor yang berisi posisi baris dan kolom berbasis 1 dari nonzeros. Kemudian

7-w4-_

kurangi 7 dari yang terakhir, bawa yang pertama ke atas, kurangi 4 dari itu, dan negasikan. Angka 7 dan 4 menentukan asal koordinat, sehingga sudut-sudut vektor posisi dari entri bukan nol sehubungan dengan asal koordinat menentukan urutan yang diinginkan.

Z;YPE\

menghitung argumen argumen dua modulo 2 * pi untuk menghasilkan sudut tersebut. Sekarang sudut terkecil, yaitu 0, sesuai dengan entri di mana huruf pertama harus pergi, dan sisanya maju berlawanan arah jarum jam.

,&S])

menata ulang huruf-huruf dalam string sesuai dengan sudut-sudut itu, sehingga ketika huruf-huruf tersebut ditulis ke dalam entri-entri matriks yang tidak nol dalam urutan kolom-utama (turun, lalu lintas) hasilnya akan benar. Ini dilakukan oleh

yg(

Misalnya, jika inputnya adalah 'a'string tidak digeser secara melingkar:

abcdefghijklmnopqrstuvwxyz

Pengaturan ulang sesuai sudut mengubah ini menjadi

utsvrwqxpyoznamblckdjeifgh

sehingga 'u'akan masuk dengan benar ke entri bukan nol pertama (dalam urutan kolom-utama), yaitu (3,1) dalam notasi matriks; 't'akan ke (4,1), 's'ke (5,1); 'v'ke (2,2) dll:

   ······   
 v·      ·· 
u          ·
t          ·
s          ·
 ··      ·· 
   ······   
Luis Mendo
sumber
@EriktheOutgolfer Saya akhirnya menemukan waktu untuk menambahkan penjelasan
Luis Mendo
1
Woah ... Sebenarnya saya pikir Anda meninggalkan ini karena Anda menghapus komentar itu. : P
Erik the Outgolfer
7

Python 2 , 129 byte

lambda x:''.join((i,chr((ord(x)+ord(i))%26+65),' '*5)[ord(i)/46]for i in'''   XYZABC
 VW] DE
U]]F
T]]G
S]]H
 RQ] JI
   PONMLK''')

Cobalah online!

Erik the Outgolfer
sumber
7

R , 139 122 byte

-17 byte terima kasih kepada Giuseppe

u=utf8ToInt;`*`=rep;o=c(' '*12,'
')*7;o[u("  &3@LKWVUTSRDC5(")]=LETTERS[(13:38+u(scan(,'')))%%26+1];cat(o,sep='')

Penjelasan:

o=rep(c(rep(' ',12),'
'),7) 

Membangun kotak ruang kosong

u(" &3@LKWVUTSRDC5(")

adalah seperangkat indeks untuk posisi surat yang sesuai dengan:

c(7:9,23,24,38,51,64,76,75,87:82,68,67,53,40,27,15,16,4:6)

TIO

Aaron Hayman
sumber
1
Anda tidak pernah menggunakan intToUtf8sehingga mereka adalah byte asing, tetapi jika Anda menggunakan *di tempat rep, Anda bisa mendapatkan Hemat 2 byte dan mendapatkan 125 byte
Giuseppe
1
Oh, dan menggunakan karakter byte-rendah alih-alih ascii yang dapat dicetak, Anda dapat mencukur -32, untuk 122 byte . Anda dapat membuatnya sendiri dengan menggunakan cat(intToUtf8(bytes)).
Giuseppe
@ Giuseppe Saya cukup yakin saya sudah menghapus intToUtf8, terlalu banyak versi dari fungsi terbuka sekaligus kurasa. Nice menyimpan semua pemikiran bulat, terima kasih
Aaron Hayman
6

JavaScript (Node.js) ,  121  119 byte

Disimpan 2 byte berkat @tsh

c=>`2XYZABC
0VW5DE
U9F
T9G
S9H
0RQ5JI
2PONMLK`.replace(/./g,x=>''.padEnd(+x+1)||(B=Buffer)([65+([a,b]=B(c+x),a+b)%26]))

Cobalah online!

Bagaimana?

Kode ini disalahgunakan Bufferxc

c="H"x="B"

// extracting the ASCII codes
Buffer(c + x)  Buffer("HB")  <Buffer 48 42>

// assigning them to variables
[a, b] = Buffer(c + x)  a = 0x48 (72) and b = 0x42 (66)

// computing the ASCII code of the target letter
65 + ((a + b) % 26)  65 + (138 % 26)  65 + 8  73

// turning it back into a character
Buffer([73])  <Buffer 49>  implicitly coerced to "I" by replace()
Arnauld
sumber
119 byte
tsh
4

R , 218 197 byte

-21 byte terima kasih kepada Giuseppe

function(t,l=letters,`*`=rep,s=" ",n="
",`~`=`[`,r=c(l~l>=t,l))cat(s*3,r~24:26,r~1:3,n,s,r~22:23,q<-s*6,r~4:5,n,r~21,u<-s*10,r~6,n,r~20,u,r~7,n,r~19,u,r~8,n,s,r~17:18,q,r~10:9,n,s*3,r~16:11,sep='')

Cobalah online!

Tidak Disatukan:

alphasoup <- function(startlet){
  startnum <- which(l == startlet)
  rotatedletters <- c(letters[startnum:26], letters[1:(startnum -1)])[1:26]
  cat('   ',rotatedletters[24:26],rotatedletters[1:3], '\n ', 
      rotatedletters[22:23], s6 <- '      ', rotatedletters[4:5], '\n',
      rotatedletters[21], s10 <- rep(' ', 10), rotatedletters[6], '\n',
      rotatedletters[20], s10, rotatedletters[7], '\n',
      rotatedletters[19], s10, rotatedletters[8], '\n ',
      rotatedletters[17:18], s6, rotatedletters[10:9], '\n   ',
      rotatedletters[16:11],
      sep = '')
}

Membuat vektor huruf yang diputar dan digunakan catuntuk mengisi pinggiran mangkuk dengan vektor itu.

CT Hall
sumber
203 byte jika Anda tidak keberatan monstrositas satu baris; peningkatan terbesar mungkin menghapus whichdan menggunakan l>=tsebagai indeks secara langsung, yang bernilai 12 byte.
Giuseppe
2
198 bytes dengan alias [dengan ~. Ini jawaban yang bagus; Saya menghabiskan sekitar 250 byte dalam beberapa upaya pertama saya dengan pendekatan yang jauh lebih kompleks.
Giuseppe
Ah, itu pintar, saya lupa tentang perbandingan string.
CT Hall
3

Java 11, 134 byte

c->"2XYZABC_0VW5DE_U9F_T9G_S9H_0RQ5JI_2PONMLK".chars().forEach(i->System.out.print(i<59?" ".repeat(i-47):(char)(i>90?10:(c+i)%26+65)))

Cobalah online.

Versi 136 byte dengan potensi untuk golf?

c->"2XYZABC_0VW5DE_U9F_T9G_S9H_0RQ5JI_2PONMLK".chars().forEach(i->System.out.printf("%"+(i<59?i-47:"")+"c",i>90?10:i<59?32:(c+i)%26+65))

Cobalah online.

Penjelasan (dari jawaban pertama)

c->                          // Method with character parameter and no return-type
  "2XYZABC_0VW5DE_U9F_T9G_S9H_0RQ5JI_2PONMLK"
                             //  Template-String
    .chars().forEach(i->     //  Loop over the unicode values of its characters:
    System.out.print(        //   Print:
     i<59?                   //    If the value is below 59 (so a digit character):
      " ".repeat(i-47)       //     Repeat a space that digit + 1 amount of times
     :(char)(i>90?           //    Else-if the value is above 90 (an underscore character):
              10             //     Print a newline
             :               //    Else:
              (c+i)          //     Add the current value and the input together
                   %26       //     Take modulo-26 of it to get the index in the alphabet
                      +65))) //     And add 65 to make it an uppercase letter
Kevin Cruijssen
sumber
Mengapa tidak mengganti digit dengan yang tidak diinginkan? Dengan begitu, Anda bisa menghilangkani-47
Perwujudan Ketidaktahuan
@EmbodimentofIgnorance Saya khawatir tidak akan menyimpan byte. Jumlah spasi adalah 3, 1, 6, dan 10. 10 digunakan tiga kali dan masing-masing 2 byte sebagai karakter ( \n). Jadi apakah saya menggunakan unsintables dan 3x \nwith iatau digit-1 with i-47, keduanya adalah 134 byte-count yang sama. Dan sayangnya saya tidak dapat memiliki yang tidak patut 0, kalau tidak saya bisa menggunakan 2,0,5,9 sebagai gantinya, dan gunakan i+1untuk menyimpan 1 byte secara total.
Kevin Cruijssen
2

Bahasa Wolfram (Mathematica) , 258 byte

(t[x_]:=Table[" ",x];w=RotateRight[Alphabet[],4-LetterNumber@#];j=Join;a[x_,y_]:=j[{w[[x]]},t@10,{w[[y]]}];b[m_,n_]:=j[t@1,w[[m;;m+1]],t@6,w[[n;;n+1]],t@1];""<>#&/@{j[t@3,w[[1;;6]]],b[25,7],a[24,9],a[23,10],a[22,11],Reverse@b[12,20],j[t@3,w[[19;;14;;-1]]]})&

Cobalah online!

J42161217
sumber
2

Haskell, 127 byte

("cXYZABC aVWfDE UjF TjG SjH aRQfJI cPONMLK">>=).(?)
t?c|c>'Z'=' '<$['a'..c]|c<'!'="\n"|t<'B'=[c]|c>'Y'=t?'@'|1<2=pred t?succ c

Cobalah online!

Setiap karakter dalam string yang dikodekan didekodekan oleh fungsi ?menjadi string:

t?c                             -- 't' is the starting char,
                                -- 'c' the char from the encoded string
   |c>'Z'=' '<$['a'..c]         -- if 'c' is a lowercase letter, return some spaces
                                -- 'a': one, 'b': two, etc
   |c<'!'="\n"                  -- if 'c' is a space, return a newline
   |t<'B'=[c]                   -- if 't' is the letter A, return 'c'
   |c>'Y'=t?'@'                 -- wrap around Z
   |1<2=pred t?succ c           -- else the result is the same as starting one letter
                                -- earlier (pred t) but looking at the successor of 'c'
nimi
sumber
2

Kotlin , 148 146 145 byte

Menghapus kurung tambahan untuk -2
String mentah yang diganti untuk -1

{l:Char->"2XYZABC 0VW5DE U9F T9G S9H 0RQ5JI 2PONMLK".map{c->if(c>'@')((c-'A'+(l-'A'))%26+65).toChar()
else if(c>' ')" ".repeat(c-'/')
else '\n'}}

Cobalah online!

JohnWells
sumber
2

C # (Visual C # Interactive Compiler) , 126 118 byte

n=>$@"   XYZABC
 VW{"",6}DE
U {"",9}F
T {"",9}G
S {"",9}H
 RQ{"",6}JI
   PONMLK".Select(b=>b<65?b:(char)((b+n)%26+65))

Disimpan 8 byte berkat @someone. Ya, itu sebenarnya username-nya.

Cobalah online!

Perwujudan Ketidaktahuan
sumber
Interpolasi string untuk 118 byte . Mungkin dapat diterima untuk mengembalikan array kode (menghemat ~ 8 byte), tapi saya tidak yakin.
seseorang
@ seseorang yang baik, lupa tentang interpolasi string
Perwujudan Ketidaktahuan
2

Permintaan TSQL, 238 byte

DECLARE @y char='G'

,@ char(91)=3;WITH C as(SELECT'5585877636333330301125255'z,8a,ascii(@y)x
UNION ALL
SELECT stuff(z,1,1,''),a+left(z,1)/3*13+left(z,1)%3-14,(x+14)%26+65FROM
C WHERE''<z)SELECT
@=stuff(stuff(@,a,1,char(x)),1+a/13*13,1,char(13))FROM
C PRINT @

Tautan uji untuk jawaban ini memecahkan jeda baris dan mengecualikan spasi. Saya telah mengganti spasi dengan titik dan mengganti char (13) dengan char (13) + char (10) untuk menunjukkan hasil yang dapat dibaca.

Cobalah online

Tidak Disatukan:

DECLARE @y char='G'

-- @ is the string being printed last. 
-- @ is populated with 3 to save a byte
-- the number 3 gets replaced later
-- (this could have been any 1 digit value), 
-- @ is automatically filled with spaces, because
-- it is declared as a char(x) and assigned a value
,@ char(91)=3;
-- recursive query
WITH C as
(
-- z string containing digits for the direction of next letter
-- z should not contain 4 because it will point to same position.
-- values in z 0,1,2,3,4,5,6,7,8 can logally convert to 
-- (-1,-1),(-1,0),(-1,1),(0,-1),(0,0),(0,1),(1,-1),(1,0),(1,1)
-- a is the starting position
  SELECT'5585877636333330301125255'z,8a,ascii(@y)x
  UNION ALL
-- stuff remove first character from the z string
-- a calculate next position of the next letter
-- x cycle the input letter
  SELECT stuff(z,1,1,''),a+left(z,1)/3*13+left(z,1)%3-14,(x+14)%26+65
-- repeat recursive until long string is empty
  FROM C
  WHERE''<z
)
SELECT
-- 1st stuff replace the character to created the start of a 
--   logical line in the string @ this is where 3 gets overwritten
-- 2nd stuff replaces a character(space if coded correct) 
--  with the letter at the calculated position.
  @=stuff(stuff(@,a,1,char(x)),1+a/13*13,1,char(13))
FROM C

PRINT @
t-clausen.dk
sumber
@MickyT ok, terima kasih atas tanggapan Anda, saya akan memperbaikinya hari ini jika saya bisa mendapatkan akses ke db
t-clausen.dk
@MickyT itu harus diperbaiki sekarang
t-clausen.dk
1
terlihat bagus sekarang.
MickyT
1

PHP , 236 229 226 byte

<?=($a=ord(file_get_contents('php://stdin'))-65)?preg_replace_callback('~\w~',function($m)use($a){return chr((ord($m[0])-65+$a)%26+65);},'   XYZABC
 VW      DE
U          F
T          G
S          H
 RQ      JI
   PONMLK'):'';

Cobalah online!

Pra-golf:

<?php
$adjust = ord(file_get_contents('php://stdin')) - 65;
echo preg_replace_callback('~\w~', function($match) use ($adjust) {
    $new = ord($match[0]) - 65;
    $new = ($new + $adjust) % 26;
    $new += 65;
    return chr($new);
}, '   XYZABC
 VW      DE
U          F
T          G
S          H
 RQ      JI
   PONMLK');

Penjelasan:

Menggunakan ordkami mengonversi ke integer antara 0 dan 255. A adalah 65 dan Z adalah 90.
Dengan menggunakan pengetahuan ini, kami mengambil input dan menguranginya hingga 65 sehingga kami memiliki nilai penyesuaian.
Kami kemudian beralih ke semua karakter, memanggil ordmereka, menguranginya hingga 65, meningkatkannya dengan nilai penyesuaian kami. Dengan menggunakan modulo, kami kembali ke 0 jika melebihi 26.
Kami kemudian menambahnya lagi menjadi 65 dan mengubahnya kembali menjadi huruf chr.

Sedihnya php: // stdin hanya dapat diinterogasi sekali, jadi kita perlu meneruskan input ke fungsi di loop kita, mencegah kita dari menyimpan byte use($a)dan harus mendeklarasikan variabel di luar fungsi menghentikan kita dari bersih menggunakan <?=metode gema - kita harus membungkus semuanya dalam terner raksasa.

Bergeser
sumber
1

C (GCC) 286 byte

Bukan golf terpendek, tapi ini bekerja

#define r(a)(a+c)%26+65
#define R(a)for(i=10;i;a[--i]<33?:(a[i]=r(a[i])));
i;f(c){char*S="          ",T[]="   XYZABC\n",E[]="VW      DE\n",F[]="RQ      JI\n",B[]="   PONMLK";R(T)R(E)R(F)R(B)printf("%s %s%c%s%c\n%c%s%c\n%c%s%c\n %s%s",T,E,r(85),S,r(70),r(84),S,r(71),r(83),S,r(72),F,B);}

Cobalah online

rtpax
sumber
274 bytes
ceilingcat
0

Merah , 139 byte

func[a][foreach c{   XYZABC
 VW      DE
U          F
T          G
S          H
 RQ      JI
   PONMLK}[if c > sp[c: c + a % 26 + 65]prin c]]

Cobalah online!

Solusi yang sangat naif.

Galen Ivanov
sumber
0

Perl 5 -p , 110 byte

$b=/A/?Z:chr(-1+ord);$_=eval("'2XYZABC
 VW5DE
U9F
T9G
S9H
 RQ5JI
2PONMLK'=~y/A-Z/$_-ZA-$b/r");s/\d/$".$"x$&/eg

Cobalah online!

Xcali
sumber
$ b tidak perlu. -24 byte: TIO .
Grimmy
-2 bytes TIO
Nahuel Fouilleul
0

Javascript (V8), 316 byte

function a(b){n="abcdefghijklmnopqrstuvwxyz".split(b);n=b+n[1]+n[0],console.log(`   ${n[23]+n[24]+n[25]+n[0]+n[1]+n[2]}\n ${n[21]+n[22]}      ${n[3]+n[4]}\n${n[20]}          ${n[5]}\n${n[19]}          ${n[6]}\n${n[18]}          ${n[7]}\n ${n[17]+n[16]}      ${n[9]+n[8]}\n   ${n[15]+n[14]+n[13]+n[12]+n[11]+n[10]}`)}

Cobalah online

Pertama kali mencoba kode golf. Hargai setiap tips / umpan balik.

Kode asli sebelum dipotong:

function a(b){
    var c = ("abcdefghijklmnopqrstuvwxyz").split(b);
    c = b+c[1]+c[0]
    console.log(`   ${c[23]+c[24]+c[25]+c[0]+c[1]+c[2]}\n ${c[21]+c[22]}      ${c[3]+c[4]}\n${c[20]}          ${c[5]}\n${c[19]}          ${c[6]}\n${c[18]}          ${c[7]}\n ${c[17]+c[16]}      ${c[9]+c[8]}\n   ${c[15]+c[14]+c[13]+c[12]+c[11]+c[10]}`)
}
Edwin Chua
sumber
Halo dan selamat datang di PPCG. Seperti adanya, kiriman Anda adalah cuplikan, yang I / O tidak valid. Harap perbaiki jawaban Anda menjadi program atau fungsi lengkap - seperti pada versi non-minify Anda.
Jonathan Frech
@Jonathan Fresch terima kasih! Apakah itu cukup?
Edwin Chua
1
Ya, ini sekarang adalah pengiriman yang valid.
Jonathan Frech
0

C (gcc) , 200 198 197 byte

-3 bytes berkat ceilingcat.

x,z;f(c){char*y,t[27],i=0;for(c-=46;i<14;t[13+i++]=(c-i)%26+65)t[i]=(c+i)%26+65;for(i=-4;++i<4;printf("%*.*s%*.*s\n",3273>>x*3&7,x?:1,y,z,x?:1,y+2*!i+z))z="--*%"[x=abs(i)]-34,y=t+x+(x>2)+13*(i>0);}

Cobalah online!

gastropner
sumber
0

PHP , 131 byte

for(;$s='2YZABCD
 WX5EF
V9G
U9H
T9I
 SR5KJ
2QPONML'[$i++];)echo$s<A?$s<'0'?$s:str_pad('',$s+1,' '):chr(65+(ord($s)+ord($argn))%26);

Cobalah online!

Night2
sumber