Chuyển đổi đầu vào thành hướng


15

Thử thách

Cho đầu vào ở dạng <n1>, <n2>số có thể là -1, 0 hoặc 1, trả về hướng hồng y tương ứng . Các số dương di chuyển về phía Đông theo trục x và Nam theo trục y, Các số âm di chuyển về phía Tây theo trục x và Bắc theo trục y.

Đầu ra phải nằm trong hình thức South East, North East, North. Nó là trường hợp nhạy cảm.

Nếu đầu vào là 0, 0, chương trình của bạn phải trả về That goes nowhere, silly!.

Mẫu đầu vào / Outpot:

1, 1 -> South East

0, 1 -> South

1, -1 -> North East

0, 0 -> That goes nowhere, silly!

Đây là , câu trả lời ngắn nhất trong byte thắng.



1
Một số ví dụ với W, NW và SW là cần thiết.
seshoumara

@seshoumara Tôi đang sử dụng điện thoại di động, vì vậy không có backticks, nhưng NW sẽ là -1, -1
Matias K

1
Spaces có được phép không?
Arjun

Uhh ... Chắc chắn, tôi đoán. Miễn là nó trông giống nhau.
Matias K

Câu trả lời:


12

Japt , 55 51 byte

`
SÆ 
NÆ° `·gV +`
E†t
Wƒt`·gU ª`T•t goƒ Í2€e, Ðéy!

Giải trình

                      // Implicit: U, V = inputs
`\nSÆ \nNÆ° `       // Take the string "\nSouth \nNorth ".
·                     // Split it at newlines, giving ["", "South ", "North "].
gV                    // Get the item at index V. -1 corresponds to the last item.
+                     // Concatenate this with
`\nE†t\nWƒt`·gU       // the item at index U in ["", "East", "West"].
ª`T•t goƒ Í2€e, Ðéy!  // If the result is empty, instead take "That goes nowhere, silly!".
                      // Implicit: output result of last expression

Hãy thử trực tuyến!


Ừm ... tôi ... ??? Làm thế nào trên trái đất này làm việc? Japt có thích một số thứ lạ mắt thay thế các cặp nhân vật thông thường không?
HyperNeutrino

@HyperNeutrino Có, Japt sử dụng thư viện nén shoco thay thế các cặp ký tự chữ thường bằng một byte đơn.
Sản xuất ETH

Được rồi, điều đó thật tuyệt! Tôi sẽ xem xét điều đó, xem liệu tôi có thể sử dụng nó không.
HyperNeutrino

9

Python, 101 87 byte

Giải pháp thực sự ngây thơ.

lambda x,y:['','South ','North '][y]+['','West','East'][x]or'That goes nowhere, silly!'

Cảm ơn @Lynn vì đã tiết kiệm 14 byte! Thay đổi: Sử dụng phương thức string.split thực sự làm cho nó dài hơn; _; Ngoài ra, các chỉ số tiêu cực tồn tại trong python.


5
Bạn có thể cắt nó xuống còn 87 như thế này:lambda x,y:('','South ','North ')[y]+('','East','West')[x]or'That goes nowhere, silly!'
Lynn

2
Tôi đã tìm thấy một cách gọn gàng để có được một số hướng, nhưng thật không may, có vẻ như nó sẽ không hoạt động cho thử thách này. Hình tôi muốn chia sẻ dù sao đi nữa (có lẽ ai đó khéo léo hơn tôi có thể tìm ra cách giải quyết các vấn đề của nó, như khi x hoặc y = 0): lambda x,y:'North htuoS'[::x][:6]+'EastseW'[::y][:4]Chỉnh sửa: có thể bây giờ sẽ quá dài, nhưng bạn có thể thực hiện lát cắt thứ hai [:6*x**2], tương tự như vậy đối với chuỗi Đông / Tây, nếu bạn có thể tránh được lỗi trong lần cắt đầu tiên.
cole

@Lynn lambda x,y:('North ','South ')[y+1]+('West','East')[x+1]or'That goes nowhere, silly!'ngắn hơn 2 byte
Dead Possum

