অরথোগোনাল ওরিয়েন্টেশন


22

টাস্ক: ঠিক একটি অক্ষর সমন্বিত একটি ইনপুট দেওয়া হয়েছে <>^v, প্রিন্টযোগ্য এএসসিআইআই অক্ষর (স্পেস থেকে টিল্ডে) সমন্বিত একটি দ্বিতীয় ইনপুট আউটপুট আউট করে, তীর দিয়ে ওরিয়েন্টেড।

ধরা যাক প্রোগ্রামটির দ্বিতীয় ইনপুটটি হ'ল ABC। এটি করা উচিত এটি:

  • ইনপুট >: মুদ্রণ ABC
  • ইনপুট <: মুদ্রণ CBA
  • ইনপুট ^: মুদ্রণ C\nB\nAকরুন বা ইনপুটটি ঘোরানো হয়েছে -90 ° °
  • ইনপুট v: মুদ্রণ A\nB\nCকরুন বা ইনপুটটি 90 ° ঘোরানো হয়েছে °

পরীক্ষার মামলা

input => \n output
---
">", "thanks!" =>
thanks!
---
"<", "Hello, World!" =>
!dlroW ,olleH
---
"^", "This is text." =>
.
t
x
e
t

s
i

s
i
h
T
---
"v", "Tokyo" =>
T
o
k
y
o
---
"<", ">>>" =>
>>>

এটি একটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রামটি জিতে।


পুরো কোড বা ফাংশন?
হাইপার নিউট্রিনো

1
@AlexL। আপনি আফাইক লিখতে পারেন
ডাউনওয়েট

ইনপুট কি এক স্ট্রিং হিসাবে ঠিক আছে? >ABC
ডিজিটাল ট্রমা

@ ডিজিটালট্রামা হ্যাঁ, এটি ভাল।
কনর ও'ব্রায়েন

না, আমি বোঝাচ্ছি যে এটি কোনও বিষয় নয়। >অভিমুখীকরণের জন্য আপনার কাছে কোনও পরীক্ষার কেস নেই ।
mbomb007

উত্তর:


14

এমএটিএল , 10 6 বাইট

মার্টিনের জন্য 4 টি বাইট সংরক্ষণ করা হয়েছে!

19\qX!

এটি অনলাইন চেষ্টা করুন!

19\            % implicitly take input (a character) and compute mod-19 of its ASCII code
   q           % subtract 1. Gives 17, 2, 3, 4 for the characters '^<v>' respectively.
               % These numbers correspond to 1, 2, 3, 4 modulo 4, and so are the numbers
               % of 90-degree rotations required by each character
    X!         % implicitly take input (string). Rotate the computed number of times
               % in steps of 90 degrees. Implicitly display

পুরানো সংস্করণ, মডুলো অপারেশন ছাড়াই: 10 বাইট

'^<v>'=fX!

এটি অনলাইন চেষ্টা করুন!

'^<v>'         % push string
      =        % implicitly take input (a char) and test for equality
       f       % find index of matching character
        X!     % implicitly take input (string). Rotate that number of times
               % in steps of 90 degrees. Implicitly display

1
অভিপ্রায় আমি আমার 13 বাইটের জন্য সত্যিই গর্বিত ছিলাম, তবে ইনপুটটির জন্য 3 বাইট এবং ঘোরানোর জন্য 6 বাইটের দরকার ছিল ... ওহ ভাল ... সম্ভবত আপনি mod 11কৌশলটির সাহায্যে কিছু সঞ্চয়ও করতে পারেন (যদিও আপনাকে অন্যভাবে ঘুরতে হবে) ।
মার্টিন এন্ডার

@ মার্টিনব্যাটনার ভাল ধারণা! আমার ক্ষেত্রে (আপনার?) আমার মনে হয় মোড 19 ভাল, কারণ তখন 1 বিয়োগ করে সরাসরি 1,2,3,4 (Mod 4) দেয়। ভকভগক!
লুইস মেন্ডো

6
4 বাইট সংক্ষিপ্ত, পৃথিবীতে কী ...
মার্টিন এন্ডার

