ใส่คำลงในตารางตัวอักษร


55

แรงบันดาลใจจากมส์ที่ฉันเห็นก่อนหน้านี้วันนี้

คำอธิบายการท้าทาย

พิจารณากริดตัวอักษรที่ไม่มีที่สิ้นสุด:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
...

ใช้คำ ( CODEGOLFในตัวอย่างนี้) และทำให้เป็นลำดับของตารางแทนที่ตัวอักษรที่ไม่ได้ใช้ด้วยการเว้นวรรคและลบตัวอักษรที่ท้ายตารางอนันต์ทั้งหมด:

  C           O           
   DE G       O           
           L              
     F

ตัวอย่าง

STACKEXCHANGE

                  ST      
A C       K               
    E                  X  
  C    H                  
A            N            
      G                   
    E

ZYXWVUTSRQPONMLKJIHGFEDCBA

                         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

F

     F

ANTIDISESTABLISHMENTARIANISM

A            N     T      
        I                 
   D    I         S       
    E             ST      
AB         L              
        I         S       
       H    M             
    E        N     T      
A                R        
        I                 
A            N            
        I         S       
            M

หมายเหตุ

  • อนุญาตให้ใช้ช่องว่างต่อท้าย
  • คุณไม่จำเป็นต้องวางบรรทัดสุดท้ายในช่องว่าง ตัวอย่างเช่นถ้าอินพุตABCคุณอาจเอาต์พุตABCโดยไม่มีช่องว่างต่อท้าย 23 ช่อง
  • คุณอาจสมมติว่าการป้อนข้อมูลจะตรงกับ[A-Z]+regex
  • [a-z]+หรือคุณอาจจะใช้กรณีที่ต่ำกว่าตัวอักษรซึ่งในกรณีการส่งออกจะตรงกับ
  • คุณต้องใช้การขึ้นบรรทัดใหม่ ( \n, \r\nหรือเทียบเท่า) เพื่อแยกสายที่เป็นรายการของสตริงไม่ได้เป็นรูปแบบผลลัพธ์ที่เหมาะสม
  • นี่คือความท้าทายของการดังนั้นทำให้รหัสของคุณสั้นที่สุด!

มีการขึ้นบรรทัดใหม่นำหรือไม่
Erik the Outgolfer

@EriktheOutgolfer แน่นอนว่าตราบใดที่มันไม่ได้ทำให้โครงสร้างของตารางยุ่งเหยิง
shooqie

มันจะโอเคไหมถ้าเกิดข้อผิดพลาดที่ไม่ร้ายแรงถึงขั้นหยุดโปรแกรม?
Zacharý

@ Zacharýถึงแม้ว่าฉันจะสามารถดูว่ามันสามารถบันทึกบางไบต์ฉันคิดว่ามันน่าเกลียดและสร้างผลลัพธ์ที่ไม่พึงประสงค์และฟุ่มเฟือย ไม่เลย แก้ไข: หากคุณไม่สามารถทำให้โปรแกรมของคุณออกโดยไม่ต้องเสียชีวิตผ่านรหัสออกหรือสิ่งที่ไม่พิมพ์ร่องรอยการติดตามสแต็กยกเว้นหรือสิ่งที่คล้ายกับ stderr
shooqie

7
กรณีทดสอบที่แนะนำ: BALLOON(อักขระสองตัวที่อยู่ติดกันที่เหมือนกัน)
Kevin Cruijssen

คำตอบ:


10

Huskขนาด 15 ไบต์

TṪS`?' €…"AZ"ġ>

ลองออนไลน์!

คำอธิบาย

TṪS`?' €…"AZ"ġ>  Implicit input, e.g. "HELLO"
             ġ>  Split into strictly increasing substrings: x = ["H","EL","LO"]
        …"AZ"    The uppercase alphabet (technically, the string "AZ" rangified).
 Ṫ               Outer product of the alphabet and x
  S`?' €         using this function:
                   Arguments: character, say c = 'L', and string, say s = "EL".
       €           1-based index of c in s, or 0 if not found: 2
  S`?'             If this is truthy, then c, else a space: 'L'
                 This gives, for each letter c of the alphabet,
                 a string of the same length as x,
                 containing c for those substrings that contain c,
                 and a space for others.