@Lynn ơi, cảm ơn! (Tôi quên mất các chỉ số tiêu cực!)
HyperNeutrino

@DeadPossum sẽ không làm việc vì nó sẽ trở lại South Eastcho (0, 0). Cảm ơn bạn mặc dù!
HyperNeutrino

6

PHP, 101 byte

[,$b,$a]=$argv;echo$a|$b?[North,"",South][1+$a]." ".[West,"",East][1+$b]:"That goes nowhere, silly!";

Lâu lắm rồi tôi mới lập trình PHP, nhưng làm sao nó biết Bắc, Nam, Tây và Đông là những chuỗi không có dấu ngoặc kép quanh chúng? Đây có phải là do Chuỗi rỗng chia sẻ cùng một mảng không? Nếu có, điều này cũng có nghĩa là bạn không thể có một mảng với các loại khác nhau cùng một lúc (như một mảng có cả chuỗi và số nguyên)?
Kevin Cruijssen

1
@KevinCruijssen North là một hằng số php.net/manual/en/lingu.constants.php Nếu hằng số không tồn tại, nó sẽ được hiểu là chuỗi. Một mảng trong PHP có thể chứa các loại khác nhau. chuỗi có thể được quy định tại bốn cách php.net/manual/en/language.types.string.php
Jörg Hülsermann

6

Perl 6 , 79 byte

{<<'' East South North West>>[$^y*2%5,$^x%5].trim||'That goes nowhere, silly!'}

Thử nó

Mở rộng:

{ # bare block lambda with placeholder parameters 「$x」 and 「$y」

  << '' East South North West >>\ # list of 5 strings
  [                               # index into that with:

    # use a calculation so that the results only match on 0
    $^y * 2 % 5, # (-1,0,1) => (3,0,2) # second parameter
    $^x % 5      # (-1,0,1) => (4,0,1) # first parameter

  ]
  .trim  # turn that list into a space separated string implicitly
         # and remove leading and trailing whitespace

  ||     # if that string is empty, use this instead
  'That goes nowhere, silly!'
}

6

JavaScript (ES6), 106 100 97 93 byte

Đó là một cách tiếp cận rất đơn giản. Nó bao gồm một vài toán tử ternary lồng vào nhau -

f=a=>b=>a|b?(a?a>0?"South ":"North ":"")+(b?b>0?"East":"West":""):"That goes nowhere, silly!"

Các trường hợp thử nghiệm

f=a=>b=>a|b?(a?a>0?"South ":"North ":"")+(b?b>0?"East":"West":""):"That goes nowhere, silly!"

console.log(f(1729)(1458));
console.log(f(1729)(-1458));
console.log(f(-1729)(1458));
console.log(f(-1729)(-1458));
console.log(f(0)(1729));
console.log(f(0)(-1729));
console.log(f(1729)(0));
console.log(f(-1729)(0));


a!=0có thể được thay thế bằng chỉ a, vì 0 là giả và tất cả các giá trị khác là trung thực. Ngoài ra, lấy đầu vào trong cú pháp currying ngắn hơn, và appoach mảng cũng ngắn hơn.
Lu-ca

@Luke Cảm ơn lời đề nghị! Tôi đã chỉnh sửa câu trả lời. Bây giờ, tôi đang đánh bại các giải pháp PHP và Python! Tất cả vì bạn!!! Cảm ơn!
Arjun

Lưu một byte khác bằng cách thực hiện f=a=>b=>và gọi hàm như f(1729)(1458); đó là cái currying syntaxmà @Luke đã đề cập.
Tom

Bạn có thể sử dụng một cách an toàn a|bthay vì a||b. Giả sử rằng đầu vào chỉ bao gồm -1, 0 hoặc 1 (không rõ ràng với tôi), bạn có thể thay thế a>0b>0bằng ~a~b.
Arnauld

Ngoài ra, bạn không cần những dấu ngoặc đơn này: a?(...):""/b?(...):""
Arnauld

4

Hàng loạt, 156 byte