2
আমি আনুষ্ঠানিকভাবে এমএটিএলকে "ভাষার সংক্ষিপ্ত আকারের তালিকায় রাখছি"।
কনর ও'ব্রায়েন

12

পাইথন 3, 64 51 48 বাইট

এক্সনোরকে ধন্যবাদ 6 বাইট সংরক্ষণ করা হয়েছে।

লিনকে ধন্যবাদ 7 বাইট সংরক্ষণ করা।

এত অজগর থেকে ডিএসএম এবং মরগানকে 3 বাইট সংরক্ষণ করা ।

lambda c,s:'\n'[c<'?':].join(s[::1|-(c in'<^')])

ফাংশনটি <>^vপ্রথম আর্গুমেন্ট এবং স্ট্রিং হিসাবে অক্ষরের একটিকে দ্বিতীয় আর্গুমেন্ট হিসাবে ঘোরানো দরকার accep


এখানে আরও পাঠযোগ্য সংস্করণ:

lambda c, s: ('\n' if c in '^v' else '').join(s[::-1 if c in'<^' else 1])

পিপিসিজিতে আপনাকে স্বাগতম! যদি এটি সহায়তা করে তবে আপনাকে দুটি পৃথক ইনপুটও গ্রহণের অনুমতি দেওয়া হবে। (আমি পাইথন জানি না, এটি একটি অনুমান মাত্র))
কনর ও ব্রায়েন

হতে পারে s[1|-(c in'<^')]এবংsep='\n'*(c in'^v')
লিন

আমি মনে করি আপনি প্রিন্টিংয়ের পরিবর্তে আপনার সেপ lambdaব্যবহার করে পুরো জিনিসটি একটি হিসাবে করতে পারতেন join
xnor

কেন আপনি এটি তৈরি করলেন?
কনার ও'ব্রায়েন

1
আমি এই উত্তরটি ভালবাসি, এটি আমার প্রিয় উত্তর।
বিড়াল

8

হাস্কেল, 57 বাইট

f">"=id
f"<"=reverse
f"v"=init.((:"\n")=<<)
f _=f"<".f"v"

ব্যবহারের উদাহরণ: f "v" "ABC"-> "A\nB\nC"

দিকনির্দেশ >হ'ল আদর্শিক ক্রিয়া, <এটির যুক্তিটিকে বিপরীত করে, vস্ট্রিংয়ের প্রতিটি অক্ষরে একটি নতুন লাইন সংযোজন করে সর্বশেষটি ফেলে দেয় এবং ^হয়v দ্বারা অনুসরণ <


6

জাপট, 9 বাইট

VzUc %B+1

@ ডোনমুসলির উত্তর দ্বারা অনুপ্রাণিত, যদিও আমি কেবল লক্ষ্য করেছি যে সিজেএম ঠিক একই কৌশল ব্যবহার করে। এটি অনলাইন পরীক্ষা!

কিভাবে এটা কাজ করে

           // Implicit: U = arrow char, V = text
  Uc %B    // Take the char code of U, mod 11.
           // This converts ">", "v", "<", and "^" to 7, 8, 5, and 6, respectively.
Vz     +1  // Add one and rotate V by 90° clockwise that many times.

ও_ চমৎকার কাজ! আপনি জल्फকে 200% এর বেশি ছাড়িয়ে গেছেন
কনর ও'ব্রায়েন

কিন্তু আমি ত্রুটি পাচ্ছি? Error: Japt.stdout must be sent to an HTMLElementইত্যাদি
কনার ও'ব্রায়েন

@ সিও'বিʀɪᴇɴ কেন হয় তা নিশ্চিত নয় তবে এটি অনেক কিছু ঘটে> >(
রিলোড করা

নিশ্চিতভাবেই, বিষয়টি ঠিক হয়ে গেছে। আমি অভিভূত!
কনর ও'ব্রায়েন

আমি জানতাম যে এই ঘোরানো ফাংশনগুলি শেষ পর্যন্ত কার্যকর হবে +1
ডাউনগোট

4

সিজেম, 13 বাইট