T                Transpose, implicitly print separated by newlines.

7

Java 10, 161 159 152 ไบต์

s->{var x="";int p=0;for(var c:s)x+=p<(p=c)?c:";"+c;for(var y:x.split(";"))System.out.println("ABCDEFGHIJKLMNOPQRSTUVWXYZ".replaceAll("[^"+y+"]"," "));}

-2 ไบต์ขอบคุณที่@Nevay
-7 ไบต์พิมพ์โดยตรงแทนที่จะคืนค่าสตริงและแปลงเป็น Java 10

คำอธิบาย: "

ลองที่นี่

s->{                      // Method with String parameter and no return-type
  var x="";               //  Temp-String
  int p=0;                //  Previous character (as integer), starting at 0
  for(var c:s)            //  Loop (1) over the characters of the input
    x+=p<(p=c)?           //   If the current character is later in the alphabet
                          //   (replace previous `p` with current `c` afterwards)
        c                 //    Append the current character to Temp-String `x`
       :                  //   Else:
        ";"+c;            //    Append a delimiter ";" + this character to Temp-String `x`
  for(var y:x.split(";")) //  Loop (2) over the String-parts
    System.out.println(   //   Print, with trailing new-line:
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                          //    Take the alphabet,
        .replaceAll("[^"+y+"]"," "));}
                          //    and replace all letters not in the String-part with a space

ส่วนแรกของวิธีการแยกคำอินพุตเป็นส่วนที่มีตัวคั่น
ตัวอย่างเช่น: CODEGOLFCO;DEGO;L;Fหรือ→BALLOONB;AL;LO;O;N

ส่วนที่สองจะวนรอบส่วนเหล่านี้และใช้ regex [^...]เพื่อแทนที่ทุกอย่างที่ไม่ตรงกับช่องว่าง
ตัวอย่างเช่น.replaceAll("[^CO]"," ")ออกจากCและOและแทนที่ทุกอย่างอื่นด้วยช่องว่าง


1
มันจะB;AL;LO;O;Nไม่เป็นอย่างนั้นหรือ
NieDzejkob

1
-2 for(char c:s)x+=p<(p=c)?c:";"+c;ไบต์:
Nevay




4

JavaScript (ES6), 79

แก้ไขเนื่องจากมีการยอมรับการขึ้นบรรทัดใหม่ฉันสามารถบันทึกได้ 2 ไบต์

s=>eval("for(o='',v=i=0;c=s.charCodeAt(i);v%=27)o+=v++?c-63-v?' ':s[i++]:`\n`")

สำหรับอีก 1 ไบต์ฉันสามารถรับอินพุตตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่:

s=>eval("for(o='',v=i=0;c=s[i];v%=27)o+=v++?parseInt(c,36)-8-v?' ':s[i++]:`\n`")

น้อย golfed

s=>{
  var i,o,c,v
  for(o = '', v = 1, i = 0; c = s.charCodeAt(i); v %= 27)
    o += v++ ? c-63-v ? ' ' : s[i++] : '\n'
  return o
}  

ทดสอบ

f=s=>eval("for(o='',v=i=0;c=s.charCodeAt(i);v%=27)o+=v++?c-63-v?' ':s[i++]:`\n`")

function update() {
  var i=I.value
  i=i.replace(/[^A-Z]/gi,'').toUpperCase()
  O.textContent=f(i)
}

update()
<input id=I value='BALLOON' oninput='update()' >
<pre id=O></pre>


คุณสามารถแทนที่\nด้วยบรรทัดใหม่ตามตัวอักษรใน backticks สำหรับ -1 ไบต์
Justin Mariner

@JustinMariner ไม่ฉันไม่สามารถไม่ได้อยู่ในเครื่องหมายคำพูดคู่ใน eval
edc65

โอ้นั่นเป็นความอัปยศ ความผิดฉันเอง.
Justin Mariner

4

MATL , 24 23 ไบต์