@set s=
@for %%w in (North.%2 South.-%2 West.%1 East.-%1)do @if %%~xw==.-1 call set s=%%s%% %%~nw
@if "%s%"=="" set s= That goes nowhere, silly!
@echo%s%

Các forvòng lặp đóng vai trò như một bảng tra cứu để lọc khi (có thể phủ nhận) tham số bằng -1, và concatenating những lời phù hợp. Nếu không có gì được chọn thì tin nhắn ngớ ngẩn sẽ được in.


4

JavaScript (ES6), 86 byte

a=>b=>["North ","","South "][b+1]+["West","","East"][a+1]||"That goes nowhere, silly!"

Giải trình

Gọi nó với cú pháp currying ( f(a)(b)). Điều này sử dụng các chỉ số mảng. Nếu cả hai avà bằng b0, kết quả là một chuỗi rỗng giả. Trong trường hợp đó, chuỗi sau khi ||được trả về.

Thử nó

Hãy thử tất cả các trường hợp thử nghiệm ở đây:

let f=
a=>b=>["North ","","South "][b+1]+["West","","East"][a+1]||"That goes nowhere, silly!"

for (let i = -1; i < 2; i++) {
    for (let j = -1; j < 2; j++) {
        console.log(`${i}, ${j}: ${f(i)(j)}`);
    }
}


3

GNU sed , 100 + 1 (cờ r) = 101 byte

s:^-1:We:
s:^1:Ea:
s:-1:Nor:
s:1:Sou:
s:(.*),(.*):\2th \1st:
s:0...?::
/0/cThat goes nowhere, silly!

Theo thiết kế, sed thực thi tập lệnh nhiều lần như có các dòng đầu vào, vì vậy người ta có thể thực hiện tất cả các trường hợp thử nghiệm trong một lần chạy, nếu cần. Liên kết TIO dưới đây thực hiện điều đó.

Hãy thử trực tuyến!

Giải trình:

s:^-1:We:                         # replace '-1' (n1) to 'We'
s:^1:Ea:                          # replace '1' (n1) to 'Ea'
s:-1:Nor:                         # replace '-1' (n2) to 'Nor'
s:1:Sou:                          # replace '1' (n2) to 'Sou'
s:(.*),(.*):\2th \1st:            # swap the two fields, add corresponding suffixes
s:0...?::                         # delete first field found that starts with '0'
/0/cThat goes nowhere, silly!     # if another field is found starting with '0',
                                  #print that text, delete pattern, end cycle now

Không gian mẫu còn lại ở cuối chu kỳ được in ngầm.


2

05AB1E , 48 45 43 byte

õ'†Ô'…´)èUõ„ƒÞ „„¡ )èXJ™Dg_i“§µ—±æÙ,Ú¿!“'Tì

Hãy thử trực tuyến!

Giải trình

õ'†Ô'…´)                                       # push the list ['','east','west']
        èU                                     # index into this with first input
                                               # and store the result in X
          õ„ƒÞ „„¡ )                           # push the list ['','south ','north ']
                    èXJ                        # index into this with 2nd input
                                               # and join with the content of X
                       ™                       # convert to title-case
                        Dg_i                   # if the length is 0
                            “§µ—±æÙ,Ú¿!“       # push the string "hat goes nowhere, silly!"
                                        'Tì    # prepend "T"


2

Japt , 56 byte

N¬¥0?`T•t goƒ Í2€e, Ðéy!`:` SÆ NÆ°`¸gV +S+` E†t Wƒt`¸gU

Hãy thử trực tuyến! | Phòng thử nghiệm

Giải trình:

N¬¥0?`Tt go Í2e, Ðéy!`:` SÆ NÆ°`¸gV +S+` Et Wt`¸gU
Implicit U = First input
         V = Second input

N´0?`...`:` ...`qS gV +S+` ...`qS gU
N¬                                                     Join the input (0,0 → "00")
  ¥0                                                   check if input is roughly equal to 0. In JS, "00" == 0
    ?                                                  If yes:
      ...                                               Output "That goes nowhere, silly!". This is a compressed string
     `   `                                              Backticks are used to decompress strings
          :                                            Else:
           ` ...`                                       " South North" compressed
                 qS                                     Split on " " (" South North" → ["","South","North"])
                   gV                                   Return the string at index V
                     +S+                                +" "+ 
                        ` ...`                          " East West" compressed
                              qS gU                     Split on spaces and yield string at index U