l(iB%{W%z}*N*

ইনপুট হ'ল অরিয়েন্টেশন চরিত্র এবং তারপরে সরাসরি স্ট্রিংটি ঘোরানো হয়।

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

ইয়া মডেলো ম্যাজিকের জন্য। চারটি অক্ষর মডুলো 11 এগুলি এগুলি ম্যাপ করে:

> 7 
v 8 
< 5
^ 6

এই সব স্বতন্ত্র মডিউল 4 এবং আরো গুরুত্বপূর্ণ তারা সুন্দরভাবে বৃদ্ধি করা হয়: 3, 0, 1, 2। এর অর্থ আমরা mod 11কতবার ঘুরতে হবে তা নির্ধারণ করতে কেবল ফলাফলের ফলাফলটি ব্যবহার করতে পারি (স্পষ্টের প্রয়োজন ছাড়াই mod 4, যেহেতু চারটি আবর্তন কোনওভাবেই অপ-বিকল্প নয়)। আমাদের সাধারণত এই সংখ্যাগুলি 1 দ্বারা অফসেট করতে হবে, এটি >আসলে উত্পাদন করে 8এবং কোনও অপ-বিকল্প হয়ে ওঠে, তবে আমি যেভাবে তাদের ঘুরিয়ে দিচ্ছি, আসলে প্রথম অ্যাপ্লিকেশনটির স্ট্রিংটি উল্টে দেয় যাতে আমরা সর্বদা বিনা মূল্যে একটি ঘূর্ণন পাই।

l    e# Read input.
(i   e# Pull off the first character and convert to its character code.
B%   e# Modulo 11.
{    e# That many times...
 W%  e#   Reverse... on the first iteration this reverses the string. Afterwards
     e#   we'll have an Nx1 or 1xN grid of characters on the stack, where
     e#   this reverses the rows instead.
 z   e#   Transpose. On the first iteration, this simply wraps the string in
     e#   array, turning it into a grid without changing its orientation further
     e#   beyond the reversal that just happened. On subsequent iterations, a
     e#   transpose combined with reversing the rows rotates the grid 90 degrees
     e#   clockwise.
}*
N*   e# Join with linefeeds.


3

জুলিয়া, 51 বাইট

f(d,s)=join(d"<^"?reverse(s):s,d"^v"?"\n":"")

এটি এমন একটি ফাংশন যা একটি Charএবং একটি স্ট্রিং গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে।

দিন dচরিত্র দিক বাচক হবে এবং sস্ট্রিং হতে। যদি dছেড়ে বা উপরে থাকে তবে আমরা বিপরীতটি sব্যবহার করি, অন্যথায় আমরা sপ্রদত্ত হিসাবে ব্যবহার করি । dবাম বা ডান হলে খালি স্ট্রিং বা dউপরে বা নীচে একটি নতুন লাইন হিসাবে আমরা একটি পৃথককারী তৈরি করি । স্ট্রিং এবং বিভাজকটি পাস করুন join, যা স্ট্রিংয়ের প্রতিটি অক্ষরের মধ্যে বিভাজক সন্নিবেশ করবে এবং একটি স্ট্রিং প্রদান করবে।

সমস্ত পরীক্ষার কেস অনলাইনে যাচাই করুন


3

বাশ + জিএনইউ ইউটিলিটিস, 67

(egrep -q '>|v'<<<$1&&cat||rev)|(egrep -q '<|>'<<<$1&&cat||fold -1)

আমি অনুমান করতে পারি না যে এর পরে আপনার কোনও জায়গার দরকার আছে -q, তবে আপনি করেন
বিড়াল

3

জাভাস্ক্রিপ্ট (ES6), 76 67 65 বাইট

(a,b)=>(/v|>/.test(a)?[...b]:[...b].reverse()).join(a>`>`?`
`:``)

@ অ্যালেক্স এ এর ​​জুলিয়া উত্তর বন্দর। সম্পাদনা: 9 টি বাইট সংরক্ষিত হয়েছে @ ইথ প্রডাকশনগুলির জন্য ধন্যবাদ। দুটি বাইট আলাদাভাবে সংরক্ষণ করা হয়েছে @ এডক 65 এর জন্য ধন্যবাদ।



+1? "বিপরীত": "স্লাইস" প্রতিভা
edc65

@ edc65 ওফস, আমি দুর্ঘটনাক্রমে একটি পুরানো সংস্করণ অনুলিপি করেছি; বিরক্তিকর ?:সংস্করণটি ছিল 1 বাইট সংক্ষিপ্ত।
নিল

(/v|>/.test(a)?[...b]:[...b].reverse())...65
edc65

3

পার্ল, 54 51 + 1 = 52 বাইট

@.=<>=~/./g;@.=reverse@.if/[<^]/;$,=$/x/[v^]/;say@.

প্রয়োজন -nপতাকা এবং বিনামূল্যে -M5.010| -E। নিম্নলিখিত হিসাবে ইনপুট নেয় direction\nline:

$ perl -nE'@.=<>=~/./g;@.=reverse@.if/[<^]/;$,=$/x/[v^]/;say@.' <<< $'^\nhello'
o
l
l
e
h

আমি দেখতে এটি $/x/[v^]/একটি বিকল্পের মত দেখাচ্ছে।

কিভাবে এটা কাজ করে:

                                                    # -n read first line into $_
@.=<>=~/./g;                                        # Read next line and split
            @.=reverse@.if/[<^]/;                   # Reverse `@.` if matches 
                                                    # `<` or `^`
                                 $,=                # An array will be concatena-
                                                    # ted with the value of 
                                                    # `$,` when printed. 
                                     $/             # Contains a newline
                                        /[v^]/      # boolean 
                                       x            # "\n" x 1 -> "\n"
                                                    # "\n" x 0 -> ""
                                              say@. # Print the array

2

পাওয়ারশেল, 84 বাইট

param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]

এটি পাওয়ারশেলের সাথে পরিচিত না এমন লোকদের কাছে সম্পূর্ণ জিম্মা হতে চলেছে। এর মাধ্যমে যেতে দিন।

param([char]$a,$b)অক্ষরটির একটি সুস্পষ্ট কাস্ট সহ ইনপুট নেয় $a। প্রোগ্রামের বাকি একটি বিবৃতি। আমরা প্রথমার্ধ দিয়ে শুরু করব, অবধি -join

আমরা একটি নতুন গতিশীল অ্যারে তৈরি করছি (...,...)এবং এর সাথে ইনডেক্স করছি $a%7-eq6। ASCII মানগুলি যথাক্রমে এবং vএবং >হয় 116এবং 62যথাক্রমে এবং 116%7 = 62%7 = 6এবং এবং সেগুলি দুটি দিক যা নীচে এবং ডানে "বৃদ্ধি" করে। সুতরাং, যদি সেই -eqহয় $true, আমরা দ্বিতীয় মান, যা নেব $b[0..$c], বা এর অক্ষরের একটি অ্যারের $bশেষ পর্যন্ত । আমরা $cপ্রথম মান থেকে মানটি $b[($c=$b.length)..0]পাই যা ইনপুট চর ^বা <(যেমন, এটি স্ট্রিংটি পিছনের দিকে যায়) নির্বাচন করা হয়। লক্ষণীয় গুরুত্বপূর্ণ যে দ্বিতীয় মানটি নির্বাচিত হলেও, $cমানটি এখনও গণনা করা এবং সংরক্ষণ করা হয়, তাই আমরা এটির মতো শর্টকাট হিসাবে পুনরায় ব্যবহার করতে পারি।

সুতরাং, আমরা এখন এগিয়ে বা পিছনে যাচ্ছে অক্ষরের একটি অ্যারে পেয়েছি। আমরা তখন -joinসেই অক্ষরগুলি একসাথে অন্য গতিশীল অ্যারে সূচকের ফলাফলের সাথে করব। এবার ASCII এর মান $aনীচে রয়েছে কিনা তার ভিত্তিতে আমরা নির্বাচন করছি 90(সত্যিকারের প্রচুর মান কাজ করবে, আমি এটিকে কেবলমাত্র নির্বাচিত করে রেখেছি)। যেহেতু >এবং <উভয় নিচে একটি মান আছে 90, -ltহয় $false, তাই আমরা খালি স্ট্রিং নির্বাচন "", এবং এইভাবে গৃহস্থালির কাজ-বিন্যস্ত কেবল ঘনিভূত হয়। অন্যথায়, আমরা "`n"নিউলাইনগুলি সহ চার-অ্যারে যোগদানের জন্য নিউলাইন চরিত্রটি নির্বাচন করি ।

এই ফলস্বরূপ স্ট্রিংটি পাইপলাইনে রেখে গেছে, এবং আউটপুট অন্তর্ভুক্ত।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T

2

সি, 123 119 117 114 বাইট

Golfed:

f(char*d,char*a){char*b=a,c=*d%21,s[3]={0,c&8?10:0};while(*++b);while(*s=c&4?*a++:*--b)printf(s);if(c&16)puts(b);}

ব্যাখ্যার সাথে এবং কিছুটা অলোভিত কোড সহ টেস্ট প্রোগ্রাম:

#include <stdio.h>
#include <stdlib.h>

// c     c%21   
// <    10010     => if(c&8), vertical; if(c&16), horizontal
// >    10100     => if(c&4), backwards
// ^    01010
// v    01101
int f(char*d,char*a){
    char *b=a,c=*d%21,s[3]={0,c&8?10:0};
    while(*++b);     // b = a + strlen(a) - 1; this is shorter
    while(*s=c&4?*a++:*--b)printf(s);
    if(c&16)puts(b); // single trailing newline if horizontal
}

int main() {
    char *c="<>^v";
    for(;*c;c++) { 
        printf("--- %c ---\n", *c); 
        f(c,"hello world!"); 
    }
    return 0;
}

টিপস স্বাগত!


2

রেটিনা , 60 বাইট

গল্ফ করা প্রয়োজন ...

$
¶
+`^([<^].*)(.)(¶.*)
$1$3$2
¶

.
$&¶
+`([<>].*)¶
$1
^.¶?

ইনপুট সমস্ত স্ট্রিং হিসাবে যেমন, যেমন ^ABC

  • যদি ^বা <, স্ট্রিং বিপরীত
  • প্রতিটি চরিত্রের পরে নতুন লাইন sertোকান
  • যদি <বা >, নতুন লাইনগুলি সরান

এটি অনলাইনে চেষ্টা করুন।


retina.tryitonline.net/… একটি বাইট সংরক্ষণ করে (এবং অতিরিক্ত পেছনের লাইনফিড থেকে মুক্তি পেয়েছে)
মার্টিন ইন্ডার

2

ডায়ালগ এপিএল , 15 বাইট

⌽∘⍉⍣(11|⎕UCS⍞)⍪

স্ট্রিংটিকে 1-কলামের সারণিতে পরিণত করুন
⍣(‍... )পুনরাবৃত্তি করুন ( এন ) বার স্ট্রিং ইনপুটটি
⎕UCSইউসিএস কোড পয়েন্ট
11|বিভাগে বিশ্রামে রূপান্তর করুন যখন 11 দ্বারা বিভক্ত হবে
⌽∘⍉ আবর্তিত -90 (ফ্লিপ-ট্রান্সপোজ)

বিকল্প পদ্ধতি (একই দৈর্ঘ্য):

⌽∘⍉⍣('<^>v'⍳⎕)⍪

মূল্যায়ন ইনপুট পান (সুতরাং একটি অবশ্যই ইনপুট করতে হবে, যেমন '^' বা কোনও প্রোগ্রামের / ভেরিয়েবলের নাম যা কাঙ্ক্ষিত অক্ষরটি ফেরত দেয়)
'<^>v'⍳সূচকটি স্ট্রিংয়ে পান


1

জल्फ, 22 বাইট

এখানে চেষ্টা করুন! আপনার ƒসাথে প্রতিস্থাপন করা উচিত \x9f। স্টিং লাগে, তারপরে দিকনির্দেশক চরিত্র।

.‘I_IγƒGIE_γ’ i"><v^"i
 ‘                      golfy array
  I                     the input
   _I                   input reversed
      ƒGIE              split by "" and join by newlines
     γ                  γ = that
          _γ            gamma reversed
.            _i"><v^"i  get the respective index

1

জাভাস্ক্রিপ্ট ES6, 91 83 84 বাইট

(a,b)=>[b,(c=[...b].reverse()).join``,[...b].join`
`,c.join`
`]["><v^".indexOf‌​(a)]

প্রয়োজনীয় স্ট্রিং নির্মান এবং যার সূচক সংগ্রহ aব্যবস্থার সবচেয়ে গুরত্বপূর্ণ। indexOfকারণ ব্যবহার করা হয় ^একটি Regex টোকেন। বাগ ফিক্স এবং শেভ বাইটের জন্য ইটিএইচ প্রডাকশনসকে ধন্যবাদ!


f("v","abc")c\nb\naআমার জন্য প্রত্যাবর্তন
ETH প্রোডাকশনগুলি

এখানে একটি 84-বাইট রয়েছে যা আমার পক্ষে কাজ করে:(a,b)=>[b,(c=[...b].reverse()).join``,[...b].join`\n`,c.join`\n`]["><v^".indexOf(a)]
ETH প্রোডাকশনগুলি

@ ইথ প্রডাকশন ধন্যবাদ! আমি ভুলে গেছি cআক্ষরিক অর্থে d
কনর ও'ব্রায়েন

আগ্রহের বাইরে আমি কোনও বস্তুকে সূচকের চেষ্টা করেছি ... এবং এটি ঠিক একই দৈর্ঘ্যে পরিণত হয়েছে!
নীল

1

জাভাস্ক্রিপ্ট (ES6) 71

(a,b)=>([...b].map(c=>(a>'A'?c+=`
`:0,r=/v|>/.test(a)?r+c:c+r),r=''),r)

পরীক্ষা

F=(a,b)=>([...b].map(c=>(a>'A'?c+=`
`:0,r=/v|>/.test(a)?r+c:c+r),r=''),r)  

console.log=x=>O.textContent+=x+'\n';

for(d of '<>^v') console.log(d+'\n'+F(d,'ABCDE')+'\n')
<pre id=O></pre>


1

পার্ল 5, 67 বাইট

Plus 66 টির জন্য একটি -p

$_=reverse if/^[<^]/;$&?s/.$//:s/.//;$&=~/[v^]/&&s/(.)(?=.)/$1\n/g

ইনপুটটি একটি একক স্ট্রিং যার প্রথম চরিত্রটি ওরিয়েন্টেশনকে সংজ্ঞায়িত করে।


1

DUP , 48 বাইট

[`5/%$$a:4<&[1$][1_]?\1-[$;$][,^+a;2>['
,][]?]#]

Try it here.

বেনামে ল্যাম্বদা যা তর্ক এবং STDIN উভয়ই ইনপুট নেয়। ব্যবহার:

0"asdf"[`5/%$$a:4<&[1$][1_]?\1-[$;$][,^+a;2>['
,][]?]#]! {make sure to put one of <>^v in STDIN}

ব্যাখ্যা

[                                               ] {lambda}
 `5/%$$a:                                         {store STDIN char (mod 5) to a}
         4<&                                      {is 0<a<4?}
            [  ][  ]?                             {conditional}
             1$                                     {if so, push 2 1's}
                 1_                                 {otherwise, push -1}
                                                    {determines whether to output in reverse or not}
                     \1-                          {swap, -1}
                        [   ][                ]#  {while loop}
                         $;$                        {if there is a char at index}
                              ,                     {output that char}
                               ^+                   {increment/decrement index}
                                 a;2>               {check if a>2}
                                     [    ][]?      {conditional}
                                      '\n,          {if so, output newline}


1

ডি, 198 বাইট

import std.stdio,std.array,std.algorithm;void main(string[]a){auto x=a[2].split("");char[]y;if(canFind(["^","<"],a[1]))x.reverse;if(canFind(["v","^"],a[1]))y=x.join("\n");else y=x.join("");y.write;}

: গ


কম গল্ফড:

import std.stdio;
import std.array;
import std.algorithm;

void main(string[]a) {

  auto x=a[2].split("");
  string y;

  if(canFind(["^","<"],a[1]))
    x.reverse;

  if(canFind(["v","^"], a[1]))
    y=join(x,"\n");

  else
    y=join(x,"");

  y.write;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.