''jt8+t1)wdh26X\Ys(26e!

ใช้อักษรตัวพิมพ์เล็ก

ลองที่MATL Online!

คำอธิบาย

''     % Push empty string
jt     % Push input string. Duplicate
8+     % Add 8 to each char (ASCII code). This transforms 'a' 105,
       % 'b' into 106, which modulo 26 correspond to 1, 2 etc
t1)    % Duplicate. Get first entry
wd     % Swap. COnsecutive differences.
h      % Concatenate horizontally
26X\   % 1-based modulo 26. This gives a result from 1 to 26
Ys     % Cumulative sum
(      % Write values (converted into chars) at specified positions
       % of the initially empty string
26e    % Reshape into a 26-row char matrix, padding with char 0
!      % Transpose. Implicitly display. Char 0 is shown as space

4

Japt , 18 16 ไบต์

-2 ไบต์ต้องขอบคุณ @Shaggy

;ò¨ £B®kX ?S:Z
·

อินพุตตัวพิมพ์ใหญ่เท่านั้น

ลองออนไลน์!

คำอธิบาย

;

สลับไปที่ตัวแปรทางเลือกโดยที่Bเป็นตัวอักษรตัวพิมพ์ใหญ่

ò¨

แยกสตริงอินพุตระหว่างอักขระที่ตัวแรกมากกว่าหรือเท่ากับ ( ¨) ตัวที่สอง

£

แมปแต่ละพาร์ติชันตามฟังก์ชันซึ่งXเป็นพาร์ติชันปัจจุบัน

แมปอักขระแต่ละตัวในตัวอักษรตัวพิมพ์ใหญ่ต่อไปนี้โดยZเป็นตัวอักษรปัจจุบัน

kX

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

?S:Z

หากนั่นคือความจริง (ไม่ใช่สตริงว่าง) ให้ส่งคืนช่องว่าง ( S) หรือส่งคืนจดหมายปัจจุบัน

·

เข้าร่วมผลลัพธ์ของบรรทัดก่อนหน้าด้วยการขึ้นบรรทัดใหม่และพิมพ์ผลลัพธ์


r"[^{Z}]"Sดูเหมือนว่า10 ไบต์จะค่อนข้างไร้สาระ แต่ฉันก็ไม่สามารถหาวิธีที่ดีกว่านี้ได้อีก ...
ETHproductions



@Shaggy คิดดีด้วยkX!
Justin Mariner

ที่จริงฉันคิดว่าคุณสามารถเปลี่ยนkX ?S:Zเป็นoX ªSบันทึกสองไบต์
ETHproductions


3

เยลลี่ขนาด 19 ไบต์

<2\¬0;œṗfȯ⁶$¥€@€ØAY

ลองออนไลน์!


OI<1®;-> >2\0;เพื่อบันทึกหนึ่งไบต์ (จริง ๆ แล้วฉันทำเช่นกัน>2\0;œṗµØAf€ȯ€⁶µ€Yสำหรับ 18 ซึ่งฉันเองหาง่ายกว่าในการแยกวิเคราะห์)
Jonathan Allan

@JonathanAllan ผมคิดว่าจะล้มเหลวBALLOONหรือบางสิ่งบางอย่าง
Erik the Outgolfer

คุณถูกต้องใช่ - ดังนั้นมันจะต้องมีไบต์อื่นด้วยสิ่งที่ชอบ<2\1;¬; โอ้ดี
Jonathan Allan

@JanathanAllan ต่อไปฉันจะใช้ความคิดของคุณในคำตอบของฉัน ... เสร็จแล้ว
Erik the Outgolfer

3

C (gcc), 91 63 ไบต์

-28 ขอบคุณ ASCII เท่านั้น

_;f(char*s){for(_=64;*s;)putchar(++_>90?_=64,10:*s^_?32:*s++);}

ลองออนไลน์!


ก่อนหน้านี้:

i,j;f(char*s){while(s[i]){for(j=65;j<91;j++)s[i]==j?putchar(s[i++]):printf(" ");puts("");}}

ใช่มีวิธีแก้ปัญหาที่สั้นกว่า แต่ฉันสังเกตเห็นหลังจากฉันเขียนมัน ... ลองออนไลน์!


82 ไบต์ , 80ถ้าอนุญาตให้ขึ้นบรรทัดใหม่ได้
ASCII-only



3

Mathematica, 101 ไบต์

StringRiffle[
  Alphabet[]/.#->" "&/@
   (Except[#|##,_String]&@@@
     Split[Characters@#,#==1&@*Order]),"
",""]&

SplitOrderการป้อนข้อมูลเข้าที่เพิ่มขึ้นอย่างเคร่งครัดลำดับตัวอักษรเปรียบเทียบตัวอักษรที่อยู่ติดกันด้วย หากOrder[x,y] == 1แล้วxแจ๋วyในตัวอักษรและทำให้สามารถปรากฏบนบรรทัดเดียวกัน

สำหรับแต่ละลำดับตัวอักษรสร้างรูปแบบเพื่อจับคู่สตริงExceptสำหรับตัวอักษรเหล่านั้น เป็นชวเลข#|## Alternativesแทนที่ตัวอักษรของAlphabetที่ตรงกับรูปแบบด้วยช่องว่าง


ภาพประกอบของขั้นตอนกลาง:

"codegolf";
Split[Characters@#,#==1&@*Order]  &@%
Except[#|##,_String]&@@@         #&@%
Alphabet[]/.#->" "&/@               %
{{"c", "o"}, {"d", "e", "g", "o"}, {"l"}, {"f"}}

{Except["c" | "c" | "o", _String], 
 Except["d" | "d" | "e" | "g" | "o", _String], 
 Except["l" | "l", _String],
 Except["f" | "f", _String]}

{{" "," ","c"," "," "," "," "," "," "," "," "," "," "," ","o"," "," "," "," "," "," "," "," "," "," "," "},
 {" "," "," ","d","e"," ","g"," "," "," "," "," "," "," ","o"," "," "," "," "," "," "," "," "," "," "," "},
 {" "," "," "," "," "," "," "," "," "," "," ","l"," "," "," "," "," "," "," "," "," "," "," "," "," "," "},
 {" "," "," "," "," ","f"," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "}}

2

Golfscript, 22 21 ไบต์

ลองออนไลน์!

-1 ไบต์ต้องขอบคุณการกำหนดขั้นสุดท้ายใหม่อย่างระมัดระวังของnบิวด์อิน

{.n>{}{'
'\}if:n}%:n;

คำอธิบาย (ด้วยรุ่นที่แตกต่างกันเล็กน้อย):

{.n>{}{"\n"\}if:n}%:n; # Full program
{                }%    # Go through every character in the string
 .n>         if        # If ASCII code is greater than previous...
                       # (n means newline by default, so 1st char guaranteed to fit)
    {}                 # Do nothing
      {"\n"\}          # Else, put newline before character
               :n      # Redefine n as the last used character
                   :n; # The stack contents are printed at end of execution
                       # Literally followed by the variable n, usually newline
                       # So because n is by now an ASCII code...
                       # ...redefine n as the new string, and empty the stack

2

เรติน่า , 80 ไบต์

^
;¶
{`;.*
¶;ABCDEFGHIJKLMNOPQRSTUVWXYZ
¶¶
¶
)+`;(.*)(.)(.*¶)\2
$.1$* $2;$3
;.*

ลองออนไลน์!

มี newline ชั้นนำหนึ่งบรรทัดเสมอ รหัสค่อนข้างสมบุกสมบันเติมคำด้วยตัวอักษรพร้อมเครื่องหมาย (อัฒภาค) จากนั้นจะย้ายเครื่องหมายขึ้นไปที่ตัวอักษรตัวแรกของคำในขณะที่การเปลี่ยนตัวอักษรอื่น ๆ ทั้งหมดนั้นจะผ่านเข้าไปในช่องว่าง นอกจากนี้ยังลบอักษรตัวแรกของคำ มันทำซ้ำจนกว่าตัวอักษรตัวแรกของคำจะไม่อยู่หลังเครื่องหมายอีกต่อไป จากนั้นจะล้างเครื่องหมายและตัวอักษรที่เหลือและแทนที่ด้วยบรรทัดใหม่และตัวอักษรด้วยเครื่องหมายอีกครั้ง มันจะทำซ้ำเรื่อย ๆ จนกระทั่งคำที่ป้อนนั้นว่างเปล่าจากนั้นมันจะทำความสะอาดตัวอักษรและเครื่องหมายสุดท้ายโดยปล่อยเอาท์พุทที่ต้องการ


2

05AB1E , 18 ไบต์

ćIgµ¶?AvDyÊið?ë¼?ć

ลองออนไลน์!

มีปัญหากับ 05AB1E ć(แยก 1) ปล่อยสตริง / รายการว่างไว้ในสแต็คหลังจากแยกองค์ประกอบสุดท้ายแล้ว วิธีแก้ปัญหานี้จะสั้นลง 1-2 ไบต์หากไม่ได้เป็นเช่นนั้น

ćIgµ¶?AvDyÊið?ë¼?ć  Implicit input 
ć                   Extract the 1st char from the string
 Igµ                While counter != length of the string
    ¶?              Print a newline
      Av            For each letter of the lowercased alphabet
        DyÊ         Is the examined character different from the current letter?
           ið?      If true, then print a space

              ë¼?ć  Else increment the counter, print the letter and push
                    the next character of the string on the stack

ที่จริงแล้วð,หมายถึง "พิมพ์ช่องว่างและขึ้นบรรทัดใหม่"
Erik the Outgolfer

คุณถูก. แก้ไขรหัสเพื่อพิมพ์บรรทัดใหม่จริง
กอตติเนต์

2

เรติน่า , 130 126 ไบต์

$
¶A
{-2=`
$'
}T`RL`_o`.$
+`(?<=(.)*)((.).*¶(?<-1>.)*(?(1)(?!)).+\3.*$)
 $2
(?<=(.)*)((.).*¶(?<-1>.)*(?<-1>\3.*$))
¶$2
}`¶.*$

ลองออนไลน์! แก้ไข: บันทึกแล้ว 4 ไบต์โดยใช้เครื่องสร้างตัวอักษรของ @ MartinEnder คำอธิบาย:

$
¶A
{-2=`
$'
}T`RL`_o`.$

ผนวกตัวอักษร

+`(?<=(.)*)((.).*¶(?<-1>.)*(?(1)(?!)).+\3.*$)
 $2

จัดตำแหน่งตัวอักษรให้มากที่สุดเท่าที่เป็นไปได้กับตำแหน่งในตัวอักษร

(?<=(.)*)((.).*¶(?<-1>.)*(?<-1>\3.*$))
¶$2

เริ่มบรรทัดใหม่ก่อนอักษรตัวแรกที่ไม่สามารถจัดตำแหน่งได้

}`¶.*$

ลบตัวอักษร แต่ทำทุกอย่างอีกครั้งจนกว่าจะไม่มีตัวอักษรที่ไม่ตรงแนว


ดูเหมือนว่าจะพิมพ์เพียงหนึ่งบรรทัดไม่ใช่การจัดตำแหน่งตัวอักษรในบรรทัดถัดไป
Justin Mariner

@JustinMariner ฉันไม่ดีฉันพิมพ์ผิดในสนามกอล์ฟครั้งสุดท้ายของฉันและไม่สามารถตรวจสอบได้อย่างถูกต้อง
Neil

2

q / kdb + , 48 45 ไบต์

วิธีการแก้:

-1{@[26#" ";.Q.A?x;:;x]}@/:(0,(&)(<=':)x)_x:;

ลองออนไลน์!

หมายเหตุ:ลิงก์คือK (oK)พอร์ตของโซลูชันนี้เนื่องจากไม่มี TIO สำหรับ q / kdb +

ตัวอย่าง:

q)-1{@[26#" ";.Q.A?x;:;x]}@/:(0,(&)(<=':)x)_x:"STACKEXCHANGE";
                  ST
A C       K
    E                  X
  C    H
A            N
      G
    E

q)-1{@[26#" ";.Q.A?x;:;x]}@/:(0,(&)(<=':)x)_x:"BALLOON";
 B
A          L
           L  O
              O
             N

คำอธิบาย:

Q ตีความจากขวาไปซ้าย การแก้ปัญหาแบ่งออกเป็นสองส่วน ก่อนอื่นให้แยกสตริงโดยที่อักขระถัดไปน้อยกว่าหรือเท่ากับปัจจุบัน:

"STACKEXCHANGE" -> "ST","ACK","EX","CH","AN","G","E"

จากนั้นนำสตริงว่าง 26 ช่องไปใช้กับอินพุตที่ดัชนีที่อินพุตปรากฏเป็นตัวอักษรและพิมพ์ไปยัง stdout

"__________________________" -> __________________ST______

ชำรุด:

-1{@[26#" ";.Q.A?x;:;x]}each(0,where (<=':)x) cut x:; / ungolfed solution
-1                                                  ; / print to stdout, swallow return value
                                                  x:  / store input as variable x
                                              cut     / cut slices x at these indices
                            (               )         / do this together
                                     (<=':)x          / is current char less-or-equal (<=) than each previous (':)?
                               where                  / indices where this is true
                             0,                       / prepended with 0
                        each                          / take each item and apply function to it
  {                    }                              / lambda function with x as implicit input
   @[      ;      ; ; ]                               / apply[variable;indices;function;arguments]
     26#" "                                           / 26 take " " is "      "...
            .Q.A?x                                    / lookup x in the uppercase alphabet, returns indice(s)
                   :                                  / assignment
                     x                                / the input to apply to these indices

หมายเหตุ:

  • -3 ไบต์โดยแทนที่ prev ด้วย K4 version

2

Powershell, 70 63 ไบต์

-7 ไบต์ขอบคุณ @Veskah

$args|%{if($_-le$p){$x;rv x}
$x=("$x"|% *ht($_-65))+($p=$_)}
$x

ลองออนไลน์!

คำอธิบาย:

สำหรับอักขระแต่ละตัวในอาร์กิวเมนต์ที่แบ่งออก:

  • สตริงเอาท์พุท$xและ$xค่าที่ชัดเจน( rvเป็นนามแฝงสำหรับตัวแปรลบ ) หากรหัสของตัวละครปัจจุบันน้อยกว่าหรือเทียบเท่า ( -le) กับรหัสของตัวละครก่อนหน้า
  • ผนวกช่องว่างและตัวละครในปัจจุบันเพื่อเก็บไว้เพื่อ$x $xนอกจากนี้ยังทำให้ค่าอักขระก่อนหน้านี้สดใหม่

$xการส่งออกที่ผ่านมา


1
63 Bytes ใช้ splatting พยายามที่จะใช้|% *htเพื่อบันทึกบางไบต์ แต่ดูเหมือนว่ามันจะพัง
Veskah



1

JavaScript (ES6), 87 ไบต์

f=([...s])=>s[0]?(g=i=>i>35?`
`+f(s):(i-parseInt(s[0],36)?" ":s.shift())+g(i+1))(10):""

ยอมรับอินพุตตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก เอาต์พุตตรงกับตัวพิมพ์ของอินพุต

การทดสอบ


1

Haskell, 81 74 73 ไบต์

q@(w:y)!(x:z)|w==x=x:y!z|1<2=min ' 'x:q!z
x!_=x
a=['A'..'Z']++'\n':a
(!a)

บันทึก 1 ไบต์ขอบคุณLaikoni !

ลองออนไลน์

Haskell Hugs การเพิ่มประสิทธิภาพ

  1. กอดล่ามช่วยให้ฉันเพื่อบันทึกหนึ่งไบต์มากขึ้นโดยการทำ(!cycle$['A'..'Z']++"\n")แทน: (!cycle(['A'..'Z']++"\n"))แต่GHC ไม่ชอบอดีต (ตอนนี้ล้าสมัยแล้ว Laikoni เขียนบรรทัดนั้นใหม่อีกครั้งในแบบที่บันทึกไว้ 1 ไบต์)

  2. เห็นได้ชัดว่า Hugs ยังไม่จำเป็นต้องวงเล็บรอบจับคู่รูปแบบรายการดังนั้นฉันสามารถบันทึกไบต์ที่สองขึ้นไปจาก: ไปq@(w:y)!(x:z)q@(w:y)!x:z


a=['A'..'Z']++'\n':a;(!a)คุณสามารถบันทึกไบต์ด้วย น่าสนใจตอนนี้ดูเหมือนว่า Hugs จะมีกฎที่ค่อนข้างอ่อนแอ
Laikoni

@Laikoni ฉันกำลังดู Haskell เป็นเวลาหลายเดือนแล้วและมันก็ไม่หยุดที่จะทำให้ฉันประหลาดใจ ฉันรักa=...:aเคล็ดลับ ขอบคุณ!
Cristian Lupascu

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

@Weateat ตัวช่วยสร้างฉันไม่รู้ตัว นี่เป็นเหตุผลที่สมบูรณ์แบบเนื่องจากข้อผิดพลาดที่ฉันได้รับใน GHC
Cristian Lupascu



1

ถ่าน 15 ไบต์

Fθ«J⌕αι⁺ⅉ‹⌕αιⅈι

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

 θ              Input string
F «             Loop over characters
     α     α    Uppercase letters predefined variable
      ι     ι   Current character
    ⌕     ⌕     Find index
             ⅈ  Current X co-ordinate
         ‹      Compare
        ⅉ       Current Y co-ordinate
       ⁺        Sum
   J            Jump to aboslute position
              ι Print current character


1

K (ngn / k) , 29 28 ไบต์

{{x@x?`c$65+!26}'(&~>':x)_x}

ลองออนไลน์!

{ } ฟังก์ชั่นที่มีข้อโต้แย้ง x

>':x สำหรับถ่านแต่ละตัวมันยิ่งใหญ่กว่าถ่านก่อนหน้านี้หรือไม่?

~ ลบล้าง

& ที่ใด (ที่ดัชนี) เรามีจริง

( )_xตัดxที่ดัชนีเหล่านั้นส่งคืนรายการสตริง

{ }' สำหรับแต่ละสตริงเหล่านั้น

`c$65+!26

ตัวอักษรภาษาอังกฤษ

x?ค้นหาดัชนีการเกิดขึ้นครั้งแรกของตัวอักษรแต่ละตัวในxใช้0N(ค่าพิเศษ "null") หากไม่พบ

x@ดัชนีxกับที่; การจัดทำดัชนีด้วย0Nผลตอบแทน" "ดังนั้นเราจึงได้ความยาว -26 สตริงซึ่งตัวอักษรจากxนั้นอยู่ในตำแหน่งตามตัวอักษรของพวกเขาและทุกอย่างก็คือช่องว่าง


1

R , 129 117 ไบต์

function(s){z={}
y=diff(x<-utf8ToInt(s)-64)
z[diffinv(y+26*(y<0))+x[1]]=LETTERS[x]
z[is.na(z)]=" "
write(z,1,26,,"")}

ลองออนไลน์!

คำอธิบาย (ungolfed):

function(s){
 z <- c()                  # initialize an empty vector
 x <- utf8ToInt(s)-64      # map to char code, map to range 1:26
 y <- diff(x)              # successive differences of x
 idx <- cumsum(c(          # indices into z: cumulative sum of:
    x[1],                  # first element of x
    ifelse(y<=0,y+26,y)))  # vectorized if: maps non-positive values to themselves + 26, positives to themselves
 z[idx] <- LETTERS[x]      # put letters at indices
 z[is.na(z)] <- " "        # replace NA with space
 write(z,"",26,,"")        # write z as a matrix to STDOUT ("") with 26 columns and empty separator.

1

R , 95 ไบต์

เพียงวิ่งผ่านตัวอักษรตัวพิมพ์ใหญ่ซ้ำ ๆ ในขณะที่เลื่อนตัวนับ 1 ถ้าคุณพบตัวอักษรในตำแหน่งตัวนับของคำและพิมพ์ตัวอักษรเว้นวรรค

function(s)while(F>""){for(l in LETTERS)cat("if"((F=substr(s,T,T))==l,{T=T+1;l}," "));cat("
")}

ลองออนไลน์!


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