Gợi ý: 00chính xác giống như 0, như là chữ số thêm được loại bỏ;)
ETHproductions

1
Giải pháp tốt thứ hai nhưng không có upvote. Tôi upvote cho bạn.
Arjun

1

Võng mạc , 84 82 81 byte

Lưu 1 byte nhờ @seshoumara đã đề xuất 0...?thay vì0\w* ?

(.+) (.+)
$2th $1st
^-1
Nor
^1
Sou
-1
We
1
Ea
0...?

^$
That goes nowhere, silly!

Hãy thử trực tuyến!


Đầu ra là sai. OP muốn các số dương di chuyển S theo trục y và các số âm để di chuyển N.
seshoumara

@seshoumara Phải, đã sửa nó cho cùng một số tiền (chỉ cần trao đổi NorSou)
Kritixi Lithos

Đồng ý. Ngoài ra, bạn có thể cạo 1 byte bằng cách sử dụng 0...?.
seshoumara

@seshoumara Cảm ơn vì tiền boa :)
Kritixi Lithos

1

Swift 151 byte

func d(x:Int,y:Int){x==0&&y==0 ? print("That goes nowhere, silly!") : print((y<0 ? "North " : y>0 ? "South " : "")+(x<0 ? "West" : x>0 ? "East" : ""))}

1

PHP, 95 byte.

Điều này chỉ đơn giản là hiển thị phần tử của mảng và nếu không có gì, chỉ hiển thị thông báo "mặc định".

echo['North ','','South '][$argv[1]+1].[East,'',West][$argv[2]+1]?:'That goes nowhere, silly!';

Điều này có nghĩa là để chạy với -rcờ, nhận các tọa độ là đối số thứ 1 và thứ 2.


1

C # , 95 102 byte


Chơi gôn

(a,b)=>(a|b)==0?"That goes nowhere, silly!":(b<0?"North ":b>0?"South ":"")+(a<0?"West":a>0?"East":"");

Ung dung

( a, b ) => ( a | b ) == 0
    ? "That goes nowhere, silly!"
    : ( b < 0 ? "North " : b > 0 ? "South " : "" ) +
      ( a < 0 ? "West" : a > 0 ? "East" : "" );

Ungolfed có thể đọc được

// A bitwise OR is perfomed
( a, b ) => ( a | b ) == 0

    // If the result is 0, then the 0,0 text is returned
    ? "That goes nowhere, silly!"

    // Otherwise, checks against 'a' and 'b' to decide the cardinal direction.
    : ( b < 0 ? "North " : b > 0 ? "South " : "" ) +
      ( a < 0 ? "West" : a > 0 ? "East" : "" );

Mã đầy đủ

using System;

namespace Namespace {
    class Program {
        static void Main( string[] args ) {
            Func<Int32, Int32, String> f = ( a, b ) =>
                ( a | b ) == 0
                    ? "That goes nowhere, silly!"
                    : ( b < 0 ? "North " : b > 0 ? "South " : "" ) +
                      ( a < 0 ? "West" : a > 0 ? "East" : "" );

            for( Int32 a = -1; a <= 1; a++ ) {
                for( Int32 b = -1; b <= 1; b++ ) {
                    Console.WriteLine( $"{a}, {b} = {f( a, b )}" );
                }
            }

            Console.ReadLine();
        }
    }
}

Phát hành

  • v1.1 - + 7 bytes- Gói đoạn mã vào một chức năng.
  • v1.0 -  95 bytes- Giải pháp ban đầu.

Ghi chú

Tôi là một con ma, boo!


1
Đó là một đoạn mã bạn cần phải bọc nó trong một hàm, tức là thêm (a,b)=>{...}bit
TheLethalCoder vào

Bạn có thể sử dụng currying để lưu một byte a=>b=>, có thể không cần ()xung quanh a|b, bạn có thể sử dụng các chuỗi được nội suy để có được chuỗi được xây dựng đẹp hơn
TheLethalCoder

