Anahtar Dili çözümleyelim ve işleyelim! Bir dizi klavye tuş basımı ve / veya özel tuş girişi girildiğinde, tüm eylemler aşağıdaki klavyeye göre işlendiğinde ürünü çıkaran bir program, işlev vb. Yazın:
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ | = |Del|
+-------------------------------------------------------+
|TAB| q | w | e | r | t | y | u | i | o | p | [ | ] | \ |
| | Q | W | E | R | T | Y | U | I | O | P | { | } | | |
+-------------------------------------------------------+
|CAPS | a | s | d | f | g | h | j | k | l | ; | ' | RET |
| | A | S | D | F | G | H | J | K | L | : | " | |
+-------------------------------------------------------+
| SHIFT | z | x | c | v | b | n | m | , | . | / | SHIFT |
| | Z | X | C | V | B | N | M | < | > | ? | |
+-------------------------------------------------------+
| |
| SPACEBAR |
+-------------------------------------------------------+
Çıktı gerçek karakterler olduğu tuşlar değil boşluk oluşan ve vardır "karakteri tuşları" olarak bilinen olacak diğer anahtarlar değiştirilebilir mümkün, ve "özel tuşlar" olarak bilinen edilecektir boşluk diğer anahtarlar veya çıkış çıkışını değiştirmek olanlar söyledi. Girişte büyük harflerle gösterilecek olan alfabe karakter tuşları ya büyük harflerle ya Shift
da Caps Lock
büyük harf üretmek için değiştirilebilir ve karakter tuşlarının geri kalanı sadece Shift
alternatif karakterlerini üretmek için ile değiştirilebilir . Bu nedenle A
, girişte a A
normal çıktısı olan a
ve değiştirilmiş çıktısı ya Shift
veya Caps Lock
tuşuyla elde edilebilen karakter tuşuna karşılık gelir A
. Diğer yandan,/
/ ?
karakter anahtarına karşılık gelen , normal bir çıktısı /
ve ?
sadece Shift
bu zamanla elde edilebilen değiştirilmiş bir çıktısı vardır .
kurallar
Giriş her zaman bir dizi karakter tuşundan ve özel tuşlardan oluşan bir dize olacaktır . Girdi için dize eşlemenin tam anahtarı (yani girdide olmaları garanti edilen biçim) ve bunlara karşılık gelen eylemler / çıktılar aşağıdaki gibidir:
<DEL> -> Delete the previous character (including whitespace). If called when string is empty, nothing happens. If called 2 or more times in a row, 2 consecutive deletes happen. For instance, "RE<DEL><DEL>" should return an empty string ("") and also "R<RET><DEL><DEL>E" should return just "E".
<CAPS> -> Enable Caps Lock until <CAPS> appears again, upon which it is disabled, although it is not guaranteed to be disabled by the end of the input. Enabling this only modifies the upcoming alphabet keys resulting in them outputting only uppercase letters. For instance, "<CAPS>RE<CAPS>" results in the output "RE", but <CAPS>.<CAPS> would still result in a ".".
<RET> -> Add a new line.
<SPC> -> Add a single blank space.
<TAB> -> Add 4 spaces.
<SHFT> -> Shift is held down resulting in the alternate character of the upcoming keypress to be output, after which the key is released. For instance, "<SHFT>A" results in the output "A", "<SHFT>1" results in the output "!", and "<SHFT>1234" results in the output "!234" as only the first upcoming keypress is modified and nothing else. It is guaranteed that a character key will succeed a <SHFT>. Therefore, <SHFT><SPC> is not a possible input.
Giriş olarak boş bir dize de mümkündür, bunun için çıktı hiçbir şey olmamalıdır.
- Kullanımı herhangi yerleşik olduğu çözer bu sorunu doğrudan izin verilmez.
- Standart boşlukların kullanımına izin verilmez.
Test Durumları
Biçimde sunulur, Actual String Input -> Actual String Output
ardından birkaç açıklama yapılır.
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23
Çıkış
1
olarak1
anahtar bir geçiş basılırsa, o zaman basılı tutulur ve2
kilit ile sonuçlanır basılırsa@
çıkış. Ardından Shift tuşu bırakılır ve Sekme tuşuna basılarak 4 aralıklı girinti oluşur. Takibi, Kilit tuşuna basıldığında Caps, bundan sonraR
,.
,K
,A
,P
, ve.
tuşları çıktı sonuçlanan basıldığındaR.KAP.
. Son olarak, tek bir boşluk çıkışı ile sonuçlanan kayma takip eder!23
zaman olan çıkış1
,2
ve3
anahtarlar sonunda preslenir.<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890
Shift tuşu basılı tutulur ve ardından tuşu basılı tutulur
A
, sonuçta tuşlara basıldığında çıkış veA
ardından çıkışbcdefg
gelirB-G
. Sonra, Shift tuşuna tekrar aşağı düzenlenen ugramaktadirH
çıkışı bundan sonra anahtarH
ardındanijk
zamanI-K
tuşlarına basıldığında. Son olarak,1-4
tuşların her biri, her tuşa basmadan önce shift tuşunun basılı tutulmasıyla değiştirilir ve sonuç , tuşlara tekrar basıldığında çıkışın!@#$
bitmesi ile sonuçlanır .567890
5-0
<CAPS>THIS<SPC>IS<SPC>IN<SPC>ALL<SPC>CAPS<CAPS><SPC>NOW<SPC>THIS<SPC>IS<SPC>IN<SPC>ALL<SPC>LOWERCASE -> THIS IS IN ALL CAPS now this is in all lowercase
<TAB><SPC><TAB><SHFT>1 -> !
<CAPS>WWW<CAPS>.CODEGOLF.STACKEXCHANGE<SHFT>.COM -> WWW.codegolf.stackexchange>com
PROGRAMMING<CAPS><SPC>IS<SPC><CAPS>AWESOME -> programming IS awesome
<DEL><RET><DEL><RET><DEL> -> "" (Empty String)
Başlangıçta silme tuşuna basıldıktan sonra hiçbir şey olmuyor. Ardından, Geri tuşuna basıldığında geri silme tuşuna tekrar basıldıktan sonra silinen yeni bir satır oluşur. Son olarak, aynı dizi (yeni çizgi ve ardından geri boşluk) tekrarlanır. Tüm bunlardan sonra çıktı boş bir dizedir.
<SHFT>HI<SPC>HOW<SPC>ARE<SPC>YOU<SHFT>/<RET><SHFT>I<SPC><SHFT>AM<SPC>O<DEL><SHFT>GOOD<SHFT>1 -> Hi how are you?\nI Am Good!
<SHFT>,<CAPS>RET<CAPS><SHFT>. -> <RET>
Dize
<RET>
, gerçek dize çıktısı olmalıdır. Böylece, bu should not çıktı yeni bir satır.<CAPS>67890,.;'[]<CAPS> -> 67890,.;'[]
<CAPS><SHFT>A -> A
RE<DEL><DEL> -> "" (Empty String)
U<RET><DEL><DEL>I -> i
<DEL><DEL><DEL>5<DEL> -> "" (Empty string)
"" (Empty String) -> "" (Empty String)
Bu codegolf yani bayttaki en kısa kod kazanır!
AbcdefgHijk!@#$567890
mı? Ayrıca, # 8 testinde <SHFT>
, dizenin sonundadır, ancak kurallar şunu belirtmektedir: "Bir karakter anahtarının <SHFT> başaracağı garanti edilir."