Hoàn toàn quên bọc vào một chức năng: S. Đối với ()xung quanh a|b, tôi cần nó, nếu không Operator '|' cannot be applied to operands of type 'int' and 'bool'. Tôi cũng đã thử các chuỗi nội suy, nhưng không cung cấp nhiều do ""lỗi cho tôi.
auhmaan

1

Scala, 107 byte

a=>b=>if((a|b)==0)"That goes nowhere, silly!"else Seq("North ","","South ")(b+1)+Seq("West","","East")(a+1)

Dùng thử trực tuyến

Để sử dụng, hãy khai báo đây là một hàm và gọi nó:

val f:(Int=>Int=>String)=...
println(f(0)(0))

Làm thế nào nó hoạt động

a =>                                // create an lambda with a parameter a that returns
  b =>                              // a lambda with a parameter b
    if ( (a | b) == 0)                // if a and b are both 0
      "That goes nowhere, silly!"       // return this string
    else                              // else return
      Seq("North ","","South ")(b+1)    // index into this sequence
      +                                 // concat
      Seq("West","","East")(a+1)        // index into this sequence

1

C, 103 byte

f(a,b){printf("%s%s",b?b+1?"South ":"North ":"",a?a+1?"East":"West":b?"":"That goes nowhere, silly!");}

0

Java 7, 130 byte

String c(int x,int y){return x==0&y==0?"That goes nowhere, silly!":"North xxSouth ".split("x")[y+1]+"WestxxEast".split("x")[x+1];}

Giải trình:

String c(int x, int y){               // Method with x and y integer parameters and String return-type
  return x==0&y==0 ?                  //  If both x and y are 0:
     "That goes nowhere, silly!"      //   Return "That goes nowhere, silly!"
    :                                 //  Else:
     "North xxSouth ".split("x"[y+1]  //   Get index y+1 from array ["North ","","South "] (0-indexed)
     + "WestxxEast".split("x")[x+1];  //   Plus index x+1 from array ["West","","East"] (0-indexed)
}                                     // End of method

Mã kiểm tra:

Hãy thử nó ở đây.

class M{
  static String c(int x,int y){return x==0&y==0?"That goes nowhere, silly!":"North xxSouth ".split("x")[y+1]+"WestxxEast".split("x")[x+1];}

  public static void main(String[] a){
    System.out.println(c(1, 1));
    System.out.println(c(0, 1));
    System.out.println(c(1, -1));
    System.out.println(c(0, 0));
  }
}

Đầu ra:

South East
South 
North East
That goes nowhere, silly!

0

CJam , 68 byte

"
South 
North 

East
West"N/3/l~W%.=s_Q"That goes nowhere, silly!"?

Hãy thử trực tuyến! hoặc xác minh tất cả các trường hợp thử nghiệm

In một dấu cách trên [0 -1]hoặc [0 1]( Northhoặc South).

Giải trình

"\nSouth \nNorth \n\nEast\nWest"  e# Push this string
N/                                e# Split it by newlines
3/                                e# Split the result into 3-length subarrays,
                                  e#  gives [["" "South " "North "]["" "East" "West"]]
l~                                e# Read and eval a line of input
W%                                e# Reverse the co-ordinates
.=                                e# Vectorized get-element-at-index: accesses the element
                                  e#  from the first array at the index given by the 
                                  e#  y co-ordinate. Arrays are modular, so -1 is the last
                                  e#  element. Does the same with x on the other array.
s                                 e# Cast to string (joins the array with no separator)
_                                 e# Duplicate the string
Q"That goes nowhere, silly!"?     e# If it's non-empty, push an empty string. If its empty, 
                                  e#  push "That goes nowhere, silly!"

0

Röda , 100 byte

f a,b{["That goes nowhere, silly!"]if[a=b,a=0]else[["","South ","North "][b],["","East","West"][a]]}

Hãy thử trực tuyến!

Đây là một giải pháp tầm thường, tương tự như một số câu trả lời